Mercurial > ec-dotfiles
diff vendor/vim-syntax/tsx.vim @ 630:32fefb633034
Add support for tsx
Not sure how it worked before.
author | nanaya <me@nanaya.pro> |
---|---|
date | Fri, 18 Oct 2019 15:43:00 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/vim-syntax/tsx.vim Fri Oct 18 15:43:00 2019 +0900 @@ -0,0 +1,231 @@ + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Vim syntax file +" +" Language: TSX (TypeScript) +" +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" These are the plugin-to-syntax-element correspondences: +" - leafgarland/typescript-vim: typescriptFuncBlock + + +let s:tsx_cpo = &cpo +set cpo&vim + +syntax case match + +if exists('b:current_syntax') + let s:current_syntax = b:current_syntax + unlet b:current_syntax +endif + +syn include @HTMLSyntax syntax/html.vim +if exists('s:current_syntax') + let b:current_syntax = s:current_syntax +endif + +"""""" Vim Syntax Help """""" +" `keepend` and `extend` docs: +" https://github.com/othree/til/blob/master/vim/syntax-keepend-extend.md + +" \@<= positive lookbehind +" \@<! negative lookbehind +" \@= positive lookahead +" \@! negative lookahead + + + +syntax case match + +" <tag></tag> +" s~~~~~~~~~~~e +syntax region tsxRegion + \ start=+\(\([a-zA-Z]\)\@<!<>\|\(\s\|[(]\s*\)\@<=\z(<[/a-zA-Z],\@!\([a-zA-Z0-9:\-],\@!\)*\)\)+ + \ skip=+<!--\_.\{-}-->+ + \ end=+</\_.\{-}>+ + \ end=+[a-zA-Z0-9.]*[/]*>\s*\n*\s*\n*\s*[});,]\@=+ + \ contains=tsxTag,tsxCloseTag,tsxComment,Comment,@Spell,tsxColon,tsxIfOperator,tsxElseOperator,jsBlock + \ extend + \ keepend + + + +" Negative lookbacks for: +" <> preceeded by [a-zA-Z] +" <<Tag... +" [a-zA-Z]<Tag + +" end 1): handle </NormalClosingTag> +" end 2): handle <SelfClosingTags/>\s*\n*\s*\n*\s*) +" \s => spaces/tabs +" \n => end-of-line => \n only match end of line in the buffer. +" \s*\n*\s*\n*\s* => handles arbitrary spacing between closing tsxTag </tag> +" and the ending brace for the scope: `}` or `)` +" +" \z( pattern \) Braces can be used to make a pattern into an atom. + +" <tag>{content}</tag> +" s~~~~~~~e +syn region jsBlock + \ start=+{+ + \ end=+}+ + \ contained + \ contains=TOP + +" \@<= positive lookbehind +" \@<! negative lookbehind +" \@= positive lookahead +" \@! negative lookahead +" RULE: capture expression, then apply rule AFTER +" e.g foo\(bar\)\@! +" match all `foo` which is not followed by `bar` +" https://jbodah.github.io/blog/2016/11/01/positivenegative-lookaheadlookbehind-vim/ + +" <tag key={this.props.key}> +" s~~~~~~~~~~~~~~e +syntax region tsxJsBlock + \ matchgroup=tsxAttributeBraces start=+\([=]\|\s\)\@<={+ + \ matchgroup=tsxAttributeBraces end=+}\(\s*}\|)\)\@!+ + \ contained + \ keepend + \ extend + \ contains=TOP + +" <tag id="sample"> +" s~~~~~~~~~~~~~~~e +syntax region tsxTag + \ start=+<[^ /!?<"'=:]\@=+ + \ end=+[/]\{0,1}>+ + \ contained + \ contains=tsxTagName,tsxAttrib,tsxEqual,tsxString,tsxJsBlock,tsxAttributeComment,jsBlock,tsxGenerics + +syntax region tsxGenerics + \ matchgroup=tsxTypeBraces start=+\([<][_\-\.:a-zA-Z0-9]*\|[<][_\-\.:a-zA-Z0-9]*\)\@<=\s*[<]+ + \ matchgroup=tsxTypeBraces end=+>+ + \ contains=tsxTypes,tsxGenerics + \ contained + \ extend + +syntax match tsxTypes /[_\.a-zA-Z0-9]/ + \ contained + +" \@<! negative lookbehind + +" <T1, T2> +" s~~~~~~~e +" For Generics outside of tsxRegion +" Must come after tsxRegion in this file +syntax region tsGenerics + \ start=+<\([\[A-Z]\|typeof\)\([a-zA-Z0-9,{}\[\]'".=>():]\|\s\)*>\(\s*\n*\s*[()]\|\s*[=]\)+ + \ end=+\([=]\)\@<!>+ + \ contains=tsxTypes,tsxGenerics + \ extend + +" </tag> +" ~~~~~~ +syntax region tsxCloseTag + \ start=+</[^ /!?<"'=:]\@=+ + \ end=+>+ + \ contained + \ contains=tsxCloseString + +" matches tsx Comments: {/* ..... /*} +syn region Comment contained start=+{/\*+ end=+\*/}+ contains=Comment + \ extend + +syn region tsxAttributeComment contained start=+//+ end=+\n+ contains=Comment + \ extend + +syntax match tsxCloseString + \ +\w\++ + \ contained + +syntax match tsxColon + \ +[;]+ + \ contained + +" <!-- --> +" ~~~~~~~~ +syntax match tsxComment /<!--\_.\{-}-->/ display +syntax match tsxEntity "&[^; \t]*;" contains=tsxEntityPunct +syntax match tsxEntityPunct contained "[&.;]" + +" <tag key={this.props.key}> +" ~~~ +syntax match tsxTagName + \ +[<]\@<=[^ /!?<>"']\++ + \ contained + \ display + +" <tag key={this.props.key}> +" ~~~ +syntax match tsxAttrib + \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*[/]\{0,1}\>\(['"]\@!\|$\)+ + \ contained + \ keepend + \ contains=tsxAttribPunct,tsxAttribHook + \ display + +syntax match tsxAttribPunct +[:.]+ contained display + +" <tag id="sample"> +" ~ +syntax match tsxEqual +=+ contained display + +" <tag id="sample"> +" s~~~~~~e +syntax region tsxString contained start=+"+ end=+"+ contains=tsxEntity,@Spell display + +" <tag id=`sample${var}`> +syntax region tsxString contained start=+`+ end=+`+ contains=tsxEntity,@Spell display + +" <tag id='sample'> +" s~~~~~~e +syntax region tsxString contained start=+'+ end=+'+ contains=tsxEntity,@Spell display + +syntax match tsxIfOperator +?+ +syntax match tsxNotOperator +!+ +syntax match tsxElseOperator +:+ + +" highlight def link tsxTagName htmlTagName +highlight def link tsxTagName xmlTagName +highlight def link tsxTag htmlTag +highlight def link tsxCloseTag xmlEndTag +highlight def link tsxRegionEnd xmlEndTag +highlight def link tsxEqual htmlTag +highlight def link tsxString String +highlight def link tsxNameSpace Function +highlight def link tsxComment Error +highlight def link tsxAttrib htmlArg +highlight def link tsxCloseString htmlTagName +highlight def link tsxAttributeBraces htmlTag +highlight def link tsxAttributeComment Comment +highlight def link tsxColon typescriptEndColons + +highlight def link tsxGenerics typescriptEndColons +highlight def link tsGenerics tsxTypeBraces + +highlight def link tsxIfOperator typescriptEndColons +highlight def link tsxNotOperator typescriptEndColons +highlight def link tsxElseOperator typescriptEndColons +highlight def link tsxTypeBraces htmlTag +highlight def link tsxTypes typescriptEndColons + +" Custom React Highlights +syn keyword ReactState state nextState prevState setState +" Then EITHER (define your own colour scheme): +" OR (make the colour scheme match an existing one): +" hi link ReactKeywords typescriptRComponent +syn keyword ReactProps props defaultProps ownProps nextProps prevProps +syn keyword Events e event target value +syn keyword ReduxKeywords dispatch payload +syn keyword ReduxHooksKeywords useState useEffect useMemo useCallback +syn keyword WebBrowser window localStorage +syn keyword ReactLifeCycleMethods componentWillMount shouldComponentUpdate componentWillUpdate componentDidUpdate componentWillReceiveProps componentWillUnmount componentDidMount + +let b:current_syntax = 'typescript.tsx' + +let &cpo = s:tsx_cpo +unlet s:tsx_cpo +