From 7c791f130c168e2b4eab699ec04983d3f7aab438 Mon Sep 17 00:00:00 2001 From: Ivan Tham Date: Sat, 16 May 2020 21:08:11 +0800 Subject: [PATCH] Handle dedent in rust syntax Naively handle dedent after , and ; which works most of the cases but does not work with multi level dedent. --- rc/filetype/rust.kak | 11 +++++++++-- test/indent/rust/dedent/cmd | 1 + test/indent/rust/dedent/in | 12 ++++++++++++ test/indent/rust/dedent/out | 16 ++++++++++++++++ test/indent/rust/dedent/rc | 3 +++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/indent/rust/dedent/cmd create mode 100644 test/indent/rust/dedent/in create mode 100644 test/indent/rust/dedent/out create mode 100644 test/indent/rust/dedent/rc 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 s ^\h*\K//[!/]?\h* y gh j P - } catch %| + } catch %` # preserve previous line indent try %{ execute-keys -draft K } # indent after lines ending with { or ( try %[ execute-keys -draft k [{(]\h*$ j ] # indent after lines ending with [{(].+ and move first parameter to own line try %< execute-keys -draft [c[({],[)}] \A[({][^\n]+\n[^\n]*\n?\z L i > - | + # dedent after lines starting with . and ending with , or ; + try %_ execute-keys -draft k ^\h*\..*[,]\h*$ j _ + # todo dedent additional unmatched parenthesis + # try %& execute-keys -draft k s \((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\) l Gl s\) %sh{ + # count previous selections length + # printf "j $(echo $kak_selections_length | wc -w) " + # } & + ` # filter previous line try %{ execute-keys -draft k : rust-trim-indent } > 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 @@ +cbar 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