summaryrefslogtreecommitdiffstats
path: root/after/syntax
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2019-06-08 13:25:41 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2019-06-08 13:25:41 +0200
commit26c678b08d88b658ec6069eb2ada2b2ba21c5d39 (patch)
treeebf7500bafee56b195bf52ced286fe29e5b3f485 /after/syntax
parent17ecfbdabcfdf294dae27c506fb68b58175199b5 (diff)
downloadvim-polyglot-26c678b08d88b658ec6069eb2ada2b2ba21c5d39.tar.gz
vim-polyglot-26c678b08d88b658ec6069eb2ada2b2ba21c5d39.zip
Change jsx/tsx provider, closes #400
Diffstat (limited to 'after/syntax')
-rw-r--r--after/syntax/javascript.vim64
-rw-r--r--after/syntax/jsx.vim83
-rw-r--r--after/syntax/tsx.vim87
-rw-r--r--after/syntax/typescript.vim50
4 files changed, 114 insertions, 170 deletions
diff --git a/after/syntax/javascript.vim b/after/syntax/javascript.vim
new file mode 100644
index 00000000..7b92ecbd
--- /dev/null
+++ b/after/syntax/javascript.vim
@@ -0,0 +1,64 @@
+if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'jsx') != -1
+ finish
+endif
+
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Vim syntax file
+"
+" Language: javascript.jsx
+" Maintainer: MaxMellon <maxmellon1994@gmail.com>
+"
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+let s:jsx_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
+
+if exists('s:current_syntax')
+ let b:current_syntax = s:current_syntax
+endif
+
+if hlexists("jsNoise") " pangloss/vim-javascript
+ syntax cluster jsExpression add=jsxRegion
+elseif hlexists("javascriptOpSymbols") " othree/yajs.vim
+ " refine the javascript line comment
+ syntax region javascriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
+ syntax cluster javascriptValue add=jsxRegion
+ syntax cluster javascriptNoReserved add=jsxElement,jsxTag
+
+ " add support to arrow function which returns a tagged template string, e.g.
+ " () => html`<div></div>`
+ syntax cluster afterArrowFunc add=javascriptTagRef
+else " build-in javascript syntax
+ " refine the javascript line comment
+ syntax region javaScriptLineComment start=+//+ end=/$/ contains=@Spell,javascriptCommentTodo extend keepend
+ " add a javaScriptBlock group for build-in syntax
+ syntax region javaScriptBlockBuildIn
+ \ contained
+ \ matchgroup=javaScriptBraces
+ \ start="{"
+ \ end="}"
+ \ extend
+ \ contains=javaScriptBlockBuildIn,@javaScriptEmbededExpr,javaScript.*
+ \ fold
+ syntax cluster javaScriptEmbededExpr add=jsxRegion
+
+ " refine the template string syntax
+ syntax region javaScriptStringT start=+`+ skip=+\\\\\|\\`+ end=+`+ contains=javaScriptSpecial,javaScriptEmbed,@htmlPreproc extend
+ syntax region javaScriptEmbed matchgroup=javaScriptEmbedBraces start=+\${+ end=+}+ contained contains=@javaScriptEmbededExpr,javaScript.*
+endif
+
+" because this is autoloaded, when developing you're going to need to source
+" the autoload/jsx_pretty/*.vim file manually, or restart vim
+call jsx_pretty#syntax#highlight()
+
+let b:current_syntax = 'javascript.jsx'
+
+let &cpo = s:jsx_cpo
+unlet s:jsx_cpo
diff --git a/after/syntax/jsx.vim b/after/syntax/jsx.vim
deleted file mode 100644
index ac4dd616..00000000
--- a/after/syntax/jsx.vim
+++ /dev/null
@@ -1,83 +0,0 @@
-if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'jsx') != -1
- finish
-endif
-
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-" Vim syntax file
-"
-" Language: JSX (JavaScript)
-" Maintainer: Max Wang <mxawng@gmail.com>
-" Depends: pangloss/vim-javascript
-"
-" CREDITS: Inspired by Facebook.
-"
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-" Prologue; load in XML syntax.
-if exists('b:current_syntax')
- let s:current_syntax=b:current_syntax
- unlet b:current_syntax
-endif
-syn include @XMLSyntax syntax/xml.vim
-if exists('s:current_syntax')
- let b:current_syntax=s:current_syntax
-endif
-
-" Officially, vim-jsx depends on the pangloss/vim-javascript syntax package
-" (and is tested against it exclusively). However, in practice, we make some
-" effort towards compatibility with other packages.
-"
-" These are the plugin-to-syntax-element correspondences:
-"
-" - pangloss/vim-javascript: jsBlock, jsExpression
-" - jelera/vim-javascript-syntax: javascriptBlock
-" - othree/yajs.vim: javascriptNoReserved
-
-
-" JSX attributes should color as JS. Note the trivial end pattern; we let
-" jsBlock take care of ending the region.
-syn region xmlString contained start=+{+ end=++ contains=jsBlock,javascriptBlock
-
-" JSX comments inside XML tag should color as comment. Note the trivial end pattern; we let
-" jsComment take care of ending the region.
-syn region xmlString contained start=+//+ end=++ contains=jsComment
-
-" JSX child blocks behave just like JSX attributes, except that (a) they are
-" syntactically distinct, and (b) they need the syn-extend argument, or else
-" nested XML end-tag patterns may end the outer jsxRegion.
-syn region jsxChild contained start=+{+ end=++ contains=jsBlock,javascriptBlock
- \ extend
-
-" Highlight JSX regions as XML; recursively match.
-"
-" Note that we prohibit JSX tags from having a < or word character immediately
-" preceding it, to avoid conflicts with, respectively, the left shift operator
-" and generic Flow type annotations (http://flowtype.org/).
-syn region jsxRegion
- \ contains=@Spell,@XMLSyntax,jsxRegion,jsxChild,jsBlock,javascriptBlock
- \ start=+\%(<\|\w\)\@<!<\z([a-zA-Z_][a-zA-Z0-9:\-.]*\>[:,]\@!\)\([^>]*>(\)\@!+
- \ skip=+<!--\_.\{-}-->+
- \ end=+</\z1\_\s\{-}>+
- \ end=+/>+
- \ keepend
- \ extend
-
-" Shorthand fragment support
-"
-" Note that since the main jsxRegion contains @XMLSyntax, we cannot simply
-" adjust the regex above since @XMLSyntax will highlight the opening `<` as an
-" XMLError. Instead we create a new group with the same name that does not
-" include @XMLSyntax and instead uses matchgroup to get the same highlighting.
-syn region jsxRegion
- \ contains=@Spell,jsxRegion,jsxChild,jsBlock,javascriptBlock
- \ matchgroup=xmlTag
- \ start=/<>/
- \ end=/<\/>/
- \ keepend
- \ extend
-
-" Add jsxRegion to the lowest-level JS syntax cluster.
-syn cluster jsExpression add=jsxRegion
-
-" Allow jsxRegion to contain reserved words.
-syn cluster javascriptNoReserved add=jsxRegion
diff --git a/after/syntax/tsx.vim b/after/syntax/tsx.vim
deleted file mode 100644
index 05bfc9ea..00000000
--- a/after/syntax/tsx.vim
+++ /dev/null
@@ -1,87 +0,0 @@
-if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'tsx') != -1
- finish
-endif
-
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-" Vim syntax file
-"
-" Language: TSX (JavaScript)
-" Maintainer: Ian Ker-Seymer <i.kerseymer@gmail.com>
-" Depends: leafgarland/typescript-vim
-"
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-if exists('b:current_syntax')
- let s:current_syntax=b:current_syntax
- unlet b:current_syntax
-endif
-
-syn include @XMLSyntax syntax/xml.vim
-
-if exists('s:current_syntax')
- let b:current_syntax=s:current_syntax
-endif
-
-syn region embeddedTs
- \ matchgroup=NONE
- \ start=+{+
- \ end=+}+
- \ contains=@Spell,@typescriptAll,xmlEntity,tsxRegion
- \ contained
-
-" Add embeddedTs to everything where xmlString is used to allow for
-" both string highlighting and @typescriptAll highlighting
-syn region xmlTag
- \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+
- \ matchgroup=xmlTag end=+>+
- \ contained
- \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook,embeddedTs
-
-syn region xmlProcessing
- \ matchgroup=xmlProcessingDelim
- \ start="<?"
- \ end="?>"
- \ contains=xmlAttrib,xmlEqual,xmlString,embeddedTs
-
-
-if exists('g:xml_syntax_folding')
- " DTD -- we use dtd.vim here
- syn region xmlDocType matchgroup=xmlDocTypeDecl
- \ start="<!DOCTYPE"he=s+2,rs=s+2
- \ end=">"
- \ fold
- \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString,embeddedTs
-else
- syn region xmlDocType matchgroup=xmlDocTypeDecl
- \ start="<!DOCTYPE"he=s+2,rs=s+2
- \ end=">"
- \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString,embeddedTs
-endif
-
-
-if exists('g:xml_syntax_folding')
- syn region xmlTag
- \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+
- \ matchgroup=xmlTag end=+>+
- \ contained
- \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook,embeddedTs
-else
- syn region xmlTag
- \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+
- \ matchgroup=xmlTag end=+>+
- \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook,embeddedTs
-endif
-
-
-syn region tsxRegion
- \ contains=@Spell,@XMLSyntax,tsxRegion,@typescriptAll
- \ start=+\%(<\|\w\)\@<!<\z([a-zA-Z][a-zA-Z0-9:\-.]*\)+
- \ skip=+<!--\_.\{-}-->+
- \ end=+</\z1\_\s\{-}>+
- \ end=+/>+
- \ keepend
- \ extend
-
-hi def link embeddedTs NONE
-
-syn cluster @typescriptAll add=tsxRegion
diff --git a/after/syntax/typescript.vim b/after/syntax/typescript.vim
new file mode 100644
index 00000000..e4aab79f
--- /dev/null
+++ b/after/syntax/typescript.vim
@@ -0,0 +1,50 @@
+if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'jsx') != -1
+ finish
+endif
+
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Vim syntax file
+"
+" Language: javascript.jsx
+" Maintainer: MaxMellon <maxmellon1994@gmail.com>
+" Depends: leafgarland/typescript-vim
+"
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+let s:jsx_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
+
+if exists('s:current_syntax')
+ let b:current_syntax = s:current_syntax
+endif
+
+" refine the typescript line comment
+syntax region typescriptLineComment start=+//+ end=/$/ contains=@Spell,typescriptCommentTodo,typescriptRef extend keepend
+
+" add a typescriptBlock group for typescript
+syntax region typescriptBlock
+ \ contained
+ \ matchgroup=typescriptBraces
+ \ start="{"
+ \ end="}"
+ \ extend
+ \ contains=@typescriptAll,@typescriptExpression,typescriptBlock
+ \ fold
+
+" because this is autoloaded, when developing you're going to need to source
+" the autoload/jsx_pretty/*.vim file manually, or restart vim
+call jsx_pretty#syntax#highlight()
+
+syntax cluster typescriptExpression add=jsxRegion
+
+let b:current_syntax = 'typescript.tsx'
+
+let &cpo = s:jsx_cpo
+unlet s:jsx_cpo