Update runtime files
diff --git a/runtime/syntax/asm.vim b/runtime/syntax/asm.vim
index 492e3e8..73f283a 100644
--- a/runtime/syntax/asm.vim
+++ b/runtime/syntax/asm.vim
@@ -1,11 +1,10 @@
 " Vim syntax file
-" Language:	GNU Assembler
-" Maintainer:	Erik Wognsen <erik.wognsen@gmail.com>
-"		Previous maintainer:
-"		Kevin Dahlhausen <kdahlhaus@yahoo.com>
-" Last Change:	2014 Feb 04
-
-" Thanks to Ori Avtalion for feedback on the comment markers!
+" Language:		GNU Assembler
+" Maintainer:		Doug Kearns dougkearns@gmail.com
+" Previous Maintainers: Erik Wognsen <erik.wognsen@gmail.com>
+"			Kevin Dahlhausen <kdahlhaus@yahoo.com>
+" Contributors:		Ori Avtalion, Lakshay Garg
+" Last Change:		2020 Oct 31
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -34,29 +33,49 @@
 syn match asmType "\.string"
 syn match asmType "\.word"
 
-syn match asmLabel		"[a-z_][a-z0-9_]*:"he=e-1
 syn match asmIdentifier		"[a-z_][a-z0-9_]*"
+syn match asmLabel		"[a-z_][a-z0-9_]*:"he=e-1
 
 " Various #'s as defined by GAS ref manual sec 3.6.2.1
-" Technically, the first decNumber def is actually octal,
+" Technically, the first asmDecimal def is actually octal,
 " since the value of 0-7 octal is the same as 0-7 decimal,
 " I (Kevin) prefer to map it as decimal:
-syn match decNumber		"0\+[1-7]\=[\t\n$,; ]"
-syn match decNumber		"[1-9]\d*"
-syn match octNumber		"0[0-7][0-7]\+"
-syn match hexNumber		"0[xX][0-9a-fA-F]\+"
-syn match binNumber		"0[bB][0-1]*"
+syn match asmDecimal		"\<0\+[1-7]\=\>"	 display
+syn match asmDecimal		"\<[1-9]\d*\>"		 display
+syn match asmOctal		"\<0[0-7][0-7]\+\>"	 display
+syn match asmHexadecimal	"\<0[xX][0-9a-fA-F]\+\>" display
+syn match asmBinary		"\<0[bB][0-1]\+\>"	 display
 
-syn keyword asmTodo		contained TODO
+syn match asmFloat		"\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display
+syn match asmFloat		"\.\d\+\%(e[+-]\=\d\+\)\=\>"	  display
+syn match asmFloat		"\<\d\%(e[+-]\=\d\+\)\>"	  display
+syn match asmFloat		"[+-]\=Inf\>\|\<NaN\>"		  display
 
+syn match asmFloat		"\%(0[edfghprs]\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\="    display
+syn match asmFloat		"\%(0[edfghprs]\)[+-]\=\d\+\%(\.\d\+\)\=\%(e[+-]\=\d\+\)\=" display
+" Avoid fighting the hexadecimal match for unicorn-like '0x' prefixed floats
+syn match asmFloat		"\%(0x\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\="		    display
+
+" Allow all characters to be escaped (and in strings) as these vary across
+" architectures [See sec 3.6.1.1 Strings]
+syn match asmCharacterEscape	"\\."    contained
+syn match asmCharacter		"'\\\=." contains=asmCharacterEscape
+
+syn match asmStringEscape	"\\\_."			contained
+syn match asmStringEscape	"\\\%(\o\{3}\|00[89]\)"	contained display
+syn match asmStringEscape	"\\x\x\+"		contained display
+
+syn region asmString		start="\"" end="\"" skip="\\\\\|\\\"" contains=asmStringEscape
+
+syn keyword asmTodo		contained TODO FIXME XXX NOTE
 
 " GAS supports one type of multi line comments:
-syn region asmComment		start="/\*" end="\*/" contains=asmTodo
+syn region asmComment		start="/\*" end="\*/" contains=asmTodo,@Spell
 
 " GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
 " a backslash ending a C++ style comment does not extend the comment to the
 " next line (hence the syntax region does not define 'skip="\\$"')
-syn region asmComment		start="//" end="$" keepend contains=asmTodo
+syn region asmComment		start="//" end="$" keepend contains=asmTodo,@Spell
 
 " Line comment characters depend on the target architecture and command line
 " options and some comments may double as logical line number directives or
@@ -69,7 +88,7 @@
 " frequently used features of the most popular architectures (and also the
 " non-GNU assembly languages that use this syntax file because their asm files
 " are also named *.asm), the following are used as line comment characters:
-syn match asmComment		"[#;!|].*" contains=asmTodo
+syn match asmComment		"[#;!|].*" contains=asmTodo,@Spell
 
 " Side effects of this include:
 " - When `;' is used to separate statements on the same line (many targets
@@ -96,35 +115,50 @@
 " with '.', including the GCC auto-generated '.L' labels.
 syn match asmDirective		"\.[A-Za-z][0-9A-Za-z-_]*"
 
-
 syn case match
 
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet
 
 " The default methods for highlighting.  Can be overridden later
-hi def link asmSection	Special
-hi def link asmLabel	Label
-hi def link asmComment	Comment
-hi def link asmTodo	Todo
+hi def link asmSection		Special
+hi def link asmLabel		Label
+hi def link asmComment		Comment
+hi def link asmTodo		Todo
 hi def link asmDirective	Statement
 
-hi def link asmInclude	Include
-hi def link asmCond	PreCondit
-hi def link asmMacro	Macro
+hi def link asmInclude		Include
+hi def link asmCond		PreCondit
+hi def link asmMacro		Macro
 
-hi def link hexNumber	Number
-hi def link decNumber	Number
-hi def link octNumber	Number
-hi def link binNumber	Number
+if exists('g:asm_legacy_syntax_groups')
+  hi def link hexNumber		Number
+  hi def link decNumber		Number
+  hi def link octNumber		Number
+  hi def link binNumber		Number
+  hi def link asmHexadecimal	hexNumber
+  hi def link asmDecimal	decNumber
+  hi def link asmOctal		octNumber
+  hi def link asmBinary		binNumber
+else
+  hi def link asmHexadecimal	Number
+  hi def link asmDecimal	Number
+  hi def link asmOctal		Number
+  hi def link asmBinary		Number
+endif
+hi def link asmFloat		Float
+
+hi def link asmString		String
+hi def link asmStringEscape	Special
+hi def link asmCharacter	Character
+hi def link asmCharacterEscape	Special
 
 hi def link asmIdentifier	Identifier
-hi def link asmType	Type
-
+hi def link asmType		Type
 
 let b:current_syntax = "asm"
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" vim: ts=8
+" vim: nowrap sw=2 sts=2 ts=8 noet
diff --git a/runtime/syntax/asmh8300.vim b/runtime/syntax/asmh8300.vim
index 8560fb7..2eabb7e 100644
--- a/runtime/syntax/asmh8300.vim
+++ b/runtime/syntax/asmh8300.vim
@@ -1,19 +1,21 @@
 " Vim syntax file
-" Language:	Hitachi H-8300h specific syntax for GNU Assembler
-" Maintainer:	Kevin Dahlhausen <kdahlhaus@yahoo.com>
-" Last Change:	2002 Sep 19
+" Language:		Hitachi H-8300h specific syntax for GNU Assembler
+" Maintainer:		Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer:	Kevin Dahlhausen <kdahlhaus@yahoo.com>
+" Last Change:		2020 Oct 31
 
-" quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+runtime! syntax/asm.vim
+
 syn case ignore
 
-syn match asmDirective "\.h8300[h]*"
+syn match asmDirective	"\.h8300[hs]n\="
 
 "h8300[h] registers
-syn match asmReg	"e\=r[0-7][lh]\="
+syn match asmRegister	"e\=r\o[lh]\="
 
 "h8300[h] opcodes - order is important!
 syn match asmOpcode "add\.[lbw]"
@@ -37,32 +39,20 @@
 syn match asmOpcode "shl[lr]\.[lbw]"
 syn match asmOpcode "sub\.[lbw]"
 syn match asmOpcode "xor\.[lbw]"
-syn keyword asmOpcode "andc" "band" "bcc" "bclr" "bcs" "beq" "bf" "bge" "bgt"
-syn keyword asmOpcode "bhi" "bhs" "biand" "bild" "bior" "bist" "bixor" "bmi"
-syn keyword asmOpcode "bne" "bnot" "bnp" "bor" "bpl" "bpt" "bra" "brn" "bset"
-syn keyword asmOpcode "bsr" "btst" "bst" "bt" "bvc" "bvs" "bxor" "cmp" "daa"
-syn keyword asmOpcode "das" "eepmov" "eepmovw" "inc" "jmp" "jsr" "ldc" "movfpe"
-syn keyword asmOpcode "movtpe" "mov" "nop" "orc" "rte" "rts" "sleep" "stc"
-syn keyword asmOpcode "sub" "trapa" "xorc"
+
+syn keyword asmOpcode andc band bcc bclr bcs beq bf bge bgt
+syn keyword asmOpcode bhi bhs biand bild bior bist bixor bmi
+syn keyword asmOpcode bne bnot bnp bor bpl bpt bra brn bset
+syn keyword asmOpcode bsr btst bst bt bvc bvs bxor cmp daa
+syn keyword asmOpcode das eepmov eepmovw inc jmp jsr ldc movfpe
+syn keyword asmOpcode movtpe mov nop orc rte rts sleep stc
+syn keyword asmOpcode sub trapa xorc
 
 syn case match
 
-
-" Read the general asm syntax
-runtime! syntax/asm.vim
-
-
-" Define the default highlighting.
-" Only when an item doesn't have highlighting yet
-
-hi def link asmOpcode  Statement
-hi def link asmRegister  Identifier
-
-" My default-color overrides:
-"hi asmOpcode ctermfg=yellow
-"hi asmReg	ctermfg=lightmagenta
-
+hi def link asmOpcode	Statement
+hi def link asmRegister	Identifier
 
 let b:current_syntax = "asmh8300"
 
-" vim: ts=8
+" vim: nowrap sw=2 sts=2 ts=8 noet
diff --git a/runtime/syntax/awk.vim b/runtime/syntax/awk.vim
index 43455b8..3082c1c 100644
--- a/runtime/syntax/awk.vim
+++ b/runtime/syntax/awk.vim
@@ -1,7 +1,8 @@
 " Vim syntax file
-" Language:	awk, nawk, gawk, mawk
-" Maintainer:	Antonio Colombo <azc100@gmail.com>
-" Last Change:	2020 Aug 18
+" Language:		awk, nawk, gawk, mawk
+" Maintainer:		Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer:	Antonio Colombo <azc100@gmail.com>
+" Last Change:		2020 Aug 18
 
 " AWK  ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
 " The AWK Programming Language, Addison-Wesley, 1988
diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim
index 7321e90..33594f3 100644
--- a/runtime/syntax/debchangelog.vim
+++ b/runtime/syntax/debchangelog.vim
@@ -3,7 +3,7 @@
 " Maintainer:  Debian Vim Maintainers
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2020 Apr 27
+" Last Change: 2020 Oct 28
 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim
 
 " Standard syntax initialization
@@ -21,20 +21,20 @@
 set cpo-=C
 let s:supported = [
       \ 'oldstable', 'stable', 'testing', 'unstable', 'experimental',
-      \ 'wheezy', 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm',
+      \ 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm',
       \ 'sid', 'rc-buggy',
       \
-      \ 'trusty', 'xenial', 'bionic', 'eoan', 'focal', 'groovy', 'devel'
+      \ 'trusty', 'xenial', 'bionic', 'focal', 'groovy', 'hippo', 'devel'
       \ ]
 let s:unsupported = [
       \ 'frozen', 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato',
-      \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze',
+      \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze', 'wheezy',
       \
       \ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty',
       \ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid',
       \ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy',
       \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful', 'cosmic',
-      \ 'disco'
+      \ 'disco', 'eoan'
       \ ]
 let &cpo=s:cpo
 
diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim
index 9085cd0..25fc252 100644
--- a/runtime/syntax/debcontrol.vim
+++ b/runtime/syntax/debcontrol.vim
@@ -3,7 +3,7 @@
 " Maintainer:  Debian Vim Maintainers
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2018 Aug 11
+" Last Change: 2020 Oct 26
 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim
 
 " Standard syntax initialization
@@ -47,22 +47,24 @@
 
 unlet s:kernels s:archs s:pairs
 
+" Keep in sync with https://metadata.ftp-master.org/sections.822
+" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection  / -
 let s:sections = [
       \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug'
       \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded'
-      \, 'fonts', 'games', 'gnome', 'gnustep', 'gnu-r', 'golang', 'graphics'
+      \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics'
       \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection'
-      \, 'java\%(script\)\=', 'kde', 'kernel', 'libs', 'libdevel', 'lisp'
-      \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net'
-      \, 'news', 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python'
-      \, 'ruby', 'rust', 'science', 'shells', 'sound', 'text', 'tex'
+      \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp'
+      \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news'
+      \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku'
+      \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text'
       \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope'
       \ ]
 
 syn keyword debcontrolMultiArch contained no foreign allowed same
 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
 syn keyword debcontrolPriority contained extra important optional required standard
-exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\%('.join(s:sections, '\|').'\)"'
+exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"'
 syn keyword debcontrolPackageType contained udeb deb
 syn match debcontrolVariable contained "\${.\{-}}"
 syn keyword debcontrolDmUpload contained yes
diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim
index b594443..0b9282e 100644
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,7 +2,7 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2020 Apr 27
+" Last Change: 2020 Oct 26
 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debsources.vim
 
 " Standard syntax initialization
@@ -23,20 +23,20 @@
 set cpo-=C
 let s:supported = [
       \ 'oldstable', 'stable', 'testing', 'unstable', 'experimental',
-      \ 'wheezy', 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm',
+      \ 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm',
       \ 'sid', 'rc-buggy',
       \
-      \ 'trusty', 'xenial', 'bionic', 'eoan', 'focal', 'groovy', 'devel'
+      \ 'trusty', 'xenial', 'bionic', 'focal', 'groovy', 'hippo', 'devel'
       \ ]
 let s:unsupported = [
       \ 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato',
-      \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze',
+      \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze', 'wheezy',
       \
       \ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty',
       \ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid',
       \ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy',
       \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful', 'cosmic',
-      \ 'disco'
+      \ 'disco', 'eoan'
       \ ]
 let &cpo=s:cpo
 
