diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2016-01-22 09:08:00 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2016-01-22 09:08:00 +0100 | 
| commit | 61390f58850c34b27d2a28dc14ebd760de152cc9 (patch) | |
| tree | ef4822fc1f712ef0e2bdc50a435d7ef590da4d77 /indent/elixir.vim | |
| parent | f8a0fb37bf57fdf705747cc3aacbe50b6b2d6482 (diff) | |
| download | vim-polyglot-61390f58850c34b27d2a28dc14ebd760de152cc9.tar.gz vim-polyglot-61390f58850c34b27d2a28dc14ebd760de152cc9.zip | |
Update
Diffstat (limited to 'indent/elixir.vim')
| -rw-r--r-- | indent/elixir.vim | 53 | 
1 files changed, 26 insertions, 27 deletions
| diff --git a/indent/elixir.vim b/indent/elixir.vim index 863104d3..58179973 100644 --- a/indent/elixir.vim +++ b/indent/elixir.vim @@ -1,10 +1,5 @@  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1 -" Vim indent file -" Language: Elixir -" Maintainer: Carlos Galdino <carloshsgaldino@gmail.com> -" Last Change: 2013 Apr 24 -  if exists("b:did_indent")    finish  endif @@ -13,7 +8,7 @@ let b:did_indent = 1  setlocal nosmartindent  setlocal indentexpr=GetElixirIndent() -setlocal indentkeys+=0=end,0=else,0=match,0=elsif,0=catch,0=after,0=rescue +setlocal indentkeys+=0),0],0=end,0=else,0=match,0=elsif,0=catch,0=after,0=rescue  if exists("*GetElixirIndent")    finish @@ -22,17 +17,23 @@ endif  let s:cpo_save = &cpo  set cpo&vim -let s:skip_syntax  = '\%(Comment\|String\)$' -let s:block_skip   = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . s:skip_syntax . "'" -let s:block_start  = 'do\|fn' -let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue' -let s:block_end    = 'end' -let s:symbols_end  = '\]\|}' -let s:arrow        = '^.*->$' -let s:pipeline     = '^\s*|>.*$' +let s:no_colon_before = ':\@<!' +let s:no_colon_after  = ':\@!' +let s:symbols_end     = '\]\|}' +let s:arrow           = '^.*->$' +let s:pipeline        = '^\s*|>.*$' +let s:skip_syntax     = '\%(Comment\|String\)$' +let s:block_skip      = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '".s:skip_syntax."'" +let s:block_start     = 'do\|fn' +let s:block_middle    = 'else\|match\|elsif\|catch\|after\|rescue' +let s:block_end       = 'end' + +let s:indent_keywords   = '\<'.s:no_colon_before.'\%('.s:block_start.'\|'.s:block_middle.'\)$'.'\|'.s:arrow +let s:deindent_keywords = '^\s*\<\%('.s:block_end.'\|'.s:block_middle.'\)\>'.'\|'.s:arrow -let s:indent_keywords   = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$' . '\|' . s:arrow -let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>' . '\|' . s:arrow +let s:pair_start  = '\<\%('.s:no_colon_before.s:block_start.'\)\>'.s:no_colon_after +let s:pair_middle = '\<\%('.s:block_middle.'\)\>'.s:no_colon_after.'\zs' +let s:pair_end    = '\<\%('.s:no_colon_before.s:block_end.'\)\>\zs'  function! GetElixirIndent()    let lnum = prevnonblank(v:lnum - 1) @@ -60,20 +61,16 @@ function! GetElixirIndent()      let opened_symbol += count(splited_line, '[') - count(splited_line, ']')      let opened_symbol += count(splited_line, '{') - count(splited_line, '}') -    let ind += opened_symbol * &sw +    let ind += (opened_symbol * &sw) -    if last_line =~ '^\s*\(' . s:symbols_end . '\)' +    if last_line =~ '^\s*\('.s:symbols_end.'\)' || last_line =~ s:indent_keywords        let ind += &sw      endif -    if current_line =~ '^\s*\(' . s:symbols_end . '\)' +    if current_line =~ '^\s*\('.s:symbols_end.'\)'        let ind -= &sw      endif -    if last_line =~ s:indent_keywords -      let ind += &sw -    endif -      " if line starts with pipeline      " and last line contains pipeline(s)      " align them @@ -99,11 +96,13 @@ function! GetElixirIndent()      endif      if current_line =~ s:deindent_keywords -      let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>', -            \ '\<\%(' . s:block_middle . '\):\@!\>\zs', -            \ '\<:\@<!' . s:block_end . '\>\zs', +      let bslnum = searchpair( +            \ s:pair_start, +            \ s:pair_middle, +            \ s:pair_end,              \ 'nbW', -            \ s:block_skip ) +            \ s:block_skip +            \ )        let ind = indent(bslnum)      endif | 
