Commit Graph

103 Commits (1ffd1e7633f746e3ba27f5301799d9c800dd15f5)

Author SHA1 Message Date
Blaž Hrastnik 9821c4dd3b Optimize Changeset::is_empty()
Checked the ASM output for these three options:

pub enum Operation {
    /// Move cursor by n characters.
    Retain(usize),
    /// Delete n characters.
    Delete(usize),
    /// Insert text at position.
    Insert(String),
}

pub struct A {
    changes: Vec<Operation>,
    len: usize,
}

impl A {
    pub fn is_empty1(&self) -> bool {
        match self.changes.as_slice() {
            [] => true,
            [Operation::Retain(_)] => true,
            _ => false,
        }
    }

    /// `true` when the set is empty.
    pub fn is_empty2(&self) -> bool {
        let len = self.changes.len();
        len == 0
        || (
            len == 1
            && self.changes[0] == Operation::Retain(self.len)
        )

    }

    pub fn is_empty3(&self) -> bool {
        match self.changes.as_slice() {
            [] | [Operation::Retain(_)] => true,
            _ => false
        }
    }

}
3 years ago
Blaž Hrastnik b0b5451c38 Since insert preceedes deletes, follow that ordering in Transaction::changes.
Produces the same output but will take the happy path.
3 years ago
Blaž Hrastnik b4312c9492 transaction: Use builder methods to generate compact changesets. 3 years ago
Blaž Hrastnik 19fb4ed835 transaction: Merge consecutive inserts on compose. 3 years ago
Blaž Hrastnik 65893a2cbc fix test 3 years ago
Blaž Hrastnik 239db79834 Finally: Retain horizontal position when moving vertically. 3 years ago
Blaž Hrastnik a924ad2885 simplify. 3 years ago
Blaž Hrastnik 2bea5db7bd commands: Implement select_on_matches. 3 years ago
Blaž Hrastnik 7c99ff58fd nix: include rust-src so rust-analyzer works correctly. 3 years ago
Blaž Hrastnik 22e1692adc indent: Fix edge cases, refactor test. 4 years ago
Blaž Hrastnik 777a80917d Address clippy lints. 4 years ago
Blaž Hrastnik 7d41550a23 indent: refactor logic to be more correct.
Thanks to atom-sane-indentation, nvim-treesitter and tree-sitter-indent.el
for inspiration.
4 years ago
Blaž Hrastnik a7869c728c wip 4 years ago
Blaž Hrastnik cc6bdf8f66 Text change generation, RPC call handling. 4 years ago
Blaž Hrastnik f5981f72c2 Introduce Selection::point. 4 years ago
Blaž Hrastnik efc5aa2016 Simplify old_state handling. 4 years ago
Blaž Hrastnik c0e17dd324 Fix undo/redo not updating the syntax tree. 4 years ago
Blaž Hrastnik b39849dde1 Refactor: Document type as a wrapper around barebones State. 4 years ago
Blaž Hrastnik ef5e5f9296 state.version tracking 4 years ago
Blaž Hrastnik 49254d7180 Total mess but it works: diagnostic marking. 4 years ago
Blaž Hrastnik f9bfba4d96 Reroute LSP notification events into the main app event loop. 4 years ago
Blaž Hrastnik 64b5b23315 Move theme from view to editor, support multiple views in editor. 4 years ago
Blaž Hrastnik bc2c652fe8 Bugfix 4 years ago
Jan Hrastnik 7d58378374 added move left&right, delete char 4 years ago
Jan Hrastnik ed03ec92a8 moved prompt command matching to prompt.rs 4 years ago
Jan Hrastnik 0c0c2c7103 modified editor.render() to prepare for command mode rendering 4 years ago
Blaž Hrastnik 16828d322a wip 4 years ago
Blaž Hrastnik 6e658aae1c Auto-indent on enter based on tree-sitter scopes. 4 years ago
Blaž Hrastnik d64f4beede Share tab width definitions. 4 years ago
Blaž Hrastnik 0b74d423d0 Validate compose len after applying a is same as before applying b. 4 years ago
Blaž Hrastnik 7fcc6f8f1b Fix overlapping (insert | delete) compose 4 years ago
Blaž Hrastnik 94f9603c74 Fix compose not merging certain changesets correctly. 4 years ago
Blaž Hrastnik 00e661f600 Indent draft, linewise paste 4 years ago
Blaž Hrastnik 4a648555ed Don't try to compose zero-width deletes. 4 years ago
Blaž Hrastnik 490e23b645 Simplify changeset tracking. 4 years ago
Blaž Hrastnik 8098279676 Cleanup 4 years ago
Blaž Hrastnik 1dba0f2b1c Simple yank/paste registers. 4 years ago
Blaž Hrastnik eba5b1ef33 Fix changeset composition, lengths don't have to match. 4 years ago
Blaž Hrastnik b765c17896 Hacky undo/redo integration. 4 years ago
Blaž Hrastnik 04b1546634 history.redo() 4 years ago
Blaž Hrastnik 8c7bc71ede Split on matches off by one, breaks tests again. 4 years ago
Blaž Hrastnik fd311fb8ad Undo tree draft.
We keep a tree of transactions. This allows for persistent undo by
simply serializing the changesets.
4 years ago
Blaž Hrastnik 5392b48268 Drop Coords. 4 years ago
Jan Hrastnik 038201647c started work on goto mode 4 years ago
Blaž Hrastnik 883b77bd24 Fix transaction.invert()/.apply() using byte counts instead of char counts. 4 years ago
Blaž Hrastnik aa077a07f3 Implement Transaction::invert. 4 years ago
Blaž Hrastnik 5945815d97 Fix cursor rendering & placement on append mode. 4 years ago
Blaž Hrastnik e39bd211d1 argh -> clap to speed up compilation (no syn/proc_macro) 4 years ago
Blaž Hrastnik 592c5b0af2 Fix test, break split + append 4 years ago
Blaž Hrastnik 3feb00283d clippy warnings 4 years ago