diff --git a/runtime/syntax/proto.vim b/runtime/syntax/proto.vim
index 4615e0c..0d2d2f2 100644
--- a/runtime/syntax/proto.vim
+++ b/runtime/syntax/proto.vim
@@ -1,26 +1,36 @@
-" syntax file for Protocol Buffers - Google's data interchange format
-"
+" Protocol Buffers - Google's data interchange format
 " Copyright 2008 Google Inc.  All rights reserved.
+" https://developers.google.com/protocol-buffers/
 "
-" Permission is hereby granted, free of charge, to any person obtaining a copy
-" of this software and associated documentation files (the "Software"), to deal
-" in the Software without restriction, including without limitation the rights
-" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-" copies of the Software, and to permit persons to whom the Software is
-" furnished to do so, subject to the following conditions:
+" Redistribution and use in source and binary forms, with or without
+" modification, are permitted provided that the following conditions are
+" met:
 "
-" The above copyright notice and this permission notice shall be included in
-" all copies or substantial portions of the Software.
+"     * Redistributions of source code must retain the above copyright
+" notice, this list of conditions and the following disclaimer.
+"     * Redistributions in binary form must reproduce the above
+" copyright notice, this list of conditions and the following disclaimer
+" in the documentation and/or other materials provided with the
+" distribution.
+"     * Neither the name of Google Inc. nor the names of its
+" contributors may be used to endorse or promote products derived from
+" this software without specific prior written permission.
 "
-" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-" THE SOFTWARE.
-"
-" http://code.google.com/p/protobuf/
+" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+" OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+" This is the Vim syntax file for Google Protocol Buffers as found at
+" https://github.com/protocolbuffers/protobuf
+" Last update: 2020 Oct 29
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -33,10 +43,10 @@
 syn cluster protoCommentGrp contains=protoTodo
 
 syn keyword protoSyntax     syntax import option
-syn keyword protoStructure  package message group
+syn keyword protoStructure  package message group oneof
 syn keyword protoRepeat     optional required repeated
 syn keyword protoDefault    default
-syn keyword protoExtend     extend extensions to max
+syn keyword protoExtend     extend extensions to max reserved
 syn keyword protoRPC        service rpc returns
 
 syn keyword protoType      int32 int64 uint32 uint64 sint32 sint64
@@ -48,10 +58,10 @@
 syn match   protoInt     /-\?\<\d\+\>/
 syn match   protoInt     /\<0[xX]\x+\>/
 syn match   protoFloat   /\<-\?\d*\(\.\d*\)\?/
-syn region  protoComment start="\/\*" end="\*\/" contains=@protoCommentGrp
-syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@protoCommentGrp
-syn region  protoString  start=/"/ skip=/\\./ end=/"/
-syn region  protoString  start=/'/ skip=/\\./ end=/'/
+syn region  protoComment start="\/\*" end="\*\/" contains=@pbCommentGrp,@Spell
+syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@pbCommentGrp,@Spell
+syn region  protoString  start=/"/ skip=/\\./ end=/"/ contains=@Spell
+syn region  protoString  start=/'/ skip=/\\./ end=/'/ contains=@Spell
 
 hi def link protoTodo         Todo
 
diff --git a/runtime/syntax/typescriptcommon.vim b/runtime/syntax/typescriptcommon.vim
index ff53168..4074f04 100644
--- a/runtime/syntax/typescriptcommon.vim
+++ b/runtime/syntax/typescriptcommon.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     TypeScript and TypeScriptReact
 " Maintainer:   Bram Moolenaar, Herrington Darkholme
-" Last Change:	2019 Nov 30
+" Last Change:	2020 Oct 27
 " Based On:     Herrington Darkholme's yats.vim
 " Changes:      See https:github.com/HerringtonDarkholme/yats.vim
 " Credits:      See yats.vim on github
@@ -21,15 +21,14 @@
   setlocal iskeyword+=$
   " syntax cluster htmlJavaScript                 contains=TOP
 endif
+" For private field added from TypeScript 3.8
+setlocal iskeyword+=#
 
 " lowest priority on least used feature
 syntax match   typescriptLabel                /[a-zA-Z_$]\k*:/he=e-1 contains=typescriptReserved nextgroup=@typescriptStatement skipwhite skipempty
 
 " other keywords like return,case,yield uses containedin
 syntax region  typescriptBlock                 matchgroup=typescriptBraces start=/{/ end=/}/ contains=@typescriptStatement,@typescriptComments fold
-
-
-"runtime syntax/basic/identifiers.vim
 syntax cluster afterIdentifier contains=
   \ typescriptDotNotation,
   \ typescriptFuncCallArg,
