mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
161 lines
3.8 KiB
VimL
161 lines
3.8 KiB
VimL
|
" Vim syntax file
|
||
|
" Language: TypeScript with React (JSX)
|
||
|
" Maintainer: Bram Moolenaar
|
||
|
" Last Change: 2019 Nov 17
|
||
|
" Based On: Herrington Darkholme's yats.vim
|
||
|
" Changes: See https:github.com/HerringtonDarkholme/yats.vim
|
||
|
" Credits: See yats.vim on github
|
||
|
|
||
|
if !exists("main_syntax")
|
||
|
if exists("b:current_syntax")
|
||
|
finish
|
||
|
endif
|
||
|
let main_syntax = 'typescriptreact'
|
||
|
endif
|
||
|
|
||
|
let s:cpo_save = &cpo
|
||
|
set cpo&vim
|
||
|
|
||
|
syntax region tsxTag
|
||
|
\ start=+<\([^/!?<>="':]\+\)\@=+
|
||
|
\ skip=+</[^ /!?<>"']\+>+
|
||
|
\ end=+/\@<!>+
|
||
|
\ end=+\(/>\)\@=+
|
||
|
\ contained
|
||
|
\ contains=tsxTagName,tsxIntrinsicTagName,tsxAttrib,tsxEscJs,
|
||
|
\tsxCloseString,@tsxComment
|
||
|
|
||
|
syntax match tsxTag /<>/ contained
|
||
|
|
||
|
|
||
|
" <tag></tag>
|
||
|
" s~~~~~~~~~e
|
||
|
" and self close tag
|
||
|
" <tag/>
|
||
|
" s~~~~e
|
||
|
" A big start regexp borrowed from https://git.io/vDyxc
|
||
|
syntax region tsxRegion
|
||
|
\ start=+<\_s*\z([a-zA-Z1-9\$_-]\+\(\.\k\+\)*\)+
|
||
|
\ skip=+<!--\_.\{-}-->+
|
||
|
\ end=+</\_s*\z1>+
|
||
|
\ matchgroup=tsxCloseString end=+/>+
|
||
|
\ fold
|
||
|
\ contains=tsxRegion,tsxCloseString,tsxCloseTag,tsxTag,tsxCommentInvalid,tsxFragment,tsxEscJs,@Spell
|
||
|
\ keepend
|
||
|
\ extend
|
||
|
|
||
|
" <> </>
|
||
|
" s~~~~~~e
|
||
|
" A big start regexp borrowed from https://git.io/vDyxc
|
||
|
syntax region tsxFragment
|
||
|
\ start=+\(\((\|{\|}\|\[\|,\|&&\|||\|?\|:\|=\|=>\|\Wreturn\|^return\|\Wdefault\|^\|>\)\_s*\)\@<=<>+
|
||
|
\ skip=+<!--\_.\{-}-->+
|
||
|
\ end=+</>+
|
||
|
\ fold
|
||
|
\ contains=tsxRegion,tsxCloseString,tsxCloseTag,tsxTag,tsxCommentInvalid,tsxFragment,tsxEscJs,@Spell
|
||
|
\ keepend
|
||
|
\ extend
|
||
|
|
||
|
" </tag>
|
||
|
" ~~~~~~
|
||
|
syntax match tsxCloseTag
|
||
|
\ +</\_s*[^/!?<>"']\+>+
|
||
|
\ contained
|
||
|
\ contains=tsxTagName,tsxIntrinsicTagName
|
||
|
|
||
|
syntax match tsxCloseTag +</>+ contained
|
||
|
|
||
|
syntax match tsxCloseString
|
||
|
\ +/>+
|
||
|
\ contained
|
||
|
|
||
|
" <!-- -->
|
||
|
" ~~~~~~~~
|
||
|
syntax match tsxCommentInvalid /<!--\_.\{-}-->/ display
|
||
|
|
||
|
syntax region tsxBlockComment
|
||
|
\ contained
|
||
|
\ start="/\*"
|
||
|
\ end="\*/"
|
||
|
|
||
|
syntax match tsxLineComment
|
||
|
\ "//.*$"
|
||
|
\ contained
|
||
|
\ display
|
||
|
|
||
|
syntax cluster tsxComment contains=tsxBlockComment,tsxLineComment
|
||
|
|
||
|
syntax match tsxEntity "&[^; \t]*;" contains=tsxEntityPunct
|
||
|
syntax match tsxEntityPunct contained "[&.;]"
|
||
|
|
||
|
" <tag key={this.props.key}>
|
||
|
" ~~~
|
||
|
syntax match tsxTagName
|
||
|
\ +[</]\_s*[^/!?<>"'* ]\++hs=s+1
|
||
|
\ contained
|
||
|
\ nextgroup=tsxAttrib
|
||
|
\ skipwhite
|
||
|
\ display
|
||
|
syntax match tsxIntrinsicTagName
|
||
|
\ +[</]\_s*[a-z1-9-]\++hs=s+1
|
||
|
\ contained
|
||
|
\ nextgroup=tsxAttrib
|
||
|
\ skipwhite
|
||
|
\ display
|
||
|
|
||
|
" <tag key={this.props.key}>
|
||
|
" ~~~
|
||
|
syntax match tsxAttrib
|
||
|
\ +[a-zA-Z_][-0-9a-zA-Z_]*+
|
||
|
\ nextgroup=tsxEqual skipwhite
|
||
|
\ contained
|
||
|
\ display
|
||
|
|
||
|
" <tag id="sample">
|
||
|
" ~
|
||
|
syntax match tsxEqual +=+ display contained
|
||
|
\ nextgroup=tsxString skipwhite
|
||
|
|
||
|
" <tag id="sample">
|
||
|
" s~~~~~~e
|
||
|
syntax region tsxString contained start=+"+ end=+"+ contains=tsxEntity,@Spell display
|
||
|
|
||
|
" <tag key={this.props.key}>
|
||
|
" s~~~~~~~~~~~~~~e
|
||
|
syntax region tsxEscJs
|
||
|
\ contained
|
||
|
\ contains=@typescriptValue,@tsxComment
|
||
|
\ matchgroup=typescriptBraces
|
||
|
\ start=+{+
|
||
|
\ end=+}+
|
||
|
\ extend
|
||
|
|
||
|
|
||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""
|
||
|
" Source the part common with typescriptreact.vim
|
||
|
source <sfile>:h/typescriptcommon.vim
|
||
|
|
||
|
|
||
|
syntax cluster typescriptExpression add=tsxRegion,tsxFragment
|
||
|
|
||
|
hi def link tsxTag htmlTag
|
||
|
hi def link tsxTagName Function
|
||
|
hi def link tsxIntrinsicTagName htmlTagName
|
||
|
hi def link tsxString String
|
||
|
hi def link tsxNameSpace Function
|
||
|
hi def link tsxCommentInvalid Error
|
||
|
hi def link tsxBlockComment Comment
|
||
|
hi def link tsxLineComment Comment
|
||
|
hi def link tsxAttrib Type
|
||
|
hi def link tsxEscJs tsxEscapeJs
|
||
|
hi def link tsxCloseTag htmlTag
|
||
|
hi def link tsxCloseString Identifier
|
||
|
|
||
|
let b:current_syntax = "typescriptreact"
|
||
|
if main_syntax == 'typescriptreact'
|
||
|
unlet main_syntax
|
||
|
endif
|
||
|
|
||
|
let &cpo = s:cpo_save
|
||
|
unlet s:cpo_save
|