summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--after/syntax/cpp.vim11
-rw-r--r--autoload/go/config.vim8
-rw-r--r--autoload/jsx_pretty/indent.vim31
-rw-r--r--autoload/terraform.vim68
-rw-r--r--ftdetect/polyglot.vim14
-rw-r--r--ftplugin/scala.vim4
-rw-r--r--ftplugin/terraform.vim138
-rw-r--r--indent/dune.vim14
-rw-r--r--indent/rust.vim66
-rw-r--r--indent/scala.vim9
-rw-r--r--indent/terraform.vim21
-rw-r--r--syntax/erlang.vim4
-rw-r--r--syntax/gitconfig.vim2
-rw-r--r--syntax/javascript.vim2
-rw-r--r--syntax/rst.vim11
-rw-r--r--syntax/rust.vim11
-rw-r--r--syntax/scss.vim2
-rw-r--r--syntax/svelte.vim3
-rw-r--r--syntax/terraform.vim11
19 files changed, 261 insertions, 169 deletions
diff --git a/after/syntax/cpp.vim b/after/syntax/cpp.vim
index 01108d58..ae11705e 100644
--- a/after/syntax/cpp.vim
+++ b/after/syntax/cpp.vim
@@ -6,7 +6,7 @@ endif
" Language: C++ Additions
" Maintainer: Jon Haggblad <jon@haeggblad.com>
" URL: http://www.haeggblad.com
-" Last Change: 1 Feb 2018
+" Last Change: 29 Jun 2019
" Version: 0.6
" Changelog:
" 0.1 - initial version.
@@ -964,6 +964,12 @@ if !exists("cpp_no_cpp11")
syntax keyword cppSTLtype atomic_uintmax_t
syntax keyword cppSTLconstant ATOMIC_FLAG_INIT
syntax keyword cppSTLenum memory_order
+ syntax keyword cppSTLtype memory_order_relaxed
+ syntax keyword cppSTLtype memory_order_consume
+ syntax keyword cppSTLtype memory_order_acquire
+ syntax keyword cppSTLtype memory_order_release
+ syntax keyword cppSTLtype memory_order_acq_rel
+ syntax keyword cppSTLtype memory_order_seq_cst
syntax keyword cppSTLfunction is_lock_free
syntax keyword cppSTLfunction compare_exchange_weak
syntax keyword cppSTLfunction compare_exchange_strong
@@ -1983,6 +1989,9 @@ endif " C++17
if !exists("cpp_no_cpp20")
" type_traits
syntax keyword cppSTLtype remove_cvref remove_cvref_t
+ syntax keyword cppType char8_t
+ syntax keyword cppStatement co_yield co_return co_await
+ syntax keyword cppStorageClass consteval
endif
diff --git a/autoload/go/config.vim b/autoload/go/config.vim
index 4eff6f6f..787c4e2a 100644
--- a/autoload/go/config.vim
+++ b/autoload/go/config.vim
@@ -18,10 +18,6 @@ function! go#config#VersionWarning() abort
return get(g:, 'go_version_warning', 1)
endfunction
-function! go#config#NullModuleWarning() abort
- return get(g:, 'go_null_module_warning', 1)
-endfunction
-
function! go#config#BuildTags() abort
return get(g:, 'go_build_tags', '')
endfunction
@@ -279,10 +275,6 @@ function! go#config#MetalinterEnabled() abort
return get(g:, "go_metalinter_enabled", default_enabled)
endfunction
-function! go#config#MetalinterDisabled() abort
- return get(g:, "go_metalinter_disabled", [])
-endfunction
-
function! go#config#GolintBin() abort
return get(g:, "go_golint_bin", "golint")
endfunction
diff --git a/autoload/jsx_pretty/indent.vim b/autoload/jsx_pretty/indent.vim
index d37d3990..428c366d 100644
--- a/autoload/jsx_pretty/indent.vim
+++ b/autoload/jsx_pretty/indent.vim
@@ -73,17 +73,27 @@ function! jsx_pretty#indent#get(js_indent)
let line = substitute(getline(lnum), '^\s*\|\s*$', '', 'g')
let current_syn = s:syn_sol(lnum)
let current_syn_eol = s:syn_eol(lnum)
- let prev_syn_sol = s:syn_sol(lnum - 1)
- let prev_syn_eol = s:syn_eol(lnum - 1)
+ let prev_line_num = prevnonblank(lnum - 1)
+ let prev_syn_sol = s:syn_sol(prev_line_num)
+ let prev_syn_eol = s:syn_eol(prev_line_num)
let prev_line = s:prev_line(lnum)
let prev_ind = s:prev_indent(lnum)
if s:syn_xmlish(current_syn)
+ if !s:syn_xmlish(prev_syn_sol)
+ \ && !s:syn_jsx_escapejs(prev_syn_sol)
+ \ && !s:syn_jsx_escapejs(prev_syn_eol)
+ \ && !s:syn_js_comment(prev_syn_sol)
+ if line =~ '^/\s*>' || line =~ '^<\s*' . s:end_tag
+ return prev_ind
+ else
+ return prev_ind + s:sw()
+ endif
" {
" <div></div>
" ##} <--
- if s:syn_jsx_element(current_syn) && line =~ '}$'
+ elseif s:syn_jsx_element(current_syn) && line =~ '}$'
let pair_line = searchpair('{', '', '}', 'b')
return indent(pair_line)
elseif line =~ '^-->$'
@@ -143,16 +153,6 @@ function! jsx_pretty#indent#get(js_indent)
else
return prev_ind
endif
- elseif !s:syn_xmlish(prev_syn_sol)
- if prev_line =~ '^\<\(return\|default\|await\|yield\)'
- if line !~ '^/\s*>' || line !~ '^<\s*' . s:end_tag
- return prev_ind + s:sw()
- else
- return prev_ind
- endif
- else
- return prev_ind
- endif
else
return prev_ind
endif
@@ -193,9 +193,10 @@ function! jsx_pretty#indent#get(js_indent)
" Issue #68
" return (<div>
" |<div>)
- if prev_line =~ '^\<return' && line =~ '^<\s*' . s:end_tag
+ if (line =~ '^/\s*>' || line =~ '^<\s*' . s:end_tag)
+ \ && !s:syn_xmlish(prev_syn_sol)
return prev_ind
- endif
+ endif
" If current syntax is not a jsx syntax group
if s:syn_xmlish(prev_syn_eol) && line !~ '^[)\]}]'
diff --git a/autoload/terraform.vim b/autoload/terraform.vim
index 210ee59f..db1e3934 100644
--- a/autoload/terraform.vim
+++ b/autoload/terraform.vim
@@ -23,3 +23,71 @@ function! terraform#fmt()
endif
call winrestview(l:curw)
endfunction
+
+function! terraform#folds()
+ let thisline = getline(v:lnum)
+ if match(thisline, '^resource') >= 0
+ return '>1'
+ elseif match(thisline, '^provider') >= 0
+ return '>1'
+ elseif match(thisline, '^module') >= 0
+ return '>1'
+ elseif match(thisline, '^variable') >= 0
+ return '>1'
+ elseif match(thisline, '^output') >= 0
+ return '>1'
+ elseif match(thisline, '^data') >= 0
+ return '>1'
+ elseif match(thisline, '^terraform') >= 0
+ return '>1'
+ elseif match(thisline, '^locals') >= 0
+ return '>1'
+ else
+ return '='
+ endif
+endfunction
+
+function! terraform#foldText()
+ let foldsize = (v:foldend-v:foldstart)
+ return getline(v:foldstart).' ('.foldsize.' lines)'
+endfunction
+
+function! terraform#align()
+ let p = '^.*=[^>]*$'
+ if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
+ let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
+ let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
+ Tabularize/=/l1
+ normal! 0
+ call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
+ endif
+endfunction
+
+function! terraform#commands(A, L, P)
+ return [
+ \ 'apply',
+ \ 'console',
+ \ 'destroy',
+ \ 'env',
+ \ 'fmt',
+ \ 'get',
+ \ 'graph',
+ \ 'import',
+ \ 'init',
+ \ 'output',
+ \ 'plan',
+ \ 'providers',
+ \ 'push',
+ \ 'refresh',
+ \ 'show',
+ \ 'taint',
+ \ 'untaint',
+ \ 'validate',
+ \ 'version',
+ \ 'workspace',
+ \ '0.12checklist',
+ \ 'debug',
+ \ 'force-unlock',
+ \ 'state'
+ \ ]
+endfunction
diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim
index b080cfd9..073ef3a5 100644
--- a/ftdetect/polyglot.vim
+++ b/ftdetect/polyglot.vim
@@ -631,11 +631,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jenkins') == -1
augroup filetypedetect
" jenkins, from Jenkinsfile.vim in martinda/Jenkinsfile-vim-syntax
" Jenkinsfile
-autocmd BufRead,BufNewFile Jenkinsfile set ft=Jenkinsfile
-autocmd BufRead,BufNewFile Jenkinsfile* setf Jenkinsfile
-autocmd BufRead,BufNewFile *.jenkinsfile set ft=Jenkinsfile
-autocmd BufRead,BufNewFile *.jenkinsfile setf Jenkinsfile
-autocmd BufRead,BufNewFile *.Jenkinsfile setf Jenkinsfile
+
+augroup JenkinsAUGroup
+ autocmd BufRead,BufNewFile *Jenkins* set ft=Jenkinsfile
+ autocmd BufRead,BufNewFile *jenkins* set ft=Jenkinsfile
+augroup END
augroup end
endif
@@ -1085,7 +1085,7 @@ endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'racket') == -1
augroup filetypedetect
" racket, from racket.vim in wlangstroth/vim-racket
-au BufRead,BufNewFile *.rkt,*.rktl setf racket
+au BufRead,BufNewFile *.rkt,*.rktl set filetype=racket
augroup end
endif
@@ -1348,6 +1348,8 @@ endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1
augroup filetypedetect
" terraform, from terraform.vim in hashivim/vim-terraform
+" By default, Vim associates .tf files with TinyFugue - tell it not to.
+autocmd! filetypedetect BufRead,BufNewFile *.tf
autocmd BufRead,BufNewFile *.tf set filetype=terraform
autocmd BufRead,BufNewFile *.tfvars set filetype=terraform
autocmd BufRead,BufNewFile *.tfstate set filetype=json
diff --git a/ftplugin/scala.vim b/ftplugin/scala.vim
index 817b6f99..d843daa9 100644
--- a/ftplugin/scala.vim
+++ b/ftplugin/scala.vim
@@ -29,8 +29,8 @@ setlocal commentstring=//\ %s
setlocal shiftwidth=2 softtabstop=2 expandtab
-setlocal include='^\s*import'
-setlocal includeexpr='substitute(v:fname,"\\.","/","g")'
+setlocal include=^\\s*import
+setlocal includeexpr=substitute(v:fname,'\\.','/','g')
setlocal path+=src/main/scala,src/test/scala
setlocal suffixesadd=.scala
diff --git a/ftplugin/terraform.vim b/ftplugin/terraform.vim
index fd4c2be0..e8ed9fb3 100644
--- a/ftplugin/terraform.vim
+++ b/ftplugin/terraform.vim
@@ -11,127 +11,44 @@ endif
let b:did_ftplugin = 1
let s:cpo_save = &cpoptions
-
-setlocal formatoptions-=t
-let b:undo_ftplugin = 'setlocal formatoptions<'
-
-" Include hyphens as keyword characters so that a keyword appearing as part of
-" a longer name doesn't get partially highlighted.
-setlocal iskeyword+=-
-let b:undo_ftplugin .= ' iskeyword<'
-
set cpoptions&vim
-if !exists('g:terraform_align')
- let g:terraform_align = 0
-endif
-
-if !exists('g:terraform_remap_spacebar')
- let g:terraform_remap_spacebar = 0
-endif
-
-if !exists('g:terraform_fold_sections')
- let g:terraform_fold_sections = 0
-endif
+" j is a relatively recent addition; silence warnings when setting it.
+setlocal formatoptions-=t formatoptions+=croql
+silent! setlocal formatoptions+=j
+let b:undo_ftplugin = 'setlocal formatoptions<'
-if g:terraform_align && exists(':Tabularize')
- inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
- function! s:terraformalign()
- let p = '^.*=[^>]*$'
- if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
- let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
- let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
- Tabularize/=/l1
- normal! 0
- call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
- endif
- endfunction
+if !has('patch-7.4.1142')
+ " Include hyphens as keyword characters so that a keyword appearing as
+ " part of a longer name doesn't get partially highlighted.
+ setlocal iskeyword+=-
+ let b:undo_ftplugin .= ' iskeyword<'
endif
-if g:terraform_fold_sections
- function! TerraformFolds()
- let thisline = getline(v:lnum)
- if match(thisline, '^resource') >= 0
- return '>1'
- elseif match(thisline, '^provider') >= 0
- return '>1'
- elseif match(thisline, '^module') >= 0
- return '>1'
- elseif match(thisline, '^variable') >= 0
- return '>1'
- elseif match(thisline, '^output') >= 0
- return '>1'
- elseif match(thisline, '^data') >= 0
- return '>1'
- elseif match(thisline, '^terraform') >= 0
- return '>1'
- elseif match(thisline, '^locals') >= 0
- return '>1'
- else
- return '='
- endif
- endfunction
+if get(g:, 'terraform_fold_sections', 0)
setlocal foldmethod=expr
- setlocal foldexpr=TerraformFolds()
+ setlocal foldexpr=terraform#folds()
setlocal foldlevel=1
- let b:undo_ftplugin .= ' foldmethod< foldexpr< foldlevel<'
-
- function! TerraformFoldText()
- let foldsize = (v:foldend-v:foldstart)
- return getline(v:foldstart).' ('.foldsize.' lines)'
- endfunction
- setlocal foldtext=TerraformFoldText()
- let b:undo_ftplugin .= ' foldtext<'
-endif
-
-" Re-map the space bar to fold and unfold
-if get(g:, 'terraform_remap_spacebar', 1)
- "inoremap <space> <C-O>za
- nnoremap <space> za
- onoremap <space> <C-C>za
- vnoremap <space> zf
+ setlocal foldtext=terraform#foldText()
+ let b:undo_ftplugin .= ' foldmethod< foldexpr< foldlevel< foldtext<'
endif
" Set the commentstring
-if exists('g:terraform_commentstring')
- let &l:commentstring=g:terraform_commentstring
-else
- setlocal commentstring=#%s
-endif
+let &l:commentstring = get(g:, 'terraform_commentstring', '#%s')
let b:undo_ftplugin .= ' commentstring<'
-if !exists('g:terraform_fmt_on_save')
- let g:terraform_fmt_on_save = 0
+" Re-map the space bar to fold and unfold
+if get(g:, 'terraform_remap_spacebar', 0)
+ nnoremap <buffer> <space> za
+ onoremap <buffer> <space> <C-C>za
+ vnoremap <buffer> <space> zf
+ let b:undo_ftplugin .= '|unmap <buffer> <space>'
endif
-function! s:commands(A, L, P)
- return [
- \ 'apply',
- \ 'console',
- \ 'destroy',
- \ 'env',
- \ 'fmt',
- \ 'get',
- \ 'graph',
- \ 'import',
- \ 'init',
- \ 'output',
- \ 'plan',
- \ 'providers',
- \ 'push',
- \ 'refresh',
- \ 'show',
- \ 'taint',
- \ 'untaint',
- \ 'validate',
- \ 'version',
- \ 'workspace',
- \ '0.12checklist',
- \ 'debug',
- \ 'force-unlock',
- \ 'state'
- \ ]
-endfunction
+if get(g:, 'terraform_align', 0) && exists(':Tabularize')
+ inoremap <buffer> <silent> = =<Esc>:call terraform#align()<CR>a
+ let b:undo_ftplugin .= '|iunmap <buffer> ='
+endif
let &cpoptions = s:cpo_save
unlet s:cpo_save
@@ -141,13 +58,14 @@ if !executable('terraform')
endif
let s:cpo_save = &cpoptions
+set cpoptions&vim
-command! -nargs=+ -complete=customlist,s:commands -buffer Terraform execute '!terraform '.<q-args>. ' -no-color'
+command! -nargs=+ -complete=customlist,terraform#commands -buffer Terraform execute '!terraform '.<q-args>. ' -no-color'
command! -nargs=0 -buffer TerraformFmt call terraform#fmt()
let b:undo_ftplugin .= '|delcommand Terraform|delcommand TerraformFmt'
-if get(g:, 'terraform_fmt_on_save', 1)
- augroup terraform
+if get(g:, 'terraform_fmt_on_save', 0)
+ augroup vim.terraform.fmt
autocmd!
autocmd BufWritePre *.tf call terraform#fmt()
autocmd BufWritePre *.tfvars call terraform#fmt()
diff --git a/indent/dune.vim b/indent/dune.vim
new file mode 100644
index 00000000..3f8e7e87
--- /dev/null
+++ b/indent/dune.vim
@@ -0,0 +1,14 @@
+if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'ocaml') != -1
+ finish
+endif
+
+" Vim indent file
+" Language: dune
+
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" dune format-dune-file uses 1 space to indent
+set softtabstop=1 shiftwidth=1 expandtab
diff --git a/indent/rust.vim b/indent/rust.vim
index 5c43d2e2..ee7f6cf6 100644
--- a/indent/rust.vim
+++ b/indent/rust.vim
@@ -85,8 +85,17 @@ function! s:is_string_comment(lnum, col)
endif
endfunction
-function GetRustIndent(lnum)
+if exists('*shiftwidth')
+ function! s:shiftwidth()
+ return shiftwidth()
+ endfunc
+else
+ function! s:shiftwidth()
+ return &shiftwidth
+ endfunc
+endif
+function GetRustIndent(lnum)
" Starting assumption: cindent (called at the end) will do it right
" normally. We just want to fix up a few cases.
@@ -132,14 +141,65 @@ function GetRustIndent(lnum)
let prevline = s:get_line_trimmed(prevlinenum)
endwhile
+ " A standalone '{', '}', or 'where'
+ let l:standalone_open = line =~# '\V\^\s\*{\s\*\$'
+ let l:standalone_close = line =~# '\V\^\s\*}\s\*\$'
+ let l:standalone_where = line =~# '\V\^\s\*where\s\*\$'
+ if l:standalone_open || l:standalone_close || l:standalone_where
+ " ToDo: we can search for more items than 'fn' and 'if'.
+ let [l:found_line, l:col, l:submatch] =
+ \ searchpos('\<\(fn\)\|\(if\)\>', 'bnWp')
+ if l:found_line !=# 0
+ " Now we count the number of '{' and '}' in between the match
+ " locations and the current line (there is probably a better
+ " way to compute this).
+ let l:i = l:found_line
+ let l:search_line = strpart(getline(l:i), l:col - 1)
+ let l:opens = 0
+ let l:closes = 0
+ while l:i < a:lnum
+ let l:search_line2 = substitute(l:search_line, '\V{', '', 'g')
+ let l:opens += strlen(l:search_line) - strlen(l:search_line2)
+ let l:search_line3 = substitute(l:search_line2, '\V}', '', 'g')
+ let l:closes += strlen(l:search_line2) - strlen(l:search_line3)
+ let l:i += 1
+ let l:search_line = getline(l:i)
+ endwhile
+ if l:standalone_open || l:standalone_where
+ if l:opens ==# l:closes
+ return indent(l:found_line)
+ endif
+ else
+ " Expect to find just one more close than an open
+ if l:opens ==# l:closes + 1
+ return indent(l:found_line)
+ endif
+ endif
+ endif
+ endif
+
+ " A standalone 'where' adds a shift.
+ let l:standalone_prevline_where = prevline =~# '\V\^\s\*where\s\*\$'
+ if l:standalone_prevline_where
+ return indent(prevlinenum) + 4
+ endif
+
" Handle where clauses nicely: subsequent values should line up nicely.
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*[\[\]{}]'
+ let l:last_prevline_character = prevline[len(prevline) - 1]
+
+ " A line that ends with '.<expr>;' is probably an end of a long list
+ " of method operations.
+ if prevline =~# '\V\^\s\*.' && l:last_prevline_character ==# ';'
+ return indent(prevlinenum) - s:shiftwidth()
+ endif
+
+ if l:last_prevline_character ==# ","
+ \ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{})]'
\ && prevline !~# '^\s*fn\s'
\ && prevline !~# '([^()]\+,$'
\ && s:get_line_trimmed(a:lnum) !~# '^\s*\S\+\s*=>'
diff --git a/indent/scala.vim b/indent/scala.vim
index db52cf90..2fcb3378 100644
--- a/indent/scala.vim
+++ b/indent/scala.vim
@@ -21,7 +21,10 @@ if exists("*GetScalaIndent")
finish
endif
-let s:defMatcher = '\%(\%(private\|protected\)\%(\[[^\]]*\]\)\?\s\+\|abstract\s\+\|override\s\+\)*\<def\>'
+let s:annotationMatcher = '@[A-Za-z._]\+\s\+'
+let s:modifierMatcher = s:annotationMatcher . '\|\%(private\|protected\)\%(\[[^\]]*\]\)\?\s\+\|abstract\s\+\|override\s\+\|final\s\+'
+let s:defMatcher = '\%(' . s:modifierMatcher . '\)*\<def\>'
+let s:valMatcher = '\%(' . s:modifierMatcher . '\|lazy\s\+\)*\<va[lr]\>'
let s:funcNameMatcher = '\w\+'
let s:typeSpecMatcher = '\%(\s*\[\_[^\]]*\]\)'
let s:defArgMatcher = '\%((\_.\{-})\)'
@@ -185,7 +188,7 @@ function! scala#NumberOfBraceGroups(line)
endfunction
function! scala#MatchesIncompleteDefValr(line)
- if a:line =~ '^\s*\%(' . s:defMatcher . '\|\<va[lr]\>\).*[=({]\s*$'
+ if a:line =~ '^\s*\%(' . s:defMatcher . '\|' . s:valMatcher . '\).*[=({]\s*$'
return 1
else
return 0
@@ -435,7 +438,7 @@ function! GetScalaIndent()
" If 'val', 'var', 'def' end with =, this is a one-line block
if (prevline =~ '^\s*\<\%(\%(}\?\s*else\s\+\)\?if\|for\|while\)\>.*[)=]\s*$' && scala#NumberOfBraceGroups(prevline) <= 1)
\ || prevline =~ '^\s*' . s:defMatcher . '.*=\s*$'
- \ || prevline =~ '^\s*\<va[lr]\>.*[=]\s*$'
+ \ || prevline =~ '^\s*' . s:valMatcher . '.*[=]\s*$'
\ || prevline =~ '^\s*\%(}\s*\)\?\<else\>\s*$'
\ || prevline =~ '=\s*$'
call scala#ConditionalConfirm("4")
diff --git a/indent/terraform.vim b/indent/terraform.vim
index 2a0e5799..74b7808a 100644
--- a/indent/terraform.vim
+++ b/indent/terraform.vim
@@ -34,24 +34,19 @@ function! TerraformIndent(lnum)
return 0
endif
- " Previous non-blank line should continue the indent level
+ " Usual case is to continue at the same indent as the previous non-blank line.
let prevlnum = prevnonblank(a:lnum-1)
+ let thisindent = indent(prevlnum)
- " Previous line without comments should continue the indent level
- let prevline = substitute(getline(prevlnum), '//.*$', '', '')
- let previndent = indent(prevlnum)
- let thisindent = previndent
-
- " Config block starting with [ { ( should increase the indent level
- if prevline =~# '[\[{\(]\s*$'
+ " If that previous line is a non-comment ending in [ { (, increase the
+ " indent level.
+ let prevline = getline(prevlnum)
+ if prevline !~# '^\s*\(#\|//\)' && prevline =~# '[\[{\(]\s*$'
let thisindent += &shiftwidth
endif
- " Current line without comments should continue the indent level
- let thisline = substitute(getline(a:lnum), '//.*$', '', '')
-
- " Config block ending with ) } ] should get the indentation
- " level from the initial config block
+ " If the current line ends a block, decrease the indent level.
+ let thisline = getline(a:lnum)
if thisline =~# '^\s*[\)}\]]'
let thisindent -= &shiftwidth
endif
diff --git a/syntax/erlang.vim b/syntax/erlang.vim
index 1c549969..391ad1b3 100644
--- a/syntax/erlang.vim
+++ b/syntax/erlang.vim
@@ -6,7 +6,7 @@ endif
" Language: Erlang (http://www.erlang.org)
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
" Contributor: Adam Rutkowski <hq@mtod.org>
-" Last Update: 2017-Mar-05
+" Last Update: 2019-Jun-18
" License: Vim license
" URL: https://github.com/vim-erlang/vim-erlang-runtime
@@ -121,7 +121,7 @@ syn keyword erlangBIF garbage_collect get get_keys group_leader contained
syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
-syn keyword erlangBIF is_float is_function is_integer is_list is_map contained
+syn keyword erlangBIF is_float is_function is_integer is_list is_map is_map_key contained
syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
syn keyword erlangBIF is_record is_reference is_tuple length link contained
syn keyword erlangBIF list_to_atom list_to_binary contained
diff --git a/syntax/gitconfig.vim b/syntax/gitconfig.vim
index 438cceae..80ee7971 100644
--- a/syntax/gitconfig.vim
+++ b/syntax/gitconfig.vim
@@ -34,7 +34,7 @@ hi def link gitconfigBoolean Boolean
hi def link gitconfigNumber Number
hi def link gitconfigString String
hi def link gitconfigDelim Delimiter
-hi def link gitconfigEscape Delimiter
+hi def link gitconfigEscape Special
hi def link gitconfigError Error
let b:current_syntax = "gitconfig"
diff --git a/syntax/javascript.vim b/syntax/javascript.vim
index a48c58e2..0c917b68 100644
--- a/syntax/javascript.vim
+++ b/syntax/javascript.vim
@@ -65,7 +65,7 @@ syntax match jsFloat /\c\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%(e[+-]\=
" Regular Expressions
syntax match jsSpecial contained "\v\\%(x\x\x|u%(\x{4}|\{\x{4,5}})|c\u|.)"
syntax region jsTemplateExpression contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend
-syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]+ contains=jsSpecial
+syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]+ contains=jsSpecial extend
syntax match jsRegexpBoundary contained "\v\c[$^]|\\b"
syntax match jsRegexpBackRef contained "\v\\[1-9]\d*"
syntax match jsRegexpQuantifier contained "\v[^\\]%([?*+]|\{\d+%(,\d*)?})\??"lc=1
diff --git a/syntax/rst.vim b/syntax/rst.vim
index a875a44b..43b17aa8 100644
--- a/syntax/rst.vim
+++ b/syntax/rst.vim
@@ -94,7 +94,14 @@ execute 'syn match rstSubstitutionDefinition contained' .
\ ' /|.*|\_s\+/ nextgroup=@rstDirectives'
function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_right)
- execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.a:start.'+'.' contained'
+ " Only escape the first char of a multichar delimiter (e.g. \* inside **)
+ if a:start[0] == '\'
+ let first = a:start[0:1]
+ else
+ let first = a:start[0]
+ endif
+
+ execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained'
execute 'syn region rst' . a:name .
\ ' start=+' . a:char_left . '\zs' . a:start .
@@ -170,7 +177,7 @@ syn match rstStandaloneHyperlink contains=@NoSpell
\ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
syn region rstCodeBlock contained matchgroup=rstDirective
- \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s\+.*\_s*\n\ze\z(\s\+\)+
+ \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s*\n\%(\s*:.*:\s*.*\s*\n\)*\n\ze\z(\s\+\)+
\ skip=+^$+
\ end=+^\z1\@!+
\ contains=@NoSpell
diff --git a/syntax/rust.vim b/syntax/rust.vim
index 6f653014..a4fff5c2 100644
--- a/syntax/rust.vim
+++ b/syntax/rust.vim
@@ -153,7 +153,16 @@ syn region rustString start=+b"+ skip=+\\\\\|\\"+ end=+"+ contains=rustE
syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustStringContinuation,@Spell
syn region rustString start='b\?r\z(#*\)"' end='"\z1' contains=@Spell
-syn region rustAttribute start="#!\?\[" end="\]" contains=rustString,rustDerive,rustCommentLine,rustCommentBlock,rustCommentLineDocError,rustCommentBlockDocError
+" Match attributes with either arbitrary syntax or special highlighting for
+" derives. We still highlight strings and comments inside of the attribute.
+syn region rustAttribute start="#!\?\[" end="\]" contains=@rustAttributeContents,rustAttributeParenthesizedParens,rustAttributeParenthesizedCurly,rustAttributeParenthesizedBrackets,rustDerive
+syn region rustAttributeParenthesizedParens matchgroup=rustAttribute start="\w\%(\w\)*("rs=e end=")"re=s transparent contained contains=rustAttributeBalancedParens,@rustAttributeContents
+syn region rustAttributeParenthesizedCurly matchgroup=rustAttribute start="\w\%(\w\)*{"rs=e end="}"re=s transparent contained contains=rustAttributeBalancedCurly,@rustAttributeContents
+syn region rustAttributeParenthesizedBrackets matchgroup=rustAttribute start="\w\%(\w\)*\["rs=e end="\]"re=s transparent contained contains=rustAttributeBalancedBrackets,@rustAttributeContents
+syn region rustAttributeBalancedParens matchgroup=rustAttribute start="("rs=e end=")"re=s transparent contained contains=rustAttributeBalancedParens,@rustAttributeContents
+syn region rustAttributeBalancedCurly matchgroup=rustAttribute start="{"rs=e end="}"re=s transparent contained contains=rustAttributeBalancedCurly,@rustAttributeContents
+syn region rustAttributeBalancedBrackets matchgroup=rustAttribute start="\["rs=e end="\]"re=s transparent contained contains=rustAttributeBalancedBrackets,@rustAttributeContents
+syn cluster rustAttributeContents contains=rustString,rustCommentLine,rustCommentBlock,rustCommentLineDocError,rustCommentBlockDocError
syn region rustDerive start="derive(" end=")" contained contains=rustDeriveTrait
" This list comes from src/libsyntax/ext/deriving/mod.rs
" Some are deprecated (Encodable, Decodable) or to be removed after a new snapshot (Show).
diff --git a/syntax/scss.vim b/syntax/scss.vim
index 84f75fea..69574735 100644
--- a/syntax/scss.vim
+++ b/syntax/scss.vim
@@ -50,6 +50,7 @@ syn cluster scssSelectors contains=@comment,cssSelectorOp,cssTagName,cssPseudoCl
syn match scssProperty "\([[:alnum:]-]\)\+\s*\(:\)\@=" contained contains=css.*Prop,cssVendor containedin=cssMediaBlock nextgroup=scssAttribute,scssAttributeWithNestedDefinition
syn match scssAttribute ":[^;]*\ze\(;\|}\)" contained contains=css.*Attr,cssValue.*,cssColor,cssFunction,cssString.*,cssURL,scssFunction,scssInterpolation,scssVariable
+syn match scssSemicolon ";" containedin=scssDefinition,scssNestedDefinition
syn match scssAttributeWithNestedDefinition ": [^#"]*{\@=" nextgroup=scssNestedDefinition contained contains=css.*Attr,cssValue.*,scssVariable
syn region scssNestedDefinition matchgroup=cssBraces start="{" end="}" contained contains=@comment,scssProperty,scssNestedProperty
@@ -218,6 +219,7 @@ hi def link scssImport Include
hi def link scssTodo Todo
hi def link scssAtRoot Keyword
hi def link scssMapParens Delimiter
+hi def link scssSemicolon Delimiter
let b:current_syntax = "scss"
if main_syntax == 'scss'
diff --git a/syntax/svelte.vim b/syntax/svelte.vim
index e119d605..2149e71a 100644
--- a/syntax/svelte.vim
+++ b/syntax/svelte.vim
@@ -48,7 +48,10 @@ syntax match svelteKeyword "#await" contained containedin=jsBlock,javascriptBloc
syntax match svelteKeyword "/await" contained containedin=jsBlock,javascriptBlock
syntax match svelteKeyword ":catch" contained containedin=jsBlock,javascriptBlock
syntax match svelteKeyword ":then" contained containedin=jsBlock,javascriptBlock
+
+" Inline keywords.
syntax match svelteKeyword "@html" contained containedin=jsBlock,javascriptBlock
+syntax match svelteKeyword "@debug" contained containedin=jsBlock,javascriptBlock
" Repeat functions.
syntax match svelteRepeat "#each" contained containedin=jsBlock,javascriptBlock
diff --git a/syntax/terraform.vim b/syntax/terraform.vim
index eb7745e7..58c60203 100644
--- a/syntax/terraform.vim
+++ b/syntax/terraform.vim
@@ -9,6 +9,12 @@ if exists('b:current_syntax')
finish
endif
+" Identifiers are made up of alphanumeric characters, underscores, and
+" hyphens.
+if has('patch-7.4.1142')
+ syn iskeyword a-z,A-Z,48-57,_,-
+endif
+
syn case match
syn keyword terraSection connection output provider variable data terraform locals
@@ -3732,7 +3738,7 @@ syn region terraDynamicName start=/"/ end=/"/ nextgroup=terraDynamicBlock skipwh
""" misc.
syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>"
syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>"
-syn match terraBraces "[{}\[\]]"
+syn match terraBraces "[\[\]]"
""" skip \" in strings.
""" we may also want to pass \\" into a function to escape quotes.
@@ -3757,6 +3763,9 @@ syn keyword terraValueNull null
""" Terraform v0.12
syn keyword terraTodo contained TF-UPGRADE-TODO
+" enable block folding
+syn region terraBlock matchgroup=terraBraces start="{" end="}" fold transparent
+
hi def link terraComment Comment
hi def link terraTodo Todo
hi def link terraBrackets Operator