diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2020-06-25 13:38:07 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-06-25 13:38:15 +0200 | 
| commit | abca7c20144a1aa0c0197e17cacd892e3ff99ff2 (patch) | |
| tree | 571bb7b6905b1d42e8a269c2cb643535904b8ec7 /indent | |
| parent | 8b6c06e7239eb46d5b5096fd7fe9507aca88b091 (diff) | |
| download | vim-polyglot-abca7c20144a1aa0c0197e17cacd892e3ff99ff2.tar.gz vim-polyglot-abca7c20144a1aa0c0197e17cacd892e3ff99ff2.zip | |
Update
Diffstat (limited to '')
| -rw-r--r-- | indent/zig.vim | 80 | 
1 files changed, 80 insertions, 0 deletions
| diff --git a/indent/zig.vim b/indent/zig.vim new file mode 100644 index 00000000..1fc11298 --- /dev/null +++ b/indent/zig.vim @@ -0,0 +1,80 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'zig') == -1 + +" indent/zig.vim + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +if (!has("cindent") || !has("eval")) +    finish +endif + +setlocal cindent + +" L0 -> 0 indent for jump labels (i.e. case statement in c). +" j1 -> indenting for "javascript object declarations" +" J1 -> see j1 +" w1 -> starting a new line with `(` at the same indent as `(` +" m1 -> if `)` starts a line, match its indent with the first char of its +"       matching `(` line +" (s -> use one indent, when starting a new line after a trailing `(` +setlocal cinoptions=L0,m1,(s,j1,J1,l1 + +" cinkeys: controls what keys trigger indent formatting +" 0{ -> { +" 0} -> } +" 0) -> ) +" 0] -> ] +" !^F -> make CTRL-F (^F) reindent the current line when typed +" o -> when <CR> or `o` is used +" O -> when the `O` command is used +setlocal cinkeys=0{,0},0),0],!^F,o,O + +setlocal indentexpr=GetZigIndent(v:lnum) + +function! GetZigIndent(lnum) +    let curretLineNum = a:lnum +    let currentLine = getline(a:lnum) + +    " cindent doesn't handle multi-line strings properly, so force no indent +    if currentLine =~ '^\s*\\\\.*' +        return -1 +    endif + +    let prevLineNum = prevnonblank(a:lnum-1) +    let prevLine = getline(prevLineNum) + +    " for lines that look line +    "   }, +    "   }; +    " try treat them the same as a } +    if prevLine =~ '\v^\s*},$' +        if currentLine =~ '\v^\s*};$' || currentLine =~ '\v^\s*}$' +            return indent(prevLineNum) - 4 +        endif +        return indent(prevLineNum-1) - 4 +    endif +    if currentLine =~ '\v^\s*},$' +        return indent(prevLineNum) - 4 +    endif +    if currentLine =~ '\v^\s*};$' +        return indent(prevLineNum) - 4 +    endif + + +    " cindent doesn't handle this case correctly: +    " switch (1): { +    "   1 => true, +    "       ~ +    "       ^---- indents to here +    if prevLine =~ '.*=>.*,$' && currentLine !~ '.*}$' +       return indent(prevLineNum) +    endif + +    return cindent(a:lnum) +endfunction + +endif | 
