This commit is contained in:
Adam Stankiewicz
2020-07-06 19:13:39 +02:00
parent d09a56a494
commit 8500ae8bb9
20 changed files with 1000 additions and 531 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,5 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
let s:save_cpo = &cpo
set cpo&vim
let s:V = vital#crystal#new() let s:V = vital#crystal#new()
let s:P = s:V.import('Process') let s:P = s:V.import('Process')
let s:C = s:V.import('ColorEcho') let s:C = s:V.import('ColorEcho')
@@ -365,9 +362,6 @@ function! crystal_lang#expand(file, pos, ...) abort
return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, '')) return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: sw=2 sts=2 et: " vim: sw=2 sts=2 et:
endif endif

View File

@@ -27,12 +27,16 @@ function! s:clearQfList(reason) abort
endif endif
endfunction endfunction
function! dart#fmt(q_args) abort function! dart#fmt(...) abort
let cmd = s:FindDartFmt() let l:dartfmt = s:FindDartFmt()
if type(cmd) != type('') | return | endif if type(l:dartfmt) != type('') | return | endif
let buffer_content = getline(1, '$') let buffer_content = getline(1, '$')
let args = '--stdin-name '.expand('%').' '.a:q_args let l:cmd = [l:dartfmt, '--stdin-name', shellescape(expand('%'))]
let lines = systemlist(printf('%s %s', cmd, args), join(buffer_content, "\n")) if exists('g:dartfmt_options')
call extend(l:cmd, g:dartfmt_options)
endif
call extend(l:cmd, a:000)
let lines = systemlist(join(l:cmd), join(buffer_content, "\n"))
" TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the " TODO(https://github.com/dart-lang/sdk/issues/38507) - Remove once the
" tool no longer emits this line on SDK upgrades. " tool no longer emits this line on SDK upgrades.
if lines[-1] ==# 'Isolate creation failed' if lines[-1] ==# 'Isolate creation failed'

View File

@@ -10,8 +10,6 @@ execute join(['function! vital#_crystal#ColorEcho#import() abort', printf("retur
delfunction s:_SID delfunction s:_SID
" ___vital___ " ___vital___
scriptencoding utf-8 scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim
function! s:_is_available() abort function! s:_is_available() abort
if has('gui_running') if has('gui_running')
@@ -185,7 +183,4 @@ function! s:echo(str) abort
call echorizer.echo() call echorizer.echo()
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
endif endif

View File

@@ -11,9 +11,6 @@ delfunction s:_SID
" ___vital___ " ___vital___
" Utilities for list. " Utilities for list.
let s:save_cpo = &cpo
set cpo&vim
function! s:pop(list) abort function! s:pop(list) abort
return remove(a:list, -1) return remove(a:list, -1)
endfunction endfunction
@@ -460,9 +457,6 @@ function! s:combinations(list, r) abort
return result return result
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -11,9 +11,6 @@ delfunction s:_SID
" ___vital___ " ___vital___
" Utilities for string. " Utilities for string.
let s:save_cpo = &cpo
set cpo&vim
function! s:_vital_loaded(V) abort function! s:_vital_loaded(V) abort
let s:V = a:V let s:V = a:V
let s:L = s:V.import('Data.List') let s:L = s:V.import('Data.List')
@@ -624,8 +621,6 @@ function! s:split_posix_text(text, ...) abort
return split(text, newline, 1) return split(text, newline, 1)
endfunction endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -15,9 +15,6 @@ delfunction s:_SID
" FIXME: This module name should be Vital.System ? " FIXME: This module name should be Vital.System ?
" But the name has been already taken. " But the name has been already taken.
let s:save_cpo = &cpo
set cpo&vim
" FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose. " FIXME: Unfortunately, can't use s:_vital_loaded() for this purpose.
" Because these variables are used when this script file is loaded. " Because these variables are used when this script file is loaded.
@@ -169,9 +166,6 @@ else
endif endif
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -9,8 +9,6 @@ endfunction
execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n") execute join(['function! vital#_crystal#Web#JSON#import() abort', printf("return map({'decode': '', '_vital_depends': '', '_vital_created': '', 'encode': '', '_vital_loaded': ''}, \"vital#_crystal#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
delfunction s:_SID delfunction s:_SID
" ___vital___ " ___vital___
let s:save_cpo = &cpo
set cpo&vim
function! s:_true() abort function! s:_true() abort
return 1 return 1
@@ -174,9 +172,6 @@ function! s:_encode_dict(val, settings) abort
endfunction endfunction
" @vimlint(EVL102, 0, l:ns) " @vimlint(EVL102, 0, l:ns)
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0: " vim:set et ts=2 sts=2 sw=2 tw=0:
endif endif

View File

@@ -5,34 +5,6 @@ if exists('b:did_ftplugin')
endif endif
let b:did_ftplugin = 1 let b:did_ftplugin = 1
" This file is loaded on 'ecrystal' filetype
if &filetype !=# 'crystal'
finish
endif
let s:save_cpo = &cpo
set cpo&vim
if exists('loaded_matchit') && !exists('b:match_words')
let b:match_ignorecase = 0
let b:match_words =
\ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|struct\|lib\|macro\|ifdef\|def\|fun\|begin\|enum\)\>=\@!' .
\ ':' .
\ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' .
\ ':' .
\ '\<end\>' .
\ ',{:},\[:\],(:)'
let b:match_skip =
\ "synIDattr(synID(line('.'),col('.'),0),'name') =~ '" .
\ "\\<crystal\\%(String\\|StringDelimiter\\|ASCIICode\\|Escape\\|" .
\ "Interpolation\\|NoInterpolation\\|Comment\\|Documentation\\|" .
\ "ConditionalModifier\\|RepeatModifier\\|OptionalDo\\|" .
\ "Function\\|BlockArgument\\|KeywordAsMethod\\|ClassVariable\\|" .
\ "InstanceVariable\\|GlobalVariable\\|Symbol\\)\\>'"
endif
setlocal comments=:# setlocal comments=:#
setlocal commentstring=#\ %s setlocal commentstring=#\ %s
setlocal suffixesadd=.cr setlocal suffixesadd=.cr
@@ -81,14 +53,33 @@ if &l:ofu ==# ''
setlocal omnifunc=crystal_lang#complete setlocal omnifunc=crystal_lang#complete
endif endif
if exists('AutoPairsLoaded') " Options for vim-matchit
if exists('g:loaded_matchit') && !exists('b:match_words')
let b:match_ignorecase = 0
let b:match_words =
\ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|struct\|lib\|macro\|ifdef\|def\|begin\|enum\|annotation\)\>=\@!' .
\ ':' .
\ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|next\)\>' .
\ ':' .
\ '\<end\>' .
\ ',{:},\[:\],(:)'
let b:match_skip =
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~# ''' .
\ '\<crystal\%(String\|StringDelimiter\|ASCIICode\|Escape\|' .
\ 'Interpolation\|NoInterpolation\|Comment\|Documentation\|' .
\ 'ConditionalModifier\|' .
\ 'Function\|BlockArgument\|KeywordAsMethod\|ClassVariable\|' .
\ 'InstanceVariable\|GlobalVariable\|Symbol\)\>'''
endif
" Options for jiangmiao/auto-pairs
if exists('g:AutoPairsLoaded')
let b:AutoPairs = { '{%': '%}' } let b:AutoPairs = { '{%': '%}' }
call extend(b:AutoPairs, g:AutoPairs, 'force') call extend(b:AutoPairs, g:AutoPairs, 'force')
endif endif
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: sw=2 sts=2 et: " vim: sw=2 sts=2 et:
endif endif

View File

@@ -119,7 +119,7 @@ endif
" TODO: comments= " TODO: comments=
setlocal commentstring=<%#%s%> setlocal commentstring=<%#%s%>
let b:undo_ftplugin = "setl cms< " let b:undo_ftplugin = "setl cms< " .
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
let &cpo = s:save_cpo let &cpo = s:save_cpo

View File

@@ -1,21 +1,21 @@
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1 if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'crystal') == -1
" Initialization {{{1
" ==============
" 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')
finish finish
endif endif
let b:did_indent = 1 let b:did_indent = 1
setlocal nosmartindent setlocal nosmartindent
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetCrystalIndent(v:lnum) setlocal indentexpr=GetCrystalIndent(v:lnum)
setlocal indentkeys=0{,0},0),0],!^F,o,O,e,:,. setlocal indentkeys=0{,0},0),0],!^F,o,O,e,.
setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue
setlocal indentkeys+==private,=protected
let s:cpo_save = &cpo
set cpo&vim
" Only define the function once. " Only define the function once.
if exists('*GetCrystalIndent') if exists('*GetCrystalIndent')
@@ -26,7 +26,7 @@ endif
if exists('*shiftwidth') if exists('*shiftwidth')
let s:sw = function('shiftwidth') let s:sw = function('shiftwidth')
else else
function s:sw() function! s:sw()
return &shiftwidth return &shiftwidth
endfunction endfunction
endif endif
@@ -34,262 +34,81 @@ endif
" GetCrystalIndent Function {{{1 " GetCrystalIndent Function {{{1
" ========================= " =========================
function GetCrystalIndent(...) function! GetCrystalIndent(...) abort
" Setup {{{2 " Setup {{{2
" ----- " -----
" For the current line, use the first argument if given, else v:lnum let indent_info = {}
let clnum = a:0 ? a:1 : v:lnum
" Set up variables for restoring position in file " The value of a single shift-width
let vcol = col('.') let indent_info.sw = s:sw()
" For the current line, use the first argument if given, else v:lnum
let indent_info.clnum = a:0 ? a:1 : v:lnum
let indent_info.cline = getline(indent_info.clnum)
" Set up variables for restoring position in file.
let indent_info.col = col('.')
" Work on the current line {{{2 " Work on the current line {{{2
" ------------------------ " ------------------------
" Get the current line. for callback_name in g:crystal#indent#curr_line_callbacks
let line = getline(clnum) let indent = call(function(callback_name), [indent_info])
let ind = -1
" If we got a closing bracket on an empty line, find its match and indent if indent >= 0
" according to it. For parentheses we indent to its column - 1, for the return indent
" others we indent to the containing line's MSL's level. Return -1 if fail.
let col = matchend(line, '^\s*[]})]')
if col > 0 && !crystal#indent#IsInStringOrComment(clnum, col)
call cursor(clnum, col)
let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', g:crystal#indent#skip_expr)
if line[col-1] ==# ')' && col('.') != col('$') - 1
let ind = virtcol('.') - 1
else
let ind = indent(crystal#indent#GetMSL(line('.')))
endif
endif endif
return ind endfor
endif
" If we have a deindenting keyword, find its match and indent to its level.
" TODO: this is messy
if crystal#indent#Match(clnum, g:crystal#indent#crystal_deindent_keywords)
call cursor(clnum, 1)
if searchpair(
\ g:crystal#indent#end_start_regex,
\ g:crystal#indent#end_middle_regex,
\ g:crystal#indent#end_end_regex,
\ 'bW', g:crystal#indent#skip_expr)
let msl = crystal#indent#GetMSL(line('.'))
let line = getline(line('.'))
if strpart(line, 0, col('.') - 1) =~# '=\s*$' &&
\ strpart(line, col('.') - 1, 2) !~# 'do'
" assignment to case/begin/etc, on the same line, hanging indent
let ind = virtcol('.') - 1
elseif getline(msl) =~# '=\s*\(#.*\)\=$'
" in the case of assignment to the msl, align to the starting line,
" not to the msl
let ind = indent(line('.'))
else
" align to the msl
let ind = indent(msl)
endif
endif
return ind
endif
" If we are in a multi-line string, don't do anything to it.
if crystal#indent#IsInString(clnum, matchend(line, '^\s*') + 1)
return indent('.')
endif
" If we are at the closing delimiter of a "<<" heredoc-style string, set the
" indent to 0.
if line =~# '^\k\+\s*$'
\ && crystal#indent#IsInStringDelimiter(clnum, 1)
\ && search('\V<<'.line, 'nbW')
return 0
endif
" If the current line starts with a leading operator, add a level of indent.
if crystal#indent#Match(clnum, g:crystal#indent#leading_operator_regex)
return indent(crystal#indent#GetMSL(clnum)) + s:sw()
endif
" Work on the previous line. {{{2 " Work on the previous line. {{{2
" -------------------------- " --------------------------
" Find a non-blank, non-multi-line string line above the current line. " Special case: we don't need the real PrevNonBlank for an empty line
let lnum = crystal#indent#PrevNonBlankNonString(clnum - 1) " inside a string. And that call can be quite expensive in that
" particular situation.
let indent = crystal#indent#EmptyInsideString(indent_info)
" If the line is empty and inside a string, use the previous line. if indent >= 0
if line =~# '^\s*$' && lnum != prevnonblank(clnum - 1) return indent
return indent(prevnonblank(clnum))
endif endif
" At the start of the file use zero indent. " Previous line number
if lnum == 0 let indent_info.plnum = crystal#indent#PrevNonBlank(indent_info.clnum - 1)
return 0 let indent_info.pline = getline(indent_info.plnum)
endif
" Set up variables for the previous line. for callback_name in g:crystal#indent#prev_line_callbacks
let line = getline(lnum) let indent = call(function(callback_name), [indent_info])
let ind = indent(lnum)
if crystal#indent#Match(lnum, g:crystal#indent#continuable_regex) && if indent >= 0
\ crystal#indent#Match(lnum, g:crystal#indent#continuation_regex) return indent
return indent(crystal#indent#GetMSL(lnum)) + s:sw() * 2
endif
" If the previous line ended with a block opening, add a level of indent.
if crystal#indent#Match(lnum, g:crystal#indent#block_regex)
let msl = crystal#indent#GetMSL(lnum)
if getline(msl) =~# '=\s*\(#.*\)\=$'
" in the case of assignment to the msl, align to the starting line,
" not to the msl
let ind = indent(lnum) + s:sw()
else
let ind = indent(msl) + s:sw()
endif endif
return ind endfor
endif
" If the previous line started with a leading operator, use its MSL's level " Work on the MSL. {{{2
" of indent " ----------------
if crystal#indent#Match(lnum, g:crystal#indent#leading_operator_regex)
return indent(crystal#indent#GetMSL(lnum))
endif
" If the previous line ended with the "*" of a splat, add a level of indent " Most Significant line based on the previous one -- in case it's a
if line =~ g:crystal#indent#splat_regex " contination of something above
return indent(lnum) + s:sw() let indent_info.plnum_msl = crystal#indent#GetMSL(indent_info.plnum)
endif let indent_info.pline_msl = getline(indent_info.plnum_msl)
" If the previous line contained unclosed opening brackets and we are still for callback_name in g:crystal#indent#msl_callbacks
" in them, find the rightmost one and add indent depending on the bracket let indent = call(function(callback_name), [indent_info])
" type.
"
" If it contained hanging closing brackets, find the rightmost one, find its
" match and indent according to that.
if line =~# '[[({]' || line =~# '[])]\s*\%(#.*\)\=$'
let [opening, closing] = crystal#indent#ExtraBrackets(lnum)
if opening.pos != -1 if indent >= 0
if opening.type ==# '(' && searchpair('(', '', ')', 'bW', g:crystal#indent#skip_expr) return indent
if col('.') + 1 == col('$')
return ind + s:sw()
else
return virtcol('.')
endif
else
let nonspace = matchend(line, '\S', opening.pos + 1) - 1
return nonspace > 0 ? nonspace : ind + s:sw()
endif
elseif closing.pos != -1
call cursor(lnum, closing.pos + 1)
keepjumps normal! %
if crystal#indent#Match(line('.'), g:crystal#indent#crystal_indent_keywords)
return indent('.') + s:sw()
else
return indent('.')
endif
else
call cursor(clnum, vcol)
end
endif
" If the previous line ended with an "end", match that "end"s beginning's
" indent.
let col = crystal#indent#Match(lnum, g:crystal#indent#end_end_regex)
if col
call cursor(lnum, col)
if searchpair(
\ g:crystal#indent#end_start_regex,
\ g:crystal#indent#end_middle_regex,
\ g:crystal#indent#end_end_regex,
\ 'bW',
\ g:crystal#indent#skip_expr)
let n = line('.')
let ind = indent('.')
let msl = crystal#indent#GetMSL(n)
if msl != n
let ind = indent(msl)
end
return ind
endif endif
end endfor
let col = crystal#indent#Match(lnum, g:crystal#indent#crystal_indent_keywords)
if col
call cursor(lnum, col)
let ind = virtcol('.') - 1 + s:sw()
" TODO: make this better (we need to count them) (or, if a searchpair
" fails, we know that something is lacking an end and thus we indent a
" level
if crystal#indent#Match(lnum, g:crystal#indent#end_end_regex)
let ind = indent('.')
endif
return ind
endif
" Work on the MSL line. {{{2
" ---------------------
" Set up variables to use and search for MSL to the previous line.
let p_lnum = lnum
let lnum = crystal#indent#GetMSL(lnum)
" If the previous line wasn't a MSL.
if p_lnum != lnum
" If previous line ends bracket and begins non-bracket continuation decrease indent by 1.
if crystal#indent#Match(p_lnum, g:crystal#indent#bracket_switch_continuation_regex)
return ind - 1
" If previous line is a continuation return its indent.
" TODO: the || crystal#indent#IsInString() thing worries me a bit.
elseif crystal#indent#Match(p_lnum, g:crystal#indent#non_bracket_continuation_regex) ||
\ crystal#indent#IsInString(p_lnum,strlen(line))
return ind
endif
endif
" Set up more variables, now that we know we wasn't continuation bound.
let line = getline(lnum)
let msl_ind = indent(lnum)
" If the MSL line had an indenting keyword in it, add a level of indent.
" TODO: this does not take into account contrived things such as
" module Foo; class Bar; end
if crystal#indent#Match(lnum, g:crystal#indent#crystal_indent_keywords)
let ind = msl_ind + s:sw()
if crystal#indent#Match(lnum, g:crystal#indent#end_end_regex)
let ind = ind - s:sw()
endif
return ind
endif
" If the previous line ended with an operator -- but wasn't a block
" ending, closing bracket, or type declaration -- indent one extra
" level.
if crystal#indent#Match(lnum, g:crystal#indent#non_bracket_continuation_regex) &&
\ !crystal#indent#Match(lnum, '^\s*\([\])}]\|end\)')
if lnum == p_lnum
let ind = msl_ind + s:sw()
else
let ind = msl_ind
endif
return ind
endif
" }}}2 " }}}2
return ind " By default, just return the previous line's indent
return indent(indent_info.plnum)
endfunction endfunction
" }}}1 " }}}1
let &cpo = s:cpo_save " vim:sw=2 sts=2 ts=8 fdm=marker et:
unlet s:cpo_save
" vim:set sw=2 sts=2 ts=8 et:
endif endif

View File

@@ -71,8 +71,7 @@ let s:ecr_control_open = '<%%\@!-\=[=#]\@!'
let s:ecr_comment_open = '<%%\@!-\=#' let s:ecr_comment_open = '<%%\@!-\=#'
let s:ecr_indent_regex = let s:ecr_indent_regex =
\ '\<\%(if\|unless\|else\|elsif\|case\|for\|when\|while\|until\|begin\|do\|rescue\|ensure\|' . \ '\<\%(if\|unless\|else\|elsif\|case\|when\|while\|until\|begin\|do\|rescue\|ensure\|\)\>'
\ 'class\|module\|struct\|lib\|enum\|union\)\>'
let s:ecr_dedent_regex = let s:ecr_dedent_regex =
\ '\<\%(end\|else\|elsif\|when\|rescue\|ensure\)\>' \ '\<\%(end\|else\|elsif\|when\|rescue\|ensure\)\>'

View File

@@ -77,7 +77,7 @@ endfunction
function! s:getIncIndent() abort function! s:getIncIndent() abort
" Function to determine the s:incIndent pattern " Function to determine the s:incIndent pattern
return return
\ '^\s*\%(class\|entity\|object\|interface\|partition\|rectangle\|enum\|namespace\|package\)\>.*{\s*$\|' . \ '^\s*\%(artifact\|class\|cloud\|database\|entity\|enum\|file\|folder\|frame\|interface\|namespace\|node\|object\|package\|partition\|rectangle\|skinparam\|state\|storage\|together\)\>.*{\s*$\|' .
\ '^\s*\%(loop\|alt\|opt\|group\|critical\|else\|legend\|box\|if\|while\|fork\|split\)\>\|' . \ '^\s*\%(loop\|alt\|opt\|group\|critical\|else\|legend\|box\|if\|while\|fork\|split\)\>\|' .
\ '^\s*ref\>[^:]*$\|' . \ '^\s*ref\>[^:]*$\|' .
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' . \ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .

View File

@@ -16,10 +16,12 @@ syntax match typescriptBinaryOp contained /===\?/ nextgroup=@typescriptValue s
syntax match typescriptBinaryOp contained />\(>>=\|>>\|>=\|>\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty syntax match typescriptBinaryOp contained />\(>>=\|>>\|>=\|>\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
" 4: <<=, <<, <=, < " 4: <<=, <<, <=, <
syntax match typescriptBinaryOp contained /<\(<=\|<\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty syntax match typescriptBinaryOp contained /<\(<=\|<\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
" 3: ||, |=, | " 3: ||, |=, |, ||=
syntax match typescriptBinaryOp contained /|\(|\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty syntax match typescriptBinaryOp contained /||\?=\?/ nextgroup=@typescriptValue skipwhite skipempty
" 3: &&, &=, & " 4: &&, &=, &, &&=
syntax match typescriptBinaryOp contained /&\(&\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty syntax match typescriptBinaryOp contained /&&\?=\?/ nextgroup=@typescriptValue skipwhite skipempty
" 2: ??, ??=
syntax match typescriptBinaryOp contained /??=\?/ nextgroup=@typescriptValue skipwhite skipempty
" 2: *=, * " 2: *=, *
syntax match typescriptBinaryOp contained /\*=\?/ nextgroup=@typescriptValue skipwhite skipempty syntax match typescriptBinaryOp contained /\*=\?/ nextgroup=@typescriptValue skipwhite skipempty
" 2: %=, % " 2: %=, %

View File

@@ -94,9 +94,12 @@ syntax cluster typescriptTypeMember contains=
\ typescriptIndexSignature, \ typescriptIndexSignature,
\ @typescriptMembers \ @typescriptMembers
syntax match typescriptTupleLable /\K\k*?\?:/
\ contained
syntax region typescriptTupleType matchgroup=typescriptBraces syntax region typescriptTupleType matchgroup=typescriptBraces
\ start=/\[/ end=/\]/ \ start=/\[/ end=/\]/
\ contains=@typescriptType,@typescriptComments \ contains=@typescriptType,@typescriptComments,typescriptRestOrSpread,typescriptTupleLable
\ contained skipwhite \ contained skipwhite
syntax cluster typescriptTypeOperator syntax cluster typescriptTypeOperator

View File

@@ -101,6 +101,7 @@ if exists("did_typescript_hilink")
HiLink typescriptBoolean Boolean HiLink typescriptBoolean Boolean
HiLink typescriptObjectLabel typescriptLabel HiLink typescriptObjectLabel typescriptLabel
HiLink typescriptLabel Label HiLink typescriptLabel Label
HiLink typescriptTupleLable Label
HiLink typescriptStringProperty String HiLink typescriptStringProperty String
HiLink typescriptImport Special HiLink typescriptImport Special
HiLink typescriptImportType Special HiLink typescriptImportType Special

View File

@@ -150,6 +150,7 @@ syn match crystalModuleName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w
syn match crystalStructName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained syn match crystalStructName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained
syn match crystalLibName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained syn match crystalLibName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained
syn match crystalEnumName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained syn match crystalEnumName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained
syn match crystalAnnotationName "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" contained
syn match crystalConstant "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=" syn match crystalConstant "\%(\%([.@$]\@1<!\.\)\@1<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@="
syn match crystalClassVariable "@@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display syn match crystalClassVariable "@@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display
syn match crystalInstanceVariable "@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display syn match crystalInstanceVariable "@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display
@@ -247,53 +248,56 @@ SynFold '<<' syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\
SynFold '<<' syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart,@crystalStringSpecial keepend SynFold '<<' syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=crystalStringDelimiter end=+^\s*\zs\z1$+ contains=crystalHeredocStart,@crystalStringSpecial keepend
" Module, Class, Method, and Alias Declarations " Module, Class, Method, and Alias Declarations
syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite syn match crystalAliasDeclaration "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable nextgroup=crystalAliasDeclaration2 skipwhite
syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable syn match crystalAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=crystalSymbol,crystalGlobalVariable,crystalPredefinedVariable
syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalFunction,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable syn match crystalMethodDeclaration "[^[:space:];#(]\+" contained contains=crystalConstant,crystalFunction,crystalBoolean,crystalPseudoVariable,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable
syn match crystalFunctionDeclaration "[^[:space:];#(=]\+" contained contains=crystalFunction syn match crystalFunctionDeclaration "[^[:space:];#(=]\+" contained contains=crystalFunction
syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalTypeName syn match crystalTypeDeclaration "[^[:space:];#=]\+" contained contains=crystalTypeName
syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalClassName,crystalOperator syn match crystalClassDeclaration "[^[:space:];#<]\+" contained contains=crystalClassName,crystalOperator
syn match crystalModuleDeclaration "[^[:space:];#]\+" contained contains=crystalModuleName,crystalOperator syn match crystalModuleDeclaration "[^[:space:];#]\+" contained contains=crystalModuleName,crystalOperator
syn match crystalStructDeclaration "[^[:space:];#<]\+" contained contains=crystalStructName,crystalOperator syn match crystalStructDeclaration "[^[:space:];#<]\+" contained contains=crystalStructName,crystalOperator
syn match crystalLibDeclaration "[^[:space:];#]\+" contained contains=crystalLibName,crystalOperator syn match crystalLibDeclaration "[^[:space:];#]\+" contained contains=crystalLibName,crystalOperator
syn match crystalMacroDeclaration "[^[:space:];#(]\+" contained contains=crystalFunction syn match crystalMacroDeclaration "[^[:space:];#(]\+" contained contains=crystalFunction
syn match crystalEnumDeclaration "[^[:space:];#<\"]\+" contained contains=crystalEnumName syn match crystalEnumDeclaration "[^[:space:];#<\"]\+" contained contains=crystalEnumName
syn match crystalAnnotationDeclaration "[^[:space:];#]\+" contained contains=crystalAnnotationName
syn match crystalFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=crystalMethodDeclaration,crystalFunctionDeclaration syn match crystalFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=crystalMethodDeclaration,crystalFunctionDeclaration
syn match crystalFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2 syn match crystalFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2
syn match crystalFunction "\%([[:space:].]\|^\)\@1<=\%(\[\][=?]\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration syn match crystalFunction "\%([[:space:].]\|^\)\@1<=\%(\[\][=?]\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration
syn cluster crystalDeclaration contains=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration,crystalModuleDeclaration,crystalClassDeclaration,crystalStructDeclaration,crystalLibDeclaration,crystalMacroDeclaration,crystalFunction,crystalBlockParameter,crystalTypeDeclaration,crystalEnumDeclaration syn cluster crystalDeclaration contains=crystalAliasDeclaration,crystalAliasDeclaration2,crystalMethodDeclaration,crystalFunctionDeclaration,crystalModuleDeclaration,crystalClassDeclaration,crystalStructDeclaration,crystalLibDeclaration,crystalMacroDeclaration,crystalFunction,crystalBlockParameter,crystalTypeDeclaration,crystalEnumDeclaration,crystalAnnotationDeclaration
" Keywords " Keywords
" Note: the following keywords have already been defined: " Note: the following keywords have already been defined:
" begin case class def do end for if module unless until while " begin case class def do end for if module unless until while
syn match crystalControl "\<\%(break\|next\|rescue\|return\)\>[?!]\@!" syn match crystalControl "\<\%(break\|next\|rescue\|return\)\>[?!]\@!"
syn match crystalOperator "\<defined?" display
syn match crystalKeyword "\<\%(super\|previous_def\|yield\|of\|with\|uninitialized\|union\)\>[?!]\@!" syn match crystalKeyword "\<\%(super\|previous_def\|yield\|of\|with\|uninitialized\|union\)\>[?!]\@!"
syn match crystalBoolean "\<\%(true\|false\)\>[?!]\@!" syn match crystalBoolean "\<\%(true\|false\)\>[?!]\@!"
syn match crystalPseudoVariable "\<\%(nil\|self\|__DIR__\|__FILE__\|__LINE__\|__END_LINE__\)\>[?!]\@!" " TODO: reorganise syn match crystalPseudoVariable "\<\%(nil\|__DIR__\|__FILE__\|__LINE__\|__END_LINE__\)\>[?!]\@!" " TODO: reorganise
syn match crystalPseudoVariable "\<self\>"
" Expensive Mode - match 'end' with the appropriate opening keyword for syntax " Expensive Mode - match 'end' with the appropriate opening keyword for syntax
" based folding and special highlighting of module/class/method definitions " based folding and special highlighting of module/class/method definitions
if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive') if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive')
syn match crystalDefine "\<alias\>" nextgroup=crystalAliasDeclaration skipwhite skipnl syn match crystalDefine "\<alias\>" nextgroup=crystalAliasDeclaration skipwhite skipnl
syn match crystalDefine "\<def\>" nextgroup=crystalMethodDeclaration skipwhite skipnl syn match crystalDefine "\<def\>" nextgroup=crystalMethodDeclaration skipwhite skipnl
syn match crystalDefine "\<fun\>" nextgroup=crystalFunctionDeclaration skipwhite skipnl syn match crystalDefine "\<fun\>" nextgroup=crystalFunctionDeclaration skipwhite skipnl
syn match crystalDefine "\<undef\>" nextgroup=crystalFunction skipwhite skipnl syn match crystalDefine "\<undef\>" nextgroup=crystalFunction skipwhite skipnl
syn match crystalDefine "\<\%(type\|alias\)\>\%(\s*\h\w*\s*=\)\@=" nextgroup=crystalTypeDeclaration skipwhite skipnl syn match crystalDefine "\<\%(type\|alias\)\>\%(\s*\h\w*\s*=\)\@=" nextgroup=crystalTypeDeclaration skipwhite skipnl
syn match crystalClass "\<class\>" nextgroup=crystalClassDeclaration skipwhite skipnl syn match crystalClass "\<class\>" nextgroup=crystalClassDeclaration skipwhite skipnl
syn match crystalModule "\<module\>" nextgroup=crystalModuleDeclaration skipwhite skipnl syn match crystalModule "\<module\>" nextgroup=crystalModuleDeclaration skipwhite skipnl
syn match crystalStruct "\<struct\>" nextgroup=crystalStructDeclaration skipwhite skipnl syn match crystalStruct "\<struct\>" nextgroup=crystalStructDeclaration skipwhite skipnl
syn match crystalLib "\<lib\>" nextgroup=crystalLibDeclaration skipwhite skipnl syn match crystalLib "\<lib\>" nextgroup=crystalLibDeclaration skipwhite skipnl
syn match crystalMacro "\<macro\>" nextgroup=crystalMacroDeclaration skipwhite skipnl syn match crystalMacro "\<macro\>" nextgroup=crystalMacroDeclaration skipwhite skipnl
syn match crystalEnum "\<enum\>" nextgroup=crystalEnumDeclaration skipwhite skipnl syn match crystalEnum "\<enum\>" nextgroup=crystalEnumDeclaration skipwhite skipnl
syn match crystalAnnotation "\<annotation\>" nextgroup=crystalAnnotationDeclaration skipwhite skipnl
SynFold 'def' syn region crystalMethodBlock start="\<\%(def\|macro\)\>" matchgroup=crystalDefine end="\%(\<\%(def\|macro\)\_s\+\)\@<!\<end\>" contains=TOP SynFold 'def' syn region crystalMethodBlock start="\<\%(def\|macro\)\>" matchgroup=crystalDefine end="\%(\<\%(def\|macro\)\_s\+\)\@<!\<end\>" contains=TOP
SynFold 'class' syn region crystalBlock start="\<class\>" matchgroup=crystalClass end="\<end\>" contains=TOP SynFold 'class' syn region crystalBlock start="\<class\>" matchgroup=crystalClass end="\<end\>" contains=TOP
SynFold 'module' syn region crystalBlock start="\<module\>" matchgroup=crystalModule end="\<end\>" contains=TOP SynFold 'module' syn region crystalBlock start="\<module\>" matchgroup=crystalModule end="\<end\>" contains=TOP
SynFold 'struct' syn region crystalBlock start="\<struct\>" matchgroup=crystalStruct end="\<end\>" contains=TOP SynFold 'struct' syn region crystalBlock start="\<struct\>" matchgroup=crystalStruct end="\<end\>" contains=TOP
SynFold 'lib' syn region crystalBlock start="\<lib\>" matchgroup=crystalLib end="\<end\>" contains=TOP SynFold 'lib' syn region crystalBlock start="\<lib\>" matchgroup=crystalLib end="\<end\>" contains=TOP
SynFold 'enum' syn region crystalBlock start="\<enum\>" matchgroup=crystalEnum end="\<end\>" contains=TOP SynFold 'enum' syn region crystalBlock start="\<enum\>" matchgroup=crystalEnum end="\<end\>" contains=TOP
SynFold 'annotation' syn region crystalBlock start="\<annotation\>" matchgroup=crystalAnnotation end="\<end\>" contains=TOP
" modifiers " modifiers
syn match crystalConditionalModifier "\<\%(if\|unless\|ifdef\)\>" display syn match crystalConditionalModifier "\<\%(if\|unless\|ifdef\)\>" display
@@ -326,14 +330,15 @@ if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive')
exec 'syn sync minlines=' . g:crystal_minlines exec 'syn sync minlines=' . g:crystal_minlines
else else
" Non-expensive mode " Non-expensive mode
syn match crystalControl "\<def\>[?!]\@!" nextgroup=crystalMethodDeclaration skipwhite skipnl syn match crystalControl "\<def\>[?!]\@!" nextgroup=crystalMethodDeclaration skipwhite skipnl
syn match crystalControl "\<fun\>[?!]\@!" nextgroup=crystalFunctionDeclaration skipwhite skipnl syn match crystalControl "\<fun\>[?!]\@!" nextgroup=crystalFunctionDeclaration skipwhite skipnl
syn match crystalControl "\<class\>[?!]\@!" nextgroup=crystalClassDeclaration skipwhite skipnl syn match crystalControl "\<class\>[?!]\@!" nextgroup=crystalClassDeclaration skipwhite skipnl
syn match crystalControl "\<module\>[?!]\@!" nextgroup=crystalModuleDeclaration skipwhite skipnl syn match crystalControl "\<module\>[?!]\@!" nextgroup=crystalModuleDeclaration skipwhite skipnl
syn match crystalControl "\<struct\>[?!]\@!" nextgroup=crystalStructDeclaration skipwhite skipnl syn match crystalControl "\<struct\>[?!]\@!" nextgroup=crystalStructDeclaration skipwhite skipnl
syn match crystalControl "\<lib\>[?!]\@!" nextgroup=crystalLibDeclaration skipwhite skipnl syn match crystalControl "\<lib\>[?!]\@!" nextgroup=crystalLibDeclaration skipwhite skipnl
syn match crystalControl "\<macro\>[?!]\@!" nextgroup=crystalMacroDeclaration skipwhite skipnl syn match crystalControl "\<macro\>[?!]\@!" nextgroup=crystalMacroDeclaration skipwhite skipnl
syn match crystalControl "\<enum\>[?!]\@!" nextgroup=crystalEnumDeclaration skipwhite skipnl syn match crystalControl "\<enum\>[?!]\@!" nextgroup=crystalEnumDeclaration skipwhite skipnl
syn match crystalControl "\<annotation\>[?!]\@!" nextgroup=crystalAnnotationDeclaration skipwhite skipnl
syn match crystalControl "\<\%(case\|begin\|do\|if\|ifdef\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!" syn match crystalControl "\<\%(case\|begin\|do\|if\|ifdef\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
syn match crystalKeyword "\<\%(alias\|undef\)\>[?!]\@!" syn match crystalKeyword "\<\%(alias\|undef\)\>[?!]\@!"
endif endif
@@ -358,8 +363,8 @@ endif
" Macro " Macro
" Note: This definition must be put after crystalNestedCurlyBraces to give higher priority " Note: This definition must be put after crystalNestedCurlyBraces to give higher priority
syn region crystalMacroRegion matchgroup=crystalMacroDelim start="\\\={%" end="%}" oneline display contains=@crystalMacroGroup containedin=ALL syn region crystalMacroRegion matchgroup=crystalMacroDelim start="\\\={%" end="%}" display oneline contains=@crystalMacroGroup containedin=ALL
syn region crystalMacroRegion matchgroup=crystalMacroDelim start="\\\={{" end="}}" oneline display contains=@crystalMacroGroup containedin=ALL syn region crystalMacroRegion matchgroup=crystalMacroDelim start="\\\={{" end="}}" display contains=TOP containedin=ALL
" Cluster for groups that can appear inside macro expressions " Cluster for groups that can appear inside macro expressions
syn cluster crystalMacroGroup contains=@crystalTop syn cluster crystalMacroGroup contains=@crystalTop
@@ -375,8 +380,7 @@ syn cluster crystalMacroGroup remove=@crystalExpensive
" Some keywords will have to be redefined for them to be highlighted " Some keywords will have to be redefined for them to be highlighted
" properly " properly
syn keyword crystalMacroKeyword contained syn keyword crystalMacroKeyword contained
\ if else elsif end for in begin do case when while until loop \ if unless else elsif end for in do while until loop begin
\ rescue ensure
syn cluster crystalMacroGroup add=crystalMacroKeyword syn cluster crystalMacroGroup add=crystalMacroKeyword
@@ -414,6 +418,7 @@ hi def link crystalModule crystalDefine
hi def link crystalStruct crystalDefine hi def link crystalStruct crystalDefine
hi def link crystalLib crystalDefine hi def link crystalLib crystalDefine
hi def link crystalEnum crystalDefine hi def link crystalEnum crystalDefine
hi def link crystalAnnotation crystalDefine
hi def link crystalMethodExceptional crystalDefine hi def link crystalMethodExceptional crystalDefine
hi def link crystalDefine Define hi def link crystalDefine Define
hi def link crystalFunction Function hi def link crystalFunction Function
@@ -442,6 +447,7 @@ hi def link crystalModuleName crystalConstant
hi def link crystalStructName crystalConstant hi def link crystalStructName crystalConstant
hi def link crystalLibName crystalConstant hi def link crystalLibName crystalConstant
hi def link crystalEnumName crystalConstant hi def link crystalEnumName crystalConstant
hi def link crystalAnnotationName crystalConstant
hi def link crystalGlobalVariable crystalIdentifier hi def link crystalGlobalVariable crystalIdentifier
hi def link crystalBlockParameter crystalIdentifier hi def link crystalBlockParameter crystalIdentifier
hi def link crystalInstanceVariable crystalIdentifier hi def link crystalInstanceVariable crystalIdentifier
@@ -478,7 +484,7 @@ hi def link crystalRegexp crystalString
hi def link crystalMacro PreProc hi def link crystalMacro PreProc
hi def link crystalMacroDelim crystalMacro hi def link crystalMacroDelim crystalMacro
hi def link crystalMacroKeyword crystalKeyword hi def link crystalMacroKeyword crystalKeyword
hi def link crystalLinkAttrDelim crystalMacro hi def link crystalLinkAttrDelim crystalMacroDelim
hi def link crystalError Error hi def link crystalError Error
hi def link crystalInvalidVariable crystalError hi def link crystalInvalidVariable crystalError
hi def link crystalSpaceError crystalError hi def link crystalSpaceError crystalError

View File

@@ -24,7 +24,7 @@ syntax match dhallLabel "\v[a-z_][A-Za-z0-9\-]*"
syntax match dhallType "\v[a-zA-Z]+\.[A-Z][a-z0-9A-Z_]*" syntax match dhallType "\v[a-zA-Z]+\.[A-Z][a-z0-9A-Z_]*"
syntax match dhallParens "(\|)\|\[\|\]\|," syntax match dhallParens "(\|)\|\[\|\]\|,"
syntax match dhallRecord "{\|}\|:" syntax match dhallRecord "{\|}\|:"
syntax keyword dhallKeyword let in forall constructors if then else merge env as syntax keyword dhallKeyword let in forall constructors if then else merge env as with
syntax match dhallEsc +\\["\\abfnrtv$/]+ syntax match dhallEsc +\\["\\abfnrtv$/]+
syntax match dhallSingleSpecial +'''+ syntax match dhallSingleSpecial +'''+
syntax match dhallSingleSpecial +''${+ syntax match dhallSingleSpecial +''${+

View File

@@ -91,7 +91,7 @@ syntax region plantumlText oneline start=/\[/ms=s+1 end=/\]/me=s-1 contained
syntax match plantumlArrowDirectedLine /\([-.]\)\%(l\%[eft]\|r\%[ight]\|up\?\|d\%[own]\)\1/ contained syntax match plantumlArrowDirectedLine /\([-.]\)\%(l\%[eft]\|r\%[ight]\|up\?\|d\%[own]\)\1/ contained
" Note and legend " Note and legend
syntax region plantumlNoteMultiLine start=/\%(^\s*[rh]\?\%(note\|legend\)\)\@<=\s\%([^:"]\+$\)\@=/ end=/^\%(\s*end\s*[rh]\?\%(note\|legend\)$\)\|endlegend\@=/ contains=plantumlSpecialString,plantumlNoteMultiLineStart,plantumlTag syntax region plantumlNoteMultiLine start=/\%(^\s*[rh]\?\%(note\|legend\)\)\@<=\s\%([^:"]\+$\)\@=/ end=/^\%(\s*\zeend\s*[rh]\?\%(note\|legend\)$\)\|endlegend\@=/ contains=plantumlSpecialString,plantumlNoteMultiLineStart,plantumlTag
syntax match plantumlNoteMultiLineStart /\%(^\s*[rh]\?\%(note\|legend\)\)\@<=\s\%([^:]\+$\)/ contained contains=plantumlKeyword,plantumlColor,plantumlString,plantumlTag syntax match plantumlNoteMultiLineStart /\%(^\s*[rh]\?\%(note\|legend\)\)\@<=\s\%([^:]\+$\)/ contained contains=plantumlKeyword,plantumlColor,plantumlString,plantumlTag
" Class " Class
@@ -140,11 +140,11 @@ syntax match plantumlActivityLabel /\%(^\%(#\S\+\)\?\)\@<=:\_[^;|<>/\]}]\+[;|<>/
syntax match plantumlSequenceDivider /^\s*==[^=]\+==\s*$/ syntax match plantumlSequenceDivider /^\s*==[^=]\+==\s*$/
syntax match plantumlSequenceSpace /^\s*|||\+\s*$/ syntax match plantumlSequenceSpace /^\s*|||\+\s*$/
syntax match plantumlSequenceSpace /^\s*||\d\+||\+\s*$/ syntax match plantumlSequenceSpace /^\s*||\d\+||\+\s*$/
syntax match plantumlSequenceDelay /^\.\{3}$/ syntax match plantumlSequenceDelay /^\s*\.\{3}$/
syntax region plantumlText oneline matchgroup=plantumlSequenceDelay start=/^\.\{3}/ end=/\.\{3}$/ syntax region plantumlText oneline matchgroup=plantumlSequenceDelay start=/^\s*\.\{3}/ end=/\.\{3}$/
" Usecase diagram " Usecase diagram
syntax match plantumlUsecaseActor /:.\{-1,}:/ contains=plantumlSpecialString syntax match plantumlUsecaseActor /^\s*:.\{-1,}:/ contains=plantumlSpecialString
" Mindmap diagram " Mindmap diagram

View File

@@ -2,7 +2,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vifm') == -1
" vifm syntax file " vifm syntax file
" Maintainer: xaizek <xaizek@posteo.net> " Maintainer: xaizek <xaizek@posteo.net>
" Last Change: May 26, 2020 " Last Change: June 22, 2020
" Inspired By: Vim syntax file by Dr. Charles E. Campbell, Jr. " Inspired By: Vim syntax file by Dr. Charles E. Campbell, Jr.
if exists('b:current_syntax') if exists('b:current_syntax')
@@ -17,27 +17,27 @@ set cpo-=C
" General commands " General commands
syntax keyword vifmCommand contained syntax keyword vifmCommand contained
\ alink apropos bmark bmarks bmgo cds change chmod chown clone compare \ alink apropos bmark bmarks bmgo cds change chmod chown clone compare
\ cope[n] co[py] cq[uit] d[elete] delbmarks delm[arks] di[splay] dirs e[dit] \ cope[n] co[py] cq[uit] d[elete] delbmarks delm[arks] delsession di[splay]
\ el[se] empty en[dif] exi[t] file fin[d] fini[sh] go[to] gr[ep] h[elp] \ dirs e[dit] el[se] empty en[dif] exi[t] file fin[d] fini[sh] go[to] gr[ep]
\ hideui histnext his[tory] histprev jobs locate ls lstrash marks media \ h[elp] hideui histnext his[tory] histprev jobs locate ls lstrash marks
\ mes[sages] mkdir m[ove] noh[lsearch] on[ly] popd pushd pu[t] pw[d] qa[ll] \ media mes[sages] mkdir m[ove] noh[lsearch] on[ly] popd pushd pu[t] pw[d]
\ q[uit] redr[aw] reg[isters] regular rename restart restore rlink screen \ qa[ll] q[uit] redr[aw] reg[isters] regular rename restart restore rlink
\ sh[ell] siblnext siblprev sor[t] sp[lit] s[ubstitute] tabc[lose] tabm[ove] \ screen sh[ell] siblnext siblprev sor[t] sp[lit] s[ubstitute] tabc[lose]
\ tabname tabnew tabn[ext] tabo[nly] tabp[revious] touch tr trashes tree \ tabm[ove] tabname tabnew tabn[ext] tabo[nly] tabp[revious] touch tr
\ sync undol[ist] ve[rsion] vie[w] vifm vs[plit] winc[md] w[rite] wq wqa[ll] \ trashes tree session sync undol[ist] ve[rsion] vie[w] vifm vs[plit]
\ xa[ll] x[it] y[ank] \ winc[md] w[rite] wq wqa[ll] xa[ll] x[it] y[ank]
\ nextgroup=vifmArgs \ nextgroup=vifmArgs
syntax keyword vifmCommandCN contained syntax keyword vifmCommandCN contained
\ alink apropos bmark bmarks bmgo cds change chmod chown clone compare \ alink apropos bmark bmarks bmgo cds change chmod chown clone compare
\ cope[n] co[py] cq[uit] d[elete] delbmarks delm[arks] di[splay] dirs e[dit] \ cope[n] co[py] cq[uit] d[elete] delbmarks delm[arks] delsession di[splay]
\ el[se] empty en[dif] exi[t] file fin[d] fini[sh] go[to] gr[ep] h[elp] \ dirs e[dit] el[se] empty en[dif] exi[t] file fin[d] fini[sh] go[to] gr[ep]
\ hideui histnext his[tory] histprev jobs locate ls lstrash marks media \ h[elp] hideui histnext his[tory] histprev jobs locate ls lstrash marks
\ mes[sages] mkdir m[ove] noh[lsearch] on[ly] popd pushd pu[t] pw[d] qa[ll] \ media mes[sages] mkdir m[ove] noh[lsearch] on[ly] popd pushd pu[t] pw[d]
\ q[uit] redr[aw] reg[isters] regular rename restart restore rlink screen \ qa[ll] q[uit] redr[aw] reg[isters] regular rename restart restore rlink
\ sh[ell] siblnext siblprev sor[t] sp[lit] s[ubstitute] tabc[lose] tabm[ove] \ screen sh[ell] siblnext siblprev sor[t] sp[lit] s[ubstitute] tabc[lose]
\ tabname tabnew tabn[ext] tabp[revious] touch tr trashes tree sync \ tabm[ove] tabname tabnew tabn[ext] tabo[nly] tabp[revious] touch tr
\ undol[ist] ve[rsion] vie[w] vifm vs[plit] winc[md] w[rite] wq wqa[ll] \ trashes tree session sync undol[ist] ve[rsion] vie[w] vifm vs[plit]
\ xa[ll] x[it] y[ank] \ winc[md] w[rite] wq wqa[ll] xa[ll] x[it] y[ank]
\ nextgroup=vifmArgsCN \ nextgroup=vifmArgsCN
" commands that might be prepended to a command without changing everything else " commands that might be prepended to a command without changing everything else
@@ -144,12 +144,12 @@ syntax keyword vifmOption contained aproposprg autochpos caseoptions cdpath cd
\ iec ignorecase ic iooptions incsearch is laststatus lines locateprg ls \ iec ignorecase ic iooptions incsearch is laststatus lines locateprg ls
\ lsoptions lsview mediaprg milleroptions millerview mintimeoutlen number nu \ lsoptions lsview mediaprg milleroptions millerview mintimeoutlen number nu
\ numberwidth nuw previewprg quickview relativenumber rnu rulerformat ruf \ numberwidth nuw previewprg quickview relativenumber rnu rulerformat ruf
\ runexec scrollbind scb scrolloff so sort sortgroups sortorder sortnumbers \ runexec scrollbind scb scrolloff sessionoptions ssop so sort sortgroups
\ shell sh shellflagcmd shcf shortmess shm showtabline stal sizefmt slowfs \ sortorder sortnumbers shell sh shellflagcmd shcf shortmess shm showtabline
\ smartcase scs statusline stl suggestoptions syncregs syscalls tablabel \ stal sizefmt slowfs smartcase scs statusline stl suggestoptions syncregs
\ tabscope tabstop timefmt timeoutlen title tm trash trashdir ts tuioptions \ syscalls tablabel tabscope tabstop timefmt timeoutlen title tm trash
\ to undolevels ul vicmd viewcolumns vifminfo vimhelp vixcmd wildmenu wmnu \ trashdir ts tuioptions to undolevels ul vicmd viewcolumns vifminfo vimhelp
\ wildstyle wordchars wrap wrapscan ws \ vixcmd wildmenu wmnu wildstyle wordchars wrap wrapscan ws
" Disabled boolean options " Disabled boolean options
syntax keyword vifmOption contained noautochpos nocf nochaselinks nodotfiles syntax keyword vifmOption contained noautochpos nocf nochaselinks nodotfiles