From c53fb58c15c365b41db893416483b3e38f3db79c Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 28 Dec 2025 22:39:44 +0800 Subject: [PATCH] vim-patch:e426245: runtime(rust): clean-up indent script, handle opening empty line correctly (#37139) fixes: vim/vim#18974 https://github.com/vim/vim/commit/e426245bb38fbafb504d8bf9f327a28c2785897c Co-authored-by: Christian Brabandt --- runtime/indent/rust.vim | 53 ++++------------------------------------- 1 file changed, 5 insertions(+), 48 deletions(-) diff --git a/runtime/indent/rust.vim b/runtime/indent/rust.vim index a96650d419..2a660bcc76 100644 --- a/runtime/indent/rust.vim +++ b/runtime/indent/rust.vim @@ -2,7 +2,8 @@ " Language: Rust " Author: Chris Morgan " 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