summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tham <pickfire@riseup.net>2020-05-16 21:08:11 +0800
committerIvan Tham <pickfire@riseup.net>2020-05-30 10:54:55 +0800
commit7c791f130c168e2b4eab699ec04983d3f7aab438 (patch)
tree3740e74698e8fe1dc9a62ff62a8c5d848b3d0307
parent75a575bc021ae8617ccf2368933b582cd7fb6c7f (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.kak11
-rw-r--r--test/indent/rust/dedent/cmd1
-rw-r--r--test/indent/rust/dedent/in12
-rw-r--r--test/indent/rust/dedent/out16
-rw-r--r--test/indent/rust/dedent/rc3
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