# HG changeset patch # User nanaya # Date 1571380980 -32400 # Node ID 32fefb63303474c3807675aa51f80caae254a088 # Parent 035b23bb15da9d9a3cf18d40e2045d25d0ec040f Add support for tsx Not sure how it worked before. diff -r 035b23bb15da -r 32fefb633034 rc/vimrc --- a/rc/vimrc Fri Oct 18 15:21:13 2019 +0900 +++ b/rc/vimrc Fri Oct 18 15:43:00 2019 +0900 @@ -117,8 +117,7 @@ " stolen from https://github.com/leafgarland/typescript-vim/blob/master/ftdetect/typescript.vim " use `set filetype` to override default filetype=xml for *.ts files autocmd BufNewFile,BufRead *.ts set filetype=typescript - " use `setfiletype` to not override any other plugins like ianks/vim-tsx - autocmd BufNewFile,BufRead *.tsx setfiletype typescript + autocmd BufNewFile,BufRead *.tsx set filetype=typescript.tsx autocmd BufRead,BufNewFile *.nginx set ft=nginx autocmd BufRead,BufNewFile */etc/nginx/* set ft=nginx diff -r 035b23bb15da -r 32fefb633034 update-vendor --- a/update-vendor Fri Oct 18 15:21:13 2019 +0900 +++ b/update-vendor Fri Oct 18 15:43:00 2019 +0900 @@ -39,4 +39,5 @@ _get https://hg.nginx.org/nginx/raw-file/tip/contrib/vim/syntax/nginx.vim _get https://raw.githubusercontent.com/jelera/vim-javascript-syntax/master/syntax/javascript.vim _get https://github.com/leafgarland/typescript-vim/raw/master/syntax/typescript.vim + _get https://github.com/peitalin/vim-jsx-typescript/raw/master/after/syntax/tsx.vim ) diff -r 035b23bb15da -r 32fefb633034 vendor/vim-syntax/tsx.vim --- /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 +" \@ +" 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] +" < +" end 2): handle \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 +" and the ending brace for the scope: `}` or `)` +" +" \z( pattern \) Braces can be used to make a pattern into an atom. + +" {content} +" s~~~~~~~e +syn region jsBlock + \ start=+{+ + \ end=+}+ + \ contained + \ contains=TOP + +" \@<= positive lookbehind +" \@ +" s~~~~~~~~~~~~~~e +syntax region tsxJsBlock + \ matchgroup=tsxAttributeBraces start=+\([=]\|\s\)\@<={+ + \ matchgroup=tsxAttributeBraces end=+}\(\s*}\|)\)\@!+ + \ contained + \ keepend + \ extend + \ contains=TOP + +" +" 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 + +" \@ +" 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 + +" +" ~~~~~~ +syntax region tsxCloseTag + \ start=++ + \ 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 "[&.;]" + +" +" ~~~ +syntax match tsxTagName + \ +[<]\@<=[^ /!?<>"']\++ + \ contained + \ display + +" +" ~~~ +syntax match tsxAttrib + \ +[-'"<]\@\(['"]\@!\|$\)+ + \ contained + \ keepend + \ contains=tsxAttribPunct,tsxAttribHook + \ display + +syntax match tsxAttribPunct +[:.]+ contained display + +" +" ~ +syntax match tsxEqual +=+ contained display + +" +" s~~~~~~e +syntax region tsxString contained start=+"+ end=+"+ contains=tsxEntity,@Spell display + +" +syntax region tsxString contained start=+`+ end=+`+ contains=tsxEntity,@Spell display + +" +" 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 +