diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2018-10-08 19:00:59 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2018-10-08 19:00:59 +0200 | 
| commit | fd74d8b2b170b540680a9bbf6c64990f8ebafd08 (patch) | |
| tree | b1fdef6203a78a21053d1b8e0666ab7a38c36df2 /indent | |
| parent | 055f7710b65dfa2df52fc0b5be2486ae36ac5751 (diff) | |
| download | vim-polyglot-fd74d8b2b170b540680a9bbf6c64990f8ebafd08.tar.gz vim-polyglot-fd74d8b2b170b540680a9bbf6c64990f8ebafd08.zip | |
Updatev3.3.3
Diffstat (limited to '')
| -rw-r--r-- | indent/crystal.vim | 6 | ||||
| -rw-r--r-- | indent/cython.vim | 64 | ||||
| -rw-r--r-- | indent/dart.vim | 2 | ||||
| -rw-r--r-- | indent/go.vim | 23 | ||||
| -rw-r--r-- | indent/julia.vim | 5 | ||||
| -rw-r--r-- | indent/markdown.vim | 16 | ||||
| -rw-r--r-- | indent/nix.vim | 16 | ||||
| -rw-r--r-- | indent/python.vim | 64 | ||||
| -rw-r--r-- | indent/ruby.vim | 42 | ||||
| -rw-r--r-- | indent/rust.vim | 36 | 
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: | 
