mirror of
				https://github.com/vim/vim.git
				synced 2025-11-03 09:44:48 -05: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 30
 | 
						|
" 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
 |