Commit graph

103 commits

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
        }
    }

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