]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(rust): clean-up indent script, handle opening empty line correctly
authorChristian Brabandt <cb@256bit.org>
Sun, 28 Dec 2025 13:57:33 +0000 (13:57 +0000)
committerChristian Brabandt <cb@256bit.org>
Sun, 28 Dec 2025 13:57:33 +0000 (13:57 +0000)
fixes: #18974

Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/indent/rust.vim

index a96650d41955311c0c95aee00ff24b578d032830..2a660bcc768079bf6c7be0f96be4406c6d9c389d 100644 (file)
@@ -2,7 +2,8 @@
 " Language:         Rust
 " Author:           Chris Morgan <me@chrismorgan.info>
 " Last Change:      2023-09-11
-" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values (#15138)
+" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values #15138
+" 2025 Dec 28 by Vim Project: clean up, handle opening empty line correctly #18974
 
 " 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
@@ -86,16 +87,6 @@ function! s:is_string_comment(lnum, col)
     endif
 endfunction
 
-if exists('*shiftwidth')
-    function! s:shiftwidth()
-        return shiftwidth()
-    endfunc
-else
-    function! s:shiftwidth()
-        return &shiftwidth
-    endfunc
-endif
-
 function GetRustIndent(lnum)
     " Starting assumption: cindent (called at the end) will do it right
     " normally. We just want to fix up a few cases.
@@ -240,44 +231,10 @@ function GetRustIndent(lnum)
         return indent(prevlinenum)
     endif
 
-    if !has("patch-7.4.355")
-        " cindent before 7.4.355 doesn't do the module scope well at all; e.g.::
-        "
-        " static FOO : &'static [bool] = [
-        " true,
-        "       false,
-        "       false,
-        "       true,
-        "       ];
-        "
-        "       uh oh, next statement is indented further!
-
-        " Note that this does *not* apply the line continuation pattern properly;
-        " that's too hard to do correctly for my liking at present, so I'll just
-        " start with these two main cases (square brackets and not returning to
-        " column zero)
-
-        call cursor(a:lnum, 1)
-        if searchpair('{\|(', '', '}\|)', 'nbW',
-                    \ 's:is_string_comment(line("."), col("."))') == 0
-            if searchpair('\[', '', '\]', 'nbW',
-                        \ 's:is_string_comment(line("."), col("."))') == 0
-                " Global scope, should be zero
-                return 0
-            else
-                " At the module scope, inside square brackets only
-                "if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
-                if line =~# "^\\s*]"
-                    " It's the closing line, dedent it
-                    return 0
-                else
-                    return shiftwidth()
-                endif
-            endif
-        endif
-    endif
-
     " Fall back on cindent, which does it mostly right
+    if empty(trim(line))
+        return cindent(prevlinenum)
+    endif
     return cindent(a:lnum)
 endfunction