" Language: CoffeeScript " Maintainer: Mick Koch " URL: http://github.com/kchmck/vim-coffee-script " License: WTFPL if exists("b:current_syntax") finish endif if version < 600 syntax clear endif let b:current_syntax = "coffee" " Highlight long strings. syntax sync minlines=100 " CoffeeScript allows dollar signs in identifiers. setlocal isident+=$ " 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 coffeeStatement /\<\%(return\|break\|continue\|throw\)\>/ highlight default link coffeeStatement Statement syntax match coffeeRepeat /\<\%(for\|while\|until\|loop\)\>/ highlight default link coffeeRepeat Repeat syntax match coffeeConditional /\<\%(if\|else\|unless\|switch\|when\|then\)\>/ highlight default link coffeeConditional Conditional syntax match coffeeException /\<\%(try\|catch\|finally\)\>/ highlight default link coffeeException Exception syntax match coffeeOperator /\<\%(instanceof\|typeof\|delete\)\>/ highlight default link coffeeOperator Operator syntax match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|own\|do\)\>/ highlight default link coffeeKeyword Keyword syntax match coffeeBoolean /\<\%(\%(true\|on\|yes\|false\|off\|no\)\)\>/ highlight default link coffeeBoolean Boolean syntax match coffeeGlobal /\<\%(null\|undefined\)\>/ highlight default link coffeeGlobal Type " Keywords reserved by the language syntax cluster coffeeReserved contains=coffeeStatement,coffeeRepeat, \ coffeeConditional,coffeeException, \ coffeeOperator,coffeeKeyword, \ coffeeBoolean,coffeeGlobal syntax match coffeeVar /\<\%(this\|prototype\|arguments\)\>/ " Matches @-variables like @abc. syntax match coffeeVar /@\%(\I\i*\)\?/ highlight default link coffeeVar Type " Matches class-like names that start with a capital letter, like Array or " Object. syntax match coffeeObject /\<\u\w*\>/ highlight default link coffeeObject Structure " Matches constant-like names in SCREAMING_CAPS. syntax match coffeeConstant /\<\u[A-Z0-9_]\+\>/ highlight default link coffeeConstant Constant " What can make up a variable name syntax cluster coffeeIdentifier contains=coffeeVar,coffeeObject,coffeeConstant, \ coffeePrototype syntax region coffeeString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=@coffeeInterpString syntax region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/ contains=@coffeeSimpleString highlight default link coffeeString String syntax region coffeeAssignString start=/"/ skip=/\\\\\|\\"/ end=/"/ contained contains=@coffeeSimpleString syntax region coffeeAssignString start=/'/ skip=/\\\\\|\\'/ end=/'/ contained contains=@coffeeSimpleString highlight default link coffeeAssignString String " Matches numbers like -10, -10e8, -10E8, 10, 10e8, 10E8. syntax match coffeeNumber /\i\@/ highlight default link coffeeNumber Number " Matches floating-point numbers like -10.42e8, 10.42e-8. syntax match coffeeFloat /\i\@>\|>>>\|&\||\|\^\)\?=\@\@!/ contained highlight default link coffeeAssignSymbols SpecialChar syntax match coffeeAssignBrackets /\[.\+\]/ contained contains=TOP,coffeeAssign syntax match coffeeAssign /\%(++\|--\)\s*\%(@\|@\?\I\)\%(\i\|::\|\.\|?\|\[.\+\]\)*/ \ contains=@coffeeIdentifier,coffeeAssignSymbols,coffeeAssignBrackets syntax match coffeeAssign /\%(@\|@\?\I\)\%(\i\|::\|\.\|?\|\[.\+\]\)*\%(++\|--\|\s*\%(and\|or\|&&\|||\|?\|+\|-\|\/\|\*\|%\|<<\|>>\|>>>\|&\||\|\^\)\?=\@\@!\)/ \ contains=@coffeeIdentifier,coffeeAssignSymbols,coffeeAssignBrackets " Displays an error for reserved words. if !exists("coffee_no_reserved_words_error") syntax match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|const\|let\|enum\|export\|import\|native\|__hasProp\|__extends\|__slice\|__bind\|__indexOf\)\>/ highlight default link coffeeReservedError Error endif syntax match coffeeAssign /@\?\I\i*\s*:\@\|=>/ highlight default link coffeeFunction Function syntax keyword coffeeTodo TODO FIXME XXX contained highlight default link coffeeTodo Todo syntax match coffeeComment /#.*/ contains=@Spell,coffeeTodo syntax match coffeeComment /####\@!\_.\{-}###/ contains=@Spell,coffeeTodo highlight default link coffeeComment Comment syntax region coffeeHereComment start=/#/ end=/\ze\/\/\// end=/$/ contained contains=@Spell,coffeeTodo highlight default link coffeeHereComment coffeeComment syntax region coffeeEmbed start=/`/ skip=/\\\\\|\\`/ end=/`/ highlight default link coffeeEmbed Special syntax region coffeeInterpolation matchgroup=coffeeInterpDelim \ start=/\#{/ end=/}/ \ contained contains=TOP highlight default link coffeeInterpDelim Delimiter " Matches escape sequences like \000, \x00, \u0000, \n. syntax match coffeeEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained highlight default link coffeeEscape SpecialChar " What is in a non-interpolated string syntax cluster coffeeSimpleString contains=@Spell,coffeeEscape " What is in an interpolated string syntax cluster coffeeInterpString contains=@coffeeSimpleString, \ coffeeInterpolation syntax region coffeeRegExp start=/)\@