summaryrefslogtreecommitdiffstats
path: root/indent
diff options
context:
space:
mode:
Diffstat (limited to 'indent')
-rw-r--r--indent/crystal.vim6
-rw-r--r--indent/cython.vim64
-rw-r--r--indent/dart.vim2
-rw-r--r--indent/go.vim23
-rw-r--r--indent/julia.vim5
-rw-r--r--indent/markdown.vim16
-rw-r--r--indent/nix.vim16
-rw-r--r--indent/python.vim64
-rw-r--r--indent/ruby.vim42
-rw-r--r--indent/rust.vim36
10 files changed, 139 insertions, 135 deletions
diff --git a/indent/crystal.vim b/indent/crystal.vim
index fad2822c..9fd6c1f8 100644
--- a/indent/crystal.vim
+++ b/indent/crystal.vim
@@ -129,17 +129,17 @@ let s:access_modifier_regex = '\C^\s*\%(public\|protected\|private\)\s*\%(#.*\)\
" Check if the character at lnum:col is inside a string, comment, or is ascii.
function s:IsInStringOrComment(lnum, col)
- return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
+ return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_strcom
endfunction
" Check if the character at lnum:col is inside a string.
function s:IsInString(lnum, col)
- return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
+ return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_string
endfunction
" Check if the character at lnum:col is inside a string or documentation.
function s:IsInStringOrDocumentation(lnum, col)
- return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc
+ return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# s:syng_stringdoc
endfunction
" Check if the character at lnum:col is inside a string delimiter
diff --git a/indent/cython.vim b/indent/cython.vim
index c6777c00..b44839d8 100644
--- a/indent/cython.vim
+++ b/indent/cython.vim
@@ -36,6 +36,10 @@ if !exists('g:python_pep8_indent_multiline_string')
let g:python_pep8_indent_multiline_string = 0
endif
+if !exists('g:python_pep8_indent_hang_closing')
+ let g:python_pep8_indent_hang_closing = 0
+endif
+
let s:block_rules = {
\ '^\s*elif\>': ['if', 'elif'],
\ '^\s*except\>': ['try', 'except'],
@@ -59,7 +63,7 @@ let s:stop_statement = '^\s*\(break\|continue\|raise\|return\|pass\)\>'
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
" are inserted temporarily into the buffer.
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
- \ '=~? "\\vstring|comment|jedi\\S"'
+ \ '=~? "\\vstring|comment|^pythonbytes%(contents)=$|jedi\\S"'
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
\ '=~? "\\vcomment|jedi\\S"'
@@ -90,14 +94,6 @@ else
endfunction
endif
-function! s:pair_sort(x, y)
- if a:x[0] == a:y[0]
- return a:x[1] == a:y[1] ? 0 : a:x[1] > a:y[1] ? 1 : -1
- else
- return a:x[0] > a:y[0] ? 1 : -1
- endif
-endfunction
-
" Find backwards the closest open parenthesis/bracket/brace.
function! s:find_opening_paren(...)
" optional arguments: line and column (defaults to 1) to search around
@@ -144,27 +140,21 @@ endfunction
" Find possible indent(s) of the block starter that matches the current line.
function! s:find_start_of_block(lnum, types, multiple)
let r = []
- let types = copy(a:types)
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
let lnum = a:lnum
let last_indent = indent(lnum) + 1
while lnum > 0 && last_indent > 0
let indent = indent(lnum)
if indent < last_indent
- for type in types
- let re = '\v^\s*'.type.'>'
- if getline(lnum) =~# re
- if !a:multiple
- return [indent]
- endif
- if index(r, indent) == -1
- let r += [indent]
- endif
- " Remove any handled type, e.g. 'if'.
- call remove(types, index(types, type))
+ if getline(lnum) =~# re
+ if !a:multiple
+ return [indent]
+ endif
+ if index(r, indent) == -1
+ let r += [indent]
endif
- endfor
- let last_indent = indent(lnum)
+ let last_indent = indent
+ endif
endif
let lnum = prevnonblank(lnum - 1)
endwhile
@@ -205,8 +195,11 @@ function! s:indent_like_opening_paren(lnum)
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
+ let hang_closing = get(b:, 'python_pep8_indent_hang_closing',
+ \ get(g:, 'python_pep8_indent_hang_closing', 0))
+
if nothing_after_opening_paren
- if starts_with_closing_paren
+ if starts_with_closing_paren && !hang_closing
let res = base
else
let res = base + s:sw()
@@ -220,10 +213,13 @@ function! s:indent_like_opening_paren(lnum)
" indent further to distinguish the continuation line
" from the next logical line.
if text =~# b:control_statement && res == base + s:sw()
- return base + s:sw() * 2
- else
- return res
+ " But only if not inside parens itself (Flake's E127).
+ let [paren_lnum, _] = s:find_opening_paren(paren_lnum)
+ if paren_lnum <= 0
+ return res + s:sw()
+ endif
endif
+ return res
endfunction
" Match indent of first block of this type.
@@ -337,11 +333,11 @@ endfunction
" Is the syntax at lnum (and optionally cnum) a python string?
function! s:is_python_string(lnum, ...)
let line = getline(a:lnum)
- let linelen = len(line)
- if linelen < 1
- let linelen = 1
+ if a:0
+ let cols = type(a:1) != type([]) ? [a:1] : a:1
+ else
+ let cols = range(1, max([1, len(line)]))
endif
- let cols = a:0 ? type(a:1) != type([]) ? [a:1] : a:1 : range(1, linelen)
for cnum in cols
if match(map(synstack(a:lnum, cnum),
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
@@ -361,7 +357,7 @@ function! GetPythonPEPIndent(lnum)
let prevline = getline(a:lnum-1)
" Multilinestrings: continous, docstring or starting.
- if s:is_python_string(a:lnum-1, len(prevline))
+ if s:is_python_string(a:lnum-1, max([1, len(prevline)]))
\ && (s:is_python_string(a:lnum, 1)
\ || match(line, '^\%("""\|''''''\)') != -1)
@@ -379,8 +375,8 @@ function! GetPythonPEPIndent(lnum)
endif
if s:is_python_string(a:lnum-1)
- " Previous line is (completely) a string.
- return indent(a:lnum-1)
+ " Previous line is (completely) a string: keep current indent.
+ return -1
endif
if match(prevline, '^\s*\%("""\|''''''\)') != -1
diff --git a/indent/dart.vim b/indent/dart.vim
index 601abbb0..8d685df9 100644
--- a/indent/dart.vim
+++ b/indent/dart.vim
@@ -6,7 +6,7 @@ endif
let b:did_indent = 1
setlocal cindent
-setlocal cinoptions+=j1,J1
+setlocal cinoptions+=j1,J1,(2s,u2s,U1,m1,+2s
setlocal indentexpr=DartIndent()
diff --git a/indent/go.vim b/indent/go.vim
index fd973e45..887fb587 100644
--- a/indent/go.vim
+++ b/indent/go.vim
@@ -26,17 +26,6 @@ if exists("*GoIndent")
finish
endif
-" use shiftwidth function only if it's available
-if exists('*shiftwidth')
- func s:sw()
- return shiftwidth()
- endfunc
-else
- func s:sw()
- return &sw
- endfunc
-endif
-
function! GoIndent(lnum)
let prevlnum = prevnonblank(a:lnum-1)
if prevlnum == 0
@@ -51,19 +40,23 @@ function! GoIndent(lnum)
let ind = previ
+ if prevl =~ ' = `[^`]*$'
+ " previous line started a multi-line raw string
+ return 0
+ endif
if prevl =~ '[({]\s*$'
" previous line opened a block
- let ind += s:sw()
+ let ind += shiftwidth()
endif
if prevl =~# '^\s*\(case .*\|default\):$'
" previous line is part of a switch statement
- let ind += s:sw()
+ let ind += shiftwidth()
endif
" TODO: handle if the previous line is a label.
if thisl =~ '^\s*[)}]'
" this line closed a block
- let ind -= s:sw()
+ let ind -= shiftwidth()
endif
" Colons are tricky.
@@ -71,7 +64,7 @@ function! GoIndent(lnum)
" We ignore trying to deal with jump labels because (a) they're rare, and
" (b) they're hard to disambiguate from a composite literal key.
if thisl =~# '^\s*\(case .*\|default\):$'
- let ind -= s:sw()
+ let ind -= shiftwidth()
endif
return ind
diff --git a/indent/julia.vim b/indent/julia.vim
index 6382ec2e..fd5557cd 100644
--- a/indent/julia.vim
+++ b/indent/julia.vim
@@ -50,8 +50,9 @@ function GetJuliaNestingStruct(lnum, ...)
let e = a:0 > 1 ? a:2 : -1
let blocks_stack = []
let num_closed_blocks = 0
+ let tt = get(b:, 'julia_syntax_version', 10) == 6 ? '\|\%(\%(abstract\|primitive\)\s\+\)\@<!type' : ''
while 1
- let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\=\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|\%(\%(abstract\|primitive\)\s\+\)\@<!type\|immutable\|let\|\%(bare\)\?module\|quote\|do\)\>', s, e)
+ let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\?\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|\%(bare\)\?module\|quote\|do'.tt.'\)\>', s, e)
let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s, e)
if fb < 0 && fe < 0
@@ -133,7 +134,7 @@ function GetJuliaNestingStruct(lnum, ...)
continue
endif
- let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(\%(abstract\|primitive\)\s\+\)\?type\|immutable\|let\|quote\|do\)\>', s)
+ let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|quote\|do'.tt.'\)\>', s)
if i >= 0 && i == fb
if match(line, '\C\<\%(mutable\|abstract\|primitive\)', i) != -1
let s = i+11
diff --git a/indent/markdown.vim b/indent/markdown.vim
index fa2b460d..7ae42024 100644
--- a/indent/markdown.vim
+++ b/indent/markdown.vim
@@ -7,15 +7,15 @@ setlocal indentexpr=GetMarkdownIndent()
setlocal nolisp
setlocal autoindent
-" Automatically insert bullets
-setlocal formatoptions+=r
-" Do not automatically insert bullets when auto-wrapping with text-width
-setlocal formatoptions-=c
-" Accept various markers as bullets
-setlocal comments=b:*,b:+,b:-
-
" Automatically continue blockquote on line break
-setlocal comments+=b:>
+setlocal formatoptions+=r
+setlocal comments=b:>
+if get(g:, "vim_markdown_auto_insert_bullets", 1)
+ " Do not automatically insert bullets when auto-wrapping with text-width
+ setlocal formatoptions-=c
+ " Accept various markers as bullets
+ setlocal comments+=b:*,b:+,b:-
+endif
" Only define the function once
if exists("*GetMarkdownIndent") | finish | endif
diff --git a/indent/nix.vim b/indent/nix.vim
index 2910cbd6..b31ae42e 100644
--- a/indent/nix.vim
+++ b/indent/nix.vim
@@ -11,7 +11,7 @@ endif
let b:did_indent = 1
setlocal indentexpr=GetNixIndent()
-setlocal indentkeys+=0=then,0=else,0=inherit,*<Return>
+setlocal indentkeys+=0=then,0=else,0=inherit,0=in,*<Return>
if exists("*GetNixIndent")
finish
@@ -21,8 +21,8 @@ let s:cpo_save = &cpo
set cpo&vim
let s:skip_syntax = '\%(Comment\|String\)$'
-let s:binding_open = '\%(\<let\>\|{\)'
-let s:binding_close = '\%(\<in\>\|}\)'
+let s:binding_open = '\%(\<let\>\)'
+let s:binding_close = '\%(\<in\>\)'
let s:block_open = '\%({\|[\)'
let s:block_close = '\%(}\|]\)'
@@ -54,14 +54,6 @@ function! GetNixIndent()
return indent(bslnum)
endif
- if last_line =~ ';$'
- let bslnum = searchpair(s:binding_open, '', s:binding_close, 'bnW',
- \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "StringSpecial$"')
- if bslnum != 0
- let ind = indent(bslnum) + &sw
- endif
- endif
-
if last_line =~ s:block_open . '\s*$'
let ind += &sw
endif
@@ -78,7 +70,7 @@ function! GetNixIndent()
let ind += &sw
endif
- if getline(v:lnum - 1) =~ '^\<in\s*$'
+ if last_line =~ '^\<in\s*$'
let ind += &sw
endif
diff --git a/indent/python.vim b/indent/python.vim
index c6777c00..b44839d8 100644
--- a/indent/python.vim
+++ b/indent/python.vim
@@ -36,6 +36,10 @@ if !exists('g:python_pep8_indent_multiline_string')
let g:python_pep8_indent_multiline_string = 0
endif
+if !exists('g:python_pep8_indent_hang_closing')
+ let g:python_pep8_indent_hang_closing = 0
+endif
+
let s:block_rules = {
\ '^\s*elif\>': ['if', 'elif'],
\ '^\s*except\>': ['try', 'except'],
@@ -59,7 +63,7 @@ let s:stop_statement = '^\s*\(break\|continue\|raise\|return\|pass\)\>'
" jedi* refers to syntax definitions from jedi-vim for call signatures, which
" are inserted temporarily into the buffer.
let s:skip_special_chars = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
- \ '=~? "\\vstring|comment|jedi\\S"'
+ \ '=~? "\\vstring|comment|^pythonbytes%(contents)=$|jedi\\S"'
let s:skip_after_opening_paren = 'synIDattr(synID(line("."), col("."), 0), "name") ' .
\ '=~? "\\vcomment|jedi\\S"'
@@ -90,14 +94,6 @@ else
endfunction
endif
-function! s:pair_sort(x, y)
- if a:x[0] == a:y[0]
- return a:x[1] == a:y[1] ? 0 : a:x[1] > a:y[1] ? 1 : -1
- else
- return a:x[0] > a:y[0] ? 1 : -1
- endif
-endfunction
-
" Find backwards the closest open parenthesis/bracket/brace.
function! s:find_opening_paren(...)
" optional arguments: line and column (defaults to 1) to search around
@@ -144,27 +140,21 @@ endfunction
" Find possible indent(s) of the block starter that matches the current line.
function! s:find_start_of_block(lnum, types, multiple)
let r = []
- let types = copy(a:types)
let re = '\V\^\s\*\('.join(a:types, '\|').'\)\>'
let lnum = a:lnum
let last_indent = indent(lnum) + 1
while lnum > 0 && last_indent > 0
let indent = indent(lnum)
if indent < last_indent
- for type in types
- let re = '\v^\s*'.type.'>'
- if getline(lnum) =~# re
- if !a:multiple
- return [indent]
- endif
- if index(r, indent) == -1
- let r += [indent]
- endif
- " Remove any handled type, e.g. 'if'.
- call remove(types, index(types, type))
+ if getline(lnum) =~# re
+ if !a:multiple
+ return [indent]
+ endif
+ if index(r, indent) == -1
+ let r += [indent]
endif
- endfor
- let last_indent = indent(lnum)
+ let last_indent = indent
+ endif
endif
let lnum = prevnonblank(lnum - 1)
endwhile
@@ -205,8 +195,11 @@ function! s:indent_like_opening_paren(lnum)
\ s:skip_after_opening_paren, paren_lnum, paren_col+1)
let starts_with_closing_paren = getline(a:lnum) =~# '^\s*[])}]'
+ let hang_closing = get(b:, 'python_pep8_indent_hang_closing',
+ \ get(g:, 'python_pep8_indent_hang_closing', 0))
+
if nothing_after_opening_paren
- if starts_with_closing_paren
+ if starts_with_closing_paren && !hang_closing
let res = base
else
let res = base + s:sw()
@@ -220,10 +213,13 @@ function! s:indent_like_opening_paren(lnum)
" indent further to distinguish the continuation line
" from the next logical line.
if text =~# b:control_statement && res == base + s:sw()
- return base + s:sw() * 2
- else
- return res
+ " But only if not inside parens itself (Flake's E127).
+ let [paren_lnum, _] = s:find_opening_paren(paren_lnum)
+ if paren_lnum <= 0
+ return res + s:sw()
+ endif
endif
+ return res
endfunction
" Match indent of first block of this type.
@@ -337,11 +333,11 @@ endfunction
" Is the syntax at lnum (and optionally cnum) a python string?
function! s:is_python_string(lnum, ...)
let line = getline(a:lnum)
- let linelen = len(line)
- if linelen < 1
- let linelen = 1
+ if a:0
+ let cols = type(a:1) != type([]) ? [a:1] : a:1
+ else
+ let cols = range(1, max([1, len(line)]))
endif
- let cols = a:0 ? type(a:1) != type([]) ? [a:1] : a:1 : range(1, linelen)
for cnum in cols
if match(map(synstack(a:lnum, cnum),
\ "synIDattr(v:val, 'name')"), 'python\S*String') == -1
@@ -361,7 +357,7 @@ function! GetPythonPEPIndent(lnum)
let prevline = getline(a:lnum-1)
" Multilinestrings: continous, docstring or starting.
- if s:is_python_string(a:lnum-1, len(prevline))
+ if s:is_python_string(a:lnum-1, max([1, len(prevline)]))
\ && (s:is_python_string(a:lnum, 1)
\ || match(line, '^\%("""\|''''''\)') != -1)
@@ -379,8 +375,8 @@ function! GetPythonPEPIndent(lnum)
endif
if s:is_python_string(a:lnum-1)
- " Previous line is (completely) a string.
- return indent(a:lnum-1)
+ " Previous line is (completely) a string: keep current indent.
+ return -1
endif
if match(prevline, '^\s*\%("""\|''''''\)') != -1
diff --git a/indent/ruby.vim b/indent/ruby.vim
index 3617a925..78d10d7a 100644
--- a/indent/ruby.vim
+++ b/indent/ruby.vim
@@ -69,7 +69,7 @@ let s:skip_expr =
let s:ruby_indent_keywords =
\ '^\s*\zs\<\%(module\|class\|if\|for' .
\ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' .
- \ '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
+ \ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' .
\ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
\ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
@@ -83,7 +83,7 @@ let s:ruby_deindent_keywords =
let s:end_start_regex =
\ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
\ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
- \ '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
+ \ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' .
\ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
" Regex that defines the middle-match for the 'end' keyword.
@@ -195,8 +195,29 @@ function! GetRubyIndent(...) abort
" 2.3. Work on the previous line. {{{2
" -------------------------------
+
+ " Special case: we don't need the real s:PrevNonBlankNonString for an empty
+ " line inside a string. And that call can be quite expensive in that
+ " particular situation.
let indent_callback_names = [
\ 's:EmptyInsideString',
+ \ ]
+
+ for callback_name in indent_callback_names
+" Decho "Running: ".callback_name
+ let indent = call(function(callback_name), [indent_info])
+
+ if indent >= 0
+" Decho "Match: ".callback_name." indent=".indent." info=".string(indent_info)
+ return indent
+ endif
+ endfor
+
+ " Previous line number
+ let indent_info.plnum = s:PrevNonBlankNonString(indent_info.clnum - 1)
+ let indent_info.pline = getline(indent_info.plnum)
+
+ let indent_callback_names = [
\ 's:StartOfFile',
\ 's:AfterAccessModifier',
\ 's:ContinuedLine',
@@ -208,10 +229,6 @@ function! GetRubyIndent(...) abort
\ 's:AfterIndentKeyword',
\ ]
- " Previous line number
- let indent_info.plnum = s:PrevNonBlankNonString(indent_info.clnum - 1)
- let indent_info.pline = getline(indent_info.plnum)
-
for callback_name in indent_callback_names
" Decho "Running: ".callback_name
let indent = call(function(callback_name), [indent_info])
@@ -389,12 +406,17 @@ function! s:LeadingOperator(cline_info) abort
endfunction
function! s:EmptyInsideString(pline_info) abort
- " If the line is empty and inside a string (plnum would not be the real
- " prevnonblank in that case), use the previous line's indent
+ " If the line is empty and inside a string (the previous line is a string,
+ " too), use the previous line's indent
let info = a:pline_info
- if info.cline =~ '^\s*$' && info.plnum != prevnonblank(info.clnum - 1)
- return indent(prevnonblank(info.clnum))
+ let plnum = prevnonblank(info.clnum - 1)
+ let pline = getline(plnum)
+
+ if info.cline =~ '^\s*$'
+ \ && s:IsInStringOrComment(plnum, 1)
+ \ && s:IsInStringOrComment(plnum, strlen(pline))
+ return indent(plnum)
endif
return -1
endfunction
diff --git a/indent/rust.vim b/indent/rust.vim
index fa4dfb54..abf8087f 100644
--- a/indent/rust.vim
+++ b/indent/rust.vim
@@ -31,8 +31,10 @@ if exists("*GetRustIndent")
finish
endif
+" vint: -ProhibitAbbreviationOption
let s:save_cpo = &cpo
set cpo&vim
+" vint: +ProhibitAbbreviationOption
" Come here when loading the script the first time.
@@ -46,12 +48,12 @@ function! s:get_line_trimmed(lnum)
" If the last character in the line is a comment, do a binary search for
" the start of the comment. synID() is slow, a linear search would take
" too long on a long line.
- if synIDattr(synID(a:lnum, line_len, 1), "name") =~ 'Comment\|Todo'
+ if synIDattr(synID(a:lnum, line_len, 1), "name") =~? 'Comment\|Todo'
let min = 1
let max = line_len
while min < max
let col = (min + max) / 2
- if synIDattr(synID(a:lnum, col, 1), "name") =~ 'Comment\|Todo'
+ if synIDattr(synID(a:lnum, col, 1), "name") =~? 'Comment\|Todo'
let max = col
else
let min = col + 1
@@ -71,7 +73,7 @@ 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"
+ if synname ==# "rustString" || synname =~# "^rustComment"
return 1
endif
endfor
@@ -90,13 +92,13 @@ function GetRustIndent(lnum)
if has('syntax_items')
let synname = synIDattr(synID(a:lnum, 1, 1), "name")
- if synname == "rustString"
+ if synname ==# "rustString"
" If the start of the line is in a string, don't change the indent
return -1
- elseif synname =~ '\(Comment\|Todo\)'
- \ && line !~ '^\s*/\*' " not /* opening line
- if synname =~ "CommentML" " multi-line
- if line !~ '^\s*\*' && getline(a:lnum - 1) =~ '^\s*/\*'
+ elseif synname =~? '\(Comment\|Todo\)'
+ \ && line !~# '^\s*/\*' " not /* opening line
+ if synname =~? "CommentML" " multi-line
+ if line !~# '^\s*\*' && getline(a:lnum - 1) =~# '^\s*/\*'
" This is (hopefully) the line after a /*, and it has no
" leader, so the correct indentation is that of the
" previous line.
@@ -123,22 +125,22 @@ function GetRustIndent(lnum)
" Search backwards for the previous non-empty line.
let prevlinenum = prevnonblank(a:lnum - 1)
let prevline = s:get_line_trimmed(prevlinenum)
- while prevlinenum > 1 && prevline !~ '[^[:blank:]]'
+ while prevlinenum > 1 && prevline !~# '[^[:blank:]]'
let prevlinenum = prevnonblank(prevlinenum - 1)
let prevline = s:get_line_trimmed(prevlinenum)
endwhile
" Handle where clauses nicely: subsequent values should line up nicely.
- if prevline[len(prevline) - 1] == ","
+ if prevline[len(prevline) - 1] ==# ","
\ && prevline =~# '^\s*where\s'
return indent(prevlinenum) + 6
endif
- if prevline[len(prevline) - 1] == ","
- \ && s:get_line_trimmed(a:lnum) !~ '^\s*[\[\]{}]'
- \ && prevline !~ '^\s*fn\s'
- \ && prevline !~ '([^()]\+,$'
- \ && s:get_line_trimmed(a:lnum) !~ '^\s*\S\+\s*=>'
+ if prevline[len(prevline) - 1] ==# ","
+ \ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{}]'
+ \ && prevline !~# '^\s*fn\s'
+ \ && prevline !~# '([^()]\+,$'
+ \ && s:get_line_trimmed(a:lnum) !~# '^\s*\S\+\s*=>'
" Oh ho! The previous line ended in a comma! I bet cindent will try to
" take this too far... For now, let's normally use the previous line's
" indent.
@@ -197,7 +199,7 @@ function GetRustIndent(lnum)
else
" At the module scope, inside square brackets only
"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
- if line =~ "^\\s*]"
+ if line =~# "^\\s*]"
" It's the closing line, dedent it
return 0
else
@@ -211,8 +213,10 @@ function GetRustIndent(lnum)
return cindent(a:lnum)
endfunction
+" vint: -ProhibitAbbreviationOption
let &cpo = s:save_cpo
unlet s:save_cpo
+" vint: +ProhibitAbbreviationOption
" vim: set et sw=4 sts=4 ts=8: