diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-06-02 18:40:09 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-06-02 18:40:09 +1000 |
| commit | d43b6799cf807b4484e42fcdf3d9300a736fedd9 (patch) | |
| tree | f5074fca3d802ea81065aa7338c98c3dab7b48d5 | |
| parent | 0fba373d1d1b852b00db54ad344c69629ef4e0da (diff) | |
| parent | 12cafe3ed4dbc6d16fb7e54d07d6941985631942 (diff) | |
Merge remote-tracking branch 'pickfire/rust-dedent'
| -rw-r--r-- | rc/filetype/rust.kak | 17 | ||||
| -rw-r--r-- | test/indent/rust/after-where/cmd | 1 | ||||
| -rw-r--r-- | test/indent/rust/after-where/in | 5 | ||||
| -rw-r--r-- | test/indent/rust/after-where/out | 7 | ||||
| -rw-r--r-- | test/indent/rust/after-where/rc | 3 | ||||
| -rw-r--r-- | test/indent/rust/comment/cmd | 1 | ||||
| -rw-r--r-- | test/indent/rust/comment/in | 12 | ||||
| -rw-r--r-- | test/indent/rust/comment/out | 18 | ||||
| -rw-r--r-- | test/indent/rust/comment/rc | 3 | ||||
| -rw-r--r-- | test/indent/rust/dedent/cmd | 1 | ||||
| -rw-r--r-- | test/indent/rust/dedent/in | 16 | ||||
| -rw-r--r-- | test/indent/rust/dedent/out | 21 | ||||
| -rw-r--r-- | test/indent/rust/dedent/rc | 3 | ||||
| -rw-r--r-- | test/indent/rust/on-open-paren/cmd | 1 | ||||
| -rw-r--r-- | test/indent/rust/on-open-paren/in | 35 | ||||
| -rw-r--r-- | test/indent/rust/on-open-paren/out | 35 | ||||
| -rw-r--r-- | test/indent/rust/on-open-paren/rc | 3 |
17 files changed, 179 insertions, 3 deletions
diff --git a/rc/filetype/rust.kak b/rc/filetype/rust.kak index be440f75..14071511 100644 --- a/rc/filetype/rust.kak +++ b/rc/filetype/rust.kak @@ -75,15 +75,24 @@ define-command -hidden rust-indent-on-new-line %~ evaluate-commands -draft -itersel %< # copy // comments prefix and following white spaces try %{ - execute-keys -draft k <a-x> s ^\h*\K//[!/]?\h* <ret> y gh j P - } catch %| + execute-keys -draft k <a-x> s ^\h*//[!/]{0,2}\h* <ret> y gh j P + } 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-&> > - | + # indent lines with a standalone where + try %+ execute-keys -draft k <a-x> <a-k> ^\h*where\h*$ <ret> j <a-gt> + + # 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> } > @@ -93,6 +102,8 @@ define-command -hidden rust-indent-on-opening-curly-brace %[ evaluate-commands -draft -itersel %_ # align indent with opening paren when { is entered on a new line after the closing paren try %[ execute-keys -draft h <a-F> ) M <a-k> \A\(.*\)\h*\n\h*\{\z <ret> s \A|.\z <ret> 1<a-&> ] + # dedent standalone { after impl or fn block without any { in between + try %< execute-keys -draft hh <a-?> impl|fn|struct|enum|union <ret> <a-K> \{ <ret> <a-semicolon> <semicolon> ll <a-x> <a-k> ^\h*\{$ <ret> <a-lt> > _ ] diff --git a/test/indent/rust/after-where/cmd b/test/indent/rust/after-where/cmd new file mode 100644 index 00000000..8682d51e --- /dev/null +++ b/test/indent/rust/after-where/cmd @@ -0,0 +1 @@ +c<ret>bar<esc> diff --git a/test/indent/rust/after-where/in b/test/indent/rust/after-where/in new file mode 100644 index 00000000..412f13d3 --- /dev/null +++ b/test/indent/rust/after-where/in @@ -0,0 +1,5 @@ + impl X for T where%( ) + + impl X for T + where%( ) + diff --git a/test/indent/rust/after-where/out b/test/indent/rust/after-where/out new file mode 100644 index 00000000..3cc8383e --- /dev/null +++ b/test/indent/rust/after-where/out @@ -0,0 +1,7 @@ + impl X for T where + bar + + impl X for T + where + bar + diff --git a/test/indent/rust/after-where/rc b/test/indent/rust/after-where/rc new file mode 100644 index 00000000..64064c25 --- /dev/null +++ b/test/indent/rust/after-where/rc @@ -0,0 +1,3 @@ +source "%val{runtime}/colors/default.kak" +source "%val{runtime}/rc/filetype/rust.kak" +set buffer filetype rust diff --git a/test/indent/rust/comment/cmd b/test/indent/rust/comment/cmd new file mode 100644 index 00000000..8682d51e --- /dev/null +++ b/test/indent/rust/comment/cmd @@ -0,0 +1 @@ +c<ret>bar<esc> diff --git a/test/indent/rust/comment/in b/test/indent/rust/comment/in new file mode 100644 index 00000000..d546e66a --- /dev/null +++ b/test/indent/rust/comment/in @@ -0,0 +1,12 @@ + // foo%( ) + + //! foo%( ) + + //!! foo%( ) + + /// foo%( ) + + //// foo%( ) + + println!("hello world"); // foo%( ) + diff --git a/test/indent/rust/comment/out b/test/indent/rust/comment/out new file mode 100644 index 00000000..6b57b5ef --- /dev/null +++ b/test/indent/rust/comment/out @@ -0,0 +1,18 @@ + // foo + // bar + + //! foo + //! bar + + //!! foo + //!! bar + + /// foo + /// bar + + //// foo + //// bar + + println!("hello world"); // foo + bar + diff --git a/test/indent/rust/comment/rc b/test/indent/rust/comment/rc new file mode 100644 index 00000000..64064c25 --- /dev/null +++ b/test/indent/rust/comment/rc @@ -0,0 +1,3 @@ +source "%val{runtime}/colors/default.kak" +source "%val{runtime}/rc/filetype/rust.kak" +set buffer filetype rust 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..21c5f6ef --- /dev/null +++ b/test/indent/rust/dedent/in @@ -0,0 +1,16 @@ + foo();%( ) + + foo( + bar().baz(),%( ) + + foo( + bar() + .baz(),%( ) + + foo() + .bar() + .baz();%( ) + + let t = "a + wah";%( ) + diff --git a/test/indent/rust/dedent/out b/test/indent/rust/dedent/out new file mode 100644 index 00000000..cea4d1d3 --- /dev/null +++ b/test/indent/rust/dedent/out @@ -0,0 +1,21 @@ + foo(); + bar + + foo( + bar().baz(), + bar + + foo( + bar() + .baz(), + bar + + foo() + .bar() + .baz(); + bar + + let t = "a + wah"; + 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 diff --git a/test/indent/rust/on-open-paren/cmd b/test/indent/rust/on-open-paren/cmd new file mode 100644 index 00000000..723e4fa3 --- /dev/null +++ b/test/indent/rust/on-open-paren/cmd @@ -0,0 +1 @@ +c{<esc> diff --git a/test/indent/rust/on-open-paren/in b/test/indent/rust/on-open-paren/in new file mode 100644 index 00000000..1ca71d62 --- /dev/null +++ b/test/indent/rust/on-open-paren/in @@ -0,0 +1,35 @@ + fn foo<T>(x: T) + where + T: Debug + %( ) + + fn foo<T>(x: T) where T: Debug %( ) + + impl<T> X for T + where + T: Debug + %( ) + + impl<T> X for T where T: Debug %( ) + + struct X<T> + where + T: Debug + %( ) + + struct X<T> where T: Debug %( ) + + enum X<T> + where + T: Debug + %( ) + + enum X<T> where T: Debug %( ) + + union X<T> + where + T: Debug + %( ) + + union X<T> where T: Debug %( ) + diff --git a/test/indent/rust/on-open-paren/out b/test/indent/rust/on-open-paren/out new file mode 100644 index 00000000..de125ea7 --- /dev/null +++ b/test/indent/rust/on-open-paren/out @@ -0,0 +1,35 @@ + fn foo<T>(x: T) + where + T: Debug + { + + fn foo<T>(x: T) where T: Debug { + + impl<T> X for T + where + T: Debug + { + + impl<T> X for T where T: Debug { + + struct X<T> + where + T: Debug + { + + struct X<T> where T: Debug { + + enum X<T> + where + T: Debug + { + + enum X<T> where T: Debug { + + union X<T> + where + T: Debug + { + + union X<T> where T: Debug { + diff --git a/test/indent/rust/on-open-paren/rc b/test/indent/rust/on-open-paren/rc new file mode 100644 index 00000000..64064c25 --- /dev/null +++ b/test/indent/rust/on-open-paren/rc @@ -0,0 +1,3 @@ +source "%val{runtime}/colors/default.kak" +source "%val{runtime}/rc/filetype/rust.kak" +set buffer filetype rust |
