view runtime/syntax/typescriptreact.vim @ 19627:6b1564fcab92 v8.2.0370

patch 8.2.0370: the typebuf_was_filled flag is sometimes not reset Commit: https://github.com/vim/vim/commit/e49b4bb89505fad28cf89f0891aef3e2d397919e Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 11 13:01:40 2020 +0100 patch 8.2.0370: the typebuf_was_filled flag is sometimes not reset Problem: The typebuf_was_filled flag is sometimes not reset, which may cause a hang. Solution: Make sure typebuf_was_filled is reset when the typeahead buffer is empty.
author Bram Moolenaar <Bram@vim.org>
date Wed, 11 Mar 2020 13:15:04 +0100
parents 82a28df1e2d5
children 2acb87ee55fc
line wrap: on
line source

" 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