diff options
| author | Ivan Tham <pickfire@riseup.net> | 2020-05-16 21:08:11 +0800 |
|---|---|---|
| committer | Ivan Tham <pickfire@riseup.net> | 2020-05-30 10:54:55 +0800 |
| commit | 7c791f130c168e2b4eab699ec04983d3f7aab438 (patch) | |
| tree | 3740e74698e8fe1dc9a62ff62a8c5d848b3d0307 | |
| parent | 75a575bc021ae8617ccf2368933b582cd7fb6c7f (diff) | |
Handle dedent in rust syntax
Naively handle dedent after , and ; which works most of the cases but
does not work with multi level dedent.
| -rw-r--r-- | rc/filetype/rust.kak | 11 | ||||
| -rw-r--r-- | test/indent/rust/dedent/cmd | 1 | ||||
| -rw-r--r-- | test/indent/rust/dedent/in | 12 | ||||
| -rw-r--r-- | test/indent/rust/dedent/out | 16 | ||||
| -rw-r--r-- | test/indent/rust/dedent/rc | 3 |
5 files changed, 41 insertions, 2 deletions
diff --git a/rc/filetype/rust.kak b/rc/filetype/rust.kak index be440f75..bb998216 100644 --- a/rc/filetype/rust.kak +++ b/rc/filetype/rust.kak @@ -76,14 +76,21 @@ define-command -hidden rust-indent-on-new-line %~ # copy // comments prefix and following white spaces try %{ execute-keys -draft k <a-x> s ^\h*\K//[!/]?\h* <ret> y gh j P - } catch %| + } catch %` # preserve previous line indent try %{ execute-keys -draft <semicolon> K <a-&> } # indent after lines ending with { or ( try %[ execute-keys -draft k <a-x> <a-k> [{(]\h*$ <ret> j <a-gt> ] # indent after lines ending with [{(].+ and move first parameter to own line try %< execute-keys -draft [c[({],[)}] <ret> <a-k> \A[({][^\n]+\n[^\n]*\n?\z <ret> L i<ret><esc> <gt> <a-S> <a-&> > - | + # dedent after lines starting with . and ending with , or ; + try %_ execute-keys -draft k <a-x> <a-k> ^\h*\..*[,<semicolon>]\h*$ <ret> j <a-lt> _ + # todo dedent additional unmatched parenthesis + # try %& execute-keys -draft k <a-x> s \((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\) l Gl s\) %sh{ + # count previous selections length + # printf "j $(echo $kak_selections_length | wc -w) <a-lt>" + # } & + ` # filter previous line try %{ execute-keys -draft k : rust-trim-indent <ret> } > diff --git a/test/indent/rust/dedent/cmd b/test/indent/rust/dedent/cmd new file mode 100644 index 00000000..8682d51e --- /dev/null +++ b/test/indent/rust/dedent/cmd @@ -0,0 +1 @@ +c<ret>bar<esc> diff --git a/test/indent/rust/dedent/in b/test/indent/rust/dedent/in new file mode 100644 index 00000000..85e605c1 --- /dev/null +++ b/test/indent/rust/dedent/in @@ -0,0 +1,12 @@ + foo();%( ) + + foo( + bar().baz(),%( ) + + foo( + bar() + .baz(),%( ) + + foo() + .bar() + .baz();%( ) diff --git a/test/indent/rust/dedent/out b/test/indent/rust/dedent/out new file mode 100644 index 00000000..f4bc0a07 --- /dev/null +++ b/test/indent/rust/dedent/out @@ -0,0 +1,16 @@ + foo(); + bar + + foo( + bar().baz(), + bar + + foo( + bar() + .baz(), + bar + + foo() + .bar() + .baz(); + bar diff --git a/test/indent/rust/dedent/rc b/test/indent/rust/dedent/rc new file mode 100644 index 00000000..64064c25 --- /dev/null +++ b/test/indent/rust/dedent/rc @@ -0,0 +1,3 @@ +source "%val{runtime}/colors/default.kak" +source "%val{runtime}/rc/filetype/rust.kak" +set buffer filetype rust |
