diff options
author | Christian Clason <c.clason@uni-graz.at> | 2023-01-01 15:00:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-01 15:00:39 +0100 |
commit | c4942880be0521673548c48bf61c1eac6bd37036 (patch) | |
tree | 62fa779cea100f27a97035c68dbee0646390af4f /runtime/indent/nginx.vim | |
parent | 83e8723864e24d9bf542e779d9612d3ffd014dbf (diff) | |
download | rneovim-c4942880be0521673548c48bf61c1eac6bd37036.tar.gz rneovim-c4942880be0521673548c48bf61c1eac6bd37036.tar.bz2 rneovim-c4942880be0521673548c48bf61c1eac6bd37036.zip |
vim-patch:partial:f1dcd14fc5d4 (#21602)
Update runtime files
https://github.com/vim/vim/commit/f1dcd14fc5d4370476cd82895a4479ca2d252e54
missing autocmd blocks and getscriptinfo()
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'runtime/indent/nginx.vim')
-rw-r--r-- | runtime/indent/nginx.vim | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/runtime/indent/nginx.vim b/runtime/indent/nginx.vim index 8cef7662e0..65506099f4 100644 --- a/runtime/indent/nginx.vim +++ b/runtime/indent/nginx.vim @@ -1,19 +1,78 @@ " Vim indent file " Language: nginx.conf " Maintainer: Chris Aumann <me@chr4.org> -" Last Change: 2022 Apr 06 +" Last Change: 2022 Dec 01 -if exists("b:did_indent") - finish +" Only load this indent file when no other was loaded. +if exists('b:did_indent') + finish endif let b:did_indent = 1 -setlocal indentexpr= +setlocal indentexpr=GetNginxIndent() -" cindent actually works for nginx' simple file structure -setlocal cindent +setlocal indentkeys=0{,0},0#,!^F,o,O -" Just make sure that the comments are not reset as defs would be. -setlocal cinkeys-=0# +let b:undo_indent = 'setl inde< indk<' -let b:undo_indent = "setl inde< cin< cink<" +" Only define the function once. +if exists('*GetNginxIndent') + finish +endif + +function GetNginxIndent() abort + let plnum = s:PrevNotAsBlank(v:lnum - 1) + + " Hit the start of the file, use zero indent. + if plnum == 0 + return 0 + endif + + let ind = indent(plnum) + + " Add a 'shiftwidth' after '{' + if s:AsEndWith(getline(plnum), '{') + let ind = ind + shiftwidth() + end + + " Subtract a 'shiftwidth' on '}' + " This is the part that requires 'indentkeys'. + if getline(v:lnum) =~ '^\s*}' + let ind = ind - shiftwidth() + endif + + let pplnum = s:PrevNotAsBlank(plnum - 1) + + if s:IsLineContinuation(plnum) + if !s:IsLineContinuation(pplnum) + let ind = ind + shiftwidth() + end + else + if s:IsLineContinuation(pplnum) + let ind = ind - shiftwidth() + end + endif + + return ind +endfunction + +" Find the first line at or above {lnum} that is non-blank and not a comment. +function s:PrevNotAsBlank(lnum) abort + let lnum = prevnonblank(a:lnum) + while lnum > 0 + if getline(lnum) !~ '^\s*#' + break + endif + let lnum = prevnonblank(lnum - 1) + endwhile + return lnum +endfunction + +" Check whether {line} ends with {pat}, ignoring trailing comments. +function s:AsEndWith(line, pat) abort + return a:line =~ a:pat . '\m\s*\%(#.*\)\?$' +endfunction + +function s:IsLineContinuation(lnum) abort + return a:lnum > 0 && !s:AsEndWith(getline(a:lnum), '[;{}]') +endfunction |