@@ -60,7 +59,56 @@
 syntax region  typescriptEventFuncCallArg      contained matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptEventExpression
 syntax region  typescriptEventString           contained start=/\z(["']\)/  skip=/\\\\\|\\\z1\|\\\n/  end=/\z1\|$/ contains=typescriptASCII,@events
 
-"runtime syntax/basic/literal.vim
+syntax region  typescriptDestructureString
+  \ start=/\z(["']\)/  skip=/\\\\\|\\\z1\|\\\n/  end=/\z1\|$/
+  \ contains=typescriptASCII
+  \ nextgroup=typescriptDestructureAs
+  \ contained skipwhite skipempty
+
+syntax cluster typescriptVariableDeclarations
+  \ contains=typescriptVariableDeclaration,@typescriptDestructures
+
+syntax match typescriptVariableDeclaration /[A-Za-z_$]\k*/
+  \ nextgroup=typescriptTypeAnnotation,typescriptAssign
+  \ contained skipwhite skipempty
+
+syntax cluster typescriptDestructureVariables contains=
+  \ typescriptRestOrSpread,
+  \ typescriptDestructureComma,
+  \ typescriptDestructureLabel,
+  \ typescriptDestructureVariable,
+  \ @typescriptDestructures
+
+syntax match typescriptDestructureVariable    /[A-Za-z_$]\k*/ contained
+  \ nextgroup=typescriptDefaultParam
+  \ contained skipwhite skipempty
+
+syntax match typescriptDestructureLabel       /[A-Za-z_$]\k*\ze\_s*:/
+  \ nextgroup=typescriptDestructureAs
+  \ contained skipwhite skipempty
+
+syntax match typescriptDestructureAs /:/
+  \ nextgroup=typescriptDestructureVariable,@typescriptDestructures
+  \ contained skipwhite skipempty
+
+syntax match typescriptDestructureComma /,/ contained
+
+syntax cluster typescriptDestructures contains=
+  \ typescriptArrayDestructure,
+  \ typescriptObjectDestructure
+
+syntax region typescriptArrayDestructure matchgroup=typescriptBraces
+  \ start=/\[/ end=/]/
+  \ contains=@typescriptDestructureVariables,@typescriptComments
+  \ nextgroup=typescriptTypeAnnotation,typescriptAssign
+  \ transparent contained skipwhite skipempty fold
+
+syntax region typescriptObjectDestructure matchgroup=typescriptBraces
+  \ start=/{/ end=/}/
+  \ contains=typescriptDestructureString,@typescriptDestructureVariables,@typescriptComments
+  \ nextgroup=typescriptTypeAnnotation,typescriptAssign
+  \ transparent contained skipwhite skipempty fold
+
 "Syntax in the JavaScript code
 
 " String
@@ -77,15 +125,15 @@
   \ contains=typescriptSpecial,@Spell
   \ extend
 
-syntax match   typescriptSpecial            contained "\v\\%(x\x\x|u%(\x{4}|\{\x{4,5}})|c\u|.)"
+syntax match   typescriptSpecial            contained "\v\\%(x\x\x|u%(\x{4}|\{\x{1,6}})|c\u|.)"
 
 " From vim runtime
 " <https://github.com/vim/vim/blob/master/runtime/syntax/javascript.vim#L48>
-syntax region  typescriptRegexpString          start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuy]\{0,5\}\s*$+ end=+/[gimuy]\{0,5\}\s*[;.,)\]}]+me=e-1 nextgroup=typescriptDotNotation oneline
+syntax region  typescriptRegexpString          start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuy]\{0,5\}\s*$+ end=+/[gimuy]\{0,5\}\s*[;.,)\]}:]+me=e-1 nextgroup=typescriptDotNotation oneline
 
 syntax region  typescriptTemplate
   \ start=/`/  skip=/\\\\\|\\`\|\n/  end=/`\|$/
-  \ contains=typescriptTemplateSubstitution
+  \ contains=typescriptTemplateSubstitution,typescriptSpecial,@Spell
   \ nextgroup=@typescriptSymbols
   \ skipwhite skipempty
 
@@ -100,18 +148,16 @@
 syntax match typescriptNumber /\<0[bB][01][01_]*\>/        nextgroup=@typescriptSymbols skipwhite skipempty
 syntax match typescriptNumber /\<0[oO][0-7][0-7_]*\>/       nextgroup=@typescriptSymbols skipwhite skipempty
 syntax match typescriptNumber /\<0[xX][0-9a-fA-F][0-9a-fA-F_]*\>/ nextgroup=@typescriptSymbols skipwhite skipempty
-syntax match typescriptNumber /\d[0-9_]*\.\d[0-9_]*\|\d[0-9_]*\|\.\d[0-9]*/
-  \ nextgroup=typescriptExponent,@typescriptSymbols skipwhite skipempty
-syntax match typescriptExponent /[eE][+-]\=\d[0-9]*\>/
-  \ nextgroup=@typescriptSymbols skipwhite skipempty contained
+syntax match typescriptNumber /\<\%(\d[0-9_]*\%(\.\d[0-9_]*\)\=\|\.\d[0-9_]*\)\%([eE][+-]\=\d[0-9_]*\)\=\>/
+  \ nextgroup=typescriptSymbols skipwhite skipempty
 
-
-" runtime syntax/basic/object.vim
 syntax region  typescriptObjectLiteral         matchgroup=typescriptBraces
   \ start=/{/ end=/}/
-  \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName
+  \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName,typescriptObjectAsyncKeyword
   \ fold contained
 
+syntax keyword typescriptObjectAsyncKeyword async contained
+
 syntax match   typescriptObjectLabel  contained /\k\+\_s*/
   \ nextgroup=typescriptObjectColon,@typescriptCallImpl
   \ skipwhite skipempty
@@ -136,7 +182,6 @@
 
 syntax match typescriptObjectColon contained /:/ nextgroup=@typescriptValue skipwhite skipempty
 
-"runtime syntax/basic/symbols.vim
 " + - ^ ~
 syntax match typescriptUnaryOp /[+\-~!]/
  \ nextgroup=@typescriptValue
@@ -153,10 +198,12 @@
 syntax match   typescriptBinaryOp contained />\(>>=\|>>\|>=\|>\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
 " 4: <<=, <<, <=, <
 syntax match   typescriptBinaryOp contained /<\(<=\|<\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
-" 3: ||, |=, |
-syntax match   typescriptBinaryOp contained /|\(|\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
-" 3: &&, &=, &
-syntax match   typescriptBinaryOp contained /&\(&\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty
+" 3: ||, |=, |, ||=
+syntax match   typescriptBinaryOp contained /||\?=\?/ nextgroup=@typescriptValue skipwhite skipempty
+" 4: &&, &=, &, &&=
+syntax match   typescriptBinaryOp contained /&&\?=\?/ nextgroup=@typescriptValue skipwhite skipempty
+" 2: ??, ??=
+syntax match   typescriptBinaryOp contained /??=\?/ nextgroup=@typescriptValue skipwhite skipempty
 " 2: *=, *
 syntax match   typescriptBinaryOp contained /\*=\?/ nextgroup=@typescriptValue skipwhite skipempty
 " 2: %=, %
@@ -177,11 +224,18 @@
 syntax cluster typescriptSymbols               contains=typescriptBinaryOp,typescriptKeywordOp,typescriptTernary,typescriptAssign,typescriptCastKeyword
 
 " runtime syntax/basic/reserved.vim
-
-"runtime syntax/basic/keyword.vim
 "Import
-syntax keyword typescriptImport                from as import
+syntax keyword typescriptImport                from as
+syntax keyword typescriptImport                import
+  \ nextgroup=typescriptImportType
+  \ skipwhite
+syntax keyword typescriptImportType            type
+  \ contained
 syntax keyword typescriptExport                export
+  \ nextgroup=typescriptExportType
+  \ skipwhite
+syntax match typescriptExportType              /\<type\s*{\@=/
+  \ contained skipwhite skipempty skipnl
 syntax keyword typescriptModule                namespace module
 
 "this
@@ -199,16 +253,12 @@
   \ nextgroup=@afterIdentifier
 
 syntax keyword typescriptVariable              let var
-  \ nextgroup=typescriptVariableDeclaration
-  \ skipwhite skipempty skipnl
+  \ nextgroup=@typescriptVariableDeclarations
+  \ skipwhite skipempty
 
 syntax keyword typescriptVariable const
-  \ nextgroup=typescriptEnum,typescriptVariableDeclaration
-  \ skipwhite
-
-syntax match typescriptVariableDeclaration /[A-Za-z_$]\k*/
-  \ nextgroup=typescriptTypeAnnotation,typescriptAssign
-  \ contained skipwhite skipempty skipnl
+  \ nextgroup=typescriptEnum,@typescriptVariableDeclarations
+  \ skipwhite skipempty
 
 syntax region typescriptEnum matchgroup=typescriptEnumKeyword start=/enum / end=/\ze{/
   \ nextgroup=typescriptBlock
@@ -271,7 +321,6 @@
   \ typescriptEnumKeyword,typescriptEnum,
   \ typescriptModule
 
-"runtime syntax/basic/doc.vim
 "Syntax coloring for Node.js shebang line
 syntax match   shellbang "^#!.*node\>"
 syntax match   shellbang "^#!.*iojs\>"
@@ -279,8 +328,9 @@
 
 "JavaScript comments
 syntax keyword typescriptCommentTodo TODO FIXME XXX TBD
+syntax match typescriptMagicComment "@ts-\%(ignore\|expect-error\)\>"
 syntax match   typescriptLineComment "//.*"
-  \ contains=@Spell,typescriptCommentTodo,typescriptRef
+  \ contains=@Spell,typescriptCommentTodo,typescriptRef,typescriptMagicComment
 syntax region  typescriptComment
   \ start="/\*"  end="\*/"
   \ contains=@Spell,typescriptCommentTodo extend
@@ -349,24 +399,27 @@
 
 syntax cluster typescriptDocs                  contains=typescriptDocParamType,typescriptDocNamedParamType,typescriptDocParam
 
-if main_syntax == "typescript"
+if exists("main_syntax") && main_syntax == "typescript"
   syntax sync clear
   syntax sync ccomment typescriptComment minlines=200
 endif
 
 syntax case match
 
-"runtime syntax/basic/type.vim
 " Types
 syntax match typescriptOptionalMark /?/ contained
 
+syntax cluster typescriptTypeParameterCluster contains=
+  \ typescriptTypeParameter,
+  \ typescriptGenericDefault
+
 syntax region typescriptTypeParameters matchgroup=typescriptTypeBrackets
   \ start=/</ end=/>/
-  \ contains=typescriptTypeParameter
+  \ contains=@typescriptTypeParameterCluster
   \ contained
 
 syntax match typescriptTypeParameter /\K\k*/
-  \ nextgroup=typescriptConstraint,typescriptGenericDefault
+  \ nextgroup=typescriptConstraint
   \ contained skipwhite skipnl
 
 syntax keyword typescriptConstraint extends
@@ -409,6 +462,7 @@
   \ typescriptTupleType,
   \ typescriptTypeQuery,
   \ typescriptStringLiteralType,
+  \ typescriptTemplateLiteralType,
   \ typescriptReadonlyArrayKeyword,
   \ typescriptAssertType
 
@@ -417,6 +471,17 @@
   \ nextgroup=typescriptUnion
   \ skipwhite skipempty
 
+syntax region  typescriptTemplateLiteralType contained
+  \ start=/`/  skip=/\\\\\|\\`\|\n/  end=/`\|$/
+  \ contains=typescriptTemplateSubstitutionType
+  \ nextgroup=typescriptTypeOperator
+  \ skipwhite skipempty
+
+syntax region  typescriptTemplateSubstitutionType matchgroup=typescriptTemplateSB
+  \ start=/\${/ end=/}/
+  \ contains=@typescriptType
+  \ contained
+
 syntax region typescriptParenthesizedType matchgroup=typescriptParens
   \ start=/(/ end=/)/
   \ contains=@typescriptType
