diff options
Diffstat (limited to 'syntax')
-rw-r--r-- | syntax/ls.vim | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/syntax/ls.vim b/syntax/ls.vim new file mode 100644 index 00000000..c3edf65e --- /dev/null +++ b/syntax/ls.vim @@ -0,0 +1,140 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'livescript') == -1 + +" Language: LiveScript " +" Maintainer: George Zahariev +" URL: http://github.com/gkz/vim-ls +" License: WTFPL + +if exists('b:current_syntax') && b:current_syntax == 'livescript' + finish +endif + +let b:current_syntax = "ls" + +" Highlight long strings. +syntax sync minlines=100 + +setlocal iskeyword=48-57,A-Z,$,a-z,_,- + +syntax match lsIdentifier /[$A-Za-z_]\k*\(-[a-zA-Z]\+\)*/ +highlight default link lsIdentifier Identifier + +" These are 'matches' rather than 'keywords' because vim's highlighting priority +" for keywords (the highest) causes them to be wrongly highlighted when used as +" dot-properties. +syntax match lsStatement /\<\%(return\|break\|continue\|throw\)\>/ +highlight default link lsStatement Statement + +syntax match lsRepeat /\<\%(for\%( own\| ever\)\?\|while\|until\)\>/ +highlight default link lsRepeat Repeat + +syntax match lsConditional /\<\%(if\|else\|unless\|switch\|case\|when\|default\|match\)\>/ +highlight default link lsConditional Conditional + +syntax match lsException /\<\%(try\|catch\|finally\)\>/ +highlight default link lsException Exception + +syntax match lsKeyword /\<\%(new\|in\%(stanceof\)\?\|typeof\|delete\|and\|o[fr]\|not\|xor\|is\|isnt\|imp\%(ort\%( all\)\?\|lements\)\|extends\|loop\|from\|to\|til\|by\|do\|then\|function\|class\|let\|with\|export\|const\|var\|eval\|super\|fallthrough\|debugger\|where\|yield\)\>/ +highlight default link lsKeyword Keyword + +syntax match lsBoolean /\<\%(true\|false\|yes\|no\|on\|off\|null\|void\)\>/ +highlight default link lsBoolean Boolean + +" Matches context variables. +syntax match lsContext /\<\%(this\|arguments\|it\|that\|constructor\|prototype\|superclass\)\>/ +highlight default link lsContext Type + +" Keywords reserved by the language +syntax cluster lsReserved contains=lsStatement,lsRepeat,lsConditional, +\ lsException,lsOperator,lsKeyword,lsBoolean + +" Matches ECMAScript 5 built-in globals. +syntax match lsGlobal /\<\%(Array\|Boolean\|Date\|Function\|JSON\|Math\|Number\|Object\|RegExp\|String\|\%(Syntax\|Type\|URI\)\?Error\|is\%(NaN\|Finite\)\|parse\%(Int\|Float\)\|\%(en\|de\)codeURI\%(Component\)\?\)\>/ +highlight default link lsGlobal Structure + +syntax region lsString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=@lsInterpString +syntax region lsString start=/'/ skip=/\\\\\|\\'/ end=/'/ contains=@lsSimpleString +highlight default link lsString String + +" Matches decimal/floating-point numbers like 10.42e-8. +syntax match lsFloat +\ /\%(\<-\?\|-\)\zs\d[0-9_]*\%(\.\d[0-9_]*\)\?\%(e[+-]\?\d[0-9_]*\)\?\%([a-zA-Z$][$a-zA-Z0-9_]*\)\?/ +\ contains=lsNumberComment +highlight default link lsFloat Float +syntax match lsNumberComment /\d\+\zs\%(e[+-]\?\d\)\@![a-zA-Z$][$a-zA-Z0-9_]*/ contained +highlight default link lsNumberComment Comment +" Matches hex numbers like 0xfff, 0x000. +syntax match lsNumber /\%(\<-\?\|-\)\zs0x\x\+/ +" Matches N radix numbers like 2@1010. +syntax match lsNumber +\ /\%(\<-\?\|-\)\zs\%(\d*\)\~[0-9A-Za-z][0-9A-Za-z_]*/ +highlight default link lsNumber Number + +" Displays an error for reserved words. +syntax match lsReservedError /\<\%(enum\|interface\|package\|private\|protected\|public\|static\)\>/ +highlight default link lsReservedError Error + +syntax keyword lsTodo TODO FIXME XXX contained +highlight default link lsTodo Todo + +syntax match lsComment /#.*/ contains=@Spell,lsTodo +syntax region lsComment start=/\/\*/ end=/\*\// contains=@Spell,lsTodo +highlight default link lsComment Comment + +syntax region lsInfixFunc start=/`/ end=/`/ +highlight default link lsInfixFunc Identifier + +syntax region lsInterpolation matchgroup=lsInterpDelim +\ start=/\#{/ end=/}/ +\ contained contains=TOP +highlight default link lsInterpDelim Delimiter + +" Matches escape sequences like \000, \x00, \u0000, \n. +syntax match lsEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained +highlight default link lsEscape SpecialChar + +syntax match lsVarInterpolation /#[$A-Za-z_]\k*\(-[a-zA-Z]\+\)*/ contained +highlight default link lsVarInterpolation Identifier + +" What is in a non-interpolated string +syntax cluster lsSimpleString contains=@Spell,lsEscape +" What is in an interpolated string +syntax cluster lsInterpString contains=@lsSimpleString, +\ lsInterpolation,lsVarInterpolation + +syntax region lsRegex start=/\%(\%()\|\i\@<!\d\)\s*\|\i\)\@<!\/\*\@!/ +\ skip=/\[[^]]\{-}\/[^]]\{-}\]/ +\ end=/\/[gimy$]\{,4}/ +\ oneline contains=@lsSimpleString +syntax region lsHeregex start=/\/\// end=/\/\/[gimy$?]\{,4}/ contains=@lsInterpString,lsComment,lsSpaceError fold +highlight default link lsHeregex lsRegex +highlight default link lsRegex String + +syntax region lsHeredoc start=/"""/ end=/"""/ contains=@lsInterpString fold +syntax region lsHeredoc start=/'''/ end=/'''/ contains=@lsSimpleString fold +highlight default link lsHeredoc String + +syntax match lsWord /\\\S[^ \t\r,;)}\]]*/ +highlight default link lsWord String + +syntax region lsWords start=/<\[/ end=/\]>/ contains=fold +highlight default link lsWords String + +" Reserved words can be used as property names. +syntax match lsProp /[$A-Za-z_]\k*[ \t]*:[:=]\@!/ +highlight default link lsProp Label + +syntax match lsKey +\ /\%(\.\@<!\.\%(=\?\s*\|\.\)\|[]})@?]\|::\)\zs\k\+/ +\ transparent +\ contains=ALLBUT,lsNumberComment,lsIdentifier,lsContext,lsGlobal,lsReservedError,@lsReserved + +" Displays an error for trailing whitespace. +syntax match lsSpaceError /\s\+$/ display +highlight default link lsSpaceError Error + +if !exists('b:current_syntax') + let b:current_syntax = 'livescript' +endif + +endif |