diff --git a/src/etc/vim/indent/rust.vim b/src/etc/vim/indent/rust.vim index 54094a74119..9fdc18582ba 100644 --- a/src/etc/vim/indent/rust.vim +++ b/src/etc/vim/indent/rust.vim @@ -30,7 +30,7 @@ endif " Come here when loading the script the first time. -function s:get_line_trimmed(lnum) +function! s:get_line_trimmed(lnum) " Get the line and remove a trailing comment. " Use syntax highlighting attributes when possible. " NOTE: this is not accurate; /* */ or a line continuation could trick it @@ -61,6 +61,20 @@ function s:get_line_trimmed(lnum) endif endfunction +function! s:is_string_comment(lnum, col) + if has('syntax_items') + for id in synstack(a:lnum, a:col) + let synname = synIDattr(id, "name") + if synname == "rustString" || synname =~ "^rustComment" + return 1 + endif + endfor + else + " without syntax, let's not even try + return 0 + endif +endfunction + function GetRustIndent(lnum) " Starting assumption: cindent (called at the end) will do it right @@ -152,8 +166,10 @@ function GetRustIndent(lnum) " column zero) call cursor(a:lnum, 1) - if searchpair('{\|(', '', '}\|)', 'nbW') == 0 - if searchpair('\[', '', '\]', 'nbW') == 0 + 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