This commit is contained in:
Adam Stankiewicz 2017-09-27 19:57:29 +02:00
parent 9bfde7574a
commit 8b3418cab8
No known key found for this signature in database
GPG Key ID: A62480DCEAC884DF
68 changed files with 1731 additions and 884 deletions

View File

@ -65,7 +65,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent) - [glsl](https://github.com/tikhomirov/vim-glsl) (syntax, indent)
- [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax) - [gnuplot](https://github.com/vim-scripts/gnuplot-syntax-highlighting) (syntax)
- [go](https://github.com/fatih/vim-go) (syntax, compiler, indent) - [go](https://github.com/fatih/vim-go) (syntax, compiler, indent)
- [graphql](https://github.com/jparise/vim-graphql) (syntax, ftplugin) - [graphql](https://github.com/jparise/vim-graphql) (syntax, indent, ftplugin)
- [groovy](https://github.com/vim-scripts/groovy.vim) (syntax) - [groovy](https://github.com/vim-scripts/groovy.vim) (syntax)
- [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin) - [haml](https://github.com/sheerun/vim-haml) (syntax, indent, compiler, ftplugin)
- [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin) - [handlebars](https://github.com/mustache/vim-mustache-handlebars) (syntax, indent, ftplugin)
@ -103,7 +103,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent) - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent)
- [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin) - [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin)
- [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin) - [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin)
- [purescript](https://github.com/raichoo/purescript-vim) (syntax, indent, ftplugin) - [purescript](https://github.com/purescript-contrib/purescript-vim) (syntax, indent, ftplugin)
- [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload) - [python-compiler](https://github.com/aliev/vim-compiler-python) (compiler, autoload)
- [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent) - [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent)
- [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin) - [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin)

View File

@ -12,7 +12,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'jsx') == -1
if exists("loaded_matchit") if exists("loaded_matchit")
let b:match_ignorecase = 0 let b:match_ignorecase = 0
let b:match_words = '(:),\[:\],{:},<:>,' . let b:match_words = '(:),\[:\],{:},<:>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(/\@<!>\|$\):<\@<=/\1>'
endif endif
setlocal suffixesadd+=.jsx setlocal suffixesadd+=.jsx

View File

@ -4,6 +4,10 @@ if !exists('g:terraform_align')
let g:terraform_align = 0 let g:terraform_align = 0
endif endif
if !exists('g:terraform_remap_spacebar')
let g:terraform_remap_spacebar = 0
endif
if g:terraform_align && exists(':Tabularize') if g:terraform_align && exists(':Tabularize')
inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a inoremap <buffer> <silent> = =<Esc>:call <SID>terraformalign()<CR>a
function! s:terraformalign() function! s:terraformalign()
@ -31,6 +35,10 @@ function! TerraformFolds()
return ">1" return ">1"
elseif match(thisline, '^output') >= 0 elseif match(thisline, '^output') >= 0
return ">1" return ">1"
elseif match(thisline, '^data') >= 0
return ">1"
elseif match(thisline, '^terraform') >= 0
return ">1"
else else
return "=" return "="
endif endif
@ -45,10 +53,13 @@ function! TerraformFoldText()
endfunction endfunction
setlocal foldtext=TerraformFoldText() setlocal foldtext=TerraformFoldText()
"inoremap <space> <C-O>za " Re-map the space bar to fold and unfold
nnoremap <space> za if get(g:, "terraform_remap_spacebar", 1)
onoremap <space> <C-C>za "inoremap <space> <C-O>za
vnoremap <space> zf nnoremap <space> za
onoremap <space> <C-C>za
vnoremap <space> zf
endif
" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21 " Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
if get(g:, "terraform_align", 1) if get(g:, "terraform_align", 1)

View File

@ -20,9 +20,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
" Highlight function names. " Highlight function names.
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
syn match cCustomParen "(" contains=cParen contains=cCppParen if !exists('g:cpp_no_function_highlight')
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen syn match cCustomParen "(" contains=cParen contains=cCppParen
hi def link cCustomFunc Function syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
hi def link cCustomFunc Function
endif
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
" Highlight member variable names. " Highlight member variable names.

View File

@ -36,9 +36,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c++11') == -1
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
" Functions " Functions
syn match cCustomParen "(" contains=cParen contains=cCppParen if !exists('g:cpp_no_function_highlight')
syn match cCustomFunc "\w\+\s*(\@=" syn match cCustomParen "(" contains=cParen contains=cCppParen
hi def link cCustomFunc Function syn match cCustomFunc "\w\+\s*(\@="
hi def link cCustomFunc Function
endif
" Class and namespace scope " Class and namespace scope
if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight
@ -48,6 +50,52 @@ if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight
hi def link cCustomClass Function hi def link cCustomClass Function
endif endif
" Clear cppStructure and replace "class" and/or "template" with matches
" based on user configuration
let s:needs_cppstructure_match = 0
if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight
let s:needs_cppstructure_match += 1
endif
if exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_template_highlight
let s:needs_cppstructure_match += 2
endif
syn clear cppStructure
if s:needs_cppstructure_match == 0
syn keyword cppStructure typename namespace template class
elseif s:needs_cppstructure_match == 1
syn keyword cppStructure typename namespace template
elseif s:needs_cppstructure_match == 2
syn keyword cppStructure typename namespace class
elseif s:needs_cppstructure_match == 3
syn keyword cppStructure typename namespace
endif
unlet s:needs_cppstructure_match
" Class name declaration
if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight
syn match cCustomClassKey "\<class\>"
hi def link cCustomClassKey cppStructure
" Clear cppAccess entirely and redefine as matches
syn clear cppAccess
syn match cCustomAccessKey "\<private\>"
syn match cCustomAccessKey "\<public\>"
syn match cCustomAccessKey "\<protected\>"
hi def link cCustomAccessKey cppAccess
" Match the parts of a class declaration
syn match cCustomClassName "\<class\_s\+\w\+\>"
\ contains=cCustomClassKey
syn match cCustomClassName "\<private\_s\+\w\+\>"
\ contains=cCustomAccessKey
syn match cCustomClassName "\<public\_s\+\w\+\>"
\ contains=cCustomAccessKey
syn match cCustomClassName "\<protected\_s\+\w\+\>"
\ contains=cCustomAccessKey
hi def link cCustomClassName Function
endif
" Template functions. " Template functions.
" Naive implementation that sorta works in most cases. Should correctly " Naive implementation that sorta works in most cases. Should correctly
" highlight everything in test/color2.cpp " highlight everything in test/color2.cpp
@ -79,17 +127,12 @@ elseif exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_tem
\ contains=cCustomAngleBracketStart,cCustomTemplateFunc \ contains=cCustomAngleBracketStart,cCustomTemplateFunc
hi def link cCustomTemplateClass cCustomClass hi def link cCustomTemplateClass cCustomClass
" Remove 'template' from cppStructure and use a custom match
syn clear cppStructure
syn keyword cppStructure class typename namespace
syn match cCustomTemplate "\<template\>" syn match cCustomTemplate "\<template\>"
hi def link cCustomTemplate cppStructure hi def link cCustomTemplate cppStructure
syn match cTemplateDeclare "\<template\_s*<\_[^;()]\{-}>" syn match cTemplateDeclare "\<template\_s*<\_[^;()]\{-}>"
\ contains=cppStructure,cCustomTemplate,cCustomAngleBracketStart \ contains=cppStructure,cCustomTemplate,cCustomClassKey,cCustomAngleBracketStart
" Remove 'operator' from cppStructure and use a custom match " Remove 'operator' from cppOperator and use a custom match
syn clear cppOperator syn clear cppOperator
syn keyword cppOperator typeid syn keyword cppOperator typeid
syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
@ -106,7 +149,7 @@ endif
"hi def link cCustomFunc Function "hi def link cCustomFunc Function
" Cluster for all the stdlib functions defined below " Cluster for all the stdlib functions defined below
syn cluster cppSTLgroup contains=cppSTLfunction,cppSTLfunctional,cppSTLconstant,cppSTLnamespace,cppSTLtype,cppSTLexception,cppSTLiterator,cppSTLiterator_tagcppSTLenumcppSTLioscppSTLcast syn cluster cppSTLgroup contains=cppSTLfunction,cppSTLfunctional,cppSTLconstant,cppSTLnamespace,cppSTLtype,cppSTLexception,cppSTLiterator,cppSTLiterator_tag,cppSTLenum,cppSTLios,cppSTLcast
" ----------------------------------------------------------------------------- " -----------------------------------------------------------------------------
@ -184,6 +227,7 @@ syntax keyword cppSTLfunctional binary_negate
syntax keyword cppSTLfunctional bit_and syntax keyword cppSTLfunctional bit_and
syntax keyword cppSTLfunctional bit_not syntax keyword cppSTLfunctional bit_not
syntax keyword cppSTLfunctional bit_or syntax keyword cppSTLfunctional bit_or
syntax keyword cppSTLfunctional bit_xor
syntax keyword cppSTLfunctional divides syntax keyword cppSTLfunctional divides
syntax keyword cppSTLfunctional equal_to syntax keyword cppSTLfunctional equal_to
syntax keyword cppSTLfunctional greater syntax keyword cppSTLfunctional greater
@ -699,6 +743,7 @@ syntax keyword cppSTLtype slice_array
syntax keyword cppSTLtype stack syntax keyword cppSTLtype stack
syntax keyword cppSTLtype stream syntax keyword cppSTLtype stream
syntax keyword cppSTLtype streambuf syntax keyword cppSTLtype streambuf
syntax keyword cppSTLtype streamsize
syntax keyword cppSTLtype string syntax keyword cppSTLtype string
syntax keyword cppSTLtype stringbuf syntax keyword cppSTLtype stringbuf
syntax keyword cppSTLtype stringstream syntax keyword cppSTLtype stringstream

View File

@ -0,0 +1,21 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
if exists('b:current_syntax')
let s:current_syntax = b:current_syntax
unlet b:current_syntax
endif
syn include @GraphQLSyntax syntax/graphql.vim
if exists('s:current_syntax')
let b:current_syntax = s:current_syntax
endif
syntax region graphqlTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=@GraphQLSyntax,jsTemplateExpression,jsSpecial extend
exec 'syntax match graphqlTaggedTemplate +\%(' . join(g:graphql_javascript_tags, '\|') . '\)\%(`\)\@=+ nextgroup=graphqlTemplateString'
hi def link graphqlTemplateString jsTemplateString
hi def link graphqlTaggedTemplate jsTaggedTemplate
syn cluster jsExpression add=graphqlTaggedTemplate
syn cluster graphqlTaggedTemplate add=graphqlTemplateString
endif

View File

@ -39,7 +39,7 @@ syn keyword yamlConstant TRUE True true YES Yes yes ON On on
syn keyword yamlConstant FALSE False false NO No no OFF Off off syn keyword yamlConstant FALSE False false NO No no OFF Off off
syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:" syn match yamlKey "^\s*\zs[^ \t\"]\+\ze\s*:"
syn match yamlKey "^\s*-\s*\zs[^ \t\"]\+\ze\s*:" syn match yamlKey "^\s*-\s*\zs[^ \t\"\']\+\ze\s*:"
syn match yamlAnchor "&\S\+" syn match yamlAnchor "&\S\+"
syn match yamlAlias "*\S\+" syn match yamlAlias "*\S\+"

View File

@ -310,7 +310,7 @@ function! crystal_lang#format(option_str) abort
try try
call setreg('g', formatted, 'v') call setreg('g', formatted, 'v')
silent normal! ggvG$"gp silent normal! gg0vG$"gp
finally finally
call setreg('g', save_g_reg, save_g_regtype) call setreg('g', save_g_reg, save_g_regtype)
let &l:selection = sel_save let &l:selection = sel_save

View File

@ -24,9 +24,11 @@ function! dart#fmt(q_args) abort
let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content) let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content)
if 0 == v:shell_error if 0 == v:shell_error
let win_view = winsaveview() let win_view = winsaveview()
silent % delete _ let lines = split(joined_lines, "\n")
silent put=joined_lines silent keepjumps call setline(1, lines)
silent 1 delete _ if line('$') > len(lines)
silent keepjumps execute string(len(lines)+1).',$ delete'
endif
call winrestview(win_view) call winrestview(win_view)
else else
let errors = split(joined_lines, "\n")[2:] let errors = split(joined_lines, "\n")[2:]

View File

@ -1,6 +1,51 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elixir') == -1
function! elixir#indent#debug(str) if !exists("g:elixir_indent_max_lookbehind")
let g:elixir_indent_max_lookbehind = 30
endif
" Return the effective value of 'shiftwidth'
function! s:sw()
return &shiftwidth == 0 ? &tabstop : &shiftwidth
endfunction
function! elixir#indent#indent(lnum)
let lnum = a:lnum
let text = getline(lnum)
let prev_nb_lnum = prevnonblank(lnum-1)
let prev_nb_text = getline(prev_nb_lnum)
call s:debug("==> Indenting line " . lnum)
call s:debug("text = '" . text . "'")
let handlers = [
\'top_of_file',
\'starts_with_end',
\'starts_with_mid_or_end_block_keyword',
\'following_trailing_do',
\'following_trailing_binary_operator',
\'starts_with_pipe',
\'starts_with_close_bracket',
\'starts_with_binary_operator',
\'inside_nested_construct',
\'starts_with_comment',
\'inside_generic_block',
\'follow_prev_nb'
\]
for handler in handlers
call s:debug('testing handler elixir#indent#handle_'.handler)
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
if indent != -1
call s:debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
return indent
endif
endfor
call s:debug("defaulting")
return 0
endfunction
function! s:debug(str)
if exists("g:elixir_indent_debug") && g:elixir_indent_debug if exists("g:elixir_indent_debug") && g:elixir_indent_debug
echom a:str echom a:str
endif endif
@ -8,14 +53,14 @@ endfunction
" Returns 0 or 1 based on whether or not the text starts with the given " Returns 0 or 1 based on whether or not the text starts with the given
" expression and is not a string or comment " expression and is not a string or comment
function! elixir#indent#starts_with(text, expr, lnum) function! s:starts_with(text, expr, lnum)
let pos = match(a:text, '^\s*'.a:expr) let pos = match(a:text, '^\s*'.a:expr)
if pos == -1 if pos == -1
return 0 return 0
else else
" NOTE: @jbodah 2017-02-24: pos is the index of the match which is " NOTE: @jbodah 2017-02-24: pos is the index of the match which is
" zero-indexed. Add one to make it the column number " zero-indexed. Add one to make it the column number
if elixir#indent#is_string_or_comment(a:lnum, pos + 1) if s:is_string_or_comment(a:lnum, pos + 1)
return 0 return 0
else else
return 1 return 1
@ -25,12 +70,12 @@ endfunction
" Returns 0 or 1 based on whether or not the text ends with the given " Returns 0 or 1 based on whether or not the text ends with the given
" expression and is not a string or comment " expression and is not a string or comment
function! elixir#indent#ends_with(text, expr, lnum) function! s:ends_with(text, expr, lnum)
let pos = match(a:text, a:expr.'\s*$') let pos = match(a:text, a:expr.'\s*$')
if pos == -1 if pos == -1
return 0 return 0
else else
if elixir#indent#is_string_or_comment(a:lnum, pos) if s:is_string_or_comment(a:lnum, pos)
return 0 return 0
else else
return 1 return 1
@ -38,14 +83,9 @@ function! elixir#indent#ends_with(text, expr, lnum)
end end
endfunction endfunction
" Returns 0 or 1 based on whether or not the text matches the given expression
function! elixir#indent#contains(text, expr)
return a:text =~ a:expr
endfunction
" Returns 0 or 1 based on whether or not the given line number and column " Returns 0 or 1 based on whether or not the given line number and column
" number pair is a string or comment " number pair is a string or comment
function! elixir#indent#is_string_or_comment(line, col) function! s:is_string_or_comment(line, col)
return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)' return synIDattr(synID(a:line, a:col, 1), "name") =~ '\%(String\|Comment\)'
endfunction endfunction
@ -59,35 +99,19 @@ function! elixir#indent#searchpair_back_skip()
if getline('.')[curr_col-1] == '' if getline('.')[curr_col-1] == ''
let curr_col = curr_col-1 let curr_col = curr_col-1
endif endif
return elixir#indent#is_string_or_comment(line('.'), curr_col) return s:is_string_or_comment(line('.'), curr_col)
endfunction
" DRY up searchpair calls
function! elixir#indent#searchpair_back(start, mid, end)
let line = line('.')
return searchpair(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction
" DRY up searchpairpos calls
function! elixir#indent#searchpairpos_back(start, mid, end)
let line = line('.')
return searchpairpos(a:start, a:mid, a:end, 'bnW', "line('.') == " . line . " || elixir#indent#searchpair_back_skip()")
endfunction endfunction
" DRY up regex for keywords that 1) makes sure we only look at complete words " DRY up regex for keywords that 1) makes sure we only look at complete words
" and 2) ignores atoms " and 2) ignores atoms
function! elixir#indent#keyword(expr) function! s:keyword(expr)
return ':\@<!\<\C\%('.a:expr.'\)\>:\@!' return ':\@<!\<\C\%('.a:expr.'\)\>:\@!'
endfunction endfunction
function! elixir#indent#starts_with_comment(text)
return match(a:text, '^\s*#') != -1
endfunction
" Start at the end of text and search backwards looking for a match. Also peek " Start at the end of text and search backwards looking for a match. Also peek
" ahead if we get a match to make sure we get a complete match. This means " ahead if we get a match to make sure we get a complete match. This means
" that the result should be the position of the start of the right-most match " that the result should be the position of the start of the right-most match
function! elixir#indent#find_last_pos(lnum, text, match) function! s:find_last_pos(lnum, text, match)
let last = len(a:text) - 1 let last = len(a:text) - 1
let c = last let c = last
@ -118,13 +142,46 @@ function! elixir#indent#handle_top_of_file(_lnum, _text, prev_nb_lnum, _prev_nb_
end end
endfunction endfunction
function! elixir#indent#handle_follow_prev_nb(_lnum, _text, prev_nb_lnum, prev_nb_text)
return s:get_base_indent(a:prev_nb_lnum, a:prev_nb_text)
endfunction
" Given the line at `lnum`, returns the indent of the line that acts as the 'base indent'
" for this line. In particular it traverses backwards up things like pipelines
" to find the beginning of the expression
function! s:get_base_indent(lnum, text)
let prev_nb_lnum = prevnonblank(a:lnum - 1)
let prev_nb_text = getline(prev_nb_lnum)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
let data_structure_close = '\%(\]\|}\|)\)'
let pipe = '|>'
if s:starts_with(a:text, binary_operator, a:lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:starts_with(a:text, pipe, a:lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:ends_with(prev_nb_text, binary_operator, prev_nb_lnum)
return s:get_base_indent(prev_nb_lnum, prev_nb_text)
elseif s:ends_with(a:text, data_structure_close, a:lnum)
let data_structure_open = '\%(\[\|{\|(\)'
let close_match_idx = match(a:text, data_structure_close . '\s*$')
let _move = cursor(a:lnum, close_match_idx + 1)
let [open_match_lnum, open_match_col] = searchpairpos(data_structure_open, '', data_structure_close, 'bnW')
let open_match_text = getline(open_match_lnum)
return s:get_base_indent(open_match_lnum, open_match_text)
else
return indent(a:lnum)
endif
endfunction
" TODO: @jbodah 2017-03-31: remove " TODO: @jbodah 2017-03-31: remove
function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_following_trailing_do(lnum, text, prev_nb_lnum, prev_nb_text)
if elixir#indent#ends_with(a:prev_nb_text, elixir#indent#keyword('do'), a:prev_nb_lnum) if s:ends_with(a:prev_nb_text, s:keyword('do'), a:prev_nb_lnum)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum) if s:starts_with(a:text, s:keyword('end'), a:lnum)
return indent(a:prev_nb_lnum) return indent(a:prev_nb_lnum)
else else
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
end end
else else
return -1 return -1
@ -134,23 +191,31 @@ endfunction
function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_following_trailing_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)' let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum) if s:ends_with(a:prev_nb_text, binary_operator, a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
else
return -1
endif
endfunction
function! elixir#indent#handle_following_prev_end(_lnum, _text, prev_nb_lnum, prev_nb_text)
if s:ends_with(a:prev_nb_text, s:keyword('end'), a:prev_nb_lnum)
return indent(a:prev_nb_lnum)
else else
return -1 return -1
endif endif
endfunction endfunction
function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_nb_text)
if elixir#indent#starts_with(a:text, '|>', a:lnum) if s:starts_with(a:text, '|>', a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!' let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator) let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1 if pos == -1
return indent(a:prev_nb_lnum) return indent(a:prev_nb_lnum)
else else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S') let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1 if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
else else
return pos + 1 + next_word_pos return pos + 1 + next_word_pos
end end
@ -161,7 +226,7 @@ function! elixir#indent#handle_starts_with_pipe(lnum, text, prev_nb_lnum, prev_n
endfunction endfunction
function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text) function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with_comment(a:text) if match(a:text, '^\s*#') != -1
return indent(a:prev_nb_lnum) return indent(a:prev_nb_lnum)
else else
return -1 return -1
@ -169,8 +234,8 @@ function! elixir#indent#handle_starts_with_comment(_lnum, text, prev_nb_lnum, _p
endfunction endfunction
function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text) function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('end'), a:lnum) if s:starts_with(a:text, s:keyword('end'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end').'\zs') let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end').'\zs', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum) return indent(pair_lnum)
else else
return -1 return -1
@ -178,8 +243,8 @@ function! elixir#indent#handle_starts_with_end(lnum, text, _prev_nb_lnum, _prev_
endfunction endfunction
function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text) function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, elixir#indent#keyword('catch\|rescue\|after\|else'), a:lnum) if s:starts_with(a:text, s:keyword('catch\|rescue\|after\|else'), a:lnum)
let pair_lnum = elixir#indent#searchpair_back(elixir#indent#keyword('with\|receive\|try\|if\|fn'), elixir#indent#keyword('catch\|rescue\|after\|else').'\zs', elixir#indent#keyword('end')) let pair_lnum = searchpair(s:keyword('with\|receive\|try\|if\|fn'), s:keyword('catch\|rescue\|after\|else').'\zs', s:keyword('end'), 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum) return indent(pair_lnum)
else else
return -1 return -1
@ -187,8 +252,8 @@ function! elixir#indent#handle_starts_with_mid_or_end_block_keyword(lnum, text,
endfunction endfunction
function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text) function! elixir#indent#handle_starts_with_close_bracket(lnum, text, _prev_nb_lnum, _prev_nb_text)
if elixir#indent#starts_with(a:text, '\%(\]\|}\|)\)', a:lnum) if s:starts_with(a:text, '\%(\]\|}\|)\)', a:lnum)
let pair_lnum = elixir#indent#searchpair_back('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)') let pair_lnum = searchpair('\%(\[\|{\|(\)', '', '\%(\]\|}\|)\)', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
return indent(pair_lnum) return indent(pair_lnum)
else else
return -1 return -1
@ -198,15 +263,15 @@ endfunction
function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_starts_with_binary_operator(lnum, text, prev_nb_lnum, prev_nb_text)
let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)' let binary_operator = '\%(=\|<>\|>>>\|<=\|||\|+\|\~\~\~\|-\|&&\|<<<\|/\|\^\^\^\|\*\)'
if elixir#indent#starts_with(a:text, binary_operator, a:lnum) if s:starts_with(a:text, binary_operator, a:lnum)
let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!' let match_operator = '\%(!\|=\|<\|>\)\@<!=\%(=\|>\|\~\)\@!'
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator) let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, match_operator)
if pos == -1 if pos == -1
return indent(a:prev_nb_lnum) return indent(a:prev_nb_lnum)
else else
let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S') let next_word_pos = match(strpart(a:prev_nb_text, pos+1, len(a:prev_nb_text)-1), '\S')
if next_word_pos == -1 if next_word_pos == -1
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
else else
return pos + 1 + next_word_pos return pos + 1 + next_word_pos
end end
@ -221,75 +286,116 @@ endfunction
" function, etc... so we need to first figure out what the innermost structure " function, etc... so we need to first figure out what the innermost structure
" is then forward execution to the proper handler " is then forward execution to the proper handler
function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_inside_nested_construct(lnum, text, prev_nb_lnum, prev_nb_text)
let start_pattern = '\C\%(\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)' let start_pattern = '\C\%(\<with\>\|\<if\>\|\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<fn\>\|{\|\[\|(\)'
let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)' let end_pattern = '\C\%(\<end\>\|\]\|}\|)\)'
let pair_info = elixir#indent#searchpairpos_back(start_pattern, '', end_pattern) let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
let pair_lnum = pair_info[0] let pair_lnum = pair_info[0]
let pair_col = pair_info[1] let pair_col = pair_info[1]
if pair_lnum != 0 || pair_col != 0 if pair_lnum != 0 || pair_col != 0
let pair_text = getline(pair_lnum) let pair_text = getline(pair_lnum)
let pair_char = pair_text[pair_col - 1] let pair_char = pair_text[pair_col - 1]
if pair_char == 'f' if pair_char == 'f'
call elixir#indent#debug("testing elixir#indent#do_handle_inside_fn") call s:debug("testing s:do_handle_inside_fn")
return elixir#indent#do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) return s:do_handle_inside_fn(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '[' elseif pair_char == '['
call elixir#indent#debug("testing elixir#indent#do_handle_inside_square_brace") call s:debug("testing s:do_handle_inside_square_brace")
return elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) return s:do_handle_inside_square_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '{' elseif pair_char == '{'
call elixir#indent#debug("testing elixir#indent#do_handle_inside_curly_brace") call s:debug("testing s:do_handle_inside_curly_brace")
return elixir#indent#do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) return s:do_handle_inside_curly_brace(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == '(' elseif pair_char == '('
call elixir#indent#debug("testing elixir#indent#do_handle_inside_parens") call s:debug("testing s:do_handle_inside_parens")
return elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) return s:do_handle_inside_parens(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
elseif pair_char == 'w'
call s:debug("testing s:do_handle_inside_with")
return s:do_handle_inside_with(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
else else
call elixir#indent#debug("testing elixir#indent#do_handle_inside_keyword_block") call s:debug("testing s:do_handle_inside_keyword_block")
return elixir#indent#do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text) return s:do_handle_inside_keyword_block(pair_lnum, pair_col, a:lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end end
else else
return -1 return -1
end end
endfunction endfunction
function! elixir#indent#do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text) function! s:do_handle_inside_with(pair_lnum, pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum == a:lnum
" This is the `with` line or an inline `with`/`do`
call s:debug("current line is `with`")
return -1
else
" Determine if in with/do, do/else|end, or else/end
let start_pattern = '\C\%(\<with\>\|\<else\>\|\<do\>\)'
let end_pattern = '\C\%(\<end\>\)'
let pair_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()")
let pair_lnum = pair_info[0]
let pair_col = pair_info[1]
let pair_text = getline(pair_lnum)
let pair_char = pair_text[pair_col - 1]
if s:starts_with(a:text, '\Cdo:', a:lnum)
call s:debug("current line is do:")
return pair_col - 1 + s:sw()
elseif s:starts_with(a:text, '\Celse:', a:lnum)
call s:debug("current line is else:")
return pair_col - 1
elseif s:starts_with(a:text, '\C\(\<do\>\|\<else\>\)', a:lnum)
call s:debug("current line is do/else")
return pair_col - 1
elseif s:starts_with(pair_text, '\C\(do\|else\):', pair_lnum)
call s:debug("inside do:/else:")
return pair_col - 1 + s:sw()
elseif pair_char == 'w'
call s:debug("inside with/do")
return pair_col + 4
elseif pair_char == 'd'
call s:debug("inside do/else|end")
return pair_col - 1 + s:sw()
else
call s:debug("inside else/end")
return s:do_handle_inside_pattern_match_block(pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
end
end
endfunction
function! s:do_handle_inside_keyword_block(pair_lnum, _pair_col, _lnum, text, prev_nb_lnum, prev_nb_text)
let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)' let keyword_pattern = '\C\%(\<case\>\|\<cond\>\|\<try\>\|\<receive\>\|\<after\>\|\<catch\>\|\<rescue\>\|\<else\>\)'
if a:pair_lnum if a:pair_lnum
" last line is a "receive" or something " last line is a "receive" or something
if elixir#indent#starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum) if s:starts_with(a:prev_nb_text, keyword_pattern, a:prev_nb_lnum)
call elixir#indent#debug("prev nb line is keyword") call s:debug("prev nb line is keyword")
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
elseif elixir#indent#contains(a:text, '->')
call elixir#indent#debug("contains ->")
" TODO: @jbodah 2017-03-31: test contains ignores str + comments
return indent(a:pair_lnum) + &sw
elseif elixir#indent#contains(a:prev_nb_text, '->')
call elixir#indent#debug("prev nb line contains ->")
return indent(a:prev_nb_lnum) + &sw
else else
call elixir#indent#debug("doesnt start with comment or contain ->") return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
return indent(a:prev_nb_lnum)
end end
else else
return -1 return -1
endif endif
endfunction endfunction
function! elixir#indent#do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text) " Implements indent for pattern-matching blocks (e.g. case, fn, with/else)
function! s:do_handle_inside_pattern_match_block(block_start_lnum, text, prev_nb_lnum, prev_nb_text)
if a:text =~ '->'
call s:debug("current line contains ->")
return indent(a:block_start_lnum) + s:sw()
elseif a:prev_nb_text =~ '->'
call s:debug("prev nb line contains ->")
return indent(a:prev_nb_lnum) + s:sw()
else
return indent(a:prev_nb_lnum)
end
endfunction
function! s:do_handle_inside_fn(pair_lnum, _pair_col, lnum, text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum && a:pair_lnum != a:lnum if a:pair_lnum && a:pair_lnum != a:lnum
if elixir#indent#contains(a:text, '->') return s:do_handle_inside_pattern_match_block(a:pair_lnum, a:text, a:prev_nb_lnum, a:prev_nb_text)
return indent(a:pair_lnum) + &sw
else
if elixir#indent#ends_with(a:prev_nb_text, '->', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw
else
return indent(a:prev_nb_lnum)
end
end
else else
return -1 return -1
endif endif
endfunction endfunction
function! elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text) function! s:do_handle_inside_square_brace(pair_lnum, pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
" If in list... " If in list...
if a:pair_lnum != 0 || a:pair_col != 0 if a:pair_lnum != 0 || a:pair_col != 0
let pair_text = getline(a:pair_lnum) let pair_text = getline(a:pair_lnum)
@ -298,24 +404,24 @@ function! elixir#indent#do_handle_inside_square_brace(pair_lnum, pair_col, _lnum
if indent_pos != -1 if indent_pos != -1
return indent_pos + a:pair_col return indent_pos + a:pair_col
else else
return indent(a:pair_lnum) + &sw return indent(a:pair_lnum) + s:sw()
endif endif
else else
return -1 return -1
end end
endfunction endfunction
function! elixir#indent#do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text) function! s:do_handle_inside_curly_brace(pair_lnum, _pair_col, _lnum, _text, _prev_nb_lnum, _prev_nb_text)
return indent(a:pair_lnum) + &sw return indent(a:pair_lnum) + s:sw()
endfunction endfunction
function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text) function! s:do_handle_inside_parens(pair_lnum, pair_col, _lnum, _text, prev_nb_lnum, prev_nb_text)
if a:pair_lnum if a:pair_lnum
if elixir#indent#ends_with(a:prev_nb_text, '(', a:prev_nb_lnum) if s:ends_with(a:prev_nb_text, '(', a:prev_nb_lnum)
return indent(a:prev_nb_lnum) + &sw return indent(a:prev_nb_lnum) + s:sw()
elseif a:pair_lnum == a:prev_nb_lnum elseif a:pair_lnum == a:prev_nb_lnum
" Align indent (e.g. "def add(a,") " Align indent (e.g. "def add(a,")
let pos = elixir#indent#find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,') let pos = s:find_last_pos(a:prev_nb_lnum, a:prev_nb_text, '[^(]\+,')
if pos == -1 if pos == -1
return 0 return 0
else else
@ -330,14 +436,14 @@ function! elixir#indent#do_handle_inside_parens(pair_lnum, pair_col, _lnum, _tex
endfunction endfunction
function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text) function! elixir#indent#handle_inside_generic_block(lnum, _text, prev_nb_lnum, prev_nb_text)
let pair_lnum = searchpair(elixir#indent#keyword('do\|fn'), '', elixir#indent#keyword('end'), 'bW', "line('.') == ".a:lnum." || elixir#indent#is_string_or_comment(line('.'), col('.'))") let pair_lnum = searchpair(s:keyword('do\|fn'), '', s:keyword('end'), 'bW', "line('.') == ".a:lnum." || s:is_string_or_comment(line('.'), col('.'))", max([0, a:lnum - g:elixir_indent_max_lookbehind]))
if pair_lnum if pair_lnum
" TODO: @jbodah 2017-03-29: this should probably be the case in *all* " TODO: @jbodah 2017-03-29: this should probably be the case in *all*
" blocks " blocks
if elixir#indent#ends_with(a:prev_nb_text, ',', a:prev_nb_lnum) if s:ends_with(a:prev_nb_text, ',', a:prev_nb_lnum)
return indent(pair_lnum) + 2 * &sw return indent(pair_lnum) + 2 * s:sw()
else else
return indent(pair_lnum) + &sw return indent(pair_lnum) + s:sw()
endif endif
else else
return -1 return -1

View File

@ -3,6 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Author: Kevin Ballard " Author: Kevin Ballard
" Description: Helper functions for Rust commands/mappings " Description: Helper functions for Rust commands/mappings
" Last Modified: May 27, 2014 " Last Modified: May 27, 2014
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
" Jump {{{1 " Jump {{{1
@ -408,11 +409,15 @@ function! rust#Play(count, line1, line2, ...) abort
let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {}) let res = webapi#http#post(l:rust_shortener_url.'create.php', payload, {})
let url = res.content let url = res.content
if exists('g:rust_clip_command')
call system(g:rust_clip_command, url)
endif
redraw | echomsg 'Done: '.url redraw | echomsg 'Done: '.url
endfunction endfunction
" }}}1 " }}}1
" vim: set noet sw=4 ts=4: " vim: set noet sw=8 ts=8:
endif endif

View File

@ -3,6 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Author: Stephen Sugden <stephen@stephensugden.com> " Author: Stephen Sugden <stephen@stephensugden.com>
" "
" Adapted from https://github.com/fatih/vim-go " Adapted from https://github.com/fatih/vim-go
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if !exists("g:rustfmt_autosave") if !exists("g:rustfmt_autosave")
let g:rustfmt_autosave = 0 let g:rustfmt_autosave = 0

View File

@ -587,7 +587,7 @@ let g:xmldata_html5 = {
\ ], \ ],
\ 'input': [ \ 'input': [
\ [], \ [],
\ extend(copy(global_attributes), {'type': ['text', 'password', 'checkbox', 'radio', 'button', 'submit', 'reset', 'file', 'hidden', 'image', 'datetime', 'datetime-local', 'date', 'month', 'time', 'week', 'number', 'range', 'email', 'url', 'search', 'tel', 'color'], 'name': [], 'disabled': ['disabled', ''], 'form': [], 'maxlength': [], 'readonly': ['readonly', ''], 'size': [], 'value': [], 'autocomplete': autofill_tokens, 'autofocus': ['autofocus', ''], 'list': [], 'pattern': [], 'required': ['required', ''], 'placeholder': [], 'checked': ['checked'], 'accept': [], 'multiple': ['multiple', ''], 'alt': [], 'src': [], 'height': [], 'width': [], 'min': [], 'max': [], 'step': [], 'formenctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'formmethod': ['get', 'post', 'put', 'delete'], 'formtarget': [], 'formnovalidate': ['formnovalidate', '']}) \ extend(copy(global_attributes), {'type': ['text', 'password', 'checkbox', 'radio', 'button', 'submit', 'reset', 'file', 'hidden', 'image', 'datetime-local', 'date', 'month', 'time', 'week', 'number', 'range', 'email', 'url', 'search', 'tel', 'color'], 'name': [], 'disabled': ['disabled', ''], 'form': [], 'maxlength': [], 'readonly': ['readonly', ''], 'size': [], 'value': [], 'autocomplete': autofill_tokens, 'autofocus': ['autofocus', ''], 'list': [], 'pattern': [], 'required': ['required', ''], 'placeholder': [], 'checked': ['checked'], 'accept': [], 'multiple': ['multiple', ''], 'alt': [], 'src': [], 'height': [], 'width': [], 'min': [], 'max': [], 'step': [], 'formenctype': ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain'], 'formmethod': ['get', 'post', 'put', 'delete'], 'formtarget': [], 'formnovalidate': ['formnovalidate', '']})
\ ], \ ],
\ 'ins': [ \ 'ins': [
\ flow_elements, \ flow_elements,

View File

@ -4,6 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Compiler: Cargo Compiler " Compiler: Cargo Compiler
" Maintainer: Damien Radtke <damienradtke@gmail.com> " Maintainer: Damien Radtke <damienradtke@gmail.com>
" Latest Revision: 2014 Sep 24 " Latest Revision: 2014 Sep 24
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if exists('current_compiler') if exists('current_compiler')
finish finish
@ -11,6 +12,9 @@ endif
runtime compiler/rustc.vim runtime compiler/rustc.vim
let current_compiler = "cargo" let current_compiler = "cargo"
let s:save_cpo = &cpo
set cpo&vim
if exists(':CompilerSet') != 2 if exists(':CompilerSet') != 2
command -nargs=* CompilerSet setlocal <args> command -nargs=* CompilerSet setlocal <args>
endif endif
@ -27,6 +31,11 @@ CompilerSet errorformat+=
\%-G%\\s%#Compiling%.%#, \%-G%\\s%#Compiling%.%#,
\%-G%\\s%#Finished%.%#, \%-G%\\s%#Finished%.%#,
\%-G%\\s%#error:\ Could\ not\ compile\ %.%#, \%-G%\\s%#error:\ Could\ not\ compile\ %.%#,
\%-G%\\s%#To\ learn\ more\\,%.%# \%-G%\\s%#To\ learn\ more\\,%.%#,
\%-Gnote:\ Run\ with\ \`RUST_BACKTRACE=%.%#,
\%.%#panicked\ at\ \\'%m\\'\\,\ %f:%l
let &cpo = s:save_cpo
unlet s:save_cpo
endif endif

View File

@ -24,10 +24,10 @@ CompilerSet errorformat=
\%D(in\ %f), \%D(in\ %f),
\%\\s%#from\ %f:%l:%m, \%\\s%#from\ %f:%l:%m,
\%\\s%#from\ %f:%l:, \%\\s%#from\ %f:%l:,
\%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%.%#, \%\\s%##\ %f:%l:%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%##\ %f:%l%\\&%.%#%\\D:%.%#, \%\\s%##\ %f:%l%\\&%.%#%\\D:%\\d%#,
\%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%.%#, \%\\s%#[%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%.%#, \%\\s%#%f:%l:\ %#%m%\\&%.%#%\\D:%\\d%#:%.%#,
\%\\s%#%f:%l:, \%\\s%#%f:%l:,
\%m\ [%f:%l]:, \%m\ [%f:%l]:,
\%+Erake\ aborted!, \%+Erake\ aborted!,

View File

@ -4,6 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Compiler: Rust Compiler " Compiler: Rust Compiler
" Maintainer: Chris Morgan <me@chrismorgan.info> " Maintainer: Chris Morgan <me@chrismorgan.info>
" Latest Revision: 2013 Jul 12 " Latest Revision: 2013 Jul 12
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if exists("current_compiler") if exists("current_compiler")
finish finish

View File

@ -17,8 +17,18 @@ if exists(":CompilerSet") != 2
command! -nargs=* CompilerSet setlocal <args> command! -nargs=* CompilerSet setlocal <args>
endif endif
let &l:makeprg = g:typescript_compiler_binary . ' ' . g:typescript_compiler_options . ' $* %' let s:cpo_save = &cpo
set cpo-=C
execute 'CompilerSet makeprg='
\ . escape(g:typescript_compiler_binary, ' ')
\ . '\ '
\ . escape(g:typescript_compiler_options, ' ')
\ . '\ $*\ %'
CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m
let &cpo = s:cpo_save
unlet s:cpo_save
endif endif

View File

@ -2,9 +2,10 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen
syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster syntax region jsFlowExactObject contained matchgroup=jsFlowNoise start=/{|/ end=/|}/ contains=@jsFlowCluster,jsComment fold
syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster keepend fold
syntax match jsFlowNoise contained /[:;,<>]/ syntax match jsFlowNoise contained /[:;,<>]/
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array Function object array bool class syntax keyword jsFlowType contained boolean number string null void any mixed JSON array Function object array bool class
syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType
@ -12,18 +13,18 @@ syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipemp
syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster
syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster
syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens
syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject
syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject
syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster
syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup
syntax match jsFlowWildcard contained /*/ syntax match jsFlowWildcard contained /*/
syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster,jsFlowArrow,jsFlowReturnParens
syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp fold
syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp fold
syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp,jsFlowReturnArrow fold
syntax match jsFlowReturnArrow contained /=>/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp
syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword,jsFlowReturnObject
syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp
syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster
syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock
@ -32,7 +33,8 @@ syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ e
syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock
syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend
syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/=/ end=/[\n;]/ contains=@jsFlowCluster,jsFlowGroup,jsFlowMaybe
syntax match jsFlowTypeOperator contained /=/ containedin=jsFlowTypeValue
syntax match jsFlowTypeOperator contained /=/ syntax match jsFlowTypeOperator contained /=/
syntax keyword jsFlowTypeKeyword contained type syntax keyword jsFlowTypeKeyword contained type
@ -42,12 +44,18 @@ syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)
syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString
syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster
syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise fold
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend " NOTE: It appears the nextgroup was causing a ton of breakages... testing it
" witout a nextgroup, but keeping this arround for reference incase something breaks
" syntax match jsFlowMaybe contained /?/ nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject extend keepend
syntax match jsFlowMaybe contained /?/
syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend fold
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn syntax region jsFlowParenAnnotation contained start=/:/ end=/[,=)]\@=/ containedin=jsParen contains=@jsFlowCluster
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn,jsFlowReturnArrow
syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowExactObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard
if version >= 508 || !exists("did_javascript_syn_inits") if version >= 508 || !exists("did_javascript_syn_inits")
if version < 508 if version < 508
@ -64,9 +72,11 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowTypeof PreProc HiLink jsFlowTypeof PreProc
HiLink jsFlowArray PreProc HiLink jsFlowArray PreProc
HiLink jsFlowObject PreProc HiLink jsFlowObject PreProc
HiLink jsFlowExactObject PreProc
HiLink jsFlowParens PreProc HiLink jsFlowParens PreProc
HiLink jsFlowGroup PreProc HiLink jsFlowGroup PreProc
HiLink jsFlowReturn PreProc HiLink jsFlowReturn PreProc
HiLink jsFlowParenAnnotation PreProc
HiLink jsFlowReturnObject jsFlowReturn HiLink jsFlowReturnObject jsFlowReturn
HiLink jsFlowReturnArray jsFlowArray HiLink jsFlowReturnArray jsFlowArray
HiLink jsFlowReturnParens jsFlowParens HiLink jsFlowReturnParens jsFlowParens
@ -75,9 +85,10 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowClassGroup PreProc HiLink jsFlowClassGroup PreProc
HiLink jsFlowArrowArguments PreProc HiLink jsFlowArrowArguments PreProc
HiLink jsFlowArrow PreProc HiLink jsFlowArrow PreProc
HiLink jsFlowReturnArrow PreProc
HiLink jsFlowTypeStatement PreProc HiLink jsFlowTypeStatement PreProc
HiLink jsFlowTypeKeyword PreProc HiLink jsFlowTypeKeyword PreProc
HiLink jsFlowTypeOperator PreProc HiLink jsFlowTypeOperator Operator
HiLink jsFlowMaybe PreProc HiLink jsFlowMaybe PreProc
HiLink jsFlowReturnMaybe PreProc HiLink jsFlowReturnMaybe PreProc
HiLink jsFlowClassProperty jsClassProperty HiLink jsFlowClassProperty jsClassProperty
@ -86,10 +97,12 @@ if version >= 508 || !exists("did_javascript_syn_inits")
HiLink jsFlowInterface PreProc HiLink jsFlowInterface PreProc
HiLink jsFlowNoise Noise HiLink jsFlowNoise Noise
HiLink jsFlowObjectKey jsObjectKey HiLink jsFlowObjectKey jsObjectKey
HiLink jsFlowOrOperator PreProc HiLink jsFlowOrOperator jsOperator
HiLink jsFlowReturnOrOp jsFlowOrOperator HiLink jsFlowReturnOrOp jsFlowOrOperator
HiLink jsFlowWildcard PreProc HiLink jsFlowWildcard PreProc
HiLink jsFlowWildcardReturn PreProc HiLink jsFlowWildcardReturn PreProc
HiLink jsFlowImportType PreProc
HiLink jsFlowTypeValue PreProc
delcommand HiLink delcommand HiLink
endif endif

View File

@ -12,7 +12,7 @@ syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|
" tags containing references " tags containing references
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
" other tags (no extra syntax) " other tags (no extra syntax)
syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" syntax match jsDocTags contained "@\(abstract\|access\|accessor\|async\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam

View File

@ -287,9 +287,9 @@ augroup filetypedetect
" Language: OpenGL Shading Language " Language: OpenGL Shading Language
" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> " Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io>
" Extensions supported by Khronos reference compiler " Extensions supported by Khronos reference compiler (with one exception, ".glsl")
" https://github.com/KhronosGroup/glslang " https://github.com/KhronosGroup/glslang
autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.geom,*.frag,*.comp set filetype=glsl autocmd! BufNewFile,BufRead *.vert,*.tesc,*.tese,*.glsl,*.geom,*.frag,*.comp set filetype=glsl
" vim:set sts=2 sw=2 : " vim:set sts=2 sw=2 :
augroup END augroup END
@ -335,7 +335,7 @@ augroup END
augroup filetypedetect augroup filetypedetect
" graphql:jparise/vim-graphql " graphql:jparise/vim-graphql
au BufRead,BufNewFile *.graphql,*.gql setfiletype graphql au BufRead,BufNewFile *.graphql,*.graphqls,*.gql setfiletype graphql
augroup END augroup END
augroup filetypedetect augroup filetypedetect
@ -387,7 +387,7 @@ augroup END
augroup filetypedetect augroup filetypedetect
" javascript:pangloss/vim-javascript:_JAVASCRIPT " javascript:pangloss/vim-javascript:_JAVASCRIPT
au BufNewFile,BufRead *.{js,jsm,es,es6},Jakefile setf javascript au BufNewFile,BufRead *.{js,mjs,jsm,es,es6},Jakefile setf javascript
fun! s:SourceFlowSyntax() fun! s:SourceFlowSyntax()
if !exists('javascript_plugin_flow') && !exists('b:flow_active') && if !exists('javascript_plugin_flow') && !exists('b:flow_active') &&
@ -442,15 +442,16 @@ if !exists('g:jsx_pragma_required')
let g:jsx_pragma_required = 0 let g:jsx_pragma_required = 0
endif endif
if g:jsx_pragma_required let s:jsx_pragma_pattern = '\%^\_s*\/\*\*\%(\_.\%(\*\/\)\@!\)*@jsx\_.\{-}\*\/'
" Look for the @jsx pragma. It must be included in a docblock comment before
" anything else in the file (except whitespace).
let s:jsx_pragma_pattern = '\%^\_s*\/\*\*\%(\_.\%(\*\/\)\@!\)*@jsx\_.\{-}\*\/'
let b:jsx_pragma_found = search(s:jsx_pragma_pattern, 'npw')
endif
" Whether to set the JSX filetype on *.js files. " Whether to set the JSX filetype on *.js files.
fu! <SID>EnableJSX() fu! <SID>EnableJSX()
if g:jsx_pragma_required && !exists('b:jsx_ext_found')
" Look for the @jsx pragma. It must be included in a docblock comment
" before anything else in the file (except whitespace).
let b:jsx_pragma_found = search(s:jsx_pragma_pattern, 'npw')
endif
if g:jsx_pragma_required && !b:jsx_pragma_found | return 0 | endif if g:jsx_pragma_required && !b:jsx_pragma_found | return 0 | endif
if g:jsx_ext_required && !exists('b:jsx_ext_found') | return 0 | endif if g:jsx_ext_required && !exists('b:jsx_ext_found') | return 0 | endif
return 1 return 1
@ -524,6 +525,16 @@ augroup END
augroup filetypedetect augroup filetypedetect
" mako:sophacles/vim-bundle-mako " mako:sophacles/vim-bundle-mako
if !exists("g:mako_detect_lang_from_ext")
let g:mako_detect_lang_from_ext = 1
endif
if g:mako_detect_lang_from_ext
au BufNewFile *.*.mako execute "do BufNewFile filetypedetect " . expand("<afile>:r") | let b:mako_outer_lang = &filetype
" it's important to get this before any of the normal BufRead autocmds execute
" for this file, otherwise a mako tag at the start of the file can cause the
" filetype to be set to mason
au BufReadPre *.*.mako execute "do BufRead filetypedetect " . expand("<afile>:r") | let b:mako_outer_lang = &filetype
endif
au BufRead,BufNewFile *.mako set filetype=mako au BufRead,BufNewFile *.mako set filetype=mako
augroup END augroup END
@ -703,7 +714,7 @@ au! BufRead,BufNewFile Puppetfile setfiletype ruby
augroup END augroup END
augroup filetypedetect augroup filetypedetect
" purescript:raichoo/purescript-vim " purescript:purescript-contrib/purescript-vim
au BufNewFile,BufRead *.purs setf purescript au BufNewFile,BufRead *.purs setf purescript
au FileType purescript let &l:commentstring='{--%s--}' au FileType purescript let &l:commentstring='{--%s--}'
augroup END augroup END
@ -755,7 +766,7 @@ augroup filetypedetect
" Support functions {{{ " Support functions {{{
function! s:setf(filetype) abort function! s:setf(filetype) abort
if &filetype !=# a:filetype if &filetype !~# '\<'.a:filetype.'\>'
let &filetype = a:filetype let &filetype = a:filetype
endif endif
endfunction endfunction

View File

@ -29,7 +29,7 @@ elseif !exists("b:eruby_subtype")
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+') let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
if b:eruby_subtype == '' if b:eruby_subtype == ''
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$') let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
endif endif
if b:eruby_subtype == 'rhtml' if b:eruby_subtype == 'rhtml'
let b:eruby_subtype = 'html' let b:eruby_subtype = 'html'
@ -47,7 +47,7 @@ elseif !exists("b:eruby_subtype")
endif endif
endif endif
if exists("b:eruby_subtype") && b:eruby_subtype != '' if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim" exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
else else
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim

View File

@ -28,11 +28,12 @@ function! s:cycle()
call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick')) call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick'))
endfunction endfunction
command! -buffer -bar Pick :call s:choose('pick') command! -buffer -bar -range Pick :<line1>,<line2>call s:choose('pick')
command! -buffer -bar Squash :call s:choose('squash') command! -buffer -bar -range Squash :<line1>,<line2>call s:choose('squash')
command! -buffer -bar Edit :call s:choose('edit') command! -buffer -bar -range Edit :<line1>,<line2>call s:choose('edit')
command! -buffer -bar Reword :call s:choose('reword') command! -buffer -bar -range Reword :<line1>,<line2>call s:choose('reword')
command! -buffer -bar Fixup :call s:choose('fixup') command! -buffer -bar -range Fixup :<line1>,<line2>call s:choose('fixup')
command! -buffer -bar -range Drop :<line1>,<line2>call s:choose('drop')
command! -buffer -bar Cycle :call s:cycle() command! -buffer -bar Cycle :call s:cycle()
" The above are more useful when they are mapped; for example: " The above are more useful when they are mapped; for example:
"nnoremap <buffer> <silent> S :Cycle<CR> "nnoremap <buffer> <silent> S :Cycle<CR>

View File

@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Language: GraphQL " Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org> " Maintainer: Jon Parise <jon@indelible.org>
if (exists("b:did_ftplugin")) if (exists('b:did_ftplugin'))
finish finish
endif endif
let b:did_ftplugin = 1 let b:did_ftplugin = 1

View File

@ -19,8 +19,6 @@ setlocal formatoptions=tcqro
" Enable autocompletion of hyphenated PowerShell commands, " Enable autocompletion of hyphenated PowerShell commands,
" e.g. Get-Content or Get-ADUser " e.g. Get-Content or Get-ADUser
setlocal iskeyword+=- setlocal iskeyword+=-
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@ -16,8 +16,6 @@ let b:did_ftplugin = 1
setlocal tw=0 setlocal tw=0
setlocal commentstring=#%s setlocal commentstring=#%s
setlocal formatoptions=tcqro setlocal formatoptions=tcqro
" MS applications (including PowerShell) require a Byte Order Mark (BOM) for UTF-8.
setlocal bomb
" Change the browse dialog on Win32 to show mainly PowerShell-related files " Change the browse dialog on Win32 to show mainly PowerShell-related files
if has("gui_win32") if has("gui_win32")

View File

@ -1,5 +1,42 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1
setlocal comments=s1fl:{-,mb:\ \ ,ex:-},:-- setlocal comments=s1fl:{-,mb:\ \ ,ex:-},:--
setlocal include=^import
setlocal includeexpr=printf('%s.purs',substitute(v:fname,'\\.','/','g'))
let s:PS = []
fun! InitPureScript()
let dirs = map(
\ findfile("psc-package.json", expand("%:p:h") . ";/", -1),
\ { idx, val -> fnamemodify(val, ":p:h") }
\ )
if empty(dirs)
let dirs = map(
\ findfile("bower.json", expand("%:p:h") . ";/", -1),
\ { idx, val -> fnamemodify(val, ":p:h") }
\ )
if empty(dirs)
return
endif
endif
let path = expand("%:p")
for p in s:PS
if stridx(path, p[0], 0) == 0
let &l:path=p[1]
return
endif
endfor
let dir = dirs[len(dirs) - 1]
let gp = globpath(dir, "src/**/*.purs", v:true, v:true)
if empty(gp)
return
endif
let &l:path=join([dir, dir . "/bower_components/**", dir . "/src/**"], ",")
call add(s:PS, [dir, &l:path])
endfun
call InitPureScript()
endif endif

View File

@ -365,6 +365,7 @@ function! RubyCursorFile() abort
let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : '' let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : ''
if s:synid() ==# hlID('rubyConstant') if s:synid() ==# hlID('rubyConstant')
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','') let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
let cfile = substitute(cfile,'^::','','')
let cfile = substitute(cfile,'::','/','g') let cfile = substitute(cfile,'::','/','g')
let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g') let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g')
let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g') let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g')

View File

@ -1,10 +1,11 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Language: Rust " Language: Rust
" Description: Vim syntax file for Rust " Description: Vim ftplugin for Rust
" Maintainer: Chris Morgan <me@chrismorgan.info> " Maintainer: Chris Morgan <me@chrismorgan.info>
" Maintainer: Kevin Ballard <kevin@sb.org> " Maintainer: Kevin Ballard <kevin@sb.org>
" Last Change: June 08, 2016 " Last Change: June 08, 2016
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if exists("b:did_ftplugin") if exists("b:did_ftplugin")
finish finish
@ -193,19 +194,13 @@ endif
augroup END augroup END
" %-matching. <:> is handy for generics.
set matchpairs+=<:> set matchpairs+=<:>
" There are two minor issues with it; (a) comparison operators in expressions, " For matchit.vim (rustArrow stops `Fn() -> X` messing things up)
" where a less-than may match a greater-than later on—this is deemed a trivial
" issue—and (b) `Fn() -> X` syntax. This latter issue is irremediable from the
" highlighting perspective (built into Vim), but the actual % functionality
" can be fixed by this use of matchit.vim.
let b:match_skip = 's:comment\|string\|rustArrow' let b:match_skip = 's:comment\|string\|rustArrow'
source $VIMRUNTIME/macros/matchit.vim
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set noet sw=4 ts=4: " vim: set noet sw=8 ts=8:
endif endif

View File

@ -7,42 +7,13 @@ let b:did_indent = 1
setlocal indentexpr=elixir#indent(v:lnum) setlocal indentexpr=elixir#indent(v:lnum)
setlocal indentkeys+=0=end,0=catch,0=rescue,0=after,0=else,=->,0},0],0),0=\|>,0=<> setlocal indentkeys+==after,=catch,=do,=else,=end,=rescue,
setlocal indentkeys+=*<Return>,=->,=\|>,=<>,0},0],0)
" TODO: @jbodah 2017-02-27: all operators should cause reindent when typed " TODO: @jbodah 2017-02-27: all operators should cause reindent when typed
function! elixir#indent(lnum) function! elixir#indent(lnum)
let lnum = a:lnum return elixir#indent#indent(a:lnum)
let text = getline(lnum)
let prev_nb_lnum = prevnonblank(lnum-1)
let prev_nb_text = getline(prev_nb_lnum)
call elixir#indent#debug("==> Indenting line " . lnum)
call elixir#indent#debug("text = '" . text . "'")
let handlers = [
\'top_of_file',
\'starts_with_end',
\'starts_with_mid_or_end_block_keyword',
\'following_trailing_do',
\'following_trailing_binary_operator',
\'starts_with_pipe',
\'starts_with_close_bracket',
\'starts_with_binary_operator',
\'inside_nested_construct',
\'starts_with_comment',
\'inside_generic_block'
\]
for handler in handlers
call elixir#indent#debug('testing handler elixir#indent#handle_'.handler)
let indent = function('elixir#indent#handle_'.handler)(lnum, text, prev_nb_lnum, prev_nb_text)
if indent != -1
call elixir#indent#debug('line '.lnum.': elixir#indent#handle_'.handler.' returned '.indent)
return indent
endif
endfor
call elixir#indent#debug("defaulting")
return 0
endfunction endfunction
endif endif

View File

@ -14,7 +14,7 @@ runtime! indent/ruby.vim
unlet! b:did_indent unlet! b:did_indent
setlocal indentexpr= setlocal indentexpr=
if exists("b:eruby_subtype") if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=# 'eruby'
exe "runtime! indent/".b:eruby_subtype.".vim" exe "runtime! indent/".b:eruby_subtype.".vim"
else else
runtime! indent/html.vim runtime! indent/html.vim

81
indent/graphql.vim Normal file
View File

@ -0,0 +1,81 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Vim indent file
" Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org>
if exists('b:did_indent')
finish
endif
let b:did_indent = 1
setlocal autoindent
setlocal nocindent
setlocal nolisp
setlocal nosmartindent
setlocal indentexpr=GetGraphQLIndent()
setlocal indentkeys=0{,0},0),0[,0],0#,!^F,o,O,e
" If our indentation function already exists, we have nothing more to do.
if exists('*GetGraphQLIndent')
finish
endif
let s:cpo_save = &cpoptions
set cpoptions&vim
" Check if the character at lnum:col is inside a string.
function s:InString(lnum, col)
return synIDattr(synID(a:lnum, a:col, 1), 'name') is# 'graphqlString'
endfunction
function GetGraphQLIndent()
" If this is the first non-blank line, we have nothing more to do because
" all of our indentation rules are based on matching against earlier lines.
let l:prevlnum = prevnonblank(v:lnum - 1)
if l:prevlnum == 0
return 0
endif
let l:line = getline(v:lnum)
" If this line contains just a closing bracket, find its matching opening
" bracket and indent the closing backet to match.
let l:col = matchend(l:line, '^\s*[]})]')
if l:col > 0 && !s:InString(v:lnum, l:col)
let l:bracket = l:line[l:col - 1]
call cursor(v:lnum, l:col)
if l:bracket is# '}'
let l:matched = searchpair('{', '', '}', 'bW')
elseif l:bracket is# ']'
let l:matched = searchpair('\[', '', '\]', 'bW')
elseif l:bracket is# ')'
let l:matched = searchpair('(', '', ')', 'bW')
else
let l:matched = -1
endif
return l:matched > 0 ? indent(l:matched) : virtcol('.') - 1
endif
" If we're inside of a multiline string, continue with the same indentation.
if s:InString(v:lnum, matchend(l:line, '^\s*') + 1)
return indent(v:lnum)
endif
" If the previous line contained an opening bracket, and we are still in it,
" add indent depending on the bracket type.
if getline(l:prevlnum) =~# '[[{(]\s*$'
return indent(l:prevlnum) + shiftwidth()
endif
" Default to the existing indentation level.
return indent(l:prevlnum)
endfunction
let &cpoptions = s:cpo_save
unlet s:cpo_save
endif

View File

@ -36,9 +36,18 @@ endif
if !exists('g:haskell_indent_let') if !exists('g:haskell_indent_let')
" let x = 0 in " let x = 0 in
" >>>>x " >>>>x
"
" let x = 0
" y = 1
let g:haskell_indent_let = 4 let g:haskell_indent_let = 4
endif endif
if !exists('g:haskell_indent_let_no_in')
" let x = 0
" x
let g:haskell_indent_let_no_in = 4
endif
if !exists('g:haskell_indent_where') if !exists('g:haskell_indent_where')
" where f :: Int -> Int " where f :: Int -> Int
" >>>>>>f x = x " >>>>>>f x = x
@ -210,6 +219,9 @@ function! GetHaskellIndent()
" "
" let x = 1 " let x = 1
" >>>>y = 2 " >>>>y = 2
"
" let x = 1
" y 2
if l:prevline =~ '\C\<let\>\s\+.\+$' if l:prevline =~ '\C\<let\>\s\+.\+$'
if l:line =~ '\C^\s*\<let\>' if l:line =~ '\C^\s*\<let\>'
let l:s = match(l:prevline, '\C\<let\>') let l:s = match(l:prevline, '\C\<let\>')
@ -221,11 +233,16 @@ function! GetHaskellIndent()
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1) if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_in return l:s + g:haskell_indent_in
endif endif
else elseif l:line =~ '\s=\s'
let l:s = match(l:prevline, '\C\<let\>') let l:s = match(l:prevline, '\C\<let\>')
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1) if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_let return l:s + g:haskell_indent_let
endif endif
else
let l:s = match(l:prevline, '\C\<let\>')
if s:isSYN('haskellLet', v:lnum - 1, l:s + 1)
return l:s + g:haskell_indent_let_no_in
endif
endif endif
endif endif

View File

@ -260,20 +260,28 @@ let s:html_indent_tags = '[a-z_][a-z0-9_.-]*'
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo-=C set cpo-=C
" [-- count indent-increasing tags of line a:lnum --] func! <SID>HtmlIndentPatternCount(content, pattern)
fun! <SID>HtmlIndentOpen(lnum, pattern) let s = substitute('x'.a:content, a:pattern, "\1", 'g')
let s = substitute('x'.getline(a:lnum),
\ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)', "\1", 'g')
let s = substitute(s, "[^\1].*$", '', '') let s = substitute(s, "[^\1].*$", '', '')
return strlen(s) return strlen(s)
endfun endfun
" [-- count indent-increasing tags of line a:lnum --]
fun! <SID>HtmlIndentOpen(lnum, pattern)
return <SID>HtmlIndentPatternCount(getline(a:lnum),
\ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)')
endfun
" [-- count indent-decreasing tags of line a:lnum --] " [-- count indent-decreasing tags of line a:lnum --]
fun! <SID>HtmlIndentClose(lnum, pattern) fun! <SID>HtmlIndentClose(lnum, pattern)
let s = substitute('x'.getline(a:lnum), return <SID>HtmlIndentPatternCount(getline(a:lnum),
\ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)', "\1", 'g') \ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)')
let s = substitute(s, "[^\1].*$", '', '') endfun
return strlen(s)
" [-- count self close tags of line a:lnum --]
fun! <SID>HtmlIndentSelfClose(lnum, pattern)
return <SID>HtmlIndentPatternCount(getline(a:lnum),
\ '.\{-}\(\(<\('.a:pattern.'\).*\)\@<!\/>\)')
endfun endfun
" [-- count indent-increasing '{' of (java|css) line a:lnum --] " [-- count indent-increasing '{' of (java|css) line a:lnum --]
@ -292,8 +300,9 @@ fun! <SID>HtmlIndentSum(lnum, style)
if a:style == match(getline(a:lnum), '^\s*</\<\('.s:html_indent_tags.'\)\>') if a:style == match(getline(a:lnum), '^\s*</\<\('.s:html_indent_tags.'\)\>')
let open = <SID>HtmlIndentOpen(a:lnum, s:html_indent_tags) - <SID>HtmlIndentOpen(a:lnum, s:html_noindent_tags) let open = <SID>HtmlIndentOpen(a:lnum, s:html_indent_tags) - <SID>HtmlIndentOpen(a:lnum, s:html_noindent_tags)
let close = <SID>HtmlIndentClose(a:lnum, s:html_indent_tags) - <SID>HtmlIndentClose(a:lnum, s:html_noindent_tags) let close = <SID>HtmlIndentClose(a:lnum, s:html_indent_tags) - <SID>HtmlIndentClose(a:lnum, s:html_noindent_tags)
if 0 != open || 0 != close let self_close = <SID>HtmlIndentSelfClose(a:lnum, s:html_noindent_tags)
return open - close if 0 != open || 0 != close || 0 != self_close
return open - close - self_close
endif endif
endif endif
endif endif
@ -310,6 +319,13 @@ fun! <SID>HtmlIndentSum(lnum, style)
endfun endfun
fun! HtmlIndentGet(lnum) fun! HtmlIndentGet(lnum)
" Get shiftwidth value.
if exists('*shiftwidth')
let sw = shiftwidth()
else
let sw = &sw
endif
" Find a non-empty line above the current line. " Find a non-empty line above the current line.
let lnum = prevnonblank(a:lnum - 1) let lnum = prevnonblank(a:lnum - 1)
@ -396,7 +412,7 @@ fun! HtmlIndentGet(lnum)
endif endif
if 0 == match(getline(a:lnum), '^\s*</') if 0 == match(getline(a:lnum), '^\s*</')
return indent(preline) - (1*&sw) return indent(preline) - (1*sw)
else else
return indent(preline) return indent(preline)
endif endif
@ -417,7 +433,7 @@ fun! HtmlIndentGet(lnum)
" let tags_exp = '<\(' . join(tags, '\|') . '\)>' " let tags_exp = '<\(' . join(tags, '\|') . '\)>'
" let close_tags_exp = '</\(' . join(tags, '\|') . '\)>' " let close_tags_exp = '</\(' . join(tags, '\|') . '\)>'
" if getline(a:lnum) =~ tags_exp " if getline(a:lnum) =~ tags_exp
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW') " let block_start = search('^'.repeat(' ', lind + (sw * ind - 1)).'\S' , 'bnW')
" let prev_tag = search(tags_exp, 'bW', block_start) " let prev_tag = search(tags_exp, 'bW', block_start)
" let prev_closetag = search(close_tags_exp, 'W', a:lnum) " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
" if prev_tag && !prev_closetag " if prev_tag && !prev_closetag
@ -426,7 +442,7 @@ fun! HtmlIndentGet(lnum)
" endif " endif
" if getline(a:lnum) =~ '</\w\+>' " if getline(a:lnum) =~ '</\w\+>'
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW') " let block_start = search('^'.repeat(' ', lind + (sw * ind - 1)).'\S' , 'bnW')
" let prev_tag = search(tags_exp, 'bW', block_start) " let prev_tag = search(tags_exp, 'bW', block_start)
" let prev_closetag = search(close_tags_exp, 'W', a:lnum) " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
" if prev_tag && !prev_closetag " if prev_tag && !prev_closetag
@ -439,7 +455,7 @@ fun! HtmlIndentGet(lnum)
setlocal noic setlocal noic
endif endif
return lind + (&sw * ind) return lind + (sw * ind)
endfun endfun
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'javascript') ==
" Language: Javascript " Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme ) " Maintainer: Chris Paul ( https://github.com/bounceme )
" URL: https://github.com/pangloss/vim-javascript " URL: https://github.com/pangloss/vim-javascript
" Last Change: May 16, 2017 " Last Change: September 18, 2017
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists('b:did_indent') if exists('b:did_indent')
@ -57,343 +57,295 @@ endif
" matches before pos. " matches before pos.
let s:z = has('patch-7.4.984') ? 'z' : '' let s:z = has('patch-7.4.984') ? 'z' : ''
let s:syng_com = 'comment\|doc'
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "s:syn_at(line('.'),col('.')) =~? b:syng_strcom" let s:skip_expr = "s:SynAt(line('.'),col('.')) =~? b:syng_strcom"
let s:in_comm = s:skip_expr[:-14] . "'comment\\|doc'"
let s:rel = has('reltime')
" searchpair() wrapper " searchpair() wrapper
if has('reltime') if s:rel
function s:GetPair(start,end,flags,skip,time,...) function s:GetPair(start,end,flags,skip)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time) return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,s:l1,a:skip ==# 's:SkipFunc()' ? 2000 : 200)
endfunction endfunction
else else
function s:GetPair(start,end,flags,skip,...) function s:GetPair(start,end,flags,skip)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)])) return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,s:l1)
endfunction endfunction
endif endif
function s:syn_at(l,c) function s:SynAt(l,c)
let pos = join([a:l,a:c],',') let byte = line2byte(a:l) + a:c - 1
if has_key(s:synId_cache,pos) let pos = index(s:synid_cache[0], byte)
return s:synId_cache[pos] if pos == -1
let s:synid_cache[:] += [[byte], [synIDattr(synID(a:l, a:c, 0), 'name')]]
endif endif
let s:synId_cache[pos] = synIDattr(synID(a:l,a:c,0),'name') return s:synid_cache[1][pos]
return s:synId_cache[pos]
endfunction endfunction
function s:parse_cino(f) function s:ParseCino(f)
let [cin, divider, n] = [strridx(&cino,a:f), 0, ''] let [divider, n, cstr] = [0] + matchlist(&cino,
if cin == -1 \ '\%(.*,\)\=\%(\%d'.char2nr(a:f).'\(-\)\=\([.s0-9]*\)\)\=')[1:2]
return
endif
let [sign, cstr] = &cino[cin+1] ==# '-' ? [-1, &cino[cin+2:]] : [1, &cino[cin+1:]]
for c in split(cstr,'\zs') for c in split(cstr,'\zs')
if c ==# '.' && !divider if c == '.' && !divider
let divider = 1 let divider = 1
elseif c ==# 's' elseif c ==# 's'
if n is '' if n !~ '\d'
let n = s:W return n . s:sw() + 0
else
let n = str2nr(n) * s:W
endif endif
let n = str2nr(n) * s:sw()
break break
elseif c =~ '\d'
let [n, divider] .= [c, 0]
else else
break let [n, divider] .= [c, 0]
endif endif
endfor endfor
return sign * str2nr(n) / max([str2nr(divider),1]) return str2nr(n) / max([str2nr(divider),1])
endfunction endfunction
" Optimized {skip} expr, used only once per GetJavascriptIndent() call " Optimized {skip} expr, only callable from the search loop which
function s:skip_func() " GetJavascriptIndent does to find the containing [[{(] (side-effects)
if s:topCol == 1 || line('.') < s:scriptTag function s:SkipFunc()
return {} " E728, used as limit condition for loops and searchpair() if s:top_col == 1
throw 'out of bounds'
endif endif
let s:topCol = col('.') let s:top_col = 0
if getline('.') =~ '\%<'.s:topCol.'c\/.\{-}\/\|\%>'.s:topCol.'c[''"]\|\\$' if s:check_in
if eval(s:skip_expr) if eval(s:skip_expr)
let s:topCol = 0 return 1
endif endif
return !s:topCol let s:check_in = 0
elseif s:checkIn || search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) elseif getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$'
let s:checkIn = eval(s:skip_expr) if eval(s:skip_expr)
if s:checkIn return 1
let s:topCol = 0
endif endif
elseif search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) && eval(s:skip_expr)
let s:check_in = 1
return 1
endif endif
let s:looksyn = line('.') let [s:looksyn, s:top_col] = getpos('.')[1:2]
return s:checkIn
endfunction endfunction
function s:alternatePair() function s:AlternatePair()
let [l:pos, pat, l:for] = [getpos('.'), '[][(){};]', 3] let [pat, l:for] = ['[][(){};]', 2]
while search('\m'.pat,'bW') while s:SearchLoop(pat,'bW','s:SkipFunc()')
if s:skip_func() | continue | endif if s:LookingAt() == ';'
let idx = stridx('])};',s:looking_at()) if !l:for
if idx is 3 if s:GetPair('{','}','bW','s:SkipFunc()')
if l:for is 1
return s:GetPair('{','}','bW','s:skip_func()',2000) > 0 || setpos('.',l:pos)
endif
let [pat, l:for] = ['[{}();]', l:for - 1]
elseif idx + 1
if s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000) < 1
break
endif
else
return return
endif endif
break
else
let [pat, l:for] = ['[{}();]', l:for - 1]
endif
else
let idx = stridx('])}',s:LookingAt())
if idx == -1
return
elseif !s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:SkipFunc()')
break
endif
endif
endwhile endwhile
call setpos('.',l:pos) throw 'out of bounds'
endfunction endfunction
function s:looking_at() function s:Nat(int)
return a:int * (a:int > 0)
endfunction
function s:LookingAt()
return getline('.')[col('.')-1] return getline('.')[col('.')-1]
endfunction endfunction
function s:token() function s:Token()
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at() return s:LookingAt() =~ '\k' ? expand('<cword>') : s:LookingAt()
endfunction endfunction
function s:previous_token() function s:PreviousToken()
let l:pos = getpos('.') let l:col = col('.')
if search('\m\k\{1,}\|\S','ebW') if search('\m\k\{1,}\|\S','ebW')
if (strpart(getline('.'),col('.')-2,2) == '*/' || line('.') != l:pos[1] && if search('\m\*\%#\/\|\/\/\%<'.a:firstline.'l','nbW',line('.')) && eval(s:in_comm)
\ getline('.')[:col('.')-1] =~ '\/\/') && s:syn_at(line('.'),col('.')) =~? s:syng_com if s:SearchLoop('\S\ze\_s*\/[/*]','bW',s:in_comm)
while search('\m\S\ze\_s*\/[/*]','bW') return s:Token()
if s:syn_at(line('.'),col('.')) !~? s:syng_com
return s:token()
endif endif
endwhile call cursor(a:firstline, l:col)
else else
return s:token() return s:Token()
endif endif
call setpos('.',l:pos)
endif endif
return '' return ''
endfunction endfunction
for s:__ in ['__previous_token','__IsBlock'] function s:Pure(f,...)
function s:{s:__}(...) return eval("[call(a:f,a:000),cursor(a:firstline,".col('.').")][0]")
let l:pos = getpos('.') endfunction
try
return call('s:'.matchstr(expand('<sfile>'),'.*__\zs\w\+'),a:000)
catch
finally
call setpos('.',l:pos)
endtry
endfunction
endfor
function s:expr_col() function s:SearchLoop(pat,flags,expr)
if getline('.')[col('.')-2] == ':' return s:GetPair(a:pat,'\_$.',a:flags,a:expr)
return 1 endfunction
endif
let [bal, l:pos] = [0, getpos('.')] function s:ExprCol()
while bal < 1 && search('\m[{}?:;]','bW',s:scriptTag) let bal = 0
if eval(s:skip_expr) while s:SearchLoop('[{}?]\|\_[^:]\zs::\@!','bW',s:skip_expr)
continue if s:LookingAt() == ':'
elseif s:looking_at() == ':' let bal -= 1
let bal -= strpart(getline('.'),col('.')-2,3) !~ '::' elseif s:LookingAt() == '?'
elseif s:looking_at() == '?'
let bal += 1 let bal += 1
elseif s:looking_at() == '{' && getpos('.')[1:2] != b:js_cache[1:] && !s:IsBlock() if bal == 1
let bal = 1 break
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1 endif
elseif s:LookingAt() == '{'
let bal = !s:IsBlock()
break
elseif !s:GetPair('{','}','bW',s:skip_expr)
break break
endif endif
endwhile endwhile
call setpos('.',l:pos) return s:Nat(bal)
return max([bal,0])
endfunction endfunction
" configurable regexes that define continuation lines, not including (, {, or [. " configurable regexes that define continuation lines, not including (, {, or [.
let s:opfirst = '^' . get(g:,'javascript_opfirst', let s:opfirst = '^' . get(g:,'javascript_opfirst',
\ '\C\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') \ '\C\%([<>=,.?^%|/&]\|\([-:+]\)\1\@!\|\*\+\|!=\|in\%(stanceof\)\=\>\)')
let s:continuation = get(g:,'javascript_continuation', let s:continuation = get(g:,'javascript_continuation',
\ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$' \ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
function s:continues(ln,con) function s:Continues(ln,con)
let token = matchstr(a:con[-15:],s:continuation) let tok = matchstr(a:con[-15:],s:continuation)
if strlen(token) if tok =~ '[a-z:]'
call cursor(a:ln,strlen(a:con)) call cursor(a:ln, len(a:con))
if token =~ '[/>]' return tok == ':' ? s:ExprCol() : s:PreviousToken() != '.'
return s:syn_at(a:ln,col('.')) !~? (token == '>' ? 'jsflow\|^html' : 'regex') elseif tok !~ '[/>]'
elseif token =~ '\l' return tok isnot ''
return s:previous_token() != '.'
elseif token == ':'
return s:expr_col()
endif endif
return 1 return s:SynAt(a:ln, len(a:con)) !~? (tok == '>' ? 'jsflow\|^html' : 'regex')
endif
endfunction
function s:Trim(ln)
let pline = substitute(getline(a:ln),'\s*$','','')
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
while l:max != -1 && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com
let pline = pline[: l:max]
let l:max = max([strridx(pline,'//'), strridx(pline,'/*')])
let pline = substitute(pline[:-2],'\s*$','','')
endwhile
return pline
endfunction
" Find line above 'lnum' that isn't empty or in a comment
function s:PrevCodeLine(lnum)
let l:n = prevnonblank(a:lnum)
while l:n
if getline(l:n) =~ '^\s*\/[/*]'
if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
\ s:syn_at(l:n,1) =~? b:syng_str
break
endif
let l:n = prevnonblank(l:n-1)
elseif stridx(getline(l:n), '*/') + 1 && s:syn_at(l:n,1) =~? s:syng_com
let l:pos = getpos('.')
call cursor(l:n,1)
let l:n = search('\m\S\_s*\/\*','nbW')
call setpos('.',l:pos)
else
break
endif
endwhile
return l:n
endfunction endfunction
" Check if line 'lnum' has a balanced amount of parentheses. " Check if line 'lnum' has a balanced amount of parentheses.
function s:Balanced(lnum) function s:Balanced(lnum)
let l:open = 0 let [l:open, l:line] = [0, getline(a:lnum)]
let l:line = getline(a:lnum) let pos = match(l:line, '[][(){}]')
let pos = match(l:line, '[][(){}]', 0)
while pos != -1 while pos != -1
if s:syn_at(a:lnum,pos + 1) !~? b:syng_strcom if s:SynAt(a:lnum,pos + 1) !~? b:syng_strcom
let l:open += match(' ' . l:line[pos],'[[({]') let l:open += match(' ' . l:line[pos],'[[({]')
if l:open < 0 if l:open < 0
return return
endif endif
endif endif
let pos = match(l:line, (l:open ? let pos = match(l:line, !l:open ? '[][(){}]' : '()' =~ l:line[pos] ?
\ '['.matchstr(['][','()','{}'],l:line[pos]).']' : \ '[()]' : '{}' =~ l:line[pos] ? '[{}]' : '[][]', pos + 1)
\ '[][(){}]'), pos + 1)
endwhile endwhile
return !l:open return !l:open
endfunction endfunction
function s:OneScope(lnum) function s:OneScope()
let pline = s:Trim(a:lnum) if s:LookingAt() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr)
call cursor(a:lnum,strlen(pline)) let tok = s:PreviousToken()
let kw = 'else do' return (count(split('for if let while with'),tok) ||
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 \ tok =~# '^await$\|^each$' && s:PreviousToken() ==# 'for') &&
if s:previous_token() =~# '^\%(await\|each\)$' \ s:Pure('s:PreviousToken') != '.' && !(tok == 'while' && s:DoWhile())
call s:previous_token() elseif s:Token() =~# '^else$\|^do$'
let kw = 'for' return s:Pure('s:PreviousToken') != '.'
endif
return strpart(getline('.'),col('.')-2,2) == '=>'
endfunction
function s:DoWhile()
let cpos = searchpos('\m\<','cbW')
if s:SearchLoop('\C[{}]\|\<\%(do\|while\)\>','bW',s:skip_expr)
if s:{s:LookingAt() == '}' && s:GetPair('{','}','bW',s:skip_expr) ?
\ 'Previous' : ''}Token() ==# 'do' && s:IsBlock()
return 1
endif
call call('cursor',cpos)
endif
endfunction
" returns total offset from braceless contexts. 'num' is the lineNr which
" encloses the entire context, 'cont' if whether a:firstline is a continued
" expression, which could have started in a braceless context
function s:IsContOne(num,cont)
let [l:num, b_l] = [a:num + !a:num, 0]
let pind = a:num ? indent(a:num) + s:sw() : 0
let ind = indent('.') + !a:cont
while line('.') > l:num && ind > pind || line('.') == l:num
if indent('.') < ind && s:OneScope()
let b_l += 1
elseif !a:cont || b_l || ind < indent(a:firstline)
break
else else
let kw = 'for if let while with' call cursor(0,1)
endif endif
endif let ind = min([ind, indent('.')])
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && if s:PreviousToken() is ''
\ s:__previous_token() != '.' && !s:doWhile()
endfunction
function s:doWhile()
if expand('<cword>') ==# 'while'
let [bal, l:pos] = [0, getpos('.')]
call search('\m\<','cbW')
while bal < 1 && search('\m\C[{}]\|\<\%(do\|while\)\>','bW')
if eval(s:skip_expr)
continue
elseif s:looking_at() ==# 'd'
let bal += s:__IsBlock(1)
elseif s:looking_at() ==# 'w'
let bal -= s:__previous_token() != '.'
elseif s:looking_at() != '}' || s:GetPair('{','}','bW',s:skip_expr,200) < 1
break break
endif endif
endwhile endwhile
call setpos('.',l:pos) return b_l
return max([bal,0])
endif
endfunction endfunction
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the function s:IsSwitch()
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is call call('cursor',b:js_cache[1:])
" a continued expression, which could have started in a braceless context return search('\m\C\%#.\_s*\%(\%(\/\/.*\_$\|\/\*\_.\{-}\*\/\)\@>\_s*\)*\%(case\|default\)\>','nWc'.s:z)
function s:iscontOne(i,num,cont)
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]
let pind = a:num ? indent(l:num) + s:W : 0
let ind = indent(l:i) + (a:cont ? 0 : s:W)
while l:i >= l:num && (ind > pind || l:i == l:num)
if indent(l:i) < ind && s:OneScope(l:i)
let bL += s:W
let l:i = line('.')
elseif !a:cont || bL || ind < indent(a:i)
break
endif
let ind = min([ind, indent(l:i)])
let l:i = s:PrevCodeLine(l:i - 1)
endwhile
return bL
endfunction endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
function s:IsBlock(...) function s:IsBlock()
if a:0 || s:looking_at() == '{' let tok = s:PreviousToken()
let l:n = line('.') if join(s:stack) =~? 'xml\|jsx' && s:SynAt(line('.'),col('.')-1) =~? 'xml\|jsx'
let char = s:previous_token() return tok != '{'
if match(s:stack,'\cxml\|jsx') + 1 && s:syn_at(line('.'),col('.')-1) =~? 'xml\|jsx' elseif tok =~ '\k'
return char != '{' if tok ==# 'type'
elseif char =~ '\k' return s:Pure('eval',"s:PreviousToken() !~# '^\\%(im\\|ex\\)port$' || s:PreviousToken() == '.'")
if char ==# 'type' elseif tok ==# 'of'
return s:__previous_token() !~# '^\%(im\|ex\)port$' return s:Pure('eval',"!s:GetPair('[[({]','[])}]','bW',s:skip_expr) || s:LookingAt() != '(' ||"
\ ."s:{s:PreviousToken() ==# 'await' ? 'Previous' : ''}Token() !=# 'for' || s:PreviousToken() == '.'")
endif endif
return index(split('return const let import export extends yield default delete var await void typeof throw case new of in instanceof') return index(split('return const let import export extends yield default delete var await void typeof throw case new in instanceof')
\ ,char) < (line('.') != l:n) || s:__previous_token() == '.' \ ,tok) < (line('.') != a:firstline) || s:Pure('s:PreviousToken') == '.'
elseif char == '>' elseif tok == '>'
return getline('.')[col('.')-2] == '=' || s:syn_at(line('.'),col('.')) =~? 'jsflow\|^html' return getline('.')[col('.')-2] == '=' || s:SynAt(line('.'),col('.')) =~? 'jsflow\|^html'
elseif char == '*' elseif tok == '*'
return s:__previous_token() == ':' return s:Pure('s:PreviousToken') == ':'
elseif char == ':' elseif tok == ':'
return !s:expr_col() return s:Pure('eval',"s:PreviousToken() =~ '^\\K\\k*$' && !s:ExprCol()")
elseif char == '/' elseif tok == '/'
return s:syn_at(line('.'),col('.')) =~? 'regex' return s:SynAt(line('.'),col('.')) =~? 'regex'
endif elseif tok !~ '[=~!<,.?^%|&([]'
return char !~ '[=~!<,.?^%|&([]' && return tok !~ '[-+]' || line('.') != a:firstline && getline('.')[col('.')-2] == tok
\ (char !~ '[-+]' || l:n != line('.') && getline('.')[col('.')-2] == char)
endif endif
endfunction endfunction
function GetJavascriptIndent() function GetJavascriptIndent()
let b:js_cache = get(b:,'js_cache',[0,0,0]) let b:js_cache = get(b:,'js_cache',[0,0,0])
let s:synId_cache = {} let s:synid_cache = [[],[]]
" Get the current line. let l:line = getline(v:lnum)
call cursor(v:lnum,1)
let l:line = getline('.')
" use synstack as it validates syn state and works in an empty line " use synstack as it validates syn state and works in an empty line
let s:stack = map(synstack(v:lnum,1),"synIDattr(v:val,'name')") let s:stack = [''] + map(synstack(v:lnum,1),"synIDattr(v:val,'name')")
let syns = get(s:stack,-1,'')
" start with strings,comments,etc. " start with strings,comments,etc.
if syns =~? s:syng_com if s:stack[-1] =~? 'comment\|doc'
if l:line =~ '^\s*\*' if l:line =~ '^\s*\*'
return cindent(v:lnum) return cindent(v:lnum)
elseif l:line !~ '^\s*\/[/*]' elseif l:line !~ '^\s*\/[/*]'
return -1 return -1
endif endif
elseif syns =~? b:syng_str elseif s:stack[-1] =~? b:syng_str
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1) if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
let b:js_cache[0] = v:lnum let b:js_cache[0] = v:lnum
endif endif
return -1 return -1
endif endif
let l:lnum = s:PrevCodeLine(v:lnum - 1)
if !l:lnum let s:l1 = max([0,prevnonblank(v:lnum) - (s:rel ? 2000 : 1000),
\ get(get(b:,'hi_indent',{}),'blocklnr')])
call cursor(v:lnum,1)
if s:PreviousToken() is ''
return return
endif endif
let [l:lnum, pline] = [line('.'), getline('.')[:col('.')-1]]
let l:line = substitute(l:line,'^\s*','','') let l:line = substitute(l:line,'^\s*','','')
let l:line_raw = l:line
if l:line[:1] == '/*' if l:line[:1] == '/*'
let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','') let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
endif endif
@ -402,57 +354,94 @@ function GetJavascriptIndent()
endif endif
" the containing paren, bracket, or curly. Many hacks for performance " the containing paren, bracket, or curly. Many hacks for performance
let [ s:scriptTag, idx ] = [ get(get(b:,'hi_indent',{}),'blocklnr'), call cursor(v:lnum,1)
\ index([']',')','}'],l:line[0]) ] let idx = index([']',')','}'],l:line[0])
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && if b:js_cache[0] > l:lnum && b:js_cache[0] < v:lnum ||
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) \ b:js_cache[0] == l:lnum && s:Balanced(l:lnum)
call call('cursor',b:js_cache[2] ? b:js_cache[1:] : [0,0]) call call('cursor',b:js_cache[1:])
else else
let [s:looksyn, s:checkIn, s:topCol] = [v:lnum - 1, 0, 0] let [s:looksyn, s:top_col, s:check_in, s:l1] = [v:lnum - 1,0,0,
if idx + 1 \ max([s:l1, &smc ? search('\m^.\{'.&smc.',}','nbW',s:l1 + 1) + 1 : 0])]
call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:skip_func()',2000) try
elseif getline(v:lnum) !~ '^\S' && syns =~? 'block' if idx != -1
call s:GetPair('{','}','bW','s:skip_func()',2000) call s:GetPair(['\[','(','{'][idx],'])}'[idx],'bW','s:SkipFunc()')
elseif getline(v:lnum) !~ '^\S' && s:stack[-1] =~? 'block\|^jsobject$'
call s:GetPair('{','}','bW','s:SkipFunc()')
else else
call s:alternatePair() call s:AlternatePair()
endif endif
catch /^\Cout of bounds$/
call cursor(v:lnum,1)
endtry
let b:js_cache[1:] = line('.') == v:lnum ? [0,0] : getpos('.')[1:2]
endif endif
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [s:scriptTag,0] : getpos('.')[1:2]) let [b:js_cache[0], num] = [v:lnum, b:js_cache[1]]
let num = b:js_cache[1]
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] let [num_ind, is_op, b_l, l:switch_offset] = [s:Nat(indent(num)),0,0,0]
if !b:js_cache[2] || s:IsBlock() if !num || s:LookingAt() == '{' && s:IsBlock()
let ilnum = line('.') let ilnum = line('.')
let pline = s:Trim(l:lnum) if num && s:LookingAt() == ')' && s:GetPair('(',')','bW',s:skip_expr)
if b:js_cache[2] && s:looking_at() == ')' && s:GetPair('(',')','bW',s:skip_expr,100) > 0 if ilnum == num
let num = ilnum == num ? line('.') : num let [num, num_ind] = [line('.'), indent('.')]
if idx < 0 && s:previous_token() ==# 'switch' && s:previous_token() != '.' endif
let switch_offset = &cino !~ ':' ? s:W : max([-indent(num),s:parse_cino(':')]) if idx == -1 && s:PreviousToken() ==# 'switch' && s:IsSwitch()
let l:switch_offset = &cino !~ ':' ? s:sw() : s:ParseCino(':')
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>' if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
return indent(num) + switch_offset return s:Nat(num_ind + l:switch_offset)
elseif &cino =~ '='
let l:case_offset = s:ParseCino('=')
endif endif
endif endif
endif endif
if idx < 0 && pline[-1:] !~ '[{;]' if idx == -1 && pline[-1:] !~ '[{;]'
let isOp = (l:line =~# s:opfirst || s:continues(l:lnum,pline)) * s:W let sol = matchstr(l:line,s:opfirst)
let bL = s:iscontOne(l:lnum,b:js_cache[1],isOp) if sol is '' || sol == '/' && s:SynAt(v:lnum,
let bL -= (bL && l:line[0] == '{') * s:W \ 1 + len(getline(v:lnum)) - len(l:line)) =~? 'regex'
if s:Continues(l:lnum,pline)
let is_op = s:sw()
endif endif
elseif idx < 0 && getline(b:js_cache[1])[b:js_cache[2]-1] == '(' && &cino =~ '(' elseif num && sol =~# '^\%(in\%(stanceof\)\=\|\*\)$'
let pval = s:parse_cino('(') call cursor(l:lnum, len(pline))
return !pval || !search('\m\S','nbW',num) && !s:parse_cino('U') ? if s:LookingAt() == '}' && s:GetPair('{','}','bW',s:skip_expr) &&
\ (s:parse_cino('w') ? 0 : -!!search('\m\S','W'.s:z,num)) + virtcol('.') : \ s:PreviousToken() == ')' && s:GetPair('(',')','bW',s:skip_expr) &&
\ max([indent('.') + pval + s:GetPair('(',')','nbrmW',s:skip_expr,100,num) * s:W,0]) \ (s:PreviousToken() == ']' || s:Token() =~ '\k' &&
\ s:{s:PreviousToken() == '*' ? 'Previous' : ''}Token() !=# 'function')
return num_ind + s:sw()
endif
let is_op = s:sw()
else
let is_op = s:sw()
endif
call cursor(l:lnum, len(pline))
let b_l = s:Nat(s:IsContOne(b:js_cache[1],is_op) - (!is_op && l:line =~ '^{')) * s:sw()
endif
elseif idx.s:LookingAt().&cino =~ '^-1(.*(' && (search('\m\S','nbW',num) || s:ParseCino('U'))
let pval = s:ParseCino('(')
if !pval
let [Wval, vcol] = [s:ParseCino('W'), virtcol('.')]
if search('\m\S','W',num)
return s:ParseCino('w') ? vcol : virtcol('.')-1
endif
return Wval ? s:Nat(num_ind + Wval) : vcol
endif
return s:Nat(num_ind + pval + searchpair('\m(','','\m)','nbrmW',s:skip_expr,num) * s:sw())
endif endif
" main return " main return
if l:line =~ '^[])}]\|^|}' if l:line =~ '^[])}]\|^|}'
return max([indent(num),0]) if l:line_raw[0] == ')' && getline(num)[b:js_cache[2]-1] == '('
elseif num if s:ParseCino('M')
return indent(num) + s:W + switch_offset + bL + isOp return indent(l:lnum)
elseif &cino =~# 'm' && !s:ParseCino('m')
return virtcol('.') - 1
endif endif
return bL + isOp endif
return num_ind
elseif num
return s:Nat(num_ind + get(l:,'case_offset',s:sw()) + l:switch_offset + b_l + is_op)
endif
return b_l + is_op
endfunction endfunction
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@ -3,13 +3,14 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'kotlin') == -1
" Vim indent file " Vim indent file
" Language: Kotlin " Language: Kotlin
" Maintainer: Alexander Udalov " Maintainer: Alexander Udalov
" Latest Revision: 27 June 2015 " Latest Revision: 15 July 2017
if exists("b:did_indent") if exists("b:did_indent")
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
setlocal cinoptions& cinoptions+=j1,L0
setlocal indentexpr=GetKotlinIndent() setlocal indentexpr=GetKotlinIndent()
setlocal indentkeys=0},0),!^F,o,O,e,<CR> setlocal indentkeys=0},0),!^F,o,O,e,<CR>
setlocal autoindent " TODO ? setlocal autoindent " TODO ?
@ -25,6 +26,21 @@ function! GetKotlinIndent()
let prev_indent = indent(prev_num) let prev_indent = indent(prev_num)
let cur = getline(v:lnum) let cur = getline(v:lnum)
if cur =~ '^\s*\*'
return cindent(v:lnum)
endif
if prev =~ '^\s*\*/'
let st = prev
while st > 1
if getline(st) =~ '^\s*/\*'
break
endif
let st = st - 1
endwhile
return indent(st)
endif
let prev_open_paren = prev =~ '^.*(\s*$' let prev_open_paren = prev =~ '^.*(\s*$'
let cur_close_paren = cur =~ '^\s*).*$' let cur_close_paren = cur =~ '^\s*).*$'

View File

@ -24,21 +24,21 @@ endif
" Variables -----------------------------------------------{{{1 " Variables -----------------------------------------------{{{1
let s:open_patt = '\%(\<\%(function\|if\|repeat\|do\)\>\|(\|{\)' let s:open_patt = '\C\%(\<\%(function\|if\|repeat\|do\)\>\|(\|{\)'
let s:middle_patt = '\<\%(else\|elseif\)\>' let s:middle_patt = '\C\<\%(else\|elseif\)\>'
let s:close_patt = '\%(\<\%(end\|until\)\>\|)\|}\)' let s:close_patt = '\C\%(\<\%(end\|until\)\>\|)\|}\)'
let s:anon_func_start = '\S\+\s*[({].*\<function\s*(.*)\s*$' let s:anon_func_start = '\S\+\s*[({].*\<function\s*(.*)\s*$'
let s:anon_func_end = '\<end\%(\s*[)}]\)\+' let s:anon_func_end = '\<end\%(\s*[)}]\)\+'
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ 'luaComment\\|luaString'" let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~# 'luaComment\\|luaString'"
" Auxiliary Functions -------------------------------------{{{1 " Auxiliary Functions -------------------------------------{{{1
function s:IsInCommentOrString(lnum, col) function s:IsInCommentOrString(lnum, col)
return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ 'luaCommentLong\|luaStringLong' return synIDattr(synID(a:lnum, a:col, 1), 'name') =~# 'luaCommentLong\|luaStringLong'
\ && !(getline(a:lnum) =~ '^\s*\%(--\)\?\[=*\[') " opening tag is not considered 'in' \ && !(getline(a:lnum) =~# '^\s*\%(--\)\?\[=*\[') " opening tag is not considered 'in'
endfunction endfunction
" Find line above 'lnum' that isn't blank, in a comment or string. " Find line above 'lnum' that isn't blank, in a comment or string.
@ -85,7 +85,7 @@ function GetLuaIndent()
endif endif
" special case: call(with, {anon = function() -- should indent only once " special case: call(with, {anon = function() -- should indent only once
if num_pairs > 1 && contents_prev =~ s:anon_func_start if num_pairs > 1 && contents_prev =~# s:anon_func_start
let i = 1 let i = 1
endif endif
@ -98,7 +98,7 @@ function GetLuaIndent()
endif endif
" special case: end}) -- end of call with anon func should unindent once " special case: end}) -- end of call with anon func should unindent once
if num_pairs > 1 && contents_cur =~ s:anon_func_end if num_pairs > 1 && contents_cur =~# s:anon_func_end
let i = -1 let i = -1
endif endif

View File

@ -44,8 +44,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'mako') == -1
" 0.1 - 06 June 2009 " 0.1 - 06 June 2009
" - Initial public release of mako indent file " - Initial public release of mako indent file
let sw=2 " default shiftwidth of 2 spaces
if exists("b:did_indent") if exists("b:did_indent")
finish finish
endif endif
@ -55,6 +53,9 @@ setlocal nosmartindent
setlocal noautoindent setlocal noautoindent
setlocal nocindent setlocal nocindent
setlocal nolisp setlocal nolisp
setlocal expandtab
setlocal softtabstop=2
setlocal shiftwidth=2
setlocal indentexpr=GetMakoIndent() setlocal indentexpr=GetMakoIndent()
setlocal indentkeys+=*<Return>,<>>,<bs>,end,: setlocal indentkeys+=*<Return>,<>>,<bs>,end,:

View File

@ -19,7 +19,7 @@ let s:incIndent =
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' . \ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
\ '^\s*title\s*$\|' . \ '^\s*title\s*$\|' .
\ '^\s*skinparam\>.*{\s*$\|' . \ '^\s*skinparam\>.*{\s*$\|' .
\ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\)\>.*{' \ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\|object\)\>.*{'
let s:decIndent = '^\s*\%(end\|else\|}\)' let s:decIndent = '^\s*\%(end\|else\|}\)'

View File

@ -37,9 +37,16 @@ if !exists('g:purescript_indent_let')
let g:purescript_indent_let = 4 let g:purescript_indent_let = 4
endif endif
if !exists('g:purescript_indent_in')
" let x = 0
" >in
let g:purescript_indent_in = 1
endif
if !exists('g:purescript_indent_where') if !exists('g:purescript_indent_where')
" where f :: Int -> Int " where
" >>>>>>f x = x " >>f :: Int -> Int
" >>f x = x
let g:purescript_indent_where = 6 let g:purescript_indent_where = 6
endif endif
@ -49,16 +56,29 @@ if !exists('g:purescript_indent_do')
let g:purescript_indent_do = 3 let g:purescript_indent_do = 3
endif endif
if !exists('g:purescript_indent_dot')
" f
" :: forall a
" >. String
" -> String
let g:purescript_indent_dot = 1
endif
setlocal indentexpr=GetPurescriptIndent() setlocal indentexpr=GetPurescriptIndent()
setlocal indentkeys=!^F,o,O,},=where,=in setlocal indentkeys=!^F,o,O,},=where,=in,=::,=->,=,==>,=
function! s:GetSynStack(lnum, col)
return map(synstack(a:lnum, a:col), { key, val -> synIDattr(val, "name") })
endfunction
function! GetPurescriptIndent() function! GetPurescriptIndent()
let ppline = getline(v:lnum - 2)
let prevline = getline(v:lnum - 1) let prevline = getline(v:lnum - 1)
let line = getline(v:lnum) let line = getline(v:lnum)
if line =~ '^\s*\<where\>' if line =~ '^\s*\<where\>'
let s = match(prevline, '\S') let s = indent(v:lnum - 1)
return s + 2 return max([s, &l:shiftwidth])
endif endif
if line =~ '^\s*\<in\>' if line =~ '^\s*\<in\>'
@ -67,72 +87,191 @@ function! GetPurescriptIndent()
while s <= 0 && n > 0 while s <= 0 && n > 0
let n = n - 1 let n = n - 1
let s = match(getline(n),'\<let\>') let s = match(getline(n), '\<let\>')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') != -1
let s = -1
endif
endwhile endwhile
return s + 1 return s + g:purescript_indent_in
endif endif
if prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$' let s = match(prevline, '^\s*\zs\(--\|import\)')
if s >= 0
" comments
" imports
return s
endif
if prevline =~ '^\S.*::' && line !~ '^\s*\(\.\|->\|→\|=>\|⇒\)' && !~ '^instance'
" f :: String
" -> String
return 0
endif
let s = match(prevline, '[[:alnum:][:blank:]]\@<=|[[:alnum:][:blank:]$]')
if s >= 0 && prevline !~ '^class\>' && index(s:GetSynStack(v:lnum - 1, s), "purescriptFunctionDecl") == -1
" ident pattern guards but not if we are in a type declaration
" what we detect using syntax groups
if prevline =~ '|\s*otherwise\>'
return indent(search('^\s*\k', 'bnW'))
" somehow this pattern does not work :/
" return indent(search('^\(\s*|\)\@!', 'bnW'))
else
return s
endif
endif
let s = match(line, '\%(\\.\{-}\)\@<=->')
if s >= 0
" inline lambda
return indent(v:lnum)
endif
" indent rules for -> (lambdas and case expressions)
let s = match(line, '->')
let p = match(prevline, '\\')
" protect that we are not in a type signature
" and not in a case expression
if s >= 0 && index(s:GetSynStack(s == 0 ? v:lnum - 1 : v:lnum, max([1, s])), "purescriptFunctionDecl") == -1
\ && p >= 0 && index(s:GetSynStack(v:lnum - 1, p), "purescriptString") == -1
return p
endif
if prevline =~ '^\S'
" start typing signature, function body, data & newtype on next line
return &l:shiftwidth
endif
if ppline =~ '^\S' && prevline =~ '^\s*$'
return 0
endif
if line =~ '^\s*\%(::\|∷\)'
return match(prevline, '\S') + &l:shiftwidth
endif
if prevline =~ '^\s*\(::\|∷\)\s*forall'
return match(prevline, '\S') + g:purescript_indent_dot
endif
let s = match(prevline, '^\s*\zs\%(::\|∷\|=>\|⇒\|->\|→\)')
let r = match(prevline, '^\s*\zs\.')
if s >= 0 || r >= 0
if s >= 0
if line !~ '^\s*\%(::\|∷\|=>\|⇒\|->\|→\)' && line !~ '^\s*$'
return s - 2
else
return s
endif
elseif r >= 0
if line !~ '^\s\%(::\|∷\|=>\|⇒\|->\|→\)'
return r - g:purescript_indent_dot
else
return r
endif
endif
endif
if prevline =~ '[!#$%&*+./<>?@\\^~-]\s*$'
let s = match(prevline, '=') let s = match(prevline, '=')
if s > 0 if s > 0
return s + 2 return s + &l:shiftwidth
endif endif
let s = match(prevline, ':') let s = match(prevline, '\<:\>')
if s > 0 if s > 0
return s + 3 return s + &l:shiftwidth
else else
return match(prevline, '\S') return match(prevline, '\S') + &l:shiftwidth
endif endif
endif endif
if prevline =~ '[{([][^})\]]\+$' if prevline =~ '[{([][^})\]]\+$'
echom "return 1"
return match(prevline, '[{([]') return match(prevline, '[{([]')
endif endif
if prevline =~ '\<let\>\s\+.\+\(\<in\>\)\?\s*$' let s = match(prevline, '\<let\>\s\+\zs\S')
return match(prevline, '\<let\>') + g:purescript_indent_let if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
endif
if prevline !~ '\<else\>'
let s = match(prevline, '\<if\>.*\&.*\zs\<then\>')
if s > 0
return s return s
endif endif
let s = match(prevline, '\<if\>') let s = match(prevline, '\<let\>\s*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return s + g:purescript_indent_let
endif
let s = match(prevline, '\<let\>\s\+.\+\(\<in\>\)\?\s*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\<let\>') + g:purescript_indent_let
endif
let s = searchpairpos('\%(--.\{-}\)\@<!\<if\>', '\<then\>', '\<else\>.*\zs$', 'bnrc')[0]
if s > 0 if s > 0
return s + g:purescript_indent_if " this rule ensures that using `=` in visual mode will correctly indent
" `if then else`, but it does not handle lines after `then` and `else`
if line =~ '\<\%(then\|else\)\>'
return match(getline(s), '\<if\>') + &l:shiftwidth
endif endif
endif endif
if prevline =~ '\(\<where\>\|\<do\>\|=\|[{([]\)\s*$' let p = match(prevline, '\<if\>\%(.\{-}\<then\>.\{-}\<else\>\)\@!')
return match(prevline, '\S') + &shiftwidth if p > 0
return p + &l:shiftwidth
endif endif
if prevline =~ '\<where\>\s\+\S\+.*$' let s = match(prevline, '=\s*$')
return match(prevline, '\<where\>') + g:purescript_indent_where if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\S') + &l:shiftwidth
endif endif
if prevline =~ '\<do\>\s\+\S\+.*$' let s = match(prevline, '[{([]\s*$')
return match(prevline, '\<do\>') + g:purescript_indent_do if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\S') + (line !~ '^\s*[})]]' ? 0 : &l:shiftwidth)
endif endif
if prevline =~ '^\s*\<data\>\s\+[^=]\+\s\+=\s\+\S\+.*$' if prevline =~ '^class'
return &l:shiftwidth
endif
let s = match(prevline, '\<where\>\s*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\S') + g:purescript_indent_where
endif
let s = match(prevline, '\<where\>\s\+\zs\S\+.*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return s
endif
let s = match(prevline, '\<do\>\s*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\S') + g:purescript_indent_do
endif
let s = match(prevline, '\<do\>\s\+\zs\S\+.*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return s
endif
let s = match(prevline, '^\s*\<data\>\s\+[^=]\+\s\+=\s\+\S\+.*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '=') return match(prevline, '=')
endif endif
if prevline =~ '\<case\>\s\+.\+\<of\>\s*$' let s = match(prevline, '\<case\>\s\+.\+\<of\>\s*$')
if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\<case\>') + g:purescript_indent_case return match(prevline, '\<case\>') + g:purescript_indent_case
endif endif
if prevline =~ '^\s*\<\data\>\s\+\S\+\s*$' if prevline =~ '^\s*\<\data\>\s\+\S\+\s*$'
return match(prevline, '\<data\>') + &shiftwidth return match(prevline, '\<data\>') + &l:shiftwidth
endif endif
if (line =~ '^\s*}\s*' && prevline !~ '^\s*;') let s = match(prevline, '^\s*[}\]]')
return match(prevline, '\S') - &shiftwidth if s >= 0 && index(s:GetSynStack(v:lnum - 1, s), 'purescriptString') == -1
return match(prevline, '\S') - &l:shiftwidth
endif endif
return match(prevline, '\S') return match(prevline, '\S')

View File

@ -3,7 +3,8 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Vim indent file " Vim indent file
" Language: Rust " Language: Rust
" Author: Chris Morgan <me@chrismorgan.info> " Author: Chris Morgan <me@chrismorgan.info>
" Last Change: 2016 Jul 15 " Last Change: 2017 Mar 21
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists("b:did_indent") if exists("b:did_indent")
@ -15,7 +16,7 @@ setlocal cindent
setlocal cinoptions=L0,(0,Ws,J1,j1 setlocal cinoptions=L0,(0,Ws,J1,j1
setlocal cinkeys=0{,0},!^F,o,O,0[,0] setlocal cinkeys=0{,0},!^F,o,O,0[,0]
" Don't think cinwords will actually do anything at all... never mind " Don't think cinwords will actually do anything at all... never mind
setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern,macro
" Some preliminary settings " Some preliminary settings
setlocal nolisp " Make sure lisp indenting doesn't supersede us setlocal nolisp " Make sure lisp indenting doesn't supersede us
@ -30,6 +31,9 @@ if exists("*GetRustIndent")
finish finish
endif endif
let s:save_cpo = &cpo
set cpo&vim
" Come here when loading the script the first time. " Come here when loading the script the first time.
function! s:get_line_trimmed(lnum) function! s:get_line_trimmed(lnum)
@ -207,4 +211,7 @@ function GetRustIndent(lnum)
return cindent(a:lnum) return cindent(a:lnum)
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
endif endif

View File

@ -51,7 +51,7 @@ endfunction
function! s:IsCommentLine(lnum) function! s:IsCommentLine(lnum)
return synIDattr(synID(a:lnum, return synIDattr(synID(a:lnum,
\ match(getline(a:lnum), "\S") + 1, 0), "name") \ match(getline(a:lnum), "\\S") + 1, 0), "name")
\ ==# "swiftComment" \ ==# "swiftComment"
endfunction endfunction
@ -227,8 +227,8 @@ function! SwiftIndent(...)
if numOpenParens > 0 if numOpenParens > 0
let savePosition = getcurpos() let savePosition = getcurpos()
" Must be at EOL because open paren has to be above (left of) the cursor " Must be at EOL because open paren has to be above (left of) the cursor
call cursor(previousNum, col("$")) call cursor(previousNum, [previousNum, col("$")])
let previousParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()") let previousParen = searchpair("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")
call setpos(".", savePosition) call setpos(".", savePosition)
return indent(previousParen) + shiftwidth() return indent(previousParen) + shiftwidth()
endif endif

View File

@ -30,7 +30,7 @@ function! TerraformIndent(lnum)
let thisindent = previndent let thisindent = previndent
" block open? " block open?
if prevline =~ '[\[{]\s*$' if prevline =~ '[\[{\(]\s*$'
let thisindent += &sw let thisindent += &sw
endif endif
@ -38,7 +38,7 @@ function! TerraformIndent(lnum)
let thisline = substitute(getline(a:lnum), '//.*$', '', '') let thisline = substitute(getline(a:lnum), '//.*$', '', '')
" block close? " block close?
if thisline =~ '^\s*[\]}]' if thisline =~ '^\s*[\)\]}]'
let thisindent -= &sw let thisindent -= &sw
endif endif

View File

@ -25,10 +25,10 @@ let s:languages = [
\ { 'name': 'javascript', 'pairs': ['<script', '</script>'] }, \ { 'name': 'javascript', 'pairs': ['<script', '</script>'] },
\ ] \ ]
for language in s:languages for s:language in s:languages
" Set 'indentexpr' if the user has an indent file installed for the language " Set 'indentexpr' if the user has an indent file installed for the language
if strlen(globpath(&rtp, 'indent/'. language.name .'.vim')) if strlen(globpath(&rtp, 'indent/'. s:language.name .'.vim'))
let language.indentexpr = s:get_indentexpr(language.name) let s:language.indentexpr = s:get_indentexpr(s:language.name)
endif endif
endfor endfor

View File

@ -47,6 +47,58 @@ highlight link yamlFlowString NONE
" but it does make sense we visualize quotes easily " but it does make sense we visualize quotes easily
highlight link yamlFlowStringDelimiter Delimiter highlight link yamlFlowStringDelimiter Delimiter
fun! s:normal_keywords_highlight(name)
if a:name == 'Comment'
highlight link ansible_normal_keywords Comment
elseif a:name == 'Constant'
highlight link ansible_normal_keywords Constant
elseif a:name == 'Identifier'
highlight link ansible_normal_keywords Identifier
elseif a:name == 'Statement'
highlight link ansible_normal_keywords Statement
elseif a:name == 'PreProc'
highlight link ansible_normal_keywords PreProc
elseif a:name == 'Type'
highlight link ansible_normal_keywords Type
elseif a:name == 'Special'
highlight link ansible_normal_keywords Special
elseif a:name == 'Underlined'
highlight link ansible_normal_keywords Underlined
elseif a:name == 'Ignore'
highlight link ansible_normal_keywords Ignore
elseif a:name == 'Error'
highlight link ansible_normal_keywords Error
elseif a:name == 'Todo'
highlight link ansible_normal_keywords Todo
endif
endfun
fun! s:with_keywords_highlight(name)
if a:name == 'Comment'
highlight link ansible_with_keywords Comment
elseif a:name == 'Constant'
highlight link ansible_with_keywords Constant
elseif a:name == 'Identifier'
highlight link ansible_with_keywords Identifier
elseif a:name == 'Statement'
highlight link ansible_with_keywords Statement
elseif a:name == 'PreProc'
highlight link ansible_with_keywords PreProc
elseif a:name == 'Type'
highlight link ansible_with_keywords Type
elseif a:name == 'Special'
highlight link ansible_with_keywords Special
elseif a:name == 'Underlined'
highlight link ansible_with_keywords Underlined
elseif a:name == 'Ignore'
highlight link ansible_with_keywords Ignore
elseif a:name == 'Error'
highlight link ansible_with_keywords Error
elseif a:name == 'Todo'
highlight link ansible_with_keywords Todo
endif
endfun
fun! s:attribute_highlight(attributes) fun! s:attribute_highlight(attributes)
if a:attributes =~ 'a' if a:attributes =~ 'a'
syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar
@ -85,11 +137,19 @@ if exists("g:ansible_extra_keywords_highlight")
highlight link ansible_extra_special_keywords Statement highlight link ansible_extra_special_keywords Statement
endif endif
syn keyword ansible_special_keywords include until retries delay when only_if become become_user block rescue always notify containedin=yamlBlockMappingKey contained syn keyword ansible_normal_keywords include include_tasks import_tasks until retries delay when only_if become become_user block rescue always notify containedin=yamlBlockMappingKey contained
highlight link ansible_special_keywords Statement if exists("g:ansible_normal_keywords_highlight")
call s:normal_keywords_highlight(g:ansible_normal_keywords_highlight)
else
highlight link ansible_normal_keywords Statement
endif
syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained
highlight link ansible_with_keywords Statement if exists("g:ansible_with_keywords_highlight")
call s:with_keywords_highlight(g:ansible_with_keywords_highlight)
else
highlight link ansible_with_keywords Statement
endif
let b:current_syntax = "ansible" let b:current_syntax = "ansible"

View File

@ -4,7 +4,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'c/c++') == -1
" Language: C++ " Language: C++
" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) " Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu> " Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
" Last Change: 2016 Oct 28
" quit when a syntax file was already loaded " quit when a syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
@ -50,7 +49,7 @@ endif
if !exists("cpp_no_cpp14") if !exists("cpp_no_cpp14")
syn case ignore syn case ignore
syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>" syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat
syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>" syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
syn case match syn case match
endif endif

View File

@ -18,6 +18,8 @@ endif
" Ensure long multiline strings are highlighted. " Ensure long multiline strings are highlighted.
syntax sync fromstart syntax sync fromstart
syntax case match
" keyword definitions " keyword definitions
syntax keyword dartConditional if else switch syntax keyword dartConditional if else switch
syntax keyword dartRepeat do while for syntax keyword dartRepeat do while for
@ -26,14 +28,14 @@ syntax keyword dartConstant null
syntax keyword dartTypedef this super class typedef enum syntax keyword dartTypedef this super class typedef enum
syntax keyword dartOperator new is as in syntax keyword dartOperator new is as in
syntax match dartOperator "+=\=\|-=\=\|*=\=\|/=\=\|%=\=\|\~/=\=\|<<=\=\|>>=\=\|[<>]=\=\|===\=\|\!==\=\|&=\=\|\^=\=\||=\=\|||\|&&\|\[\]=\=\|=>\|!\|\~\|?\|:" syntax match dartOperator "+=\=\|-=\=\|*=\=\|/=\=\|%=\=\|\~/=\=\|<<=\=\|>>=\=\|[<>]=\=\|===\=\|\!==\=\|&=\=\|\^=\=\||=\=\|||\|&&\|\[\]=\=\|=>\|!\|\~\|?\|:"
syntax keyword dartType void var bool int double num dynamic syntax keyword dartType void var bool int double num dynamic covariant
syntax keyword dartStatement return syntax keyword dartStatement return
syntax keyword dartStorageClass static abstract final const factory syntax keyword dartStorageClass static abstract final const factory
syntax keyword dartExceptions throw rethrow try on catch finally syntax keyword dartExceptions throw rethrow try on catch finally
syntax keyword dartAssert assert syntax keyword dartAssert assert
syntax keyword dartClassDecl extends with implements syntax keyword dartClassDecl extends with implements
syntax keyword dartBranch break continue nextgroup=dartUserLabelRef skipwhite syntax keyword dartBranch break continue nextgroup=dartUserLabelRef skipwhite
syntax keyword dartKeyword get set operator call external async await yield sync syntax keyword dartKeyword get set operator call external async await yield sync native
syntax match dartUserLabelRef "\k\+" contained syntax match dartUserLabelRef "\k\+" contained
syntax region dartLabelRegion transparent matchgroup=dartLabel start="\<case\>" matchgroup=NONE end=":" syntax region dartLabelRegion transparent matchgroup=dartLabel start="\<case\>" matchgroup=NONE end=":"
@ -47,6 +49,24 @@ syntax match dartLibrary "^\(library\|part of\|part\)\>"
syntax match dartMetadata "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" syntax match dartMetadata "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
" Numbers
syntax match dartNumber "\<\d\+\(\.\d\+\)\=\>"
" Core libraries
if !exists('dart_corelib_highlight') || dart_corelib_highlight
syntax keyword dartCoreClasses BidirectionalIterator Comparable DateTime
\ Duration Expando Function Invocation Iterable Iterator List Map Match
\ Object Pattern RegExp RuneIterator Runes Set StackTrace Stopwatch String
\ StringBuffer StringSink Symbol Type
syntax keyword dartCoreTypedefs Comparator
syntax keyword dartCoreExceptions AbstractClassInstantiationError
\ ArgumentError AssertionError CastError ConcurrentModificationError
\ Error Exception FallThroughError FormatException
\ IntegerDivisionByZeroException NoSuchMethodError NullThrownError
\ OutOfMemoryError RangeError RuntimeError StackOverflowError StateError
\ TypeError UnimplementedError UnsupportedError
endif
" Comments " Comments
syntax keyword dartTodo contained TODO FIXME XXX syntax keyword dartTodo contained TODO FIXME XXX
syntax region dartComment start="/\*" end="\*/" contains=dartComment,dartTodo,dartDocLink,@Spell syntax region dartComment start="/\*" end="\*/" contains=dartComment,dartTodo,dartDocLink,@Spell
@ -55,21 +75,18 @@ syntax match dartLineDocComment "///.*" contains=dartTodo,dartDocLink,@Spell
syntax region dartDocLink oneline contained start=+\[+ end=+\]+ syntax region dartDocLink oneline contained start=+\[+ end=+\]+
" Strings " Strings
syntax region dartString start=+\z(["']\)+ end=+\z1+ contains=@Spell,dartInterpolation,dartSpecialChar syntax cluster dartRawStringContains contains=@Spell
syntax region dartRawString start=+r\z(["']\)+ end=+\z1+ contains=@Spell if exists('dart_html_in_strings') && dart_html_in_strings
syntax region dartMultilineString start=+\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@Spell,dartInterpolation,dartSpecialChar syntax include @HTML syntax/html.vim
syntax region dartRawMultilineString start=+r\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@Spell syntax cluster dartRawStringContains add=@HTML
syntax match dartInterpolation contained "\$\(\w\+\|{[^}]\+}\)" endif
syntax match dartSpecialChar contained "\\\(u\x\{4\}\|u{\x\+}\|x\x\x\|x{\x\+}\|.\)" syntax cluster dartStringContains contains=@dartRawStringContains,dartInterpolation,dartSpecialChar
syntax region dartString oneline start=+\z(["']\)+ end=+\z1+ contains=@dartStringContains keepend
" Numbers syntax region dartRawString oneline start=+r\z(["']\)+ end=+\z1+ contains=@dartRawStringContains keepend
syntax match dartNumber "\<\d\+\(\.\d\+\)\=\>" syntax region dartMultilineString start=+\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@dartStringContains
syntax region dartRawMultilineString start=+r\z("\{3\}\|'\{3\}\)+ end=+\z1+ contains=@dartSRawtringContains
" TODO(antonm): consider conditional highlighting of corelib classes. syntax match dartInterpolation contained "\$\(\w\+\|{[^}]\+}\)" extend
syntax keyword dartCoreClasses BidirectionalIterator Comparable DateTime Duration Expando Function Invocation Iterable Iterator List Map Match Object Pattern RegExp RuneIterator Runes Set StackTrace Stopwatch String StringBuffer StringSink Symbol Type syntax match dartSpecialChar contained "\\\(u\x\{4\}\|u{\x\+}\|x\x\x\|x{\x\+}\|.\)" extend
syntax keyword dartCoreTypedefs Comparator
syntax keyword dartCoreExceptions AbstractClassInstantiationError ArgumentError AssertionError CastError ConcurrentModificationError Error Exception FallThroughError FormatException IntegerDivisionByZeroException NoSuchMethodError NullThrownError OutOfMemoryError RangeError RuntimeError StackOverflowError StateError TypeError UnimplementedError UnsupportedError
" The default highlighting. " The default highlighting.
highlight default link dartBranch Conditional highlight default link dartBranch Conditional

View File

@ -18,26 +18,27 @@ syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDec
syn match elixirComment '#.*' contains=elixirTodo,@Spell syn match elixirComment '#.*' contains=elixirTodo,@Spell
syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' contains=elixirUnusedVariable,elixirKernelFunction
syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|send\)\>' syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|send\)\>'
syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>' syn match elixirKeyword '\(\.\)\@<!\<\(exit\|raise\|throw\|after\|rescue\|catch\|else\)\>'
syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>' syn match elixirKeyword '\(\.\)\@<!\<\(quote\|unquote\|super\|spawn\|spawn_link\|spawn_monitor\)\>'
" Kernel functions " Kernel functions
syn match elixirKernelFunction contained containedin=elixirGuard '\<\(is_atom\|is_binary\|is_bitstring\|is_boolean\|is_float\|is_function\|is_integer\|is_list\|is_map\|is_nil\|is_number\|is_pid\|is_port\)\>\([ (]\)\@=' syn keyword elixirKernelFunction contained is_atom is_binary is_bitstring is_boolean is_float
syn match elixirKernelFunction contained containedin=elixirGuard '\<\(is_record\|is_reference\|is_tuple\|is_exception\|abs\|bit_size\|byte_size\|div\|elem\|hd\|length\|map_size\|node\|rem\|round\|tl\|trunc\|tuple_size\)\>\([ (]\)\@=' syn keyword elixirKernelFunction contained is_function is_integer is_list is_map is_nil
syn keyword elixirKernelFunction contained is_number is_pid is_port is_reference is_tuple
syn match elixirGuard '.*when.*' contains=ALLBUT,@elixirNotTop syn keyword elixirKernelFunction contained abs binary_part bit_size byte_size div elem hd length
syn keyword elixirKernelFunction contained map_size node rem round tl trunc tuple_size
syn keyword elixirInclude import require alias use syn keyword elixirInclude import require alias use
syn keyword elixirSelf self syn keyword elixirSelf self
" This unfortunately also matches function names in function calls " This unfortunately also matches function names in function calls
syn match elixirUnusedVariable contained '\<_\w*\>' syn match elixirUnusedVariable contained '\v%(^|[^.])@<=<_\w*>'
syn keyword elixirOperator and not or in syn match elixirOperator '\v\.@<!<%(and|or|in|not)>'
syn match elixirOperator '!==\|!=\|!' syn match elixirOperator '!==\|!=\|!'
syn match elixirOperator '=\~\|===\|==\|=' syn match elixirOperator '=\~\|===\|==\|='
syn match elixirOperator '<<<\|<<\|<=\|<-\|<' syn match elixirOperator '<<<\|<<\|<=\|<-\|<'
@ -54,8 +55,6 @@ syn match elixirAtom '\(:\)\@<!:\%([a-zA-Z_]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\
syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)' syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)'
syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!" syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!"
syn match elixirBlockInline "\<\(do\|else\)\>:\@="
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*' syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*'
syn keyword elixirBoolean true false nil syn keyword elixirBoolean true false nil
@ -84,10 +83,10 @@ syn region elixirStruct matchgroup=elixirStructDelimiter start="%\(\w\+{\)\@=" e
syn region elixirMap matchgroup=elixirMapDelimiter start="%{" end="}" contains=ALLBUT,@elixirNotTop syn region elixirMap matchgroup=elixirMapDelimiter start="%{" end="}" contains=ALLBUT,@elixirNotTop
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained syn region elixirString matchgroup=elixirStringDelimiter start=+\z('\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@Spell,@elixirStringContained
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@elixirStringContained syn region elixirString matchgroup=elixirStringDelimiter start=+\z("\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=@Spell,@elixirStringContained
syn region elixirString matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ contains=@elixirStringContained syn region elixirString matchgroup=elixirStringDelimiter start=+\z('''\)+ end=+^\s*\z1+ contains=@Spell,@elixirStringContained
syn region elixirString matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ contains=@elixirStringContained syn region elixirString matchgroup=elixirStringDelimiter start=+\z("""\)+ end=+^\s*\z1+ contains=@Spell,@elixirStringContained
syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirKernelFunction,elixirComment,@elixirNotTop syn region elixirInterpolation matchgroup=elixirInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,elixirKernelFunction,elixirComment,@elixirNotTop
syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString syn match elixirAtomInterpolated ':\("\)\@=' contains=elixirString
@ -97,7 +96,7 @@ syn region elixirBlock matchgroup=elixirBlockDefinition start="\<do
syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold syn region elixirElseBlock matchgroup=elixirBlockDefinition start="\<else\>:\@!" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold
syn region elixirAnonymousFunction matchgroup=elixirBlockDefinition start="\<fn\>" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold syn region elixirAnonymousFunction matchgroup=elixirBlockDefinition start="\<fn\>" end="\<end\>" contains=ALLBUT,elixirKernelFunction,@elixirNotTop fold
syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigilDelimiter,elixirAnonymousFunction syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirAtom,elixirPseudoVariable,elixirAlias,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirAtomInterpolated,elixirRegex,elixirString,elixirStringDelimiter,elixirRegexDelimiter,elixirInterpolationDelimiter,elixirSigil,elixirAnonymousFunction
syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE syn match elixirDelimEscape "\\[(<{\[)>}\]/\"'|]" transparent display contained contains=NONE
@ -174,7 +173,6 @@ syn match elixirExUnitMacro "\(^\s*\)\@<=\<\(test\|describe\|setup\|setup_all\|
syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(assert\|assert_in_delta\|assert_raise\|assert_receive\|assert_received\|catch_error\)\>" syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(assert\|assert_in_delta\|assert_raise\|assert_receive\|assert_received\|catch_error\)\>"
syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(catch_exit\|catch_throw\|flunk\|refute\|refute_in_delta\|refute_receive\|refute_received\)\>" syn match elixirExUnitAssert "\(^\s*\)\@<=\<\(catch_exit\|catch_throw\|flunk\|refute\|refute_in_delta\|refute_receive\|refute_received\)\>"
hi def link elixirBlockInline Keyword
hi def link elixirBlockDefinition Keyword hi def link elixirBlockDefinition Keyword
hi def link elixirDefine Define hi def link elixirDefine Define
hi def link elixirPrivateDefine Define hi def link elixirPrivateDefine Define

View File

@ -118,14 +118,14 @@ 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 halt hd integer_to_binary integer_to_list contained
syn keyword erlangBIF iolist_to_binary iolist_size is_alive 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_atom is_binary is_bitstring is_boolean contained
syn keyword erlangBIF is_float is_function is_integer is_list contained syn keyword erlangBIF is_float is_function is_integer is_list is_map contained
syn keyword erlangBIF is_number is_pid is_port is_process_alive 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 is_record is_reference is_tuple length link contained
syn keyword erlangBIF list_to_atom list_to_binary contained syn keyword erlangBIF list_to_atom list_to_binary contained
syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
syn keyword erlangBIF list_to_tuple load_module make_ref max min contained syn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained
syn keyword erlangBIF module_loaded monitor monitor_node node contained syn keyword erlangBIF min module_loaded monitor monitor_node node contained
syn keyword erlangBIF nodes now open_port pid_to_list port_close contained syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
syn keyword erlangBIF port_command port_connect pre_loaded contained syn keyword erlangBIF port_command port_connect pre_loaded contained
syn keyword erlangBIF process_flag process_flag process_info contained syn keyword erlangBIF process_flag process_flag process_info contained

View File

@ -24,7 +24,7 @@ elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$") let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+') let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
if b:eruby_subtype == '' if b:eruby_subtype == ''
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$') let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
endif endif
if b:eruby_subtype == 'rhtml' if b:eruby_subtype == 'rhtml'
let b:eruby_subtype = 'html' let b:eruby_subtype = 'html'
@ -49,7 +49,7 @@ if !b:eruby_nest_level
let b:eruby_nest_level = 1 let b:eruby_nest_level = 1
endif endif
if exists("b:eruby_subtype") && b:eruby_subtype != '' if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
exe "runtime! syntax/".b:eruby_subtype.".vim" exe "runtime! syntax/".b:eruby_subtype.".vim"
unlet! b:current_syntax unlet! b:current_syntax
endif endif

View File

@ -13,7 +13,7 @@ syn keyword glslRepeat for while do
syn keyword glslStatement discard return break continue syn keyword glslStatement discard return break continue
" Comments " Comments
syn keyword glslTodo contained TODO FIXME XXX syn keyword glslTodo contained TODO FIXME XXX NOTE
syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=glslTodo,@Spell
syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell syn region glslComment matchgroup=glslCommentStart start="/\*" end="\*/" extend contains=glslTodo,@Spell
@ -28,15 +28,15 @@ syn region glslPreProc start="^\s*#\s*\(error\|pragma\|extension\|versi
syn keyword glslBoolean true false syn keyword glslBoolean true false
" Integer Numbers " Integer Numbers
syn match glslDecimalInt display "\(0\|[1-9]\d*\)[uU]\?" syn match glslDecimalInt display "\<\(0\|[1-9]\d*\)[uU]\?"
syn match glslOctalInt display "0\o\+[uU]\?" syn match glslOctalInt display "\<0\o\+[uU]\?"
syn match glslHexInt display "0[xX]\x\+[uU]\?" syn match glslHexInt display "\<0[xX]\x\+[uU]\?"
" Float Numbers " Float Numbers
syn match glslFloat display "\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\<\d\+\.\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\<\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\<\d\+[eE][+-]\=\d\+\(lf\|LF\|f\|F\)\="
syn match glslFloat display "\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\=" syn match glslFloat display "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\(lf\|LF\|f\|F\)\="
" Swizzles " Swizzles
syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/ syn match glslSwizzle display /\.[xyzw]\{1,4\}\>/
@ -44,10 +44,9 @@ syn match glslSwizzle display /\.[rgba]\{1,4\}\>/
syn match glslSwizzle display /\.[stpq]\{1,4\}\>/ syn match glslSwizzle display /\.[stpq]\{1,4\}\>/
" Structure " Structure
syn keyword glslStructure struct syn keyword glslStructure struct nextgroup=glslIdentifier skipwhite skipempty
" This prevents numbers at ends of identifies from being highlighted as numbers syn match glslIdentifier contains=glslIdentifierPrime "\%([a-zA-Z_]\)\%([a-zA-Z0-9_]\)*" display contained
syn match glslIdentifier display "\I\i*"
" Types " Types
syn keyword glslType atomic_uint syn keyword glslType atomic_uint
@ -171,6 +170,7 @@ syn keyword glslType vec4
syn keyword glslType void syn keyword glslType void
" Qualifiers " Qualifiers
syn keyword glslQualifier align
syn keyword glslQualifier attribute syn keyword glslQualifier attribute
syn keyword glslQualifier binding syn keyword glslQualifier binding
syn keyword glslQualifier buffer syn keyword glslQualifier buffer
@ -276,16 +276,22 @@ syn keyword glslQualifier varying
syn keyword glslQualifier vertices syn keyword glslQualifier vertices
syn keyword glslQualifier volatile syn keyword glslQualifier volatile
syn keyword glslQualifier writeonly syn keyword glslQualifier writeonly
syn keyword glslQualifier xfb_buffer
syn keyword glslQualifier xfb_stride
syn keyword glslQualifier xfb_offset
" Built-in Constants " Built-in Constants
syn keyword glslBuiltinConstant gl_CullDistance
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings syn keyword glslBuiltinConstant gl_MaxAtomicCounterBindings
syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize syn keyword glslBuiltinConstant gl_MaxAtomicCounterBufferSize
syn keyword glslBuiltinConstant gl_MaxClipDistances syn keyword glslBuiltinConstant gl_MaxClipDistances
syn keyword glslBuiltinConstant gl_MaxClipPlanes syn keyword glslBuiltinConstant gl_MaxClipPlanes
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounterBuffers
syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters syn keyword glslBuiltinConstant gl_MaxCombinedAtomicCounters
syn keyword glslBuiltinConstant gl_MaxCombinedClipAndCullDistances
syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms syn keyword glslBuiltinConstant gl_MaxCombinedImageUniforms
syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs syn keyword glslBuiltinConstant gl_MaxCombinedImageUnitsAndFragmentOutputs
syn keyword glslBuiltinConstant gl_MaxCombinedShaderOutputResources
syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits syn keyword glslBuiltinConstant gl_MaxCombinedTextureImageUnits
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounterBuffers
syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters syn keyword glslBuiltinConstant gl_MaxComputeAtomicCounters
@ -294,6 +300,7 @@ syn keyword glslBuiltinConstant gl_MaxComputeTextureImageUnits
syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents syn keyword glslBuiltinConstant gl_MaxComputeUniformComponents
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupCount
syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize syn keyword glslBuiltinConstant gl_MaxComputeWorkGroupSize
syn keyword glslBuiltinConstant gl_MaxCullDistances
syn keyword glslBuiltinConstant gl_MaxDrawBuffers syn keyword glslBuiltinConstant gl_MaxDrawBuffers
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounterBuffers
syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters syn keyword glslBuiltinConstant gl_MaxFragmentAtomicCounters
@ -317,6 +324,7 @@ syn keyword glslBuiltinConstant gl_MaxImageUnits
syn keyword glslBuiltinConstant gl_MaxLights syn keyword glslBuiltinConstant gl_MaxLights
syn keyword glslBuiltinConstant gl_MaxPatchVertices syn keyword glslBuiltinConstant gl_MaxPatchVertices
syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset syn keyword glslBuiltinConstant gl_MaxProgramTexelOffset
syn keyword glslBuiltinConstant gl_MaxSamples
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounterBuffers
syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters syn keyword glslBuiltinConstant gl_MaxTessControlAtomicCounters
syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms syn keyword glslBuiltinConstant gl_MaxTessControlImageUniforms
@ -337,6 +345,8 @@ syn keyword glslBuiltinConstant gl_MaxTessPatchComponents
syn keyword glslBuiltinConstant gl_MaxTextureCoords syn keyword glslBuiltinConstant gl_MaxTextureCoords
syn keyword glslBuiltinConstant gl_MaxTextureImageUnits syn keyword glslBuiltinConstant gl_MaxTextureImageUnits
syn keyword glslBuiltinConstant gl_MaxTextureUnits syn keyword glslBuiltinConstant gl_MaxTextureUnits
syn keyword glslBuiltinConstant gl_MaxTransformFeedbackBuffers
syn keyword glslBuiltinConstant gl_MaxTransformFeedbackInterleavedComponents
syn keyword glslBuiltinConstant gl_MaxVaryingComponents syn keyword glslBuiltinConstant gl_MaxVaryingComponents
syn keyword glslBuiltinConstant gl_MaxVaryingFloats syn keyword glslBuiltinConstant gl_MaxVaryingFloats
syn keyword glslBuiltinConstant gl_MaxVaryingVectors syn keyword glslBuiltinConstant gl_MaxVaryingVectors
@ -382,6 +392,7 @@ syn keyword glslBuiltinVariable gl_FrontLightProduct
syn keyword glslBuiltinVariable gl_FrontMaterial syn keyword glslBuiltinVariable gl_FrontMaterial
syn keyword glslBuiltinVariable gl_FrontSecondaryColor syn keyword glslBuiltinVariable gl_FrontSecondaryColor
syn keyword glslBuiltinVariable gl_GlobalInvocationID syn keyword glslBuiltinVariable gl_GlobalInvocationID
syn keyword glslBuiltinVariable gl_HelperInvocation
syn keyword glslBuiltinVariable gl_InstanceID syn keyword glslBuiltinVariable gl_InstanceID
syn keyword glslBuiltinVariable gl_InvocationID syn keyword glslBuiltinVariable gl_InvocationID
syn keyword glslBuiltinVariable gl_Layer syn keyword glslBuiltinVariable gl_Layer
@ -483,7 +494,11 @@ syn keyword glslBuiltinFunction cos
syn keyword glslBuiltinFunction cosh syn keyword glslBuiltinFunction cosh
syn keyword glslBuiltinFunction cross syn keyword glslBuiltinFunction cross
syn keyword glslBuiltinFunction dFdx syn keyword glslBuiltinFunction dFdx
syn keyword glslBuiltinFunction dFdxCoarse
syn keyword glslBuiltinFunction dFdxFine
syn keyword glslBuiltinFunction dFdy syn keyword glslBuiltinFunction dFdy
syn keyword glslBuiltinFunction dFdyCoarse
syn keyword glslBuiltinFunction dFdyFine
syn keyword glslBuiltinFunction degrees syn keyword glslBuiltinFunction degrees
syn keyword glslBuiltinFunction determinant syn keyword glslBuiltinFunction determinant
syn keyword glslBuiltinFunction distance syn keyword glslBuiltinFunction distance
@ -502,6 +517,8 @@ syn keyword glslBuiltinFunction fract
syn keyword glslBuiltinFunction frexp syn keyword glslBuiltinFunction frexp
syn keyword glslBuiltinFunction ftransform syn keyword glslBuiltinFunction ftransform
syn keyword glslBuiltinFunction fwidth syn keyword glslBuiltinFunction fwidth
syn keyword glslBuiltinFunction fwidthCoarse
syn keyword glslBuiltinFunction fwidthFine
syn keyword glslBuiltinFunction greaterThan syn keyword glslBuiltinFunction greaterThan
syn keyword glslBuiltinFunction greaterThanEqual syn keyword glslBuiltinFunction greaterThanEqual
syn keyword glslBuiltinFunction groupMemoryBarrier syn keyword glslBuiltinFunction groupMemoryBarrier
@ -643,13 +660,15 @@ hi def link glslOctalInt glslInteger
hi def link glslHexInt glslInteger hi def link glslHexInt glslInteger
hi def link glslInteger Number hi def link glslInteger Number
hi def link glslFloat Float hi def link glslFloat Float
hi def link glslIdentifierPrime glslIdentifier
hi def link glslIdentifier Identifier
hi def link glslStructure Structure hi def link glslStructure Structure
hi def link glslType Type hi def link glslType Type
hi def link glslQualifier StorageClass hi def link glslQualifier StorageClass
hi def link glslBuiltinConstant Constant hi def link glslBuiltinConstant Constant
hi def link glslBuiltinFunction Function hi def link glslBuiltinFunction Function
hi def link glslBuiltinVariable Identifier hi def link glslBuiltinVariable Identifier
hi def link glslSwizzle SpecialChar hi def link glslSwizzle Identifier
if !exists("b:current_syntax") if !exists("b:current_syntax")
let b:current_syntax = "glsl" let b:current_syntax = "glsl"

View File

@ -5,36 +5,13 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
" license that can be found in the LICENSE file. " license that can be found in the LICENSE file.
" "
" go.vim: Vim syntax file for Go. " go.vim: Vim syntax file for Go.
"
" Options:
" There are some options for customizing the highlighting; the recommended
" settings are the default values, but you can write:
" let OPTION_NAME = 0
" in your ~/.vimrc file to disable particular options. You can also write:
" let OPTION_NAME = 1
" to enable particular options. At present, all options default to off:
"
" - go_highlight_array_whitespace_error
" Highlights white space after "[]".
" - go_highlight_chan_whitespace_error
" Highlights white space around the communications operator that don't follow
" the standard style.
" - go_highlight_extra_types
" Highlights commonly used library types (io.Reader, etc.).
" - go_highlight_space_tab_error
" Highlights instances of tabs following spaces.
" - go_highlight_trailing_whitespace_error
" Highlights trailing white space.
" - go_highlight_string_spellcheck
" Specifies that strings should be spell checked
" - go_highlight_format_strings
" Highlights printf-style operators inside string literals.
" Quit when a (custom) syntax file was already loaded " Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
endif endif
" Set settings to default values.
if !exists("g:go_highlight_array_whitespace_error") if !exists("g:go_highlight_array_whitespace_error")
let g:go_highlight_array_whitespace_error = 0 let g:go_highlight_array_whitespace_error = 0
endif endif
@ -91,12 +68,52 @@ if !exists("g:go_highlight_generate_tags")
let g:go_highlight_generate_tags = 0 let g:go_highlight_generate_tags = 0
endif endif
if !exists("g:go_highlight_variable_assignments")
let g:go_highlight_variable_assignments = 0
endif
if !exists("g:go_highlight_variable_declarations")
let g:go_highlight_variable_declarations = 0
endif
let s:fold_block = 1
let s:fold_import = 1
let s:fold_varconst = 1
let s:fold_package_comment = 1
let s:fold_comment = 0
if exists("g:go_fold_enable")
" Enabled by default.
if index(g:go_fold_enable, 'block') == -1
let s:fold_block = 0
endif
if index(g:go_fold_enable, 'import') == -1
let s:fold_import = 0
endif
if index(g:go_fold_enable, 'varconst') == -1
let s:fold_varconst = 0
endif
if index(g:go_fold_enable, 'package_comment') == -1
let s:fold_package_comment = 0
endif
" Disabled by default.
if index(g:go_fold_enable, 'comment') > -1
let s:fold_comment = 1
endif
endif
syn case match syn case match
syn keyword goDirective package import syn keyword goPackage package
syn keyword goDeclaration var const syn keyword goImport import contained
syn keyword goVar var contained
syn keyword goConst const contained
hi def link goDirective Statement hi def link goPackage Statement
hi def link goImport Statement
hi def link goVar Keyword
hi def link goConst Keyword
hi def link goDeclaration Keyword hi def link goDeclaration Keyword
" Keywords within functions " Keywords within functions
@ -137,8 +154,14 @@ hi def link goPredefinedIdentifiers goBoolean
" Comments; their contents " Comments; their contents
syn keyword goTodo contained TODO FIXME XXX BUG syn keyword goTodo contained TODO FIXME XXX BUG
syn cluster goCommentGroup contains=goTodo syn cluster goCommentGroup contains=goTodo
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell syn region goComment start="//" end="$" contains=goGenerate,@goCommentGroup,@Spell
if s:fold_comment
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell fold
syn match goComment "\v(^\s*//.*\n)+" contains=goGenerate,@goCommentGroup,@Spell fold
else
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
endif
hi def link goComment Comment hi def link goComment Comment
hi def link goTodo Todo hi def link goTodo Todo
@ -191,8 +214,35 @@ syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=
hi def link goCharacter Character hi def link goCharacter Character
" Regions " Regions
syn region goBlock start="{" end="}" transparent fold
syn region goParen start='(' end=')' transparent syn region goParen start='(' end=')' transparent
if s:fold_block
syn region goBlock start="{" end="}" transparent fold
else
syn region goBlock start="{" end="}" transparent
endif
" import
if s:fold_import
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment
else
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment
endif
" var, const
if s:fold_varconst
syn region goVar start='var (' end='^\s*)$' transparent fold
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
syn region goConst start='const (' end='^\s*)$' transparent fold
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
else
syn region goVar start='var (' end='^\s*)$' transparent
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
syn region goConst start='const (' end='^\s*)$' transparent
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
endif
" Single-line var, const, and import.
syn match goSingleDecl /\(import\|var\|const\) [^(]\@=/ contains=goImport,goVar,goConst
" Integers " Integers
syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>" syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>"
@ -323,10 +373,10 @@ hi def link goField Identifier
" Structs & Interfaces; " Structs & Interfaces;
if g:go_highlight_types != 0 if g:go_highlight_types != 0
syn match goTypeConstructor /\<\w\+{/he=e-1 syn match goTypeConstructor /\<\w\+{\@=/
syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl
syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl
syn match goDeclType /\<interface\|struct\>/ skipwhite skipnl syn match goDeclType /\<\(interface\|struct\)\>/ skipwhite skipnl
hi def link goReceiverType Type hi def link goReceiverType Type
else else
syn keyword goDeclType struct interface syn keyword goDeclType struct interface
@ -337,6 +387,18 @@ hi def link goTypeName Type
hi def link goTypeDecl Keyword hi def link goTypeDecl Keyword
hi def link goDeclType Keyword hi def link goDeclType Keyword
" Variable Assignments
if g:go_highlight_variable_assignments != 0
syn match goVarAssign /\v[_.[:alnum:]]+(,\s*[_.[:alnum:]]+)*\ze(\s*([-^+|^\/%&]|\*|\<\<|\>\>|\&\^)?\=[^=])/
hi def link goVarAssign Special
endif
" Variable Declarations
if g:go_highlight_variable_declarations != 0
syn match goVarDefs /\v\w+(,\s*\w+)*\ze(\s*:\=)/
hi def link goVarDefs Special
endif
" Build Constraints " Build Constraints
if g:go_highlight_build_constraints != 0 if g:go_highlight_build_constraints != 0
syn match goBuildKeyword display contained "+build" syn match goBuildKeyword display contained "+build"
@ -358,15 +420,22 @@ if g:go_highlight_build_constraints != 0
hi def link goBuildCommentStart Comment hi def link goBuildCommentStart Comment
hi def link goBuildDirectives Type hi def link goBuildDirectives Type
hi def link goBuildKeyword PreProc hi def link goBuildKeyword PreProc
endif
if g:go_highlight_build_constraints != 0 || s:fold_package_comment
" One or more line comments that are followed immediately by a "package" " One or more line comments that are followed immediately by a "package"
" declaration are treated like package documentation, so these must be " declaration are treated like package documentation, so these must be
" matched as comments to avoid looking like working build constraints. " matched as comments to avoid looking like working build constraints.
" The he, me, and re options let the "package" itself be highlighted by " The he, me, and re options let the "package" itself be highlighted by
" the usual rules. " the usual rules.
syn region goPackageComment start=/\v(\/\/.*\n)+\s*package/ exe 'syn region goPackageComment start=/\v(\/\/.*\n)+\s*package/'
\ end=/\v\n\s*package/he=e-7,me=e-7,re=e-7 \ . ' end=/\v\n\s*package/he=e-7,me=e-7,re=e-7'
\ contains=@goCommentGroup,@Spell \ . ' contains=@goCommentGroup,@Spell'
\ . (s:fold_package_comment ? ' fold' : '')
exe 'syn region goPackageComment start=/\v\/\*.*\n(.*\n)*\s*\*\/\npackage/'
\ . ' end=/\v\n\s*package/he=e-7,me=e-7,re=e-7'
\ . ' contains=@goCommentGroup,@Spell'
\ . (s:fold_package_comment ? ' fold' : '')
hi def link goPackageComment Comment hi def link goPackageComment Comment
endif endif

View File

@ -4,7 +4,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'graphql') == -1
" Language: GraphQL " Language: GraphQL
" Maintainer: Jon Parise <jon@indelible.org> " Maintainer: Jon Parise <jon@indelible.org>
if exists("b:current_syntax") if exists('b:current_syntax')
finish finish
endif endif
@ -20,9 +20,11 @@ syn keyword graphqlNull null
syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>"
syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+
syn keyword graphqlKeyword on nextgroup=graphqlType skipwhite
syn keyword graphqlStructure enum scalar type union nextgroup=graphqlType skipwhite syn keyword graphqlStructure enum scalar type union nextgroup=graphqlType skipwhite
syn keyword graphqlStructure input interface subscription nextgroup=graphqlType skipwhite syn keyword graphqlStructure input interface subscription nextgroup=graphqlType skipwhite
syn keyword graphqlStructure implements on nextgroup=graphqlType skipwhite syn keyword graphqlStructure implements nextgroup=graphqlType skipwhite
syn keyword graphqlStructure query mutation fragment nextgroup=graphqlIdentifier skipwhite syn keyword graphqlStructure query mutation fragment nextgroup=graphqlIdentifier skipwhite
syn keyword graphqlStructure directive nextgroup=graphqlDirective skipwhite syn keyword graphqlStructure directive nextgroup=graphqlDirective skipwhite
syn keyword graphqlStructure extend nextgroup=graphqlStructure skipwhite syn keyword graphqlStructure extend nextgroup=graphqlStructure skipwhite
@ -53,12 +55,13 @@ hi def link graphqlConstant Constant
hi def link graphqlDirective PreProc hi def link graphqlDirective PreProc
hi def link graphqlIdentifier Identifier hi def link graphqlIdentifier Identifier
hi def link graphqlMetaFields Special hi def link graphqlMetaFields Special
hi def link graphqlKeyword Keyword
hi def link graphqlStructure Structure hi def link graphqlStructure Structure
hi def link graphqlType Type hi def link graphqlType Type
hi def link graphqlVariable Identifier hi def link graphqlVariable Identifier
syn sync minlines=500 syn sync minlines=500
let b:current_syntax = "graphql" let b:current_syntax = 'graphql'
endif endif

View File

@ -20,14 +20,14 @@ endif
syn spell notoplevel syn spell notoplevel
syn match haskellRecordField contained containedin=haskellBlock syn match haskellRecordField contained containedin=haskellBlock
\ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s" \ "[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\_s"
\ contains= \ contains=
\ haskellIdentifier, \ haskellIdentifier,
\ haskellOperators, \ haskellOperators,
\ haskellSeparator, \ haskellSeparator,
\ haskellParens \ haskellParens
syn match haskellTypeSig syn match haskellTypeSig
\ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*\(,\s*[_a-z][a-zA-Z0-9_']*\)*\_s\+::\s" \ "^\s*\(where\s\+\|let\s\+\|default\s\+\)\?[_a-z][a-zA-Z0-9_']*#\?\(,\s*[_a-z][a-zA-Z0-9_']*#\?\)*\_s\+::\_s"
\ contains= \ contains=
\ haskellWhere, \ haskellWhere,
\ haskellLet, \ haskellLet,

View File

@ -106,7 +106,7 @@ syn keyword htmlArg contained form autocomplete autofocus list min max step
syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate syn keyword htmlArg contained formaction autofocus formenctype formmethod formtarget formnovalidate
syn keyword htmlArg contained required placeholder pattern syn keyword htmlArg contained required placeholder pattern
" <command>, <details>, <time> " <command>, <details>, <time>
syn keyword htmlArg contained label icon open datetime pubdate syn keyword htmlArg contained label icon open datetime-local pubdate
" <script> " <script>
syn keyword htmlArg contained async syn keyword htmlArg contained async
" <content> " <content>

View File

@ -27,7 +27,7 @@ syntax sync fromstart
syntax case match syntax case match
syntax match jsNoise /[:,\;]\{1}/ syntax match jsNoise /[:,\;]\{1}/
syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall,jsPrototype syntax match jsNoise /[\.]\{1}/ skipwhite skipempty nextgroup=jsObjectProp,jsFuncCall,jsPrototype,jsTaggedTemplate
syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ syntax match jsObjectProp contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/
syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsFuncCall /\k\+\%(\s*(\)\@=/
syntax match jsParensError /[)}\]]/ syntax match jsParensError /[)}\]]/
@ -43,14 +43,14 @@ syntax keyword jsBooleanFalse false
" Modules " Modules
syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType
syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword,jsFlowTypeStatement
syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression
syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma
syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom
syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup
syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString
syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup,jsFlowTypeKeyword
" Strings, Templates, Numbers " Strings, Templates, Numbers
syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend
@ -143,7 +143,7 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus
" Code blocks " Code blocks
syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsExpression extend fold nextgroup=jsFlowDefinition
syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll extend fold syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll extend fold
syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock extend fold syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentIfElse,jsIfElseBlock extend fold
syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentRepeat,jsRepeatBlock extend fold syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentRepeat,jsRepeatBlock extend fold
@ -161,12 +161,12 @@ syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces s
syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold
syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold
syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold
syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment,jsFlowTypeKeyword skipwhite skipempty nextgroup=jsFrom fold
syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression
syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression
syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup
syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup
syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend
syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgCommas contained ','
@ -178,7 +178,7 @@ syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArg
" Matches a series of arguments surrounded in parens " Matches a series of arguments surrounded in parens
syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend
exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs,jsFlowFunctionGroup skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '')
exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')
exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs') exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')
exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '') exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')
@ -188,8 +188,8 @@ syntax keyword jsClassKeyword contained class
syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression
syntax match jsClassNoise contained /\./ syntax match jsClassNoise contained /\./
syntax match jsClassMethodType contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty syntax match jsClassMethodType contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty
syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression,jsFlowClassGroup skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup
syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*[=:]\)\@=/ skipwhite skipempty nextgroup=jsClassValue,jsFlowClassDef
syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression
syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend
syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs
@ -239,8 +239,8 @@ if exists("javascript_plugin_flow")
runtime extras/flow.vim runtime extras/flow.vim
endif endif
syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsForAwait syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsForAwait,jsAsyncKeyword,jsStatement
syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,jsBlockLabel syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsException,jsTry,jsNoise,jsBlockLabel
" Define the default highlighting. " Define the default highlighting.
" For version 5.7 and earlier: only when not done already " For version 5.7 and earlier: only when not done already

View File

@ -3,7 +3,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'kotlin') == -1
" Vim syntax file " Vim syntax file
" Language: Kotlin " Language: Kotlin
" Maintainer: Alexander Udalov " Maintainer: Alexander Udalov
" Latest Revision: 29 December 2016 " Latest Revision: 18 September 2017
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
@ -21,7 +21,7 @@ syn keyword ktException try catch finally throw
syn keyword ktInclude import package syn keyword ktInclude import package
syn keyword ktType Any Boolean Byte Char Double Float Int Long Nothing Short Unit syn keyword ktType Any Boolean Byte Char Double Float Int Long Nothing Short Unit
syn keyword ktModifier annotation companion enum inner internal private protected public abstract final open override sealed vararg dynamic header impl syn keyword ktModifier annotation companion enum inner internal private protected public abstract final open override sealed vararg dynamic header impl expect actual
syn keyword ktStructure class object interface typealias fun val var constructor init syn keyword ktStructure class object interface typealias fun val var constructor init
syn keyword ktReservedKeyword typeof syn keyword ktReservedKeyword typeof
@ -51,9 +51,9 @@ syn match ktLabel "\v\w+\@"
syn match ktSimpleInterpolation "\v\$\h\w*" contained syn match ktSimpleInterpolation "\v\$\h\w*" contained
syn region ktComplexInterpolation matchgroup=ktComplexInterpolationBrace start="\v\$\{" end="\v\}" contains=ALLBUT,ktSimpleInterpolation syn region ktComplexInterpolation matchgroup=ktComplexInterpolationBrace start="\v\$\{" end="\v\}" contains=ALLBUT,ktSimpleInterpolation
syn match ktNumber "\v<\d+[LFf]?" syn match ktNumber "\v<\d+[_[:digit:]]*[LFf]?"
syn match ktNumber "\v<0[Xx]\x+L?" syn match ktNumber "\v<0[Xx]\x+[_[:xdigit:]]*L?"
syn match ktNumber "\v<0[Bb]\d+L?" syn match ktNumber "\v<0[Bb][01]+[_01]*L?"
syn match ktFloat "\v<\d*(\d[eE][-+]?\d+|\.\d+([eE][-+]?\d+)?)[Ff]?" syn match ktFloat "\v<\d*(\d[eE][-+]?\d+|\.\d+([eE][-+]?\d+)?)[Ff]?"
syn match ktEscapedName "\v`.*`" syn match ktEscapedName "\v`.*`"

View File

@ -21,16 +21,27 @@ elseif exists("b:current_syntax")
finish finish
endif endif
if !exists("b:mako_outer_lang")
if exists("g:mako_default_outer_lang")
let b:mako_outer_lang = g:mako_default_outer_lang
else
let b:mako_outer_lang = "html"
endif
endif
if !exists("main_syntax") if !exists("main_syntax")
let main_syntax = "html" let main_syntax = b:mako_outer_lang
endif endif
"Source the html syntax file "Source the outer syntax file
ru! syntax/html.vim execute "ru! syntax/" . b:mako_outer_lang . ".vim"
unlet b:current_syntax if exists("b:current_syntax")
unlet b:current_syntax
endif
" tell html.vim what syntax groups should take precedence (see :help html.vim) if b:mako_outer_lang == "html"
syn cluster htmlPreproc add=makoLine,makoVariable,makoTag,makoDocComment,makoDefEnd,makoText,makoDelim,makoEnd,makoComment,makoEscape " tell html.vim what syntax groups should take precedence (see :help html.vim)
syn cluster htmlPreproc add=makoLine,makoVariable,makoTag,makoDocComment,makoDefEnd,makoText,makoDelim,makoEnd,makoComment,makoEscape
endif
"Put the python syntax file in @pythonTop "Put the python syntax file in @pythonTop
syn include @pythonTop syntax/python.vim syn include @pythonTop syntax/python.vim
@ -91,6 +102,6 @@ if version >= 508 || !exists("did_mako_syn_inits")
delc HiLink delc HiLink
endif endif
let b:current_syntax = "html" let b:current_syntax = b:mako_outer_lang
endif endif

View File

@ -707,8 +707,10 @@ if !exists('g:loaded_sslsecure')
syn match ngxSSLCipherInsecure '[^!]\zsALL' syn match ngxSSLCipherInsecure '[^!]\zsALL'
syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL' syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+ " SHA ciphers are only used in HMAC with all known OpenSSL/ LibreSSL cipher suites and MAC
syn match ngxSSLCipherInsecure '[^!]\zsSHA1' " usage is still considered safe
" syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+
" syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
syn match ngxSSLCipherInsecure '[^!]\zsMD5' syn match ngxSSLCipherInsecure '[^!]\zsMD5'
syn match ngxSSLCipherInsecure '[^!]\zsRC2' syn match ngxSSLCipherInsecure '[^!]\zsRC2'
syn match ngxSSLCipherInsecure '[^!]\zsRC4' syn match ngxSSLCipherInsecure '[^!]\zsRC4'

View File

@ -36,10 +36,12 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'php') == -1
" "
" Options: php_sql_query = 1 for SQL syntax highlighting inside strings (default: 0) " Options: php_sql_query = 1 for SQL syntax highlighting inside strings (default: 0)
" php_sql_heredoc = 1 for SQL syntax highlighting inside heredocs (default: 1) " php_sql_heredoc = 1 for SQL syntax highlighting inside heredocs (default: 1)
" php_sql_nowdoc = 1 for SQL syntax highlighting inside nowdocs (default: 1)
" b:sql_type_override = 'postgresql' for PostgreSQL syntax highlighting in current buffer (default: 'mysql') " b:sql_type_override = 'postgresql' for PostgreSQL syntax highlighting in current buffer (default: 'mysql')
" g:sql_type_default = 'postgresql' to set global SQL syntax highlighting language default (default: 'mysql')" " g:sql_type_default = 'postgresql' to set global SQL syntax highlighting language default (default: 'mysql')"
" php_html_in_strings = 1 for HTML syntax highlighting inside strings (default: 0) " php_html_in_strings = 1 for HTML syntax highlighting inside strings (default: 0)
" php_html_in_heredoc = 1 for HTML syntax highlighting inside heredocs (default: 1) " php_html_in_heredoc = 1 for HTML syntax highlighting inside heredocs (default: 1)
" php_html_in_nowdoc = 1 for HTML syntax highlighting inside nowdocs (default: 1)
" php_html_load = 1 for loading the HTML syntax at all. Overwrites php_html_in_strings and php_html_in_heredoc (default: 1) " php_html_load = 1 for loading the HTML syntax at all. Overwrites php_html_in_strings and php_html_in_heredoc (default: 1)
" php_ignore_phpdoc = 0 for not highlighting parts of phpDocs " php_ignore_phpdoc = 0 for not highlighting parts of phpDocs
" php_parent_error_close = 1 for highlighting parent error ] or ) (default: 0) " php_parent_error_close = 1 for highlighting parent error ] or ) (default: 0)
@ -102,6 +104,10 @@ if (exists("php_html_load") && php_html_load)
let php_html_in_heredoc=1 let php_html_in_heredoc=1
endif endif
if !exists("php_html_in_nowdoc")
let php_html_in_nowdoc=1
endif
runtime! syntax/html.vim runtime! syntax/html.vim
unlet! b:current_syntax unlet! b:current_syntax
" HTML syntax file turns on spelling for all top level words, we attempt to turn off " HTML syntax file turns on spelling for all top level words, we attempt to turn off
@ -110,9 +116,10 @@ if (exists("php_html_load") && php_html_load)
syn cluster htmlPreproc add=phpRegion syn cluster htmlPreproc add=phpRegion
else else
" If it is desired that the HTML syntax file not be loaded at all, set the options for highlighting it in string " If it is desired that the HTML syntax file not be loaded at all, set the options for highlighting it in string
" and heredocs to false. " heredocs and nowdocs to false.
let php_html_in_strings=0 let php_html_in_strings=0
let php_html_in_heredoc=0 let php_html_in_heredoc=0
let php_html_in_nowdoc=0
endif endif
if (exists("php_html_in_strings") && php_html_in_strings) if (exists("php_html_in_strings") && php_html_in_strings)
@ -132,7 +139,11 @@ if !exists("php_sql_heredoc")
let php_sql_heredoc=1 let php_sql_heredoc=1
endif endif
if ((exists("php_sql_query") && php_sql_query) || (exists("php_sql_heredoc") && php_sql_heredoc)) if !exists("php_sql_nowdoc")
let php_sql_nowdoc=1
endif
if ((exists("php_sql_query") && php_sql_query) || (exists("php_sql_heredoc") && php_sql_heredoc) || (exists("php_sql_nowdoc") && php_sql_nowdoc))
" Use MySQL as the default SQL syntax file. " Use MySQL as the default SQL syntax file.
" See https://github.com/StanAngeloff/php.vim/pull/1 " See https://github.com/StanAngeloff/php.vim/pull/1
if !exists('b:sql_type_override') && !exists('g:sql_type_default') if !exists('b:sql_type_override') && !exists('g:sql_type_default')
@ -553,12 +564,18 @@ syn region phpIdentifierArray matchgroup=phpParent start="\[" end="]" contain
syn keyword phpBoolean true false contained syn keyword phpBoolean true false contained
" Number " Number
syn match phpNumber "-\=\<\d\+\>" contained display syn match phpNumber "\<\d\+\>" contained display
syn match phpNumber "-\d\+\>" contained display
syn match phpNumber "\<0x\x\{1,8}\>" contained display syn match phpNumber "\<0x\x\{1,8}\>" contained display
syn match phpNumber "-0x\x\{1,8}\>" contained display
syn match phpNumber "\<0b[01]\+\>" contained display syn match phpNumber "\<0b[01]\+\>" contained display
syn match phpNumber "-0b[01]\+\>" contained display
syn match phpNumber "\<\d\+\%([eE][+-]\=\d\+\)\=\>" contained display
syn match phpNumber "-\d\+\%([eE][+-]\=\d\+\)\=\>" contained display
" Float " Float
syn match phpNumber "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display syn match phpNumber "\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>" contained display
syn match phpNumber "-\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>" contained display
" SpecialChar " SpecialChar
syn match phpSpecialChar "\\[fnrtv\\]" contained display syn match phpSpecialChar "\\[fnrtv\\]" contained display
@ -648,6 +665,14 @@ endif
" NowDoc " NowDoc
SynFold syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\I\i*\)'$+ end="^\z1\(;\=$\)\@=" contained keepend extend SynFold syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\I\i*\)'$+ end="^\z1\(;\=$\)\@=" contained keepend extend
if (exists("php_sql_nowdoc") && php_sql_nowdoc)
SynFold syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)'$+ end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend
endif
if (exists("php_html_in_nowdoc") && php_html_in_nowdoc)
SynFold syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)'$+ end="^\z1\(;\=$\)\@=" contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend
SynFold syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)'$+ end="^\z1\(;\=$\)\@=" contained contains=@htmlJavascript,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend
endif
syn case ignore syn case ignore
" Parent " Parent

View File

@ -20,10 +20,10 @@ let b:current_syntax = 'plantuml'
syntax sync minlines=100 syntax sync minlines=100
syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(define|definelong|else|enddefinelong|endif|ifdef|ifndef|include|pragma|undef\)\s*.*/ contains=plantumlDir syntax match plantumlPreProc /\%(^@startuml\|^@enduml\)\|!\%(define|definelong|else|enddefinelong|endif|if|ifdef|ifndef|include|pragma|undef\)\s*.*/ contains=plantumlDir
syntax region plantumlDir start=/\s\+/ms=s+1 end=/$/ contained syntax region plantumlDir start=/\s\+/ms=s+1 end=/$/ contained
syntax keyword plantumlTypeKeyword abstract actor agent artifact boundary card cloud component control syntax keyword plantumlTypeKeyword abstract actor agent archimate artifact boundary card cloud component control
syntax keyword plantumlTypeKeyword database entity enum file folder frame node object package participant syntax keyword plantumlTypeKeyword database entity enum file folder frame node object package participant
syntax keyword plantumlTypeKeyword queue rectangle stack state storage usecase syntax keyword plantumlTypeKeyword queue rectangle stack state storage usecase
@ -39,26 +39,27 @@ syntax keyword plantumlKeyword then detach sprite
syntax keyword plantumlCommentTODO XXX TODO FIXME NOTE contained syntax keyword plantumlCommentTODO XXX TODO FIXME NOTE contained
syntax match plantumlColor /#[0-9A-Fa-f]\{6\}\>/ syntax match plantumlColor /#[0-9A-Fa-f]\{6\}\>/
syntax keyword plantumlColor AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond syntax keyword plantumlColor APPLICATION AliceBlue AntiqueWhite Aqua Aquamarine Azure BUSINESS Beige Bisque
syntax keyword plantumlColor Blue BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral syntax keyword plantumlColor Black BlanchedAlmond Blue BlueViolet Brown BurlyWood CadetBlue Chartreuse
syntax keyword plantumlColor CornflowerBlue Cornsilk Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray syntax keyword plantumlColor Chocolate Coral CornflowerBlue Cornsilk Crimson Cyan DarkBlue DarkCyan
syntax keyword plantumlColor DarkGreen DarkGrey DarkKhaki DarkMagenta DarkOliveGreen DarkOrchid DarkRed syntax keyword plantumlColor DarkGoldenRod DarkGray DarkGreen DarkGrey DarkKhaki DarkMagenta DarkOliveGreen
syntax keyword plantumlColor DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkSlateGrey DarkTurquoise syntax keyword plantumlColor DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray
syntax keyword plantumlColor DarkViolet Darkorange DeepPink DeepSkyBlue DimGray DimGrey DodgerBlue FireBrick syntax keyword plantumlColor DarkSlateGrey DarkTurquoise DarkViolet Darkorange DeepPink DeepSkyBlue DimGray
syntax keyword plantumlColor FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod Gray Green syntax keyword plantumlColor DimGrey DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro
syntax keyword plantumlColor GreenYellow Grey HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender syntax keyword plantumlColor GhostWhite Gold GoldenRod Gray Green GreenYellow Grey HoneyDew HotPink
syntax keyword plantumlColor LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan syntax keyword plantumlColor IMPLEMENTATION IndianRed Indigo Ivory Khaki Lavender LavenderBlush LawnGreen
syntax keyword plantumlColor LightGoldenRodYellow LightGray LightGreen LightGrey LightPink LightSalmon syntax keyword plantumlColor LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow LightGray
syntax keyword plantumlColor LightSeaGreen LightSkyBlue LightSlateGray LightSlateGrey LightSteelBlue syntax keyword plantumlColor LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue
syntax keyword plantumlColor LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine MediumBlue syntax keyword plantumlColor LightSlateGray LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen
syntax keyword plantumlColor MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen syntax keyword plantumlColor MOTIVATION Magenta Maroon MediumAquaMarine MediumBlue MediumOrchid MediumPurple
syntax keyword plantumlColor MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin syntax keyword plantumlColor MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed
syntax keyword plantumlColor NavajoWhite Navy OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod syntax keyword plantumlColor MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy OldLace Olive
syntax keyword plantumlColor PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum syntax keyword plantumlColor OliveDrab Orange OrangeRed Orchid PHYSICAL PaleGoldenRod PaleGreen PaleTurquoise
syntax keyword plantumlColor PowderBlue Purple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen syntax keyword plantumlColor PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple Red
syntax keyword plantumlColor SeaShell Sienna Silver SkyBlue SlateBlue SlateGray SlateGrey Snow SpringGreen syntax keyword plantumlColor RosyBrown RoyalBlue STRATEGY SaddleBrown Salmon SandyBrown SeaGreen SeaShell
syntax keyword plantumlColor SteelBlue Tan Teal Thistle Tomato Turquoise Violet Wheat White WhiteSmoke Yellow syntax keyword plantumlColor Sienna Silver SkyBlue SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue
syntax keyword plantumlColor YellowGreen syntax keyword plantumlColor TECHNOLOGY Tan Teal Thistle Tomato Turquoise Violet Wheat White WhiteSmoke
syntax keyword plantumlColor Yellow YellowGreen
" Arrows - Differentiate between horizontal and vertical arrows " Arrows - Differentiate between horizontal and vertical arrows
syntax match plantumlHorizontalArrow /\%([-\.]\%(|>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\|\%(<|\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[\.-]\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel syntax match plantumlHorizontalArrow /\%([-\.]\%(|>\|>\|\*\|o\>\|\\\\\|\\\|\/\/\|\/\|\.\|-\)\|\%(<|\|<\|\*\|\<o\|\\\\\|\\\|\/\/\|\/\)[\.-]\)\%(\[[^\]]*\]\)\?/ contains=plantumlLabel
@ -67,8 +68,12 @@ syntax match plantumlDirectedOrVerticalArrowRL /\%(<|\|<<\|<\|\*\|\<o\|\\\\\|\\\
syntax region plantumlLabel start=/\[/ms=s+1 end=/\]/me=s-1 contained contains=plantumlText syntax region plantumlLabel start=/\[/ms=s+1 end=/\]/me=s-1 contained contains=plantumlText
syntax match plantumlText /\%([0-9A-Za-zÀ-ÿ]\|\s\|[\.,;_-]\)\+/ contained syntax match plantumlText /\%([0-9A-Za-zÀ-ÿ]\|\s\|[\.,;_-]\)\+/ contained
" Note
syntax region plantumlNoteMultiLine start=/\%(^\s*[rh]\?note\)\@<=\s\%([^:"]\+$\)\@=/ end=/^\%(\s*end \?[rh]\?note$\)\@=/ contains=plantumlSpecialString,plantumlNoteMultiLineStart
syntax match plantumlNoteMultiLineStart /\%(^\s*[rh]\?note\)\@<=\s\%([^:]\+$\)/ contained contains=plantumlKeyword,plantumlColor,plantumlString
" Class " Class
syntax region plantumlClass start=/\%(class\s[^{]\+\)\@<=\zs{/ end=/^\s*}/ contains=plantumlClassArrows, syntax region plantumlClass start=/\%(\%(class\|interface\|object\)\s[^{]\+\)\@<=\zs{/ end=/^\s*}/ contains=plantumlClassArrows,
\ plantumlClassKeyword, \ plantumlClassKeyword,
\ @plantumlClassOp, \ @plantumlClassOp,
\ plantumlClassSeparator, \ plantumlClassSeparator,
@ -101,6 +106,7 @@ syntax match plantumlStereotype /<<.\{-1,}>>/ contains=plantumlSpecialString
" Activity diagram " Activity diagram
syntax match plantumlActivityThing /([^)]*)/ syntax match plantumlActivityThing /([^)]*)/
syntax match plantumlActivitySynch /===[^=]\+===/ syntax match plantumlActivitySynch /===[^=]\+===/
syntax match plantumlActivityLabel /\%(^\%(#\S\+\)\?\)\@<=:\_[^;|<>/\]}]\+[;|<>/\]}]$/ contains=plantumlSpecialString
" Sequence diagram " Sequence diagram
syntax match plantumlSequenceDivider /^\s*==[^=]\+==\s*$/ syntax match plantumlSequenceDivider /^\s*==[^=]\+==\s*$/
@ -235,8 +241,8 @@ syntax keyword plantumlSkinparamKeyword SwimlaneBorderColor SwimlaneBorderThickn
syntax keyword plantumlSkinparamKeyword SwimlaneTitleFontName SwimlaneTitleFontSize SwimlaneTitleFontStyle TabSize syntax keyword plantumlSkinparamKeyword SwimlaneTitleFontName SwimlaneTitleFontSize SwimlaneTitleFontStyle TabSize
syntax keyword plantumlSkinparamKeyword TitleBackgroundColor TitleBorderColor TitleBorderRoundCorner syntax keyword plantumlSkinparamKeyword TitleBackgroundColor TitleBorderColor TitleBorderRoundCorner
syntax keyword plantumlSkinparamKeyword TitleBorderThickness TitleFontColor TitleFontName TitleFontSize TitleFontStyle syntax keyword plantumlSkinparamKeyword TitleBorderThickness TitleFontColor TitleFontName TitleFontSize TitleFontStyle
syntax keyword plantumlSkinparamKeyword UsecaseBackgroundColor UsecaseBorderColor UsecaseFontColor UsecaseFontName syntax keyword plantumlSkinparamKeyword UsecaseBackgroundColor UsecaseBorderColor UsecaseBorderThickness UsecaseFontColor
syntax keyword plantumlSkinparamKeyword UsecaseFontSize UsecaseFontStyle UsecaseStereotypeFontColor syntax keyword plantumlSkinparamKeyword UsecaseFontName UsecaseFontSize UsecaseFontStyle UsecaseStereotypeFontColor
syntax keyword plantumlSkinparamKeyword UsecaseStereotypeFontName UsecaseStereotypeFontSize UsecaseStereotypeFontStyle syntax keyword plantumlSkinparamKeyword UsecaseStereotypeFontName UsecaseStereotypeFontSize UsecaseStereotypeFontStyle
" Not in 'java - jar plantuml.jar - language' output " Not in 'java - jar plantuml.jar - language' output
syntax keyword plantumlSkinparamKeyword activityArrowColor activityArrowFontColor activityArrowFontName syntax keyword plantumlSkinparamKeyword activityArrowColor activityArrowFontColor activityArrowFontName
@ -300,7 +306,9 @@ highlight default link plantumlMultilineComment Comment
highlight default link plantumlColonLine Comment highlight default link plantumlColonLine Comment
highlight default link plantumlActivityThing Type highlight default link plantumlActivityThing Type
highlight default link plantumlActivitySynch Type highlight default link plantumlActivitySynch Type
highlight default link plantumlActivityLabel String
highlight default link plantumlSkinparamKeyword Identifier highlight default link plantumlSkinparamKeyword Identifier
highlight default link plantumlNoteMultiLine String
highlight default link plantumlUsecaseActor String highlight default link plantumlUsecaseActor String
highlight default link plantumlStereotype Type highlight default link plantumlStereotype Type

View File

@ -65,18 +65,29 @@ syn match purescriptImportParams "hiding" contained
\ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite \ nextgroup=purescriptModuleParams,purescriptImportParams skipwhite
" Function declaration " Function declaration
syn region purescriptFunctionDecl excludenl start="^\z(\s*\)\(foreign\s\+import\_s\+\)\?[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)" end="^\z1\=\S"me=s-1,re=s-1 keepend syn region purescriptFunctionDecl
\ excludenl start="^\z(\s*\)\(\(foreign\s\+import\)\_s\+\)\?[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)"
\ end="^\z1\=\S"me=s-1,re=s-1 keepend
\ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment \ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment
syn match purescriptFunctionDeclStart "^\s*\(foreign\s\+import\_s\+\)\?\([_a-z]\(\w\|\'\)*\)\_s\{-}\(::\|∷\)" contained syn region purescriptFunctionDecl
\ contains=purescriptImportKeyword,purescriptFunction,purescriptOperatorType \ excludenl start="^\z(\s*\)where\z(\s\+\)[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)"
\ end="^\(\z1\s\{5}\z2\)\=\S"me=s-1,re=s-1 keepend
\ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment
syn region purescriptFunctionDecl
\ excludenl start="^\z(\s*\)let\z(\s\+\)[_a-z]\(\w\|\'\)*\_s\{-}\(::\|∷\)"
\ end="^\(\z1\s\{3}\z2\)\=\S"me=s-1,re=s-1 keepend
\ contains=purescriptFunctionDeclStart,purescriptForall,purescriptOperatorType,purescriptOperatorTypeSig,purescriptType,purescriptTypeVar,purescriptDelimiter,@purescriptComment
syn match purescriptFunctionDeclStart "^\s*\(\(foreign\s\+import\|let\|where\)\_s\+\)\?\([_a-z]\(\w\|\'\)*\)\_s\{-}\(::\|∷\)" contained
\ contains=purescriptImportKeyword,purescriptWhere,purescriptLet,purescriptFunction,purescriptOperatorType
syn keyword purescriptForall forall syn keyword purescriptForall forall
syn match purescriptForall "∀" syn match purescriptForall "∀"
" Keywords " Keywords
syn keyword purescriptConditional if then else syn keyword purescriptConditional if then else
syn keyword purescriptStatement do case of let in syn keyword purescriptStatement do case of in
syn keyword purescriptLet let
syn keyword purescriptWhere where syn keyword purescriptWhere where
syn match purescriptStructure "\<\(data\|newtype\|type\|class\)\>" syn match purescriptStructure "\<\(data\|newtype\|type\|class\|kind\)\>"
\ nextgroup=purescriptType skipwhite \ nextgroup=purescriptType skipwhite
syn keyword purescriptStructure derive syn keyword purescriptStructure derive
syn keyword purescriptStructure instance syn keyword purescriptStructure instance
@ -168,6 +179,7 @@ highlight def link purescriptBlockComment purescriptComment
highlight def link purescriptStructure purescriptKeyword highlight def link purescriptStructure purescriptKeyword
highlight def link purescriptKeyword Keyword highlight def link purescriptKeyword Keyword
highlight def link purescriptStatement Statement highlight def link purescriptStatement Statement
highlight def link purescriptLet Statement
highlight def link purescriptOperator Operator highlight def link purescriptOperator Operator
highlight def link purescriptFunction Function highlight def link purescriptFunction Function
highlight def link purescriptType Type highlight def link purescriptType Type

View File

@ -47,7 +47,7 @@ function! s:foldable(...) abort
return 0 return 0
endfunction " }}} endfunction " }}}
syn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo syn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo,rubyModuleName,rubyClassName,rubySymbolDelimiter
" Whitespace Errors {{{1 " Whitespace Errors {{{1
if exists("ruby_space_errors") if exists("ruby_space_errors")
@ -124,23 +124,24 @@ syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*
syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained
syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!"
syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
syn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" syn match rubySymbolDelimiter ":" contained
syn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" syn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter
syn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" syn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter
syn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" syn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter
syn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter
if s:foldable(':') if s:foldable(':')
syn region rubySymbol start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold
syn region rubySymbol start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
else else
syn region rubySymbol start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape
syn region rubySymbol start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
endif endif
syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@=" syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@="
@ -279,31 +280,51 @@ else
endif endif
" Here Document {{{1 " Here Document {{{1
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop syn match rubyStringDelimiter +\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop syn match rubyStringDelimiter +\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop syn match rubyStringDelimiter +\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop syn match rubyStringDelimiter +\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+
if s:foldable('<<') if s:foldable('<<')
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\).*$\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<"\z([^"]*\)".*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<'\z([^']*\)'.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<`\z([^`]*\)`.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\>.*$\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)".*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ keepend fold
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)$+ end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs"\z([^"]*\)"$+ end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs'\z([^']*\)'$+ end=+^\z1$+ keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs`\z([^`]*\)`$+ end=+^\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs"\z([^"]*\)"$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs'\z([^']*\)'$+ end=+^\s*\zs\z1$+ keepend fold
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs`\z([^`]*\)`$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend fold
else else
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\).*$\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<"\z([^"]*\)".*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<'\z([^']*\)'.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<`\z([^`]*\)`.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\>.*$\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)".*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ keepend
syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend syn region rubyString start=+\%(^.*\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`.*\)\@<=\n+ matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)$+ end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs"\z([^"]*\)"$+ end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs'\z([^']*\)'$+ end=+^\z1$+ keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<\zs`\z([^`]*\)`$+ end=+^\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs"\z([^"]*\)"$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs'\z([^']*\)'$+ end=+^\s*\zs\z1$+ keepend
syn region rubyString matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\zs`\z([^`]*\)`$+ end=+^\s*\zs\z1$+ contains=@rubyStringSpecial keepend
endif endif
" eRuby Config {{{1 " eRuby Config {{{1
@ -381,8 +402,6 @@ if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
if s:foldable('[') if s:foldable('[')
syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
else
syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop
endif endif
" statements without 'do' " statements without 'do'
@ -441,10 +460,12 @@ if !exists("ruby_no_special_methods")
syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)" syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
syn keyword rubyEval eval class_eval instance_eval module_eval syn keyword rubyEval eval class_eval instance_eval module_eval
syn keyword rubyException raise fail catch throw syn keyword rubyException raise fail catch throw
" false positive with 'include?' syn keyword rubyInclude autoload gem load require require_relative
syn match rubyInclude "\<include\>[?!]\@!"
syn keyword rubyInclude autoload extend load prepend refine require require_relative using
syn keyword rubyKeyword callcc caller lambda proc syn keyword rubyKeyword callcc caller lambda proc
" false positive with 'include?'
syn match rubyMacro "\<include\>[?!]\@!"
syn keyword rubyMacro extend prepend refine using
syn keyword rubyMacro alias_method define_method define_singleton_method remove_method undef_method
endif endif
" Comments and Documentation {{{1 " Comments and Documentation {{{1
@ -465,7 +486,7 @@ syn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*
" More Symbols {{{1 " More Symbols {{{1
syn match rubySymbol "\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1 syn match rubySymbol "\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1
syn match rubySymbol "[]})\"':]\@1<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1 syn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1
syn match rubySymbol "\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1 syn match rubySymbol "\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
syn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1 syn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1
@ -481,6 +502,9 @@ hi def link rubyClass rubyDefine
hi def link rubyModule rubyDefine hi def link rubyModule rubyDefine
hi def link rubyMethodExceptional rubyDefine hi def link rubyMethodExceptional rubyDefine
hi def link rubyDefine Define hi def link rubyDefine Define
hi def link rubyAccess rubyMacro
hi def link rubyAttribute rubyMacro
hi def link rubyMacro Macro
hi def link rubyFunction Function hi def link rubyFunction Function
hi def link rubyConditional Conditional hi def link rubyConditional Conditional
hi def link rubyConditionalModifier rubyConditional hi def link rubyConditionalModifier rubyConditional
@ -505,7 +529,6 @@ hi def link rubyConstant Type
hi def link rubyClassName rubyConstant hi def link rubyClassName rubyConstant
hi def link rubyModuleName rubyConstant hi def link rubyModuleName rubyConstant
hi def link rubyGlobalVariable rubyIdentifier hi def link rubyGlobalVariable rubyIdentifier
hi def link rubyBlockParameter rubyIdentifier
hi def link rubyInstanceVariable rubyIdentifier hi def link rubyInstanceVariable rubyIdentifier
hi def link rubyPredefinedIdentifier rubyIdentifier hi def link rubyPredefinedIdentifier rubyIdentifier
hi def link rubyPredefinedConstant rubyPredefinedIdentifier hi def link rubyPredefinedConstant rubyPredefinedIdentifier
@ -514,8 +537,6 @@ hi def link rubySymbol Constant
hi def link rubyKeyword Keyword hi def link rubyKeyword Keyword
hi def link rubyOperator Operator hi def link rubyOperator Operator
hi def link rubyBeginEnd Statement hi def link rubyBeginEnd Statement
hi def link rubyAccess Statement
hi def link rubyAttribute Statement
hi def link rubyEval Statement hi def link rubyEval Statement
hi def link rubyPseudoVariable Constant hi def link rubyPseudoVariable Constant
hi def link rubyCapitalizedMethod rubyLocalVariableOrMethod hi def link rubyCapitalizedMethod rubyLocalVariableOrMethod

View File

@ -6,6 +6,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
" Maintainer: Ben Blum <bblum@cs.cmu.edu> " Maintainer: Ben Blum <bblum@cs.cmu.edu>
" Maintainer: Chris Morgan <me@chrismorgan.info> " Maintainer: Chris Morgan <me@chrismorgan.info>
" Last Change: Feb 24, 2016 " Last Change: Feb 24, 2016
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if version < 600 if version < 600
syntax clear syntax clear
@ -31,10 +32,13 @@ syn keyword rustKeyword continue
syn keyword rustKeyword extern nextgroup=rustExternCrate,rustObsoleteExternMod skipwhite skipempty syn keyword rustKeyword extern nextgroup=rustExternCrate,rustObsoleteExternMod skipwhite skipempty
syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite skipempty syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite skipempty
syn keyword rustKeyword in impl let syn keyword rustKeyword in impl let
syn keyword rustKeyword macro
syn keyword rustKeyword pub nextgroup=rustPubScope skipwhite skipempty syn keyword rustKeyword pub nextgroup=rustPubScope skipwhite skipempty
syn keyword rustKeyword return syn keyword rustKeyword return
syn keyword rustKeyword yield
syn keyword rustSuper super syn keyword rustSuper super
syn keyword rustKeyword unsafe where syn keyword rustKeyword where
syn keyword rustUnsafeKeyword unsafe
syn keyword rustKeyword use nextgroup=rustModPath skipwhite skipempty syn keyword rustKeyword use nextgroup=rustModPath skipwhite skipempty
" FIXME: Scoped impl's name is also fallen in this category " FIXME: Scoped impl's name is also fallen in this category
syn keyword rustKeyword mod trait nextgroup=rustIdentifier skipwhite skipempty syn keyword rustKeyword mod trait nextgroup=rustIdentifier skipwhite skipempty
@ -68,7 +72,7 @@ syn match rustMacroRepeatCount ".\?[*+]" contained
syn match rustMacroVariable "$\w\+" syn match rustMacroVariable "$\w\+"
" Reserved (but not yet used) keywords {{{2 " Reserved (but not yet used) keywords {{{2
syn keyword rustReservedKeyword alignof become do offsetof priv pure sizeof typeof unsized yield abstract virtual final override macro syn keyword rustReservedKeyword alignof become do offsetof priv pure sizeof typeof unsized abstract virtual final override
" Built-in types {{{2 " Built-in types {{{2
syn keyword rustType isize usize char bool u8 u16 u32 u64 u128 f32 syn keyword rustType isize usize char bool u8 u16 u32 u64 u128 f32
@ -139,7 +143,7 @@ syn match rustMacro '#\w\(\w\)*' contains=rustAssert,rustPanic
syn match rustEscapeError display contained /\\./ syn match rustEscapeError display contained /\\./
syn match rustEscape display contained /\\\([nrt0\\'"]\|x\x\{2}\)/ syn match rustEscape display contained /\\\([nrt0\\'"]\|x\x\{2}\)/
syn match rustEscapeUnicode display contained /\\u{\x\{1,6}}/ syn match rustEscapeUnicode display contained /\\u{\%(\x_*\)\{1,6}}/
syn match rustStringContinuation display contained /\\\n\s*/ syn match rustStringContinuation display contained /\\\n\s*/
syn region rustString start=+b"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeError,rustStringContinuation syn region rustString start=+b"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeError,rustStringContinuation
syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustStringContinuation,@Spell syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustStringContinuation,@Spell
@ -169,7 +173,7 @@ syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\=\%([eE
syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\=\%([eE][+-]\=[0-9_]\+\)\=\(f32\|f64\)" syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\=\%([eE][+-]\=[0-9_]\+\)\=\(f32\|f64\)"
" For the benefit of delimitMate " For the benefit of delimitMate
syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt0\\\"]\|x\x\{2}\|u{\x\{1,6}}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt0\\\"]\|x\x\{2}\|u{\%(\x_*\)\{1,6}}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate
syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
@ -180,7 +184,7 @@ syn match rustCharacterInvalid display contained /b\?'\zs[\n\r\t']\ze'/
" The groups negated here add up to 0-255 but nothing else (they do not seem to go beyond ASCII). " The groups negated here add up to 0-255 but nothing else (they do not seem to go beyond ASCII).
syn match rustCharacterInvalidUnicode display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/ syn match rustCharacterInvalidUnicode display contained /b'\zs[^[:cntrl:][:graph:][:alnum:][:space:]]\ze'/
syn match rustCharacter /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=rustEscape,rustEscapeError,rustCharacterInvalid,rustCharacterInvalidUnicode syn match rustCharacter /b'\([^\\]\|\\\(.\|x\x\{2}\)\)'/ contains=rustEscape,rustEscapeError,rustCharacterInvalid,rustCharacterInvalidUnicode
syn match rustCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u{\x\{1,6}}\)\)'/ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustCharacterInvalid syn match rustCharacter /'\([^\\]\|\\\(.\|x\x\{2}\|u{\%(\x_*\)\{1,6}}\)\)'/ contains=rustEscape,rustEscapeUnicode,rustEscapeError,rustCharacterInvalid
syn match rustShebang /\%^#![^[].*/ syn match rustShebang /\%^#![^[].*/
syn region rustCommentLine start="//" end="$" contains=rustTodo,@Spell syn region rustCommentLine start="//" end="$" contains=rustTodo,@Spell
@ -248,6 +252,7 @@ hi def link rustUnion rustStructure
hi def link rustPubScopeDelim Delimiter hi def link rustPubScopeDelim Delimiter
hi def link rustPubScopeCrate rustKeyword hi def link rustPubScopeCrate rustKeyword
hi def link rustSuper rustKeyword hi def link rustSuper rustKeyword
hi def link rustUnsafeKeyword Exception
hi def link rustReservedKeyword Error hi def link rustReservedKeyword Error
hi def link rustRepeat Conditional hi def link rustRepeat Conditional
hi def link rustConditional Conditional hi def link rustConditional Conditional

View File

@ -86,14 +86,13 @@ syntax match swiftOperator "\v\+"
syntax match swiftOperator "\v\=" syntax match swiftOperator "\v\="
syntax match swiftOperator "\v\|" syntax match swiftOperator "\v\|"
syntax match swiftOperator "\v\/" syntax match swiftOperator "\v\/"
syntax match swiftOperator "\v\."
syntax match swiftOperator "\v\<" syntax match swiftOperator "\v\<"
syntax match swiftOperator "\v\>" syntax match swiftOperator "\v\>"
syntax match swiftOperator "\v\?\?" syntax match swiftOperator "\v\?\?"
" Methods/Functions/Properties " Methods/Functions/Properties
syntax match swiftMethod "\(\.\)\@<=\w\+\((\)\@=" syntax match swiftMethod "\.\@<=\<\D\w*\>\ze("
syntax match swiftProperty "\(\.\)\@<=\<\w\+\>(\@!" syntax match swiftProperty "\.\@<=\<\D\w*\>(\@!"
" Swift closure arguments " Swift closure arguments
syntax match swiftClosureArgument "\$\d\+\(\.\d\+\)\?" syntax match swiftClosureArgument "\$\d\+\(\.\d\+\)\?"
@ -188,6 +187,7 @@ syntax keyword swiftAttributes
\ @available \ @available
\ @convention \ @convention
\ @discardableResult \ @discardableResult
\ @escaping
\ @exported \ @exported
\ @IBAction \ @IBAction
\ @IBDesignable \ @IBDesignable
@ -222,7 +222,7 @@ syntax keyword swiftDebugIdentifier
syntax keyword swiftLineDirective #setline syntax keyword swiftLineDirective #setline
syntax region swiftTypeWrapper start="\v:\s*" skip="\s*,\s*$*\s*" end="$\|/"me=e-1 contains=ALLBUT,swiftInterpolatedWrapper transparent syntax region swiftTypeWrapper start=":\s*\(\.\)\@!\<\u" skip="\s*,\s*$*\s*" end="$\|/"me=e-1 contains=ALLBUT,swiftInterpolatedWrapper transparent
syntax region swiftTypeCastWrapper start="\(as\|is\)\(!\|?\)\=\s\+" end="\v(\s|$|\{)" contains=swiftType,swiftCastKeyword keepend transparent oneline syntax region swiftTypeCastWrapper start="\(as\|is\)\(!\|?\)\=\s\+" end="\v(\s|$|\{)" contains=swiftType,swiftCastKeyword keepend transparent oneline
syntax region swiftGenericsWrapper start="\v\<" end="\v\>" contains=swiftType transparent oneline syntax region swiftGenericsWrapper start="\v\<" end="\v\>" contains=swiftType transparent oneline
syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline

View File

@ -24,6 +24,7 @@ syn keyword terraDataTypeBI
\ aws_alb \ aws_alb
\ aws_alb_listener \ aws_alb_listener
\ aws_ami \ aws_ami
\ aws_ami_ids
\ aws_autoscaling_groups \ aws_autoscaling_groups
\ aws_availability_zone \ aws_availability_zone
\ aws_availability_zones \ aws_availability_zones
@ -32,12 +33,17 @@ syn keyword terraDataTypeBI
\ aws_canonical_user_id \ aws_canonical_user_id
\ aws_cloudformation_stack \ aws_cloudformation_stack
\ aws_db_instance \ aws_db_instance
\ aws_db_snapshot
\ aws_ebs_snapshot \ aws_ebs_snapshot
\ aws_ebs_snapshot_ids
\ aws_ebs_volume \ aws_ebs_volume
\ aws_ecs_cluster \ aws_ecs_cluster
\ aws_ecs_container_definition \ aws_ecs_container_definition
\ aws_ecs_task_definition \ aws_ecs_task_definition
\ aws_efs_file_system
\ aws_eip \ aws_eip
\ aws_elastic_beanstalk_solution_stack
\ aws_elasticache_cluster
\ aws_elb_hosted_zone_id \ aws_elb_hosted_zone_id
\ aws_elb_service_account \ aws_elb_service_account
\ aws_iam_account_alias \ aws_iam_account_alias
@ -46,6 +52,9 @@ syn keyword terraDataTypeBI
\ aws_iam_server_certificate \ aws_iam_server_certificate
\ aws_instance \ aws_instance
\ aws_ip_ranges \ aws_ip_ranges
\ aws_kinesis_stream
\ aws_kms_alias
\ aws_kms_ciphertext
\ aws_kms_secret \ aws_kms_secret
\ aws_partition \ aws_partition
\ aws_prefix_list \ aws_prefix_list
@ -56,6 +65,7 @@ syn keyword terraDataTypeBI
\ aws_s3_bucket_object \ aws_s3_bucket_object
\ aws_security_group \ aws_security_group
\ aws_sns_topic \ aws_sns_topic
\ aws_ssm_parameter
\ aws_subnet \ aws_subnet
\ aws_subnet_ids \ aws_subnet_ids
\ aws_vpc \ aws_vpc
@ -64,6 +74,7 @@ syn keyword terraDataTypeBI
\ aws_vpc_peering_connection \ aws_vpc_peering_connection
\ aws_vpn_gateway \ aws_vpn_gateway
\ azurerm_client_config \ azurerm_client_config
\ azurerm_public_ip
\ circonus_account \ circonus_account
\ circonus_collector \ circonus_collector
\ consul_agent_self \ consul_agent_self
@ -71,20 +82,30 @@ syn keyword terraDataTypeBI
\ consul_catalog_service \ consul_catalog_service
\ consul_catalog_services \ consul_catalog_services
\ consul_keys \ consul_keys
\ digitalocean_image
\ dns_a_record_set \ dns_a_record_set
\ dns_cname_record_set \ dns_cname_record_set
\ dns_txt_record_set \ dns_txt_record_set
\ docker_registry_image \ docker_registry_image
\ external \ external
\ fastly_ip_ranges \ fastly_ip_ranges
\ github_team
\ github_user
\ google_compute_network
\ google_compute_subnetwork
\ google_compute_zones \ google_compute_zones
\ google_container_engine_versions
\ google_iam_policy \ google_iam_policy
\ google_storage_object_signed_url
\ http
\ newrelic_application \ newrelic_application
\ ns1_datasource \ ns1_datasource
\ null_data_source \ null_data_source
\ openstack_images_image_v2 \ openstack_images_image_v2
\ openstack_networking_network_v2 \ openstack_networking_network_v2
\ opsgenie_user \ opsgenie_user
\ ovh_publiccloud_region
\ ovh_publiccloud_regions
\ pagerduty_escalation_policy \ pagerduty_escalation_policy
\ pagerduty_schedule \ pagerduty_schedule
\ pagerduty_user \ pagerduty_user
@ -106,6 +127,11 @@ syn keyword terraResourceTypeBI
\ alicloud_disk_attachment \ alicloud_disk_attachment
\ alicloud_eip \ alicloud_eip
\ alicloud_eip_association \ alicloud_eip_association
\ alicloud_ess_scaling_configuration
\ alicloud_ess_scaling_group
\ alicloud_ess_scaling_rule
\ alicloud_ess_schedule
\ alicloud_forward_entry
\ alicloud_instance \ alicloud_instance
\ alicloud_nat_gateway \ alicloud_nat_gateway
\ alicloud_route_entry \ alicloud_route_entry
@ -113,6 +139,7 @@ syn keyword terraResourceTypeBI
\ alicloud_security_group_rule \ alicloud_security_group_rule
\ alicloud_slb \ alicloud_slb
\ alicloud_slb_attachment \ alicloud_slb_attachment
\ alicloud_snat_entry
\ alicloud_subnet \ alicloud_subnet
\ alicloud_vpc \ alicloud_vpc
\ alicloud_vswitch \ alicloud_vswitch
@ -174,6 +201,7 @@ syn keyword terraResourceTypeBI
\ aws_codedeploy_deployment_config \ aws_codedeploy_deployment_config
\ aws_codedeploy_deployment_group \ aws_codedeploy_deployment_group
\ aws_codepipeline \ aws_codepipeline
\ aws_cognito_identity_pool
\ aws_config_config_rule \ aws_config_config_rule
\ aws_config_configuration_recorder \ aws_config_configuration_recorder
\ aws_config_configuration_recorder_status \ aws_config_configuration_recorder_status
@ -184,10 +212,15 @@ syn keyword terraResourceTypeBI
\ aws_db_option_group \ aws_db_option_group
\ aws_db_parameter_group \ aws_db_parameter_group
\ aws_db_security_group \ aws_db_security_group
\ aws_db_snapshot
\ aws_db_subnet_group \ aws_db_subnet_group
\ aws_default_network_acl \ aws_default_network_acl
\ aws_default_route_table \ aws_default_route_table
\ aws_default_security_group \ aws_default_security_group
\ aws_default_subnet
\ aws_default_vpc
\ aws_default_vpc_dhcp_options
\ aws_devicefarm_project
\ aws_directory_service_directory \ aws_directory_service_directory
\ aws_dms_certificate \ aws_dms_certificate
\ aws_dms_endpoint \ aws_dms_endpoint
@ -224,6 +257,7 @@ syn keyword terraResourceTypeBI
\ aws_elb_attachment \ aws_elb_attachment
\ aws_emr_cluster \ aws_emr_cluster
\ aws_emr_instance_group \ aws_emr_instance_group
\ aws_emr_security_configuration
\ aws_flow_log \ aws_flow_log
\ aws_glacier_vault \ aws_glacier_vault
\ aws_iam_access_key \ aws_iam_access_key
@ -277,6 +311,7 @@ syn keyword terraResourceTypeBI
\ aws_network_acl \ aws_network_acl
\ aws_network_acl_rule \ aws_network_acl_rule
\ aws_network_interface \ aws_network_interface
\ aws_network_interface_attachment
\ aws_opsworks_application \ aws_opsworks_application
\ aws_opsworks_custom_layer \ aws_opsworks_custom_layer
\ aws_opsworks_ganglia_layer \ aws_opsworks_ganglia_layer
@ -338,6 +373,12 @@ syn keyword terraResourceTypeBI
\ aws_ssm_activation \ aws_ssm_activation
\ aws_ssm_association \ aws_ssm_association
\ aws_ssm_document \ aws_ssm_document
\ aws_ssm_maintenance_window
\ aws_ssm_maintenance_window_target
\ aws_ssm_maintenance_window_task
\ aws_ssm_parameter
\ aws_ssm_patch_baseline
\ aws_ssm_patch_group
\ aws_subnet \ aws_subnet
\ aws_volume_attachment \ aws_volume_attachment
\ aws_vpc \ aws_vpc
@ -358,6 +399,8 @@ syn keyword terraResourceTypeBI
\ aws_waf_sql_injection_match_set \ aws_waf_sql_injection_match_set
\ aws_waf_web_acl \ aws_waf_web_acl
\ aws_waf_xss_match_set \ aws_waf_xss_match_set
\ aws_wafregional_byte_match_set
\ aws_wafregional_ipset
\ azure_affinity_group \ azure_affinity_group
\ azure_data_disk \ azure_data_disk
\ azure_dns_server \ azure_dns_server
@ -391,6 +434,7 @@ syn keyword terraResourceTypeBI
\ azurerm_eventhub_authorization_rule \ azurerm_eventhub_authorization_rule
\ azurerm_eventhub_consumer_group \ azurerm_eventhub_consumer_group
\ azurerm_eventhub_namespace \ azurerm_eventhub_namespace
\ azurerm_express_route_circuit
\ azurerm_key_vault \ azurerm_key_vault
\ azurerm_lb \ azurerm_lb
\ azurerm_lb_backend_address_pool \ azurerm_lb_backend_address_pool
@ -413,6 +457,7 @@ syn keyword terraResourceTypeBI
\ azurerm_servicebus_subscription \ azurerm_servicebus_subscription
\ azurerm_servicebus_topic \ azurerm_servicebus_topic
\ azurerm_sql_database \ azurerm_sql_database
\ azurerm_sql_elasticpool
\ azurerm_sql_firewall_rule \ azurerm_sql_firewall_rule
\ azurerm_sql_server \ azurerm_sql_server
\ azurerm_storage_account \ azurerm_storage_account
@ -493,6 +538,7 @@ syn keyword terraResourceTypeBI
\ datadog_monitor \ datadog_monitor
\ datadog_timeboard \ datadog_timeboard
\ datadog_user \ datadog_user
\ digitalocean_certificate
\ digitalocean_domain \ digitalocean_domain
\ digitalocean_droplet \ digitalocean_droplet
\ digitalocean_floating_ip \ digitalocean_floating_ip
@ -513,6 +559,7 @@ syn keyword terraResourceTypeBI
\ docker_volume \ docker_volume
\ dyn_record \ dyn_record
\ fastly_service_v1 \ fastly_service_v1
\ github_branch_protection
\ github_issue_label \ github_issue_label
\ github_membership \ github_membership
\ github_organization_webhook \ github_organization_webhook
@ -522,8 +569,15 @@ syn keyword terraResourceTypeBI
\ github_team \ github_team
\ github_team_membership \ github_team_membership
\ github_team_repository \ github_team_repository
\ gitlab_deploy_key
\ gitlab_group
\ gitlab_project
\ gitlab_project_hook
\ google_bigquery_dataset
\ google_bigquery_table
\ google_compute_address \ google_compute_address
\ google_compute_autoscaler \ google_compute_autoscaler
\ google_compute_backend_bucket
\ google_compute_backend_service \ google_compute_backend_service
\ google_compute_disk \ google_compute_disk
\ google_compute_firewall \ google_compute_firewall
@ -542,6 +596,10 @@ syn keyword terraResourceTypeBI
\ google_compute_project_metadata \ google_compute_project_metadata
\ google_compute_region_backend_service \ google_compute_region_backend_service
\ google_compute_route \ google_compute_route
\ google_compute_router
\ google_compute_router_interface
\ google_compute_router_peer
\ google_compute_snapshot
\ google_compute_ssl_certificate \ google_compute_ssl_certificate
\ google_compute_subnetwork \ google_compute_subnetwork
\ google_compute_target_http_proxy \ google_compute_target_http_proxy
@ -569,9 +627,13 @@ syn keyword terraResourceTypeBI
\ google_storage_object_acl \ google_storage_object_acl
\ heroku_addon \ heroku_addon
\ heroku_app \ heroku_app
\ heroku_app_feature
\ heroku_cert \ heroku_cert
\ heroku_domain \ heroku_domain
\ heroku_drain \ heroku_drain
\ heroku_pipeline
\ heroku_pipeline_coupling
\ heroku_space
\ icinga2_checkcommand \ icinga2_checkcommand
\ icinga2_host \ icinga2_host
\ icinga2_hostgroup \ icinga2_hostgroup
@ -589,14 +651,20 @@ syn keyword terraResourceTypeBI
\ influxdb_database \ influxdb_database
\ influxdb_user \ influxdb_user
\ kubernetes_config_map \ kubernetes_config_map
\ kubernetes_horizontal_pod_autoscaler
\ kubernetes_limit_range
\ kubernetes_namespace \ kubernetes_namespace
\ kubernetes_persistent_volume \ kubernetes_persistent_volume
\ kubernetes_persistent_volume_claim \ kubernetes_persistent_volume_claim
\ kubernetes_resource_quota
\ kubernetes_secret \ kubernetes_secret
\ kubernetes_service
\ librato_alert \ librato_alert
\ librato_metric
\ librato_service \ librato_service
\ librato_space \ librato_space
\ librato_space_chart \ librato_space_chart
\ local_file
\ logentries_log \ logentries_log
\ logentries_logset \ logentries_logset
\ mailgun_domain \ mailgun_domain
@ -609,6 +677,14 @@ syn keyword terraResourceTypeBI
\ newrelic_alert_policy_channel \ newrelic_alert_policy_channel
\ nomad_job \ nomad_job
\ null_resource \ null_resource
\ oneandone_firewall_policy
\ oneandone_loadbalancer
\ oneandone_monitoring_policy
\ oneandone_private_network
\ oneandone_public_ip
\ oneandone_server
\ oneandone_shared_storage
\ oneandone_vpn
\ openstack_blockstorage_volume_attach_v2 \ openstack_blockstorage_volume_attach_v2
\ openstack_blockstorage_volume_v1 \ openstack_blockstorage_volume_v1
\ openstack_blockstorage_volume_v2 \ openstack_blockstorage_volume_v2
@ -619,6 +695,8 @@ syn keyword terraResourceTypeBI
\ openstack_compute_secgroup_v2 \ openstack_compute_secgroup_v2
\ openstack_compute_servergroup_v2 \ openstack_compute_servergroup_v2
\ openstack_compute_volume_attach_v2 \ openstack_compute_volume_attach_v2
\ openstack_dns_recordset_v2
\ openstack_dns_zone_v2
\ openstack_fw_firewall_v1 \ openstack_fw_firewall_v1
\ openstack_fw_policy_v1 \ openstack_fw_policy_v1
\ openstack_fw_rule_v1 \ openstack_fw_rule_v1
@ -644,6 +722,10 @@ syn keyword terraResourceTypeBI
\ openstack_objectstorage_container_v1 \ openstack_objectstorage_container_v1
\ opsgenie_team \ opsgenie_team
\ opsgenie_user \ opsgenie_user
\ ovh_publiccloud_private_network
\ ovh_publiccloud_private_network_subnet
\ ovh_publiccloud_user
\ ovh_vrack_publiccloud_attachment
\ packet_device \ packet_device
\ packet_project \ packet_project
\ packet_ssh_key \ packet_ssh_key
@ -701,6 +783,7 @@ syn keyword terraResourceTypeBI
\ spotinst_healthcheck \ spotinst_healthcheck
\ spotinst_subscription \ spotinst_subscription
\ statuscake_test \ statuscake_test
\ template_dir
\ tls_cert_request \ tls_cert_request
\ tls_locally_signed_cert \ tls_locally_signed_cert
\ tls_private_key \ tls_private_key
@ -713,9 +796,11 @@ syn keyword terraResourceTypeBI
\ ultradns_dirpool \ ultradns_dirpool
\ ultradns_probe_http \ ultradns_probe_http
\ ultradns_probe_ping \ ultradns_probe_ping
\ ultradns_rdpool
\ ultradns_record \ ultradns_record
\ ultradns_tcpool \ ultradns_tcpool
\ vcd_dnat \ vcd_dnat
\ vcd_edgegateway_vpn
\ vcd_firewall_rules \ vcd_firewall_rules
\ vcd_network \ vcd_network
\ vcd_snat \ vcd_snat
@ -764,9 +849,13 @@ syn match terraBraces "[{}\[\]]"
""" skip \" in strings. """ skip \" in strings.
""" we may also want to pass \\" into a function to escape quotes. """ we may also want to pass \\" into a function to escape quotes.
syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction contained syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction,terraValueVarSubscript,terraStringInterp contained
syn region terraHereDocText start=/<<\z([A-Z]\+\)/ end=/^\z1/ contains=terraStringInterp
"" TODO match keywords here, not a-z+ "" TODO match keywords here, not a-z+
syn region terraValueFunction matchgroup=terraBrackets start=/[0-9a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction contained syn region terraValueFunction matchgroup=terraBrackets start=/[a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction,terraValueVarSubscript contained
" User variables or module outputs can be lists or maps, and accessed with
" var.map["foo"]
syn region terraValueVarSubscript start=/\(\<var\|\<module\)\.[a-z0-9_-]\+\[/ end=/\]/ contains=terraValueString,terraValueFunction,terraValueVarSubscript contained
hi def link terraComment Comment hi def link terraComment Comment
hi def link terraTodo Todo hi def link terraTodo Todo
@ -788,11 +877,13 @@ hi def link terraValueBool Boolean
hi def link terraValueDec Number hi def link terraValueDec Number
hi def link terraValueHexaDec Number hi def link terraValueHexaDec Number
hi def link terraValueString String hi def link terraValueString String
hi def link terraHereDocText String
hi def link terraProvisioner Structure hi def link terraProvisioner Structure
hi def link terraProvisionerName String hi def link terraProvisionerName String
hi def link terraModule Structure hi def link terraModule Structure
hi def link terraModuleName String hi def link terraModuleName String
hi def link terraValueFunction Identifier hi def link terraValueFunction Identifier
hi def link terraValueVarSubscript Identifier
let b:current_syntax = "terraform" let b:current_syntax = "terraform"

View File

@ -53,6 +53,8 @@ hi def link tomlTodo Todo
syn match tomlComment /#.*/ contains=@Spell,tomlTodo syn match tomlComment /#.*/ contains=@Spell,tomlTodo
hi def link tomlComment Comment hi def link tomlComment Comment
syn sync minlines=500
let b:current_syntax = "toml" let b:current_syntax = "toml"
endif endif

View File

@ -58,7 +58,7 @@ syn match valaOperator display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\|?\)=\
" Delimiters " Delimiters
syn match valaDelimiter display "(\|)\|\[\|\]\|,\|;\|:\|{\|}\|\k\@<!_\k\@!\|[[:punct:]]\@<!@[[:punct:]]\@!" syn match valaDelimiter display "(\|)\|\[\|\]\|,\|;\|:\|{\|}\|\k\@<!_\k\@!\|[[:punct:]]\@<!@[[:punct:]]\@!"
" Enum Fields " Enum Fields
syn match valaEnumField "\.\([A-Z_]\)\+\([A-Z_]\)\+"hs=s+1 " ensure there are at least 2 CAPS syn match valaEnumField "\.\([A-Z_]\)\+\([A-Z_0-9]\)\+"hs=s+1 " ensure there are at least 2 CAPS or 1 CAP and 1 number
" Comments " Comments
syn cluster valaCommentGroup contains=valaTodo syn cluster valaCommentGroup contains=valaTodo
@ -160,7 +160,6 @@ endif
exec "syn sync ccomment valaComment minlines=" . b:vala_minlines exec "syn sync ccomment valaComment minlines=" . b:vala_minlines
" code folding " code folding
set foldmethod=syntax
syn region valaBlock start="{" end="}" transparent fold syn region valaBlock start="{" end="}" transparent fold
" The default highlighting. " The default highlighting.

View File

@ -42,16 +42,18 @@ function! s:register_language(language, tag, ...)
endif endif
endfunction endfunction
call s:register_language('pug', 'template', s:attr('lang', '\%(pug\|jade\)')) if !exists("g:vue_disable_pre_processors") || !g:vue_disable_pre_processors
call s:register_language('slm', 'template') call s:register_language('pug', 'template', s:attr('lang', '\%(pug\|jade\)'))
call s:register_language('handlebars', 'template') call s:register_language('slm', 'template')
call s:register_language('haml', 'template') call s:register_language('handlebars', 'template')
call s:register_language('typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)') call s:register_language('haml', 'template')
call s:register_language('coffee', 'script') call s:register_language('typescript', 'script', '\%(lang=\("\|''\)[^\1]*\(ts\|typescript\)[^\1]*\1\|ts\)')
call s:register_language('stylus', 'style') call s:register_language('coffee', 'script')
call s:register_language('sass', 'style') call s:register_language('stylus', 'style')
call s:register_language('scss', 'style') call s:register_language('sass', 'style')
call s:register_language('less', 'style') call s:register_language('scss', 'style')
call s:register_language('less', 'style')
endif
syn region vueSurroundingTag contained start=+<\(script\|style\|template\)+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent syn region vueSurroundingTag contained start=+<\(script\|style\|template\)+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
syn keyword htmlSpecialTagName contained template syn keyword htmlSpecialTagName contained template