about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/etc/vim/indent/rust.vim22
1 files changed, 19 insertions, 3 deletions
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