]> git.lizzy.rs Git - rust.git/commitdiff
vim: Fix indentation at global scope after non-semantic ([{/)]}
authorKevin Ballard <kevin@sb.org>
Sun, 4 May 2014 00:00:32 +0000 (17:00 -0700)
committerKevin Ballard <kevin@sb.org>
Mon, 5 May 2014 03:16:13 +0000 (20:16 -0700)
If an unbalanced [ exists in a string or comment, this should not be
considered when calculating the indent at the top level.

Similarly, when testing for ({/}) to see if we're at the top level to
begin with, strings and comments should be skipped.

src/etc/vim/indent/rust.vim

index 54094a741196747ce38476866bd9f2a753bdcb2b..9fdc18582ba297084614cefaa6be96c7d4b5c160 100644 (file)
@@ -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