diff --git a/build b/build index e6ff8c2..b39c94e 100755 --- a/build +++ b/build @@ -105,6 +105,7 @@ PACKS=" textile:timcharper/textile.vim tmux:acustodioo/vim-tmux tomdoc:duwanis/tomdoc.vim + typescript:leafgarland/typescript-vim vbnet:vim-scripts/vbnet.vim twig:beyondwords/vim-twig xls:vim-scripts/XSLT-syntax diff --git a/compiler/typescript.vim b/compiler/typescript.vim new file mode 100644 index 0000000..74f79d1 --- /dev/null +++ b/compiler/typescript.vim @@ -0,0 +1,8 @@ +if exists("current_compiler") + finish +endif +let current_compiler = "typescript" + +CompilerSet makeprg=tsc\ $*\ % + +CompilerSet errorformat=%+A\ %#%f\ %#(%l\\\,%c):\ %m,%C%m diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 7ca5abb..2ed8703 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -119,3 +119,4 @@ au BufRead,BufNewFile *.textile set filetype=textile autocmd BufNewFile,BufRead .tmux.conf*,tmux.conf* setf tmux autocmd BufNewFile,BufRead *.twig set filetype=twig autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig +autocmd BufNewFile,BufRead *.ts setlocal filetype=typescript diff --git a/ftplugin/typescript.vim b/ftplugin/typescript.vim new file mode 100644 index 0000000..3726194 --- /dev/null +++ b/ftplugin/typescript.vim @@ -0,0 +1,8 @@ +compiler typescript + +setlocal autoindent +setlocal cindent +setlocal smartindent +setlocal indentexpr& + +setlocal commentstring=//\ %s diff --git a/syntax/typescript.vim b/syntax/typescript.vim new file mode 100644 index 0000000..d862df0 --- /dev/null +++ b/syntax/typescript.vim @@ -0,0 +1,320 @@ +" Vim syntax file +" Language: TypeScript +" Author: MicroSoft Open Technologies Inc. +" Version: 0.1 +" Credits: Zhao Yi, Claudio Fleiner, Scott Shattuck, Jose Elera Campana + +if !exists("main_syntax") + if version < 600 + syntax clear + elseif exists("b:current_syntax") + finish + endif + let main_syntax = "typescript" +endif + +" Drop fold if it set but vim doesn't support it. +if version < 600 && exists("typeScript_fold") + unlet typeScript_fold +endif + +"" dollar sign is permitted anywhere in an identifier +setlocal iskeyword+=$ + +syntax sync fromstart + +"" syntax coloring for Node.js shebang line +syn match shebang "^#!.*/bin/env\s\+node\>" +hi link shebang Comment + +"" typeScript comments"{{{ +syn keyword typeScriptCommentTodo TODO FIXME XXX TBD contained +syn match typeScriptLineComment "\/\/.*" contains=@Spell,typeScriptCommentTodo,typeScriptRef +syn match typeScriptRef /\/\/\/\s*$/ contains=typeScriptRefD,typeScriptRefS +syn region typeScriptRefD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ +syn region typeScriptRefS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ + +syn match typeScriptCommentSkip "^[ \t]*\*\($\|[ \t]\+\)" +syn region typeScriptComment start="/\*" end="\*/" contains=@Spell,typeScriptCommentTodo +"}}} +"" JSDoc support start"{{{ +if !exists("typeScript_ignore_typeScriptdoc") + syntax case ignore + +" syntax coloring for JSDoc comments (HTML) +"unlet b:current_syntax + + syntax region typeScriptDocComment matchgroup=typeScriptComment start="/\*\*\s*$" end="\*/" contains=typeScriptDocTags,typeScriptCommentTodo,typeScriptCvsTag,@typeScriptHtml,@Spell fold + syntax match typeScriptDocTags contained "@\(param\|argument\|requires\|exception\|throws\|type\|class\|extends\|see\|link\|member\|module\|method\|title\|namespace\|optional\|default\|base\|file\)\>" nextgroup=typeScriptDocParam,typeScriptDocSeeTag skipwhite + syntax match typeScriptDocTags contained "@\(beta\|deprecated\|description\|fileoverview\|author\|license\|version\|returns\=\|constructor\|private\|protected\|final\|ignore\|addon\|exec\)\>" + syntax match typeScriptDocParam contained "\%(#\|\w\|\.\|:\|\/\)\+" + syntax region typeScriptDocSeeTag contained matchgroup=typeScriptDocSeeTag start="{" end="}" contains=typeScriptDocTags + + syntax case match +endif "" JSDoc end +"}}} +syntax case match + +"" Syntax in the typeScript code"{{{ +syn match typeScriptSpecial "\\\d\d\d\|\\." +syn region typeScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=typeScriptSpecial,@htmlPreproc +syn region typeScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contains=typeScriptSpecial,@htmlPreproc + +syn match typeScriptSpecialCharacter "'\\.'" +syn match typeScriptNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" +syn region typeScriptRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline +" syntax match typeScriptSpecial "\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\." +" syntax region typeScriptStringD start=+"+ skip=+\\\\\|\\$"+ end=+"+ contains=typeScriptSpecial,@htmlPreproc +" syntax region typeScriptStringS start=+'+ skip=+\\\\\|\\$'+ end=+'+ contains=typeScriptSpecial,@htmlPreproc +" syntax region typeScriptRegexpString start=+/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gim]\{,3}+ contains=typeScriptSpecial,@htmlPreproc oneline +" syntax match typeScriptNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/ +syntax match typeScriptFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ +" syntax match typeScriptLabel /\(?\s*\)\@/ + syntax match typeScriptDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=typeScriptParen skipwhite +"}}} +" HTML things"{{{ + syntax match typeScriptHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/ + syntax match typeScriptHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=typeScriptParen skipwhite +"}}} +" CSS Styles in typeScript"{{{ + syntax keyword typeScriptCssStyles contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition + syntax keyword typeScriptCssStyles contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition + syntax keyword typeScriptCssStyles contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode + syntax keyword typeScriptCssStyles contained bottom height left position right top width zIndex + syntax keyword typeScriptCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout + syntax keyword typeScriptCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop + syntax keyword typeScriptCssStyles contained listStyle listStyleImage listStylePosition listStyleType + syntax keyword typeScriptCssStyles contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat + syntax keyword typeScriptCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType + syntax keyword typeScriptCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText + syntax keyword typeScriptCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor +"}}} +" Highlight ways"{{{ + syntax match typeScriptDotNotation "\." nextgroup=typeScriptPrototype,typeScriptDomElemAttrs,typeScriptDomElemFuncs,typeScriptHtmlElemAttrs,typeScriptHtmlElemFuncs + syntax match typeScriptDotNotation "\.style\." nextgroup=typeScriptCssStyles +"}}} +endif "DOM/HTML/CSS + +"" end DOM/HTML/CSS specified things""}}} + + +"" Code blocks +syntax cluster typeScriptAll contains=typeScriptComment,typeScriptLineComment,typeScriptDocComment,typeScriptStringD,typeScriptStringS,typeScriptRegexpString,typeScriptNumber,typeScriptFloat,typeScriptLabel,typeScriptSource,typeScriptType,typeScriptOperator,typeScriptBoolean,typeScriptNull,typeScriptFuncKeyword,typeScriptConditional,typeScriptGlobal,typeScriptRepeat,typeScriptBranch,typeScriptStatement,typeScriptGlobalObjects,typeScriptMessage,typeScriptIdentifier,typeScriptExceptions,typeScriptReserved,typeScriptDeprecated,typeScriptDomErrNo,typeScriptDomNodeConsts,typeScriptHtmlEvents,typeScriptDotNotation,typeScriptBrowserObjects,typeScriptDOMObjects,typeScriptAjaxObjects,typeScriptPropietaryObjects,typeScriptDOMMethods,typeScriptHtmlElemProperties,typeScriptDOMProperties,typeScriptEventListenerKeywords,typeScriptEventListenerMethods,typeScriptAjaxProperties,typeScriptAjaxMethods,typeScriptFuncArg + +if main_syntax == "typeScript" + syntax sync clear + syntax sync ccomment typeScriptComment minlines=200 +" syntax sync match typeScriptHighlight grouphere typeScriptBlock /{/ +endif + +syntax keyword typeScriptFuncKeyword function contained +syntax region typeScriptFuncDef start="function" end="\([^)]*\)" contains=typeScriptFuncKeyword,typeScriptFuncArg keepend +syntax match typeScriptFuncArg "\(([^()]*)\)" contains=typeScriptParens,typeScriptFuncComma contained +syntax match typeScriptFuncComma /,/ contained +" syntax region typeScriptFuncBlock contained matchgroup=typeScriptFuncBlock start="{" end="}" contains=@typeScriptAll,typeScriptParensErrA,typeScriptParensErrB,typeScriptParen,typeScriptBracket,typeScriptBlock fold + +syn match typeScriptBraces "[{}\[\]]" +syn match typeScriptParens "[()]" +syn match typeScriptOpSymbols "=\{1,3}\|!==\|!=\|<\|>\|>=\|<=\|++\|+=\|--\|-=" +syn match typeScriptEndColons "[;,]" +syn match typeScriptLogicSymbols "\(&&\)\|\(||\)" + +" typeScriptFold Function {{{ + +function! TypeScriptFold() +setl foldlevelstart=1 +syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend + +setl foldtext=FoldText() +endfunction + +au FileType typeScript call TypeScriptFold() + +" }}} + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_typeScript_syn_inits") + if version < 508 + let did_typeScript_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + "Typescript highlighting + HiLink typeScriptParameters Operator + HiLink typescriptSuperBlock Operator + + HiLink typeScriptEndColons Exception + HiLink typeScriptOpSymbols Operator + HiLink typeScriptLogicSymbols Boolean + HiLink typeScriptBraces Function + HiLink typeScriptParens Operator + HiLink typeScriptComment Comment + HiLink typeScriptLineComment Comment + HiLink typeScriptRef Include + HiLink typeScriptRefS String + HiLink typeScriptRefD String + HiLink typeScriptDocComment Comment + HiLink typeScriptCommentTodo Todo + HiLink typeScriptCvsTag Function + HiLink typeScriptDocTags Special + HiLink typeScriptDocSeeTag Function + HiLink typeScriptDocParam Function + HiLink typeScriptStringS String + HiLink typeScriptStringD String + HiLink typeScriptRegexpString String + HiLink typeScriptGlobal Constant + HiLink typeScriptCharacter Character + HiLink typeScriptPrototype Type + HiLink typeScriptConditional Conditional + HiLink typeScriptBranch Conditional + HiLink typeScriptIdentifier Identifier + HiLink typeScriptRepeat Repeat + HiLink typeScriptStatement Statement + HiLink typeScriptFuncKeyword Function + HiLink typeScriptMessage Keyword + HiLink typeScriptDeprecated Exception + HiLink typeScriptError Error + HiLink typeScriptParensError Error + HiLink typeScriptParensErrA Error + HiLink typeScriptParensErrB Error + HiLink typeScriptParensErrC Error + HiLink typeScriptReserved Keyword + HiLink typeScriptOperator Operator + HiLink typeScriptType Type + HiLink typeScriptNull Type + HiLink typeScriptNumber Number + HiLink typeScriptFloat Number + HiLink typeScriptBoolean Boolean + HiLink typeScriptLabel Label + HiLink typeScriptSpecial Special + HiLink typeScriptSource Special + HiLink typeScriptGlobalObjects Special + HiLink typeScriptExceptions Special + + HiLink typeScriptDomErrNo Constant + HiLink typeScriptDomNodeConsts Constant + HiLink typeScriptDomElemAttrs Label + HiLink typeScriptDomElemFuncs PreProc + + HiLink typeScriptHtmlElemAttrs Label + HiLink typeScriptHtmlElemFuncs PreProc + + HiLink typeScriptCssStyles Label +" Ajax Highlighting +HiLink typeScriptBrowserObjects Constant + +HiLink typeScriptDOMObjects Constant +HiLink typeScriptDOMMethods Exception +HiLink typeScriptDOMProperties Type + +HiLink typeScriptAjaxObjects htmlH1 +HiLink typeScriptAjaxMethods Exception +HiLink typeScriptAjaxProperties Type + +HiLink typeScriptFuncDef Title + HiLink typeScriptFuncArg Special + HiLink typeScriptFuncComma Operator + +HiLink typeScriptHtmlEvents Special +HiLink typeScriptHtmlElemProperties Type + +HiLink typeScriptEventListenerKeywords Keyword + +HiLink typeScriptNumber Number +HiLink typeScriptPropietaryObjects Constant + + delcommand HiLink +endif + +" Define the htmltypeScript for HTML syntax html.vim +"syntax clear htmltypeScript +"syntax clear typeScriptExpression +syntax cluster htmltypeScript contains=@typeScriptAll,typeScriptBracket,typeScriptParen,typeScriptBlock,typeScriptParenError +syntax cluster typeScriptExpression contains=@typeScriptAll,typeScriptBracket,typeScriptParen,typeScriptBlock,typeScriptParenError,@htmlPreproc + +let b:current_syntax = "typeScript" +if main_syntax == 'typeScript' + unlet main_syntax +endif + +" vim: ts=4