diff --git a/rc/filetype/rust.kak b/rc/filetype/rust.kak index 1267f52a..473a2e89 100644 --- a/rc/filetype/rust.kak +++ b/rc/filetype/rust.kak @@ -157,8 +157,8 @@ define-command -hidden rust-indent-on-new-line %~ try %< execute-keys -draft k s [^\h].+ \A[-+*/&|^})#] [,{](\h*/[/*].*|)$ j > # indent after lines ending with { try %< execute-keys -draft k \{$ j > - # dedent after lines starting with . and ending with } or ) or , or ; or .await - try %_ execute-keys -draft k ^\h*\. ([}),]|\.await)\h*$ j _ + # dedent after lines starting with . and ending with } or ) or , or ; or .await (} or ) or .await maybe with ?) + try %_ execute-keys -draft k ^\h*\. ([,]|(([})]|\.await)\?*))\h*$ j _ # dedent after lines ending with " => {}" - part of empty match try %# execute-keys -draft k \ =>\ \{\}\h*$ j # # align to opening curly brace or paren when newline is inserted before a single closing diff --git a/test/indent/rust/dedent-async/in b/test/indent/rust/dedent-async/in index 19fba70f..9ab0e36d 100644 --- a/test/indent/rust/dedent-async/in +++ b/test/indent/rust/dedent-async/in @@ -3,3 +3,6 @@ foo().await%( ) + foo() + .await?%( ) + diff --git a/test/indent/rust/dedent-async/out b/test/indent/rust/dedent-async/out index 3ed467d8..41d7d9f4 100644 --- a/test/indent/rust/dedent-async/out +++ b/test/indent/rust/dedent-async/out @@ -5,3 +5,7 @@ foo().await bar + foo() + .await? + bar + diff --git a/test/indent/rust/dedent-function-closing-brace/in b/test/indent/rust/dedent-function-closing-brace/in index ab5cc032..bb946bea 100644 --- a/test/indent/rust/dedent-function-closing-brace/in +++ b/test/indent/rust/dedent-function-closing-brace/in @@ -11,5 +11,9 @@ fn foo() -> i32 {%( )bar() fn foo() -> i32 { bar()%( )} - fn foo() -> i32 { - bar()%( )} + fn foo() -> i32 { + bar()%( )} + + fn foo() -> i32 { + bar()?%( )} + diff --git a/test/indent/rust/dedent-function-closing-brace/out b/test/indent/rust/dedent-function-closing-brace/out index 2c58c554..5fe29ee1 100644 --- a/test/indent/rust/dedent-function-closing-brace/out +++ b/test/indent/rust/dedent-function-closing-brace/out @@ -16,6 +16,11 @@ fn foo() -> i32 { bar() } - fn foo() -> i32 { - bar() - } + fn foo() -> i32 { + bar() + } + + fn foo() -> i32 { + bar()? + } + diff --git a/test/indent/rust/dedent-generic-closing-brace/in b/test/indent/rust/dedent-generic-closing-brace/in index 21109831..e3f48677 100644 --- a/test/indent/rust/dedent-generic-closing-brace/in +++ b/test/indent/rust/dedent-generic-closing-brace/in @@ -27,5 +27,8 @@ {( bar()%( ))} +{( + bar()?%( ))} + {( bar()%( ))} diff --git a/test/indent/rust/dedent-generic-closing-brace/out b/test/indent/rust/dedent-generic-closing-brace/out index c8615372..4cecb179 100644 --- a/test/indent/rust/dedent-generic-closing-brace/out +++ b/test/indent/rust/dedent-generic-closing-brace/out @@ -38,6 +38,10 @@ bar() )} +{( + bar()? +)} + {( bar() )}