runtime(rust): Update indentation after nested array literal

fixes:  #18974
closes: #19042

Signed-off-by: Brian Carbone <brian@briancarbone.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Brian Carbone
2025-12-31 09:24:31 +00:00
committed by Christian Brabandt
parent d09be15847
commit 5c2b594d0e
3 changed files with 47 additions and 0 deletions
+17
View File
@@ -4,6 +4,7 @@
" Last Change: 2023-09-11
" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values #15138
" 2025 Dec 29 by Vim Project: clean up
" 2025 Dec 31 by Vim Project: correcly indent after nested array literal #19042
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
" Note: upstream seems umaintained: https://github.com/rust-lang/rust.vim/issues/502
@@ -195,6 +196,22 @@ function GetRustIndent(lnum)
endif
endif
" Prevent cindent from becoming confused when pairing square brackets, as
" in
"
" let arr = [[u8; 4]; 2] = [
" [0; 4],
" [1, 3, 5, 9],
" ];
" | ← indentation placed here
"
" for which it calculates too much indentation in the line following the
" close of the array.
if prevline =~# '^\s*\]' && l:last_prevline_character ==# ';'
\ && line !~# '^\s*}'
return indent(prevlinenum)
endif
if l:last_prevline_character ==# ","
\ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{})]'
\ && prevline !~# '^\s*fn\s'
+15
View File
@@ -15,6 +15,21 @@ fn main() {
Ok(file) => file,
};
// Start doing nothing forever
loop {
let arr1 = [[u8; 4]; 2] = [
[0; 4],
[1, 3, 5, 9],
];
}
// Plan for a future that will never come
let arr2 = [[u8; 4]; 2] = [
[1; 4],
[2, 4, 6, 8],
];
let arr2_ref = &arr2;
// Read the file contents into a string, returns `io::Result<usize>`
let mut s = String::new();
match file.read_to_string(&mut s) {
+15
View File
@@ -15,6 +15,21 @@ fn main() {
Ok(file) => file,
};
// Start doing nothing forever
loop {
let arr1 = [[u8; 4]; 2] = [
[0; 4],
[1, 3, 5, 9],
];
}
// Plan for a future that will never come
let arr2 = [[u8; 4]; 2] = [
[1; 4],
[2, 4, 6, 8],
];
let arr2_ref = &arr2;
// Read the file contents into a string, returns `io::Result<usize>`
let mut s = String::new();
match file.read_to_string(&mut s) {