From 22040ce638ed610cfdbba03376ad9864a2a5d321 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Thu, 14 Jan 2021 20:59:40 +0100 Subject: Update --- syntax/crystal.vim | 64 ++++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 36 deletions(-) (limited to 'syntax/crystal.vim') diff --git a/syntax/crystal.vim b/syntax/crystal.vim index 7dfdf507..a776e59b 100644 --- a/syntax/crystal.vim +++ b/syntax/crystal.vim @@ -93,10 +93,6 @@ syn match crystalStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" syn match crystalStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display syn region crystalInterpolation matchgroup=crystalInterpolationDelim start="#{" end="}" contained contains=TOP -syn match crystalInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=crystalInterpolationDelim,crystalInstanceVariable,crystalClassVariable,crystalGlobalVariable,crystalPredefinedVariable -syn match crystalInterpolationDelim "#\ze\%(\$\|@@\=\)\w\+" display contained -syn match crystalInterpolation "#\$\%(-\w\|\W\)" display contained contains=crystalInterpolationDelim,crystalPredefinedVariable,crystalInvalidVariable -syn match crystalInterpolationDelim "#\ze\$\%(-\w\|\W\)" display contained syn region crystalNoInterpolation start="\\#{" end="}" contained syn match crystalNoInterpolation "\\#{" display contained syn match crystalNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained @@ -156,7 +152,6 @@ syn match crystalAnnotationName "\%(\%([.@$]\@1\|::\)\@=" syn match crystalClassVariable "@@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display syn match crystalInstanceVariable "@\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*" display -syn match crystalGlobalVariable "$\%(\%(\h\|%\|[^\x00-\x7F]\)\%(\w\|%\|[^\x00-\x7F]\)*\|-.\)" syn match crystalFreshVariable "\%(\h\|[^\x00-\x7F]\)\@1\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[][=?]\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" syn match crystalSymbol "[]})\"':]\@1_,;:!?/.'"@$*\&+0]\)" @@ -172,17 +167,11 @@ SynFold ':' syn region crystalSymbol start="[]})\"':]\@1\|{\)\s*\)\@<=|" end="|" oneline display contains=crystalBlockParameter -syn match crystalInvalidVariable "$[^ %A-Za-z_-]" -syn match crystalPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]# -syn match crystalPredefinedVariable "$\d\+" display -syn match crystalPredefinedVariable "$_\>" display -syn match crystalPredefinedVariable "$-[0FIKadilpvw]\>" display -syn match crystalPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display -syn match crystalPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display -syn match crystalPredefinedConstant "\%(\%(\.\@1\%(\s*(\)\@!" -syn match crystalPredefinedConstant "\%(\%(\.\@1\%(\s*(\)\@!" -syn match crystalPredefinedConstant "\%(\%(\.\@1\%(\s*(\)\@!" -syn match crystalPredefinedConstant "\%(\%(\.\@1\%(\s*(\)\@!" +" In Crystal, almost all special variables were removed and global variables +" are not supported https://github.com/crystal-lang/crystal/commit/e872c716d0e936557b34c614efc5a4c24d845f79 +" NOTE: Only $~ and $? are supported since they are actually not global. +syn match crystalPredefinedVariable "$[~?]" +syn match crystalPredefinedConstant "\%(\%(\.\@1\%(\s*(\)\@!" " Normal Regular Expression SynFold '/' syn region crystalRegexp matchgroup=crystalRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|ifdef\|when\|in\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[imx]*" skip="\\\\\|\\/" contains=@crystalRegexpSpecial @@ -250,9 +239,9 @@ SynFold '<<' syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\ SynFold '<<' syn region crystalString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@" nextgroup=crystalAliasDeclaration skipwhite skipnl syn match crystalDefine "\" nextgroup=crystalMethodDeclaration skipwhite skipnl syn match crystalDefine "\" nextgroup=crystalFunctionDeclaration skipwhite skipnl - syn match crystalDefine "\" nextgroup=crystalFunction skipwhite skipnl syn match crystalDefine "\<\%(type\|alias\)\>\%(\s*\h\w*\s*=\)\@=" nextgroup=crystalTypeDeclaration skipwhite skipnl syn match crystalClass "\" nextgroup=crystalClassDeclaration skipwhite skipnl syn match crystalModule "\" nextgroup=crystalModuleDeclaration skipwhite skipnl @@ -293,13 +281,17 @@ if !exists('b:crystal_no_expensive') && !exists('g:crystal_no_expensive') syn match crystalEnum "\" nextgroup=crystalEnumDeclaration skipwhite skipnl syn match crystalAnnotation "\" nextgroup=crystalAnnotationDeclaration skipwhite skipnl - SynFold 'def' syn region crystalMethodBlock start="\<\%(def\|macro\)\>" matchgroup=crystalDefine end="\%(\<\%(def\|macro\)\_s\+\)\@" contains=TOP - SynFold 'class' syn region crystalBlock start="\" matchgroup=crystalClass end="\" contains=TOP - SynFold 'module' syn region crystalBlock start="\" matchgroup=crystalModule end="\" contains=TOP - SynFold 'struct' syn region crystalBlock start="\" matchgroup=crystalStruct end="\" contains=TOP - SynFold 'lib' syn region crystalBlock start="\" matchgroup=crystalLib end="\" contains=TOP - SynFold 'enum' syn region crystalBlock start="\" matchgroup=crystalEnum end="\" contains=TOP - SynFold 'annotation' syn region crystalBlock start="\" matchgroup=crystalAnnotation end="\" contains=TOP + SynFold 'def' syn region crystalMethodBlock start="\" matchgroup=crystalDefine end="\%(\" contains=TOP,crystalForallKeyword + SynFold 'macro' syn region crystalMethodBlock start="\" matchgroup=crystalDefine end="\%(\" contains=TOP + SynFold 'class' syn region crystalBlock start="\" matchgroup=crystalClass end="\" contains=TOP + SynFold 'module' syn region crystalBlock start="\" matchgroup=crystalModule end="\" contains=TOP + SynFold 'struct' syn region crystalBlock start="\" matchgroup=crystalStruct end="\" contains=TOP + SynFold 'lib' syn region crystalBlock start="\" matchgroup=crystalLib end="\" contains=TOP + SynFold 'enum' syn region crystalBlock start="\" matchgroup=crystalEnum end="\" contains=TOP + SynFold 'annotation' syn region crystalBlock start="\" matchgroup=crystalAnnotation end="\" contains=TOP + + " keywords in method declaration + syn match crystalForallKeyword "\[?!]\@!" contained containedin=crystalMethodBlock " modifiers syn match crystalConditionalModifier "\<\%(if\|unless\|ifdef\)\>" display @@ -341,8 +333,9 @@ else syn match crystalControl "\[?!]\@!" nextgroup=crystalMacroDeclaration skipwhite skipnl syn match crystalControl "\[?!]\@!" nextgroup=crystalEnumDeclaration skipwhite skipnl syn match crystalControl "\[?!]\@!" nextgroup=crystalAnnotationDeclaration skipwhite skipnl - syn match crystalControl "\<\%(case\|begin\|do\|if\|ifdef\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|in\|end\)\>[?!]\@!" - syn match crystalKeyword "\<\%(alias\|undef\)\>[?!]\@!" + syn match crystalControl "\<\%(case\|begin\|do\|if\|ifdef\|unless\|while\|select\|until\|else\|elsif\|ensure\|then\|when\|in\|end\)\>[?!]\@!" + syn match crystalKeyword "\[?!]\@!" + syn match crystalForallKeyword "\[?!]\@!" endif " Link attribute @@ -353,13 +346,13 @@ if !exists('g:crystal_no_special_methods') syn keyword crystalAccess protected private " attr is a common variable name syn keyword crystalAttribute abstract - syn match crystalAttribute "\<\%(class_\)\=\%(getter\|setter\|property\)[!?]\=\s" display + syn match crystalAttribute "\<\%(\%(class_\)\=\%(getter\|setter\|property\)[!?]\=\|def_\%(clone\|equals\|equals_and_hash\|hash\)\|delegate\|forward_missing_to\)\s" display syn match crystalControl "\<\%(abort\|at_exit\|exit\|fork\|loop\)\>[?!]\@!" display syn keyword crystalException raise " false positive with 'include?' syn match crystalInclude "\[?!]\@!" display syn keyword crystalInclude extend require - syn keyword crystalKeyword caller typeof pointerof sizeof instance_sizeof + syn keyword crystalKeyword caller typeof pointerof sizeof instance_sizeof offsetof syn match crystalRecord "\" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE -syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE +syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE syn match crystalKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE -syn match crystalKeywordAsMethod "\<\%(if\|ifdef\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE +syn match crystalKeywordAsMethod "\<\%(if\|ifdef\|module\|unless\|until\|while\)[?!]" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE -syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE +syn match crystalKeywordAsMethod "\%(\%(\.\@1" transparent contains=NONE hi def link crystalClass crystalDefine hi def link crystalModule crystalDefine @@ -450,7 +443,6 @@ hi def link crystalStructName crystalConstant hi def link crystalLibName crystalConstant hi def link crystalEnumName crystalConstant hi def link crystalAnnotationName crystalConstant -hi def link crystalGlobalVariable crystalIdentifier hi def link crystalBlockParameter crystalIdentifier hi def link crystalInstanceVariable crystalIdentifier hi def link crystalFreshVariable crystalIdentifier @@ -486,9 +478,9 @@ hi def link crystalRegexp crystalString hi def link crystalMacro PreProc hi def link crystalMacroDelim crystalMacro hi def link crystalMacroKeyword crystalKeyword +hi def link crystalForallKeyword crystalDefine hi def link crystalLinkAttrDelim crystalMacroDelim hi def link crystalError Error -hi def link crystalInvalidVariable crystalError hi def link crystalSpaceError crystalError hi def link crystalInvalidInteger crystalError -- cgit v1.2.3