@@ -439,7 +504,7 @@
   \ start=/{/ end=/}/
   \ contains=@typescriptTypeMember,typescriptEndColons,@typescriptComments,typescriptAccessibilityModifier,typescriptReadonlyModifier
   \ nextgroup=@typescriptTypeOperator
-  \ contained skipwhite fold
+  \ contained skipwhite skipnl fold
 
 syntax cluster typescriptTypeMember contains=
   \ @typescriptCallSignature,
@@ -447,16 +512,21 @@
   \ typescriptIndexSignature,
   \ @typescriptMembers
 
+syntax match typescriptTupleLable /\K\k*?\?:/
+    \ contained
+
 syntax region typescriptTupleType matchgroup=typescriptBraces
   \ start=/\[/ end=/\]/
-  \ contains=@typescriptType,@typescriptComments
+  \ contains=@typescriptType,@typescriptComments,typescriptRestOrSpread,typescriptTupleLable
   \ contained skipwhite
 
 syntax cluster typescriptTypeOperator
-  \ contains=typescriptUnion,typescriptTypeBracket
+  \ contains=typescriptUnion,typescriptTypeBracket,typescriptConstraint,typescriptConditionalType
 
 syntax match typescriptUnion /|\|&/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty
 
+syntax match typescriptConditionalType /?\|:/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty
+
 syntax cluster typescriptFunctionType contains=typescriptGenericFunc,typescriptFuncType
 syntax region typescriptGenericFunc matchgroup=typescriptTypeBrackets
   \ start=/</ end=/>/
@@ -511,6 +581,7 @@
 syntax cluster typescriptParameterList contains=
   \ typescriptTypeAnnotation,
   \ typescriptAccessibilityModifier,
+  \ typescriptReadonlyModifier,
   \ typescriptOptionalMark,
   \ typescriptRestOrSpread,
   \ typescriptFuncComma,
@@ -550,10 +621,9 @@
   \ nextgroup=@typescriptPrimaryType
   \ skipwhite
 
+
 " extension
 if get(g:, 'yats_host_keyword', 1)
-  "runtime syntax/yats.vim
-  "runtime syntax/yats/typescript.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function Boolean
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Error EvalError
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName InternalError
@@ -584,7 +654,6 @@
   syntax cluster props add=typescriptGlobalMethod
   hi def link typescriptGlobalMethod Structure
 
-  "runtime syntax/yats/es6-number.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Number nextgroup=typescriptGlobalNumberDot,typescriptFuncCallArg
   syntax match   typescriptGlobalNumberDot /\./ contained nextgroup=typescriptNumberStaticProp,typescriptNumberStaticMethod,typescriptProp
   syntax keyword typescriptNumberStaticProp contained EPSILON MAX_SAFE_INTEGER MAX_VALUE
@@ -599,7 +668,6 @@
   syntax cluster props add=typescriptNumberMethod
   hi def link typescriptNumberMethod Keyword
 
-  "runtime syntax/yats/es6-string.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName String nextgroup=typescriptGlobalStringDot,typescriptFuncCallArg
   syntax match   typescriptGlobalStringDot /\./ contained nextgroup=typescriptStringStaticMethod,typescriptProp
   syntax keyword typescriptStringStaticMethod contained fromCharCode fromCodePoint raw nextgroup=typescriptFuncCallArg
@@ -615,7 +683,6 @@
   syntax cluster props add=typescriptStringMethod
   hi def link typescriptStringMethod Keyword
 
-  "runtime syntax/yats/es6-array.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Array nextgroup=typescriptGlobalArrayDot,typescriptFuncCallArg
   syntax match   typescriptGlobalArrayDot /\./ contained nextgroup=typescriptArrayStaticMethod,typescriptProp
   syntax keyword typescriptArrayStaticMethod contained from isArray of nextgroup=typescriptFuncCallArg
@@ -629,7 +696,6 @@
   syntax cluster props add=typescriptArrayMethod
   hi def link typescriptArrayMethod Keyword
 
-  "runtime syntax/yats/es6-object.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Object nextgroup=typescriptGlobalObjectDot,typescriptFuncCallArg
   syntax match   typescriptGlobalObjectDot /\./ contained nextgroup=typescriptObjectStaticMethod,typescriptProp
   syntax keyword typescriptObjectStaticMethod contained create defineProperties defineProperty nextgroup=typescriptFuncCallArg
@@ -646,7 +712,6 @@
   syntax cluster props add=typescriptObjectMethod
   hi def link typescriptObjectMethod Keyword
 
-  "runtime syntax/yats/es6-symbol.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Symbol nextgroup=typescriptGlobalSymbolDot,typescriptFuncCallArg
   syntax match   typescriptGlobalSymbolDot /\./ contained nextgroup=typescriptSymbolStaticProp,typescriptSymbolStaticMethod,typescriptProp
   syntax keyword typescriptSymbolStaticProp contained length iterator match replace
@@ -657,13 +722,11 @@
   syntax keyword typescriptSymbolStaticMethod contained for keyFor nextgroup=typescriptFuncCallArg
   hi def link typescriptSymbolStaticMethod Keyword
 
-  "runtime syntax/yats/es6-function.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function
   syntax keyword typescriptFunctionMethod contained apply bind call nextgroup=typescriptFuncCallArg
   syntax cluster props add=typescriptFunctionMethod
   hi def link typescriptFunctionMethod Keyword
 
-  "runtime syntax/yats/es6-math.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Math nextgroup=typescriptGlobalMathDot,typescriptFuncCallArg
   syntax match   typescriptGlobalMathDot /\./ contained nextgroup=typescriptMathStaticProp,typescriptMathStaticMethod,typescriptProp
   syntax keyword typescriptMathStaticProp contained E LN10 LN2 LOG10E LOG2E PI SQRT1_2
