Mercurial > ec-dotfiles
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 629:035b23bb15da | 630:32fefb633034 |
|---|---|
| 1 | |
| 2 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| 3 " Vim syntax file | |
| 4 " | |
| 5 " Language: TSX (TypeScript) | |
| 6 " | |
| 7 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" | |
| 8 | |
| 9 " These are the plugin-to-syntax-element correspondences: | |
| 10 " - leafgarland/typescript-vim: typescriptFuncBlock | |
| 11 | |
| 12 | |
| 13 let s:tsx_cpo = &cpo | |
| 14 set cpo&vim | |
| 15 | |
| 16 syntax case match | |
| 17 | |
| 18 if exists('b:current_syntax') | |
| 19 let s:current_syntax = b:current_syntax | |
| 20 unlet b:current_syntax | |
| 21 endif | |
| 22 | |
| 23 syn include @HTMLSyntax syntax/html.vim | |
| 24 if exists('s:current_syntax') | |
| 25 let b:current_syntax = s:current_syntax | |
| 26 endif | |
| 27 | |
| 28 """""" Vim Syntax Help """""" | |
| 29 " `keepend` and `extend` docs: | |
| 30 " https://github.com/othree/til/blob/master/vim/syntax-keepend-extend.md | |
| 31 | |
| 32 " \@<= positive lookbehind | |
| 33 " \@<! negative lookbehind | |
| 34 " \@= positive lookahead | |
| 35 " \@! negative lookahead | |
| 36 | |
| 37 | |
| 38 | |
| 39 syntax case match | |
| 40 | |
| 41 " <tag></tag> | |
| 42 " s~~~~~~~~~~~e | |
| 43 syntax region tsxRegion | |
| 44 \ start=+\(\([a-zA-Z]\)\@<!<>\|\(\s\|[(]\s*\)\@<=\z(<[/a-zA-Z],\@!\([a-zA-Z0-9:\-],\@!\)*\)\)+ | |
| 45 \ skip=+<!--\_.\{-}-->+ | |
| 46 \ end=+</\_.\{-}>+ | |
| 47 \ end=+[a-zA-Z0-9.]*[/]*>\s*\n*\s*\n*\s*[});,]\@=+ | |
| 48 \ contains=tsxTag,tsxCloseTag,tsxComment,Comment,@Spell,tsxColon,tsxIfOperator,tsxElseOperator,jsBlock | |
| 49 \ extend | |
| 50 \ keepend | |
| 51 | |
| 52 | |
| 53 | |
| 54 " Negative lookbacks for: | |
| 55 " <> preceeded by [a-zA-Z] | |
| 56 " <<Tag... | |
| 57 " [a-zA-Z]<Tag | |
| 58 | |
| 59 " end 1): handle </NormalClosingTag> | |
| 60 " end 2): handle <SelfClosingTags/>\s*\n*\s*\n*\s*) | |
| 61 " \s => spaces/tabs | |
| 62 " \n => end-of-line => \n only match end of line in the buffer. | |
| 63 " \s*\n*\s*\n*\s* => handles arbitrary spacing between closing tsxTag </tag> | |
| 64 " and the ending brace for the scope: `}` or `)` | |
| 65 " | |
| 66 " \z( pattern \) Braces can be used to make a pattern into an atom. | |
| 67 | |
| 68 " <tag>{content}</tag> | |
| 69 " s~~~~~~~e | |
| 70 syn region jsBlock | |
| 71 \ start=+{+ | |
| 72 \ end=+}+ | |
| 73 \ contained | |
| 74 \ contains=TOP | |
| 75 | |
| 76 " \@<= positive lookbehind | |
| 77 " \@<! negative lookbehind | |
| 78 " \@= positive lookahead | |
| 79 " \@! negative lookahead | |
| 80 " RULE: capture expression, then apply rule AFTER | |
| 81 " e.g foo\(bar\)\@! | |
| 82 " match all `foo` which is not followed by `bar` | |
| 83 " https://jbodah.github.io/blog/2016/11/01/positivenegative-lookaheadlookbehind-vim/ | |
| 84 | |
| 85 " <tag key={this.props.key}> | |
| 86 " s~~~~~~~~~~~~~~e | |
| 87 syntax region tsxJsBlock | |
| 88 \ matchgroup=tsxAttributeBraces start=+\([=]\|\s\)\@<={+ | |
| 89 \ matchgroup=tsxAttributeBraces end=+}\(\s*}\|)\)\@!+ | |
| 90 \ contained | |
| 91 \ keepend | |
| 92 \ extend | |
| 93 \ contains=TOP | |
| 94 | |
| 95 " <tag id="sample"> | |
| 96 " s~~~~~~~~~~~~~~~e | |
| 97 syntax region tsxTag | |
| 98 \ start=+<[^ /!?<"'=:]\@=+ | |
| 99 \ end=+[/]\{0,1}>+ | |
| 100 \ contained | |
| 101 \ contains=tsxTagName,tsxAttrib,tsxEqual,tsxString,tsxJsBlock,tsxAttributeComment,jsBlock,tsxGenerics | |
| 102 | |
| 103 syntax region tsxGenerics | |
| 104 \ matchgroup=tsxTypeBraces start=+\([<][_\-\.:a-zA-Z0-9]*\|[<][_\-\.:a-zA-Z0-9]*\)\@<=\s*[<]+ | |
| 105 \ matchgroup=tsxTypeBraces end=+>+ | |
| 106 \ contains=tsxTypes,tsxGenerics | |
| 107 \ contained | |
| 108 \ extend | |
| 109 | |
| 110 syntax match tsxTypes /[_\.a-zA-Z0-9]/ | |
| 111 \ contained | |
| 112 | |
| 113 " \@<! negative lookbehind | |
| 114 | |
| 115 " <T1, T2> | |
| 116 " s~~~~~~~e | |
| 117 " For Generics outside of tsxRegion | |
| 118 " Must come after tsxRegion in this file | |
| 119 syntax region tsGenerics | |
| 120 \ start=+<\([\[A-Z]\|typeof\)\([a-zA-Z0-9,{}\[\]'".=>():]\|\s\)*>\(\s*\n*\s*[()]\|\s*[=]\)+ | |
| 121 \ end=+\([=]\)\@<!>+ | |
| 122 \ contains=tsxTypes,tsxGenerics | |
| 123 \ extend | |
| 124 | |
| 125 " </tag> | |
| 126 " ~~~~~~ | |
| 127 syntax region tsxCloseTag | |
| 128 \ start=+</[^ /!?<"'=:]\@=+ | |
| 129 \ end=+>+ | |
| 130 \ contained | |
| 131 \ contains=tsxCloseString | |
| 132 | |
| 133 " matches tsx Comments: {/* ..... /*} | |
| 134 syn region Comment contained start=+{/\*+ end=+\*/}+ contains=Comment | |
| 135 \ extend | |
| 136 | |
| 137 syn region tsxAttributeComment contained start=+//+ end=+\n+ contains=Comment | |
| 138 \ extend | |
| 139 | |
| 140 syntax match tsxCloseString | |
| 141 \ +\w\++ | |
| 142 \ contained | |
| 143 | |
| 144 syntax match tsxColon | |
| 145 \ +[;]+ | |
| 146 \ contained | |
| 147 | |
| 148 " <!-- --> | |
| 149 " ~~~~~~~~ | |
| 150 syntax match tsxComment /<!--\_.\{-}-->/ display | |
| 151 syntax match tsxEntity "&[^; \t]*;" contains=tsxEntityPunct | |
| 152 syntax match tsxEntityPunct contained "[&.;]" | |
| 153 | |
| 154 " <tag key={this.props.key}> | |
| 155 " ~~~ | |
| 156 syntax match tsxTagName | |
| 157 \ +[<]\@<=[^ /!?<>"']\++ | |
| 158 \ contained | |
| 159 \ display | |
| 160 | |
| 161 " <tag key={this.props.key}> | |
| 162 " ~~~ | |
| 163 syntax match tsxAttrib | |
| 164 \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*[/]\{0,1}\>\(['"]\@!\|$\)+ | |
| 165 \ contained | |
| 166 \ keepend | |
| 167 \ contains=tsxAttribPunct,tsxAttribHook | |
| 168 \ display | |
| 169 | |
| 170 syntax match tsxAttribPunct +[:.]+ contained display | |
| 171 | |
| 172 " <tag id="sample"> | |
| 173 " ~ | |
| 174 syntax match tsxEqual +=+ contained display | |
| 175 | |
| 176 " <tag id="sample"> | |
| 177 " s~~~~~~e | |
| 178 syntax region tsxString contained start=+"+ end=+"+ contains=tsxEntity,@Spell display | |
| 179 | |
| 180 " <tag id=`sample${var}`> | |
| 181 syntax region tsxString contained start=+`+ end=+`+ contains=tsxEntity,@Spell display | |
| 182 | |
| 183 " <tag id='sample'> | |
| 184 " s~~~~~~e | |
| 185 syntax region tsxString contained start=+'+ end=+'+ contains=tsxEntity,@Spell display | |
| 186 | |
| 187 syntax match tsxIfOperator +?+ | |
| 188 syntax match tsxNotOperator +!+ | |
| 189 syntax match tsxElseOperator +:+ | |
| 190 | |
| 191 " highlight def link tsxTagName htmlTagName | |
| 192 highlight def link tsxTagName xmlTagName | |
| 193 highlight def link tsxTag htmlTag | |
| 194 highlight def link tsxCloseTag xmlEndTag | |
| 195 highlight def link tsxRegionEnd xmlEndTag | |
| 196 highlight def link tsxEqual htmlTag | |
| 197 highlight def link tsxString String | |
| 198 highlight def link tsxNameSpace Function | |
| 199 highlight def link tsxComment Error | |
| 200 highlight def link tsxAttrib htmlArg | |
| 201 highlight def link tsxCloseString htmlTagName | |
| 202 highlight def link tsxAttributeBraces htmlTag | |
| 203 highlight def link tsxAttributeComment Comment | |
| 204 highlight def link tsxColon typescriptEndColons | |
| 205 | |
| 206 highlight def link tsxGenerics typescriptEndColons | |
| 207 highlight def link tsGenerics tsxTypeBraces | |
| 208 | |
| 209 highlight def link tsxIfOperator typescriptEndColons | |
| 210 highlight def link tsxNotOperator typescriptEndColons | |
| 211 highlight def link tsxElseOperator typescriptEndColons | |
| 212 highlight def link tsxTypeBraces htmlTag | |
| 213 highlight def link tsxTypes typescriptEndColons | |
| 214 | |
| 215 " Custom React Highlights | |
| 216 syn keyword ReactState state nextState prevState setState | |
| 217 " Then EITHER (define your own colour scheme): | |
| 218 " OR (make the colour scheme match an existing one): | |
| 219 " hi link ReactKeywords typescriptRComponent | |
| 220 syn keyword ReactProps props defaultProps ownProps nextProps prevProps | |
| 221 syn keyword Events e event target value | |
| 222 syn keyword ReduxKeywords dispatch payload | |
| 223 syn keyword ReduxHooksKeywords useState useEffect useMemo useCallback | |
| 224 syn keyword WebBrowser window localStorage | |
| 225 syn keyword ReactLifeCycleMethods componentWillMount shouldComponentUpdate componentWillUpdate componentDidUpdate componentWillReceiveProps componentWillUnmount componentDidMount | |
| 226 | |
| 227 let b:current_syntax = 'typescript.tsx' | |
| 228 | |
| 229 let &cpo = s:tsx_cpo | |
| 230 unlet s:tsx_cpo | |
| 231 |