@@ -677,7 +740,6 @@
   syntax keyword typescriptMathStaticMethod contained sinh sqrt tan tanh trunc nextgroup=typescriptFuncCallArg
   hi def link typescriptMathStaticMethod Keyword
 
-  "runtime syntax/yats/es6-date.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Date nextgroup=typescriptGlobalDateDot,typescriptFuncCallArg
   syntax match   typescriptGlobalDateDot /\./ contained nextgroup=typescriptDateStaticMethod,typescriptProp
   syntax keyword typescriptDateStaticMethod contained UTC now parse nextgroup=typescriptFuncCallArg
@@ -699,13 +761,11 @@
   syntax cluster props add=typescriptDateMethod
   hi def link typescriptDateMethod Keyword
 
-  "runtime syntax/yats/es6-json.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName JSON nextgroup=typescriptGlobalJSONDot,typescriptFuncCallArg
   syntax match   typescriptGlobalJSONDot /\./ contained nextgroup=typescriptJSONStaticMethod,typescriptProp
   syntax keyword typescriptJSONStaticMethod contained parse stringify nextgroup=typescriptFuncCallArg
   hi def link typescriptJSONStaticMethod Keyword
 
-  "runtime syntax/yats/es6-regexp.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName RegExp nextgroup=typescriptGlobalRegExpDot,typescriptFuncCallArg
   syntax match   typescriptGlobalRegExpDot /\./ contained nextgroup=typescriptRegExpStaticProp,typescriptProp
   syntax keyword typescriptRegExpStaticProp contained lastIndex
@@ -717,7 +777,6 @@
   syntax cluster props add=typescriptRegExpMethod
   hi def link typescriptRegExpMethod Keyword
 
-  "runtime syntax/yats/es6-map.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Map WeakMap
   syntax keyword typescriptES6MapProp contained size
   syntax cluster props add=typescriptES6MapProp
@@ -727,7 +786,6 @@
   syntax cluster props add=typescriptES6MapMethod
   hi def link typescriptES6MapMethod Keyword
 
-  "runtime syntax/yats/es6-set.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Set WeakSet
   syntax keyword typescriptES6SetProp contained size
   syntax cluster props add=typescriptES6SetProp
@@ -737,7 +795,6 @@
   syntax cluster props add=typescriptES6SetMethod
   hi def link typescriptES6SetMethod Keyword
 
-  "runtime syntax/yats/es6-proxy.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Proxy
   syntax keyword typescriptProxyAPI contained getOwnPropertyDescriptor getOwnPropertyNames
   syntax keyword typescriptProxyAPI contained defineProperty deleteProperty freeze seal
@@ -745,7 +802,6 @@
   syntax keyword typescriptProxyAPI contained iterate ownKeys apply construct
   hi def link typescriptProxyAPI Keyword
 
-  "runtime syntax/yats/es6-promise.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Promise nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg
   syntax match   typescriptGlobalPromiseDot /\./ contained nextgroup=typescriptPromiseStaticMethod,typescriptProp
   syntax keyword typescriptPromiseStaticMethod contained resolve reject all race nextgroup=typescriptFuncCallArg
@@ -754,7 +810,6 @@
   syntax cluster props add=typescriptPromiseMethod
   hi def link typescriptPromiseMethod Keyword
 
-  "runtime syntax/yats/es6-reflect.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Reflect
   syntax keyword typescriptReflectMethod contained apply construct defineProperty deleteProperty nextgroup=typescriptFuncCallArg
   syntax keyword typescriptReflectMethod contained enumerate get getOwnPropertyDescriptor nextgroup=typescriptFuncCallArg
@@ -763,14 +818,12 @@
   syntax cluster props add=typescriptReflectMethod
   hi def link typescriptReflectMethod Keyword
 
-  "runtime syntax/yats/ecma-402.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Intl
   syntax keyword typescriptIntlMethod contained Collator DateTimeFormat NumberFormat nextgroup=typescriptFuncCallArg
   syntax keyword typescriptIntlMethod contained PluralRules nextgroup=typescriptFuncCallArg
   syntax cluster props add=typescriptIntlMethod
   hi def link typescriptIntlMethod Keyword
 
-  "runtime syntax/yats/node.vim
   syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName global process
   syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName console Buffer
   syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName module exports
@@ -788,7 +841,6 @@
   syntax keyword typescriptTestGlobal containedin=typescriptIdentifierName afterAll
   syntax keyword typescriptTestGlobal containedin=typescriptIdentifierName expect assert
 
-  "runtime syntax/yats/web.vim
   syntax keyword typescriptBOM containedin=typescriptIdentifierName AbortController
   syntax keyword typescriptBOM containedin=typescriptIdentifierName AbstractWorker AnalyserNode
   syntax keyword typescriptBOM containedin=typescriptIdentifierName App Apps ArrayBuffer
@@ -1038,7 +1090,6 @@
   syntax keyword typescriptBOM containedin=typescriptIdentifierName XMLHttpRequestEventTarget
   hi def link typescriptBOM Structure
 
-  "runtime syntax/yats/web-window.vim
   syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName applicationCache
   syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName closed
   syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName Components
@@ -1145,7 +1196,6 @@
   syntax keyword typescriptBOMWindowCons containedin=typescriptIdentifierName XMLSerializer
   hi def link typescriptBOMWindowCons Structure
 
-  "runtime syntax/yats/web-navigator.vim
   syntax keyword typescriptBOMNavigatorProp contained battery buildID connection cookieEnabled
   syntax keyword typescriptBOMNavigatorProp contained doNotTrack maxTouchPoints oscpu
   syntax keyword typescriptBOMNavigatorProp contained productSub push serviceWorker
@@ -1164,7 +1214,6 @@
   syntax cluster props add=typescriptServiceWorkerMethod
   hi def link typescriptServiceWorkerMethod Keyword
 
-  "runtime syntax/yats/web-location.vim
   syntax keyword typescriptBOMLocationProp contained href protocol host hostname port
   syntax keyword typescriptBOMLocationProp contained pathname search hash username password
   syntax keyword typescriptBOMLocationProp contained origin
@@ -1174,7 +1223,6 @@
   syntax cluster props add=typescriptBOMLocationMethod
   hi def link typescriptBOMLocationMethod Keyword
 
-  "runtime syntax/yats/web-history.vim
   syntax keyword typescriptBOMHistoryProp contained length current next previous state
   syntax keyword typescriptBOMHistoryProp contained scrollRestoration
   syntax cluster props add=typescriptBOMHistoryProp
@@ -1183,7 +1231,6 @@
   syntax cluster props add=typescriptBOMHistoryMethod
   hi def link typescriptBOMHistoryMethod Keyword
 
-  "runtime syntax/yats/web-console.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName console
   syntax keyword typescriptConsoleMethod contained count dir error group groupCollapsed nextgroup=typescriptFuncCallArg
   syntax keyword typescriptConsoleMethod contained groupEnd info log time timeEnd trace nextgroup=typescriptFuncCallArg
@@ -1191,7 +1238,6 @@
   syntax cluster props add=typescriptConsoleMethod
   hi def link typescriptConsoleMethod Keyword
 
-  "runtime syntax/yats/web-xhr.vim
   syntax keyword typescriptXHRGlobal containedin=typescriptIdentifierName XMLHttpRequest
   hi def link typescriptXHRGlobal Structure
   syntax keyword typescriptXHRProp contained onreadystatechange readyState response
@@ -1204,7 +1250,6 @@
   syntax cluster props add=typescriptXHRMethod
   hi def link typescriptXHRMethod Keyword
 
-  "runtime syntax/yats/web-blob.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Blob BlobBuilder
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName File FileReader
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName FileReaderSync
@@ -1236,7 +1281,6 @@
   syntax keyword typescriptURLStaticMethod contained createObjectURL revokeObjectURL nextgroup=typescriptFuncCallArg
   hi def link typescriptURLStaticMethod Keyword
 
-  "runtime syntax/yats/web-crypto.vim
   syntax keyword typescriptCryptoGlobal containedin=typescriptIdentifierName crypto
   hi def link typescriptCryptoGlobal Structure
   syntax keyword typescriptSubtleCryptoMethod contained encrypt decrypt sign verify nextgroup=typescriptFuncCallArg
@@ -1250,7 +1294,6 @@
   syntax cluster props add=typescriptCryptoMethod
   hi def link typescriptCryptoMethod Keyword
 
-  "runtime syntax/yats/web-fetch.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Headers Request
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Response
   syntax keyword typescriptGlobalMethod containedin=typescriptIdentifierName fetch nextgroup=typescriptFuncCallArg
@@ -1274,7 +1317,6 @@
   syntax cluster props add=typescriptResponseMethod
   hi def link typescriptResponseMethod Keyword
 
-  "runtime syntax/yats/web-service-worker.vim
   syntax keyword typescriptServiceWorkerProp contained controller ready
   syntax cluster props add=typescriptServiceWorkerProp
   hi def link typescriptServiceWorkerProp Keyword
@@ -1287,7 +1329,6 @@
   syntax cluster props add=typescriptCacheMethod
   hi def link typescriptCacheMethod Keyword
 
-  "runtime syntax/yats/web-encoding.vim
   syntax keyword typescriptEncodingGlobal containedin=typescriptIdentifierName TextEncoder
   syntax keyword typescriptEncodingGlobal containedin=typescriptIdentifierName TextDecoder
   hi def link typescriptEncodingGlobal Structure
@@ -1298,21 +1339,18 @@
   syntax cluster props add=typescriptEncodingMethod
   hi def link typescriptEncodingMethod Keyword
 
-  "runtime syntax/yats/web-geo.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName Geolocation
   syntax keyword typescriptGeolocationMethod contained getCurrentPosition watchPosition nextgroup=typescriptFuncCallArg
   syntax keyword typescriptGeolocationMethod contained clearWatch nextgroup=typescriptFuncCallArg
   syntax cluster props add=typescriptGeolocationMethod
   hi def link typescriptGeolocationMethod Keyword
 
-  "runtime syntax/yats/web-network.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName NetworkInformation
   syntax keyword typescriptBOMNetworkProp contained downlink downlinkMax effectiveType
   syntax keyword typescriptBOMNetworkProp contained rtt type
   syntax cluster props add=typescriptBOMNetworkProp
   hi def link typescriptBOMNetworkProp Keyword
 
-  "runtime syntax/yats/web-payment.vim
   syntax keyword typescriptGlobal containedin=typescriptIdentifierName PaymentRequest
   syntax keyword typescriptPaymentMethod contained show abort canMakePayment nextgroup=typescriptFuncCallArg
   syntax cluster props add=typescriptPaymentMethod
@@ -1340,7 +1378,6 @@
   syntax cluster props add=typescriptPaymentShippingOptionProp
   hi def link typescriptPaymentShippingOptionProp Keyword
 
-  "runtime syntax/yats/dom-node.vim
   syntax keyword typescriptDOMNodeProp contained attributes baseURI baseURIObject childNodes
   syntax keyword typescriptDOMNodeProp contained firstChild lastChild localName namespaceURI
   syntax keyword typescriptDOMNodeProp contained nextSibling nodeName nodePrincipal
@@ -1364,7 +1401,6 @@
   syntax keyword typescriptDOMNodeType contained DOCUMENT_FRAGMENT_NODE NOTATION_NODE
   hi def link typescriptDOMNodeType Keyword
 
-  "runtime syntax/yats/dom-elem.vim
   syntax keyword typescriptDOMElemAttrs contained accessKey clientHeight clientLeft
   syntax keyword typescriptDOMElemAttrs contained clientTop clientWidth id innerHTML
   syntax keyword typescriptDOMElemAttrs contained length onafterscriptexecute onbeforescriptexecute
@@ -1387,7 +1423,6 @@
   syntax keyword typescriptDOMElemFuncs contained getAttribute
   hi def link typescriptDOMElemFuncs Keyword
 
-  "runtime syntax/yats/dom-document.vim
   syntax keyword typescriptDOMDocProp contained activeElement body cookie defaultView
   syntax keyword typescriptDOMDocProp contained designMode dir domain embeds forms head
   syntax keyword typescriptDOMDocProp contained images lastModified links location plugins
@@ -1419,7 +1454,6 @@
   syntax cluster props add=typescriptDOMDocMethod
   hi def link typescriptDOMDocMethod Keyword
 
-  "runtime syntax/yats/dom-event.vim
   syntax keyword typescriptDOMEventTargetMethod contained addEventListener removeEventListener nextgroup=typescriptEventFuncCallArg
   syntax keyword typescriptDOMEventTargetMethod contained dispatchEvent waitUntil nextgroup=typescriptEventFuncCallArg
   syntax cluster props add=typescriptDOMEventTargetMethod
@@ -1480,7 +1514,6 @@
   syntax cluster props add=typescriptDOMEventMethod
   hi def link typescriptDOMEventMethod Keyword
 
-  "runtime syntax/yats/dom-storage.vim
   syntax keyword typescriptDOMStorage contained sessionStorage localStorage
   hi def link typescriptDOMStorage Keyword
   syntax keyword typescriptDOMStorageProp contained length
@@ -1491,7 +1524,6 @@
   syntax cluster props add=typescriptDOMStorageMethod
   hi def link typescriptDOMStorageMethod Keyword
 
-  "runtime syntax/yats/dom-form.vim
   syntax keyword typescriptDOMFormProp contained acceptCharset action elements encoding
   syntax keyword typescriptDOMFormProp contained enctype length method name target
   syntax cluster props add=typescriptDOMFormProp
@@ -1500,7 +1532,6 @@
   syntax cluster props add=typescriptDOMFormMethod
   hi def link typescriptDOMFormMethod Keyword
 
-  "runtime syntax/yats/css.vim
   syntax keyword typescriptDOMStyle contained alignContent alignItems alignSelf animation
   syntax keyword typescriptDOMStyle contained animationDelay animationDirection animationDuration
   syntax keyword typescriptDOMStyle contained animationFillMode animationIterationCount
@@ -1575,8 +1606,6 @@
 
 
   let typescript_props = 1
-
-  "runtime syntax/yats/event.vim
   syntax keyword typescriptAnimationEvent contained animationend animationiteration
   syntax keyword typescriptAnimationEvent contained animationstart beginEvent endEvent
   syntax keyword typescriptAnimationEvent contained repeatEvent
@@ -1710,14 +1739,12 @@
 endif
 
 " patch
-"runtime syntax/basic/patch.vim
 " patch for generated code
 syntax keyword typescriptGlobal Promise
   \ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
 syntax keyword typescriptGlobal Map WeakMap
   \ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
 
-"runtime syntax/basic/members.vim
 syntax keyword typescriptConstructor           contained constructor
   \ nextgroup=@typescriptCallSignature
   \ skipwhite skipempty
@@ -1725,7 +1752,7 @@
 
 syntax cluster memberNextGroup contains=typescriptMemberOptionality,typescriptTypeAnnotation,@typescriptCallSignature
 
-syntax match typescriptMember /\K\k*/
+syntax match typescriptMember /#\?\K\k*/
   \ nextgroup=@memberNextGroup
   \ contained skipwhite
 
@@ -1765,7 +1792,6 @@
   \ nextgroup=@memberNextGroup
   \ skipwhite skipempty
 
-"runtime syntax/basic/class.vim
 "don't add typescriptMembers to nextgroup, let outer scope match it
 " so we won't match abstract method outside abstract class
 syntax keyword typescriptAbstract              abstract
@@ -1781,7 +1807,7 @@
 
 syntax region typescriptClassTypeParameter
   \ start=/</ end=/>/
-  \ contains=typescriptTypeParameter
+  \ contains=@typescriptTypeParameterCluster
   \ nextgroup=typescriptClassBlock,typescriptClassExtends
   \ contained skipwhite skipnl
 
@@ -1813,7 +1839,7 @@
   \ skipwhite skipnl
 syntax region typescriptInterfaceTypeParameter
   \ start=/</ end=/>/
-  \ contains=typescriptTypeParameter
+  \ contains=@typescriptTypeParameterCluster
   \ nextgroup=typescriptObjectType,typescriptInterfaceExtends
   \ contained
   \ skipwhite skipnl
@@ -1832,7 +1858,6 @@
 
 syntax match typescriptInterfaceComma /,/ contained nextgroup=typescriptInterfaceHeritage skipwhite skipnl
 
-"runtime syntax/basic/cluster.vim
 "Block VariableStatement EmptyStatement ExpressionStatement IfStatement IterationStatement ContinueStatement BreakStatement ReturnStatement WithStatement LabelledStatement SwitchStatement ThrowStatement TryStatement DebuggerStatement
 syntax cluster typescriptStatement
   \ contains=typescriptBlock,typescriptVariable,
@@ -1872,7 +1897,6 @@
 
 syntax cluster typescriptEventExpression       contains=typescriptArrowFuncDef,typescriptParenExp,@typescriptValue,typescriptRegexpString,@typescriptEventTypes,typescriptOperator,typescriptGlobal,jsxRegion
 
-"runtime syntax/basic/function.vim
 syntax keyword typescriptAsyncFuncKeyword      async
   \ nextgroup=typescriptFuncKeyword,typescriptArrowFuncDef
   \ skipwhite
@@ -1894,7 +1918,7 @@
   \ skipwhite
 
 " destructuring ({ a: ee }) =>
-syntax match   typescriptArrowFuncDef          contained /({\_[^}]*}\(:\_[^)]\)\?)\s*=>/
+syntax match   typescriptArrowFuncDef          contained /(\(\s*\({\_[^}]*}\|\k\+\)\(:\_[^)]\)\?,\?\)\+)\s*=>/
   \ contains=typescriptArrowFuncArg,typescriptArrowFunc
   \ nextgroup=@typescriptExpression,typescriptBlock
   \ skipwhite skipempty
@@ -1913,7 +1937,7 @@
   \ skipwhite skipempty
 
 " TODO: optimize this pattern
-syntax region   typescriptArrowFuncDef          contained start=/(\_[^)]*):/ end=/=>/
+syntax region   typescriptArrowFuncDef          contained start=/(\_[^(^)]*):/ end=/=>/
   \ contains=typescriptArrowFuncArg,typescriptArrowFunc,typescriptTypeAnnotation
   \ nextgroup=@typescriptExpression,typescriptBlock
   \ skipwhite skipempty keepend
@@ -1925,7 +1949,7 @@
 syntax region typescriptReturnAnnotation contained start=/:/ end=/{/me=e-1 contains=@typescriptType nextgroup=typescriptBlock
 
 
-syntax region typescriptFuncImpl contained start=/function/ end=/{/me=e-1
+syntax region typescriptFuncImpl contained start=/function\>/ end=/{/me=e-1
   \ contains=typescriptFuncKeyword
   \ nextgroup=typescriptBlock
 
@@ -1941,9 +1965,8 @@
   \ nextgroup=typescriptReturnAnnotation,typescriptBlock
   \ contained skipwhite skipnl
 
-"runtime syntax/basic/decorator.vim
 syntax match typescriptDecorator /@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>/
-  \ nextgroup=typescriptArgumentList,typescriptTypeArguments
+  \ nextgroup=typescriptFuncCallArg,typescriptTypeArguments
   \ contains=@_semantic,typescriptDotNotation
 
 " Define the default highlighting.
@@ -1957,6 +1980,7 @@
 hi def link typescriptLineComment          Comment
 hi def link typescriptDocComment           Comment
 hi def link typescriptCommentTodo          Todo
+hi def link typescriptMagicComment         SpecialComment
 hi def link typescriptRef                  Include
 hi def link typescriptDocNotation          SpecialComment
 hi def link typescriptDocTags              SpecialComment
@@ -1970,9 +1994,11 @@
 hi def link typescriptString               String
 hi def link typescriptSpecial              Special
 hi def link typescriptStringLiteralType    String
+hi def link typescriptTemplateLiteralType  String
 hi def link typescriptStringMember         String
 hi def link typescriptTemplate             String
 hi def link typescriptEventString          String
+hi def link typescriptDestructureString    String
 hi def link typescriptASCII                Special
 hi def link typescriptTemplateSB           Label
 hi def link typescriptRegexpString         String
@@ -1986,6 +2012,7 @@
 hi def link typescriptBranch               Conditional
 hi def link typescriptIdentifier           Structure
 hi def link typescriptVariable             Identifier
+hi def link typescriptDestructureVariable  PreProc
 hi def link typescriptEnumKeyword          Identifier
 hi def link typescriptRepeat               Repeat
 hi def link typescriptForOperator          Repeat
@@ -1997,14 +2024,17 @@
 hi def link typescriptType                 Type
 hi def link typescriptNull                 Boolean
 hi def link typescriptNumber               Number
-hi def link typescriptExponent             Number
 hi def link typescriptBoolean              Boolean
 hi def link typescriptObjectLabel          typescriptLabel
+hi def link typescriptDestructureLabel     Function
 hi def link typescriptLabel                Label
+hi def link typescriptTupleLable           Label
 hi def link typescriptStringProperty       String
 hi def link typescriptImport               Special
+hi def link typescriptImportType           Special
 hi def link typescriptAmbientDeclaration   Special
 hi def link typescriptExport               Special
+hi def link typescriptExportType           Special
 hi def link typescriptModule               Special
 hi def link typescriptTry                  Special
 hi def link typescriptExceptions           Special
@@ -2013,6 +2043,7 @@
 hi def link typescriptMethodAccessor       Operator
 
 hi def link typescriptAsyncFuncKeyword     Keyword
+hi def link typescriptObjectAsyncKeyword   Keyword
 hi def link typescriptAsyncFor             Keyword
 hi def link typescriptFuncKeyword          Keyword
 hi def link typescriptAsyncFunc            Keyword