authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-10-15 23:35:51-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-10-21 03:13:20-07:00
logba98937008851c4ff2471c9823c751b792f2c3f1
tree48540b92927a47e144b7d8d5feefbc9ed8796278
parenta109b1aeeb0f22f9c20f5c5a3312ca0d810e0d86
signature Commit is signed but in an unrecognized format.

blog: Everyone Hates Next.js

there are a lot of hacks i did in this commit to get the code to ship, but i am really happy i have a public blog now. it turned out great.

33 files changed, 26359 insertions(+), 1572 deletions(-)

framework/generate.ts+18-10
...@@ -124,6 +124,7 @@ export async function readManifest(io: Io) {...@@ -124,6 +124,7 @@ export async function readManifest(io: Io) {
124 return {124 return {
125 siteSections: cfg.siteSections.map((section) => ({125 siteSections: cfg.siteSections.map((section) => ({
126 root: toRel(section.root),126 root: toRel(section.root),
127 base: section.base ?? "/",
127 })),128 })),
128 backends: cfg.backends.map(toRel),129 backends: cfg.backends.map(toRel),
129 fonts: cfg.fonts,130 fonts: cfg.fonts,
...@@ -141,8 +142,11 @@ export async function discoverAllFiles(...@@ -141,8 +142,11 @@ export async function discoverAllFiles(
141 using node = p.start("discover files");142 using node = p.start("discover files");
142 return (143 return (
143 await Promise.all(144 await Promise.all(
144 siteConfig.siteSections.map(({ root: sectionRoot }) =>145 siteConfig.siteSections.map(({ root: root, base }) =>
145 incr.work(node, scanSiteSection, toAbs(sectionRoot))146 incr.work(node, scanSiteSection, {
147 root: toAbs(root),
148 base: base.endsWith("/") ? base : base + "/",
149 })
146 ),150 ),
147 )151 )
148 ).reduce((acc, next) => ({152 ).reduce((acc, next) => ({
...@@ -153,8 +157,8 @@ export async function discoverAllFiles(...@@ -153,8 +157,8 @@ export async function discoverAllFiles(
153 }));157 }));
154}158}
155159
156export async function scanSiteSection(io: Io, sectionRoot: string) {160export async function scanSiteSection(io: Io, section: sg.Section) {
157 using _ = io.start(toRel(sectionRoot));161 using _ = io.start(toRel(section.root));
158 // Static files are compressed and served as-is.162 // Static files are compressed and served as-is.
159 // - "{section}/static/*.png"163 // - "{section}/static/*.png"
160 let staticFiles: FileItem[] = [];164 let staticFiles: FileItem[] = [];
...@@ -170,29 +174,32 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {...@@ -170,29 +174,32 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {
170 // - "{section}/scripts/*.client.ts"174 // - "{section}/scripts/*.client.ts"
171 let scripts: FileItem[] = [];175 let scripts: FileItem[] = [];
172176
173 const sectionPath = (...sub: string[]) => path.join(sectionRoot, ...sub);177 const sectionPath = (...sub: string[]) => path.join(section.root, ...sub);
174 const rootPrefix = hot.projectSrc === sectionRoot178 const rootPrefix = hot.projectSrc === section.root
175 ? ""179 ? ""
176 : path.relative(hot.projectSrc, sectionRoot) + "/";180 : path.relative(hot.projectSrc, section.root) + "/";
177 const kinds = [181 const kinds = [
178 {182 {
179 dir: sectionPath("pages"),183 dir: sectionPath("pages"),
180 list: pages,184 list: pages,
181 prefix: "/",185 prefix: section.base,
182 include: [".tsx", ".mdx", ".marko"],186 include: [".tsx", ".mdx", ".marko"],
183 exclude: [".client.ts", ".client.tsx"],187 exclude: [".client.ts", ".client.tsx"],
188 page: true,
184 },189 },
185 {190 {
186 dir: sectionPath("static"),191 dir: sectionPath("static"),
187 list: staticFiles,192 list: staticFiles,
188 prefix: "/",193 prefix: section.base,
189 ext: true,194 ext: true,
195 page: true,
190 },196 },
191 {197 {
192 dir: sectionPath("scripts"),198 dir: sectionPath("scripts"),
193 list: scripts,199 list: scripts,
194 prefix: rootPrefix,200 prefix: rootPrefix,
195 include: [".client.ts", ".client.tsx"],201 include: [".client.ts", ".client.tsx"],
202 page: false,
196 },203 },
197 {204 {
198 dir: sectionPath("views"),205 dir: sectionPath("views"),
...@@ -200,6 +207,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {...@@ -200,6 +207,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {
200 prefix: rootPrefix,207 prefix: rootPrefix,
201 include: [".tsx", ".mdx", ".marko"],208 include: [".tsx", ".mdx", ".marko"],
202 exclude: [".client.ts", ".client.tsx"],209 exclude: [".client.ts", ".client.tsx"],
210 page: false,
203 },211 },
204 ];212 ];
205 for (const kind of kinds) {213 for (const kind of kinds) {
...@@ -229,7 +237,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {...@@ -229,7 +237,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) {
229 ? subPath237 ? subPath
230 : subPath.slice(0, -path.extname(subPath).length).replaceAll(".", "/");238 : subPath.slice(0, -path.extname(subPath).length).replaceAll(".", "/");
231 let id = prefix + trim.replaceAll("\\", "/");239 let id = prefix + trim.replaceAll("\\", "/");
232 if (prefix === "/" && id.endsWith("/index")) {240 if (kind.page && id.endsWith("/index")) {
233 id = id.slice(0, -"/index".length) || "/";241 id = id.slice(0, -"/index".length) || "/";
234 }242 }
235 list.push({ id, file: path.relative(hot.projectRoot, file) });243 list.push({ id, file: path.relative(hot.projectRoot, file) });
framework/hot.ts+6-1
...@@ -174,7 +174,11 @@ function loadMarko(module: NodeJS.Module, filepath: string) {...@@ -174,7 +174,11 @@ function loadMarko(module: NodeJS.Module, filepath: string) {
174174
175function loadMdx(module: NodeJS.Module, filepath: string) {175function loadMdx(module: NodeJS.Module, filepath: string) {
176 const input = fs.readFileSync(filepath);176 const input = fs.readFileSync(filepath);
177 const out = mdx.compileSync(input, { jsxImportSource: "#jsx" }).value;177 const out = mdx.compileSync(input, {
178 jsxImportSource: "#jsx",
179 providerImportSource: "#mdx",
180 rehypePlugins: [rehypeMdxCodeProps],
181 }).value;
178 const src = typeof out === "string" ? out : Buffer.from(out).toString("utf8");182 const src = typeof out === "string" ? out : Buffer.from(out).toString("utf8");
179 return loadEsbuildCode(module, filepath, src);183 return loadEsbuildCode(module, filepath, src);
180}184}
...@@ -323,6 +327,7 @@ import { pathToFileURL } from "node:url";...@@ -323,6 +327,7 @@ import { pathToFileURL } from "node:url";
323import * as esbuild from "esbuild";327import * as esbuild from "esbuild";
324import { createRequire } from "node:module";328import { createRequire } from "node:module";
325import * as mdx from "@mdx-js/mdx";329import * as mdx from "@mdx-js/mdx";
330import rehypeMdxCodeProps from "rehype-mdx-code-props";
326import * as self from "./hot.ts";331import * as self from "./hot.ts";
327import { Buffer } from "node:buffer";332import { Buffer } from "node:buffer";
328import { UNWRAP } from "lib/assert.ts";333import { UNWRAP } from "lib/assert.ts";
framework/lib/sitegen.ts+13-1
...@@ -30,6 +30,7 @@ export interface FileItem {...@@ -30,6 +30,7 @@ export interface FileItem {
30}30}
31export interface Section {31export interface Section {
32 root: string;32 root: string;
33 base?: string;
33}34}
34export interface Font {35export interface Font {
35 name: string;36 name: string;
...@@ -59,6 +60,17 @@ export function addScript(id: ScriptId | { value: ScriptId }) {...@@ -59,6 +60,17 @@ export function addScript(id: ScriptId | { value: ScriptId }) {
59 context.get().scripts.add(typeof id === "string" ? id : id.value);60 context.get().scripts.add(typeof id === "string" ? id : id.value);
60}61}
6162
63// TODO: self-host plausible for extra privacy. i am in a rush as i write this
64// TODO: properly locate this constant in `site.ts`
65//
66// I have this so I can see if the blog is actually seen by people. And for
67// understanding where paperclover.net gets its load for. When I need to scale
68// large enough, analytics will determine the location of the second web
69// hosting node.
70export const analytics =
71 `<script async src="https://plausible.io/js/pa-Ajv81BZMkpbEE4QFznyoS.js"></script>
72<script>window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};plausible.init()</script> `;
73
62export function wrapDocument({74export function wrapDocument({
63 body,75 body,
64 head,76 head,
...@@ -72,7 +84,7 @@ export function wrapDocument({...@@ -72,7 +84,7 @@ export function wrapDocument({
72}) {84}) {
73 return `<!doctype html><html lang=en><head><meta charset=utf8>${head}${85 return `<!doctype html><html lang=en><head><meta charset=utf8>${head}${
74 inlineCss ? `<style>${inlineCss}</style>` : ""86 inlineCss ? `<style>${inlineCss}</style>` : ""
75 }</head><body>${body}${87 }${analytics}</head><body>${body}${
76 scripts ? `<script>${scripts}</script>` : ""88 scripts ? `<script>${scripts}</script>` : ""
77 }</body></html>`;89 }</body></html>`;
78}90}
framework/mdx-hack.tsx created+32
...@@ -0,0 +1,32 @@
1export function useMDXComponents() {
2 return {
3 pre: async (
4 { filename, whitespace, tint, children: [, , { className, children }] },
5 ) => {
6 const lang = className.split("-")?.[1] ?? null;
7 const code = ["tsx", "jsx", "json", "html", "ts", "js"].includes(lang)
8 ? await highlight.highlightCode(
9 children.trim(),
10 lang,
11 )
12 : children.trim();
13 return (
14 <figure class={["code", tint]}>
15 {filename && <figcaption>{filename}</figcaption>}
16 <pre
17 style={whitespace ? { "white-space": whitespace } : {}}
18 ><code>{render.raw(code)}</code></pre>
19 </figure>
20 );
21 },
22 code: ({ children }) => {
23 return (
24 <code>
25 {children}
26 </code>
27 );
28 },
29 };
30}
31import * as highlight from "../src/file-viewer/highlight.ts";
32import * as render from "lib/render.ts";
lib/progress.ts+6
...@@ -1,3 +1,9 @@...@@ -1,3 +1,9 @@
1// For those coming from my blog, check out this video
2// -> https://paperclover.net/file/2025/file%20scanner.mp4?view=embed
3//
4// There is some massive rework pending on this file, check out the PR
5// -> https://git.paperclover.net/clo/sitegen/pulls/48
6//
1// This file is under heavy construction.7// This file is under heavy construction.
2// - I am happy with the overall design8// - I am happy with the overall design
3// - Will rename things9// - Will rename things
lib/render.ts+1
...@@ -370,6 +370,7 @@ function stringifyStyleAttribute(style: Record<string, string>): string {...@@ -370,6 +370,7 @@ function stringifyStyleAttribute(style: Record<string, string>): string {
370 )370 )
371 }`;371 }`;
372 }372 }
373 if (!out) return "";
373 return "style=" + quoteIfNeeded(out);374 return "style=" + quoteIfNeeded(out);
374}375}
375376
package-lock.json+47-815
...@@ -17,9 +17,8 @@...@@ -17,9 +17,8 @@
17 "marko": "6.0.82",17 "marko": "6.0.82",
18 "msgpackr": "1.11.5",18 "msgpackr": "1.11.5",
19 "puppeteer": "24.23.0",19 "puppeteer": "24.23.0",
20 "sharp": "0.34.2",20 "rehype-mdx-code-props": "^3.0.1",
21 "source-map-support": "0.5.21",21 "source-map-support": "0.5.21",
22 "ts-to-jsdoc": "2.4.0",
23 "unique-names-generator": "4.7.1",22 "unique-names-generator": "4.7.1",
24 "vscode-oniguruma": "2.0.1",23 "vscode-oniguruma": "2.0.1",
25 "vscode-textmate": "9.2.0"24 "vscode-textmate": "9.2.0"
...@@ -491,16 +490,6 @@...@@ -491,16 +490,6 @@
491 "w3c-keyname": "^2.2.4"490 "w3c-keyname": "^2.2.4"
492 }491 }
493 },492 },
494 "node_modules/@emnapi/runtime": {
495 "version": "1.4.4",
496 "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz",
497 "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==",
498 "license": "MIT",
499 "optional": true,
500 "dependencies": {
501 "tslib": "^2.4.0"
502 }
503 },
504 "node_modules/@esbuild/aix-ppc64": {493 "node_modules/@esbuild/aix-ppc64": {
505 "version": "0.25.5",494 "version": "0.25.5",
506 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",495 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
...@@ -913,402 +902,6 @@...@@ -913,402 +902,6 @@
913 "hono": "^4"902 "hono": "^4"
914 }903 }
915 },904 },
916 "node_modules/@img/sharp-darwin-arm64": {
917 "version": "0.34.2",
918 "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz",
919 "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==",
920 "cpu": [
921 "arm64"
922 ],
923 "license": "Apache-2.0",
924 "optional": true,
925 "os": [
926 "darwin"
927 ],
928 "engines": {
929 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
930 },
931 "funding": {
932 "url": "https://opencollective.com/libvips"
933 },
934 "optionalDependencies": {
935 "@img/sharp-libvips-darwin-arm64": "1.1.0"
936 }
937 },
938 "node_modules/@img/sharp-darwin-x64": {
939 "version": "0.34.2",
940 "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz",
941 "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==",
942 "cpu": [
943 "x64"
944 ],
945 "license": "Apache-2.0",
946 "optional": true,
947 "os": [
948 "darwin"
949 ],
950 "engines": {
951 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
952 },
953 "funding": {
954 "url": "https://opencollective.com/libvips"
955 },
956 "optionalDependencies": {
957 "@img/sharp-libvips-darwin-x64": "1.1.0"
958 }
959 },
960 "node_modules/@img/sharp-libvips-darwin-arm64": {
961 "version": "1.1.0",
962 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz",
963 "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
964 "cpu": [
965 "arm64"
966 ],
967 "license": "LGPL-3.0-or-later",
968 "optional": true,
969 "os": [
970 "darwin"
971 ],
972 "funding": {
973 "url": "https://opencollective.com/libvips"
974 }
975 },
976 "node_modules/@img/sharp-libvips-darwin-x64": {
977 "version": "1.1.0",
978 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz",
979 "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
980 "cpu": [
981 "x64"
982 ],
983 "license": "LGPL-3.0-or-later",
984 "optional": true,
985 "os": [
986 "darwin"
987 ],
988 "funding": {
989 "url": "https://opencollective.com/libvips"
990 }
991 },
992 "node_modules/@img/sharp-libvips-linux-arm": {
993 "version": "1.1.0",
994 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz",
995 "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
996 "cpu": [
997 "arm"
998 ],
999 "license": "LGPL-3.0-or-later",
1000 "optional": true,
1001 "os": [
1002 "linux"
1003 ],
1004 "funding": {
1005 "url": "https://opencollective.com/libvips"
1006 }
1007 },
1008 "node_modules/@img/sharp-libvips-linux-arm64": {
1009 "version": "1.1.0",
1010 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz",
1011 "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
1012 "cpu": [
1013 "arm64"
1014 ],
1015 "license": "LGPL-3.0-or-later",
1016 "optional": true,
1017 "os": [
1018 "linux"
1019 ],
1020 "funding": {
1021 "url": "https://opencollective.com/libvips"
1022 }
1023 },
1024 "node_modules/@img/sharp-libvips-linux-ppc64": {
1025 "version": "1.1.0",
1026 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz",
1027 "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
1028 "cpu": [
1029 "ppc64"
1030 ],
1031 "license": "LGPL-3.0-or-later",
1032 "optional": true,
1033 "os": [
1034 "linux"
1035 ],
1036 "funding": {
1037 "url": "https://opencollective.com/libvips"
1038 }
1039 },
1040 "node_modules/@img/sharp-libvips-linux-s390x": {
1041 "version": "1.1.0",
1042 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz",
1043 "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
1044 "cpu": [
1045 "s390x"
1046 ],
1047 "license": "LGPL-3.0-or-later",
1048 "optional": true,
1049 "os": [
1050 "linux"
1051 ],
1052 "funding": {
1053 "url": "https://opencollective.com/libvips"
1054 }
1055 },
1056 "node_modules/@img/sharp-libvips-linux-x64": {
1057 "version": "1.1.0",
1058 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz",
1059 "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
1060 "cpu": [
1061 "x64"
1062 ],
1063 "license": "LGPL-3.0-or-later",
1064 "optional": true,
1065 "os": [
1066 "linux"
1067 ],
1068 "funding": {
1069 "url": "https://opencollective.com/libvips"
1070 }
1071 },
1072 "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
1073 "version": "1.1.0",
1074 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz",
1075 "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
1076 "cpu": [
1077 "arm64"
1078 ],
1079 "license": "LGPL-3.0-or-later",
1080 "optional": true,
1081 "os": [
1082 "linux"
1083 ],
1084 "funding": {
1085 "url": "https://opencollective.com/libvips"
1086 }
1087 },
1088 "node_modules/@img/sharp-libvips-linuxmusl-x64": {
1089 "version": "1.1.0",
1090 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz",
1091 "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
1092 "cpu": [
1093 "x64"
1094 ],
1095 "license": "LGPL-3.0-or-later",
1096 "optional": true,
1097 "os": [
1098 "linux"
1099 ],
1100 "funding": {
1101 "url": "https://opencollective.com/libvips"
1102 }
1103 },
1104 "node_modules/@img/sharp-linux-arm": {
1105 "version": "0.34.2",
1106 "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz",
1107 "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==",
1108 "cpu": [
1109 "arm"
1110 ],
1111 "license": "Apache-2.0",
1112 "optional": true,
1113 "os": [
1114 "linux"
1115 ],
1116 "engines": {
1117 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1118 },
1119 "funding": {
1120 "url": "https://opencollective.com/libvips"
1121 },
1122 "optionalDependencies": {
1123 "@img/sharp-libvips-linux-arm": "1.1.0"
1124 }
1125 },
1126 "node_modules/@img/sharp-linux-arm64": {
1127 "version": "0.34.2",
1128 "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz",
1129 "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==",
1130 "cpu": [
1131 "arm64"
1132 ],
1133 "license": "Apache-2.0",
1134 "optional": true,
1135 "os": [
1136 "linux"
1137 ],
1138 "engines": {
1139 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1140 },
1141 "funding": {
1142 "url": "https://opencollective.com/libvips"
1143 },
1144 "optionalDependencies": {
1145 "@img/sharp-libvips-linux-arm64": "1.1.0"
1146 }
1147 },
1148 "node_modules/@img/sharp-linux-s390x": {
1149 "version": "0.34.2",
1150 "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz",
1151 "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==",
1152 "cpu": [
1153 "s390x"
1154 ],
1155 "license": "Apache-2.0",
1156 "optional": true,
1157 "os": [
1158 "linux"
1159 ],
1160 "engines": {
1161 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1162 },
1163 "funding": {
1164 "url": "https://opencollective.com/libvips"
1165 },
1166 "optionalDependencies": {
1167 "@img/sharp-libvips-linux-s390x": "1.1.0"
1168 }
1169 },
1170 "node_modules/@img/sharp-linux-x64": {
1171 "version": "0.34.2",
1172 "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz",
1173 "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==",
1174 "cpu": [
1175 "x64"
1176 ],
1177 "license": "Apache-2.0",
1178 "optional": true,
1179 "os": [
1180 "linux"
1181 ],
1182 "engines": {
1183 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1184 },
1185 "funding": {
1186 "url": "https://opencollective.com/libvips"
1187 },
1188 "optionalDependencies": {
1189 "@img/sharp-libvips-linux-x64": "1.1.0"
1190 }
1191 },
1192 "node_modules/@img/sharp-linuxmusl-arm64": {
1193 "version": "0.34.2",
1194 "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz",
1195 "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==",
1196 "cpu": [
1197 "arm64"
1198 ],
1199 "license": "Apache-2.0",
1200 "optional": true,
1201 "os": [
1202 "linux"
1203 ],
1204 "engines": {
1205 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1206 },
1207 "funding": {
1208 "url": "https://opencollective.com/libvips"
1209 },
1210 "optionalDependencies": {
1211 "@img/sharp-libvips-linuxmusl-arm64": "1.1.0"
1212 }
1213 },
1214 "node_modules/@img/sharp-linuxmusl-x64": {
1215 "version": "0.34.2",
1216 "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz",
1217 "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==",
1218 "cpu": [
1219 "x64"
1220 ],
1221 "license": "Apache-2.0",
1222 "optional": true,
1223 "os": [
1224 "linux"
1225 ],
1226 "engines": {
1227 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1228 },
1229 "funding": {
1230 "url": "https://opencollective.com/libvips"
1231 },
1232 "optionalDependencies": {
1233 "@img/sharp-libvips-linuxmusl-x64": "1.1.0"
1234 }
1235 },
1236 "node_modules/@img/sharp-wasm32": {
1237 "version": "0.34.2",
1238 "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz",
1239 "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==",
1240 "cpu": [
1241 "wasm32"
1242 ],
1243 "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
1244 "optional": true,
1245 "dependencies": {
1246 "@emnapi/runtime": "^1.4.3"
1247 },
1248 "engines": {
1249 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1250 },
1251 "funding": {
1252 "url": "https://opencollective.com/libvips"
1253 }
1254 },
1255 "node_modules/@img/sharp-win32-arm64": {
1256 "version": "0.34.2",
1257 "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz",
1258 "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==",
1259 "cpu": [
1260 "arm64"
1261 ],
1262 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1263 "optional": true,
1264 "os": [
1265 "win32"
1266 ],
1267 "engines": {
1268 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1269 },
1270 "funding": {
1271 "url": "https://opencollective.com/libvips"
1272 }
1273 },
1274 "node_modules/@img/sharp-win32-ia32": {
1275 "version": "0.34.2",
1276 "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz",
1277 "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==",
1278 "cpu": [
1279 "ia32"
1280 ],
1281 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1282 "optional": true,
1283 "os": [
1284 "win32"
1285 ],
1286 "engines": {
1287 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1288 },
1289 "funding": {
1290 "url": "https://opencollective.com/libvips"
1291 }
1292 },
1293 "node_modules/@img/sharp-win32-x64": {
1294 "version": "0.34.2",
1295 "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz",
1296 "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==",
1297 "cpu": [
1298 "x64"
1299 ],
1300 "license": "Apache-2.0 AND LGPL-3.0-or-later",
1301 "optional": true,
1302 "os": [
1303 "win32"
1304 ],
1305 "engines": {
1306 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1307 },
1308 "funding": {
1309 "url": "https://opencollective.com/libvips"
1310 }
1311 },
1312 "node_modules/@jridgewell/gen-mapping": {905 "node_modules/@jridgewell/gen-mapping": {
1313 "version": "0.3.13",906 "version": "0.3.13",
1314 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",907 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
...@@ -1541,41 +1134,6 @@...@@ -1541,41 +1134,6 @@
1541 "win32"1134 "win32"
1542 ]1135 ]
1543 },1136 },
1544 "node_modules/@nodelib/fs.scandir": {
1545 "version": "2.1.5",
1546 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1547 "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1548 "license": "MIT",
1549 "dependencies": {
1550 "@nodelib/fs.stat": "2.0.5",
1551 "run-parallel": "^1.1.9"
1552 },
1553 "engines": {
1554 "node": ">= 8"
1555 }
1556 },
1557 "node_modules/@nodelib/fs.stat": {
1558 "version": "2.0.5",
1559 "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1560 "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1561 "license": "MIT",
1562 "engines": {
1563 "node": ">= 8"
1564 }
1565 },
1566 "node_modules/@nodelib/fs.walk": {
1567 "version": "1.2.8",
1568 "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1569 "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1570 "license": "MIT",
1571 "dependencies": {
1572 "@nodelib/fs.scandir": "2.1.5",
1573 "fastq": "^1.6.0"
1574 },
1575 "engines": {
1576 "node": ">= 8"
1577 }
1578 },
1579 "node_modules/@puppeteer/browsers": {1137 "node_modules/@puppeteer/browsers": {
1580 "version": "2.10.10",1138 "version": "2.10.10",
1581 "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz",1139 "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz",
...@@ -1621,18 +1179,6 @@...@@ -1621,18 +1179,6 @@
1621 "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",1179 "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
1622 "license": "MIT"1180 "license": "MIT"
1623 },1181 },
1624 "node_modules/@ts-morph/common": {
1625 "version": "0.24.0",
1626 "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz",
1627 "integrity": "sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==",
1628 "license": "MIT",
1629 "dependencies": {
1630 "fast-glob": "^3.3.2",
1631 "minimatch": "^9.0.4",
1632 "mkdirp": "^3.0.1",
1633 "path-browserify": "^1.0.1"
1634 }
1635 },
1636 "node_modules/@types/debug": {1182 "node_modules/@types/debug": {
1637 "version": "4.1.12",1183 "version": "4.1.12",
1638 "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",1184 "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
...@@ -1773,12 +1319,6 @@...@@ -1773,12 +1319,6 @@
1773 "url": "https://github.com/chalk/ansi-styles?sponsor=1"1319 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1774 }1320 }
1775 },1321 },
1776 "node_modules/arg": {
1777 "version": "5.0.2",
1778 "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1779 "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1780 "license": "MIT"
1781 },
1782 "node_modules/argparse": {1322 "node_modules/argparse": {
1783 "version": "2.0.1",1323 "version": "2.0.1",
1784 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",1324 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
...@@ -1830,12 +1370,6 @@...@@ -1830,12 +1370,6 @@
1830 "url": "https://github.com/sponsors/wooorm"1370 "url": "https://github.com/sponsors/wooorm"
1831 }1371 }
1832 },1372 },
1833 "node_modules/balanced-match": {
1834 "version": "1.0.2",
1835 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1836 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1837 "license": "MIT"
1838 },
1839 "node_modules/bare-events": {1373 "node_modules/bare-events": {
1840 "version": "2.7.0",1374 "version": "2.7.0",
1841 "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz",1375 "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz",
...@@ -1976,27 +1510,6 @@...@@ -1976,27 +1510,6 @@
1976 "url": "https://github.com/sponsors/wooorm"1510 "url": "https://github.com/sponsors/wooorm"
1977 }1511 }
1978 },1512 },
1979 "node_modules/brace-expansion": {
1980 "version": "2.0.2",
1981 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
1982 "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
1983 "license": "MIT",
1984 "dependencies": {
1985 "balanced-match": "^1.0.0"
1986 }
1987 },
1988 "node_modules/braces": {
1989 "version": "3.0.3",
1990 "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1991 "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1992 "license": "MIT",
1993 "dependencies": {
1994 "fill-range": "^7.1.1"
1995 },
1996 "engines": {
1997 "node": ">=8"
1998 }
1999 },
2000 "node_modules/browserslist": {1513 "node_modules/browserslist": {
2001 "version": "4.26.3",1514 "version": "4.26.3",
2002 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz",1515 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz",
...@@ -2151,12 +1664,6 @@...@@ -2151,12 +1664,6 @@
2151 "node": ">=12"1664 "node": ">=12"
2152 }1665 }
2153 },1666 },
2154 "node_modules/code-block-writer": {
2155 "version": "13.0.3",
2156 "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz",
2157 "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==",
2158 "license": "MIT"
2159 },
2160 "node_modules/codem-isoboxer": {1667 "node_modules/codem-isoboxer": {
2161 "version": "0.3.10",1668 "version": "0.3.10",
2162 "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.10.tgz",1669 "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.10.tgz",
...@@ -2188,19 +1695,6 @@...@@ -2188,19 +1695,6 @@
2188 "url": "https://github.com/sponsors/wooorm"1695 "url": "https://github.com/sponsors/wooorm"
2189 }1696 }
2190 },1697 },
2191 "node_modules/color": {
2192 "version": "4.2.3",
2193 "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
2194 "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
2195 "license": "MIT",
2196 "dependencies": {
2197 "color-convert": "^2.0.1",
2198 "color-string": "^1.9.0"
2199 },
2200 "engines": {
2201 "node": ">=12.5.0"
2202 }
2203 },
2204 "node_modules/color-convert": {1698 "node_modules/color-convert": {
2205 "version": "2.0.1",1699 "version": "2.0.1",
2206 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",1700 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
...@@ -2219,16 +1713,6 @@...@@ -2219,16 +1713,6 @@
2219 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",1713 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2220 "license": "MIT"1714 "license": "MIT"
2221 },1715 },
2222 "node_modules/color-string": {
2223 "version": "1.9.1",
2224 "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
2225 "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
2226 "license": "MIT",
2227 "dependencies": {
2228 "color-name": "^1.0.0",
2229 "simple-swizzle": "^0.2.2"
2230 }
2231 },
2232 "node_modules/comma-separated-tokens": {1716 "node_modules/comma-separated-tokens": {
2233 "version": "2.0.3",1717 "version": "2.0.3",
2234 "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",1718 "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
...@@ -2377,6 +1861,7 @@...@@ -2377,6 +1861,7 @@
2377 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",1861 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
2378 "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",1862 "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
2379 "license": "Apache-2.0",1863 "license": "Apache-2.0",
1864 "optional": true,
2380 "engines": {1865 "engines": {
2381 "node": ">=8"1866 "node": ">=8"
2382 }1867 }
...@@ -2656,6 +2141,18 @@...@@ -2656,6 +2141,18 @@
2656 "url": "https://opencollective.com/unified"2141 "url": "https://opencollective.com/unified"
2657 }2142 }
2658 },2143 },
2144 "node_modules/estree-util-value-to-estree": {
2145 "version": "3.4.1",
2146 "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.1.tgz",
2147 "integrity": "sha512-E4fEc8KLhDXnbyDa5XrbdT9PbgSMt0AGZPFUsGFok8N2Q7DTO+F6xAFJjIdw71EkidRg186I1mQCKzZ1ZbEsCw==",
2148 "license": "MIT",
2149 "dependencies": {
2150 "@types/estree": "^1.0.0"
2151 },
2152 "funding": {
2153 "url": "https://github.com/sponsors/remcohaszing"
2154 }
2155 },
2659 "node_modules/estree-util-visit": {2156 "node_modules/estree-util-visit": {
2660 "version": "2.0.0",2157 "version": "2.0.0",
2661 "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",2158 "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
...@@ -2735,31 +2232,6 @@...@@ -2735,31 +2232,6 @@
2735 "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",2232 "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
2736 "license": "MIT"2233 "license": "MIT"
2737 },2234 },
2738 "node_modules/fast-glob": {
2739 "version": "3.3.3",
2740 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
2741 "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
2742 "license": "MIT",
2743 "dependencies": {
2744 "@nodelib/fs.stat": "^2.0.2",
2745 "@nodelib/fs.walk": "^1.2.3",
2746 "glob-parent": "^5.1.2",
2747 "merge2": "^1.3.0",
2748 "micromatch": "^4.0.8"
2749 },
2750 "engines": {
2751 "node": ">=8.6.0"
2752 }
2753 },
2754 "node_modules/fastq": {
2755 "version": "1.19.1",
2756 "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
2757 "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
2758 "license": "ISC",
2759 "dependencies": {
2760 "reusify": "^1.0.4"
2761 }
2762 },
2763 "node_modules/fd-slicer": {2235 "node_modules/fd-slicer": {
2764 "version": "1.1.0",2236 "version": "1.1.0",
2765 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",2237 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
...@@ -2769,18 +2241,6 @@...@@ -2769,18 +2241,6 @@
2769 "pend": "~1.2.0"2241 "pend": "~1.2.0"
2770 }2242 }
2771 },2243 },
2772 "node_modules/fill-range": {
2773 "version": "7.1.1",
2774 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
2775 "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
2776 "license": "MIT",
2777 "dependencies": {
2778 "to-regex-range": "^5.0.1"
2779 },
2780 "engines": {
2781 "node": ">=8"
2782 }
2783 },
2784 "node_modules/gensync": {2244 "node_modules/gensync": {
2785 "version": "1.0.0-beta.2",2245 "version": "1.0.0-beta.2",
2786 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",2246 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
...@@ -2828,16 +2288,23 @@...@@ -2828,16 +2288,23 @@
2828 "node": ">= 14"2288 "node": ">= 14"
2829 }2289 }
2830 },2290 },
2831 "node_modules/glob-parent": {2291 "node_modules/hast-util-properties-to-mdx-jsx-attributes": {
2832 "version": "5.1.2",2292 "version": "1.0.1",
2833 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",2293 "resolved": "https://registry.npmjs.org/hast-util-properties-to-mdx-jsx-attributes/-/hast-util-properties-to-mdx-jsx-attributes-1.0.1.tgz",
2834 "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",2294 "integrity": "sha512-ZzxhjHZ+gyxaPIFp/nuRpVL4GIFoqzfH6vNgjaA3CuUAV6XCxYwAQfRczrZRkgL6msi6DdOl+/QEduOdzszvbg==",
2835 "license": "ISC",2295 "license": "MIT",
2836 "dependencies": {2296 "dependencies": {
2837 "is-glob": "^4.0.1"2297 "@types/estree": "^1.0.0",
2298 "@types/hast": "^3.0.0",
2299 "comma-separated-tokens": "^2.0.0",
2300 "estree-util-value-to-estree": "^3.0.0",
2301 "mdast-util-mdx-jsx": "^3.0.0",
2302 "property-information": "^7.0.0",
2303 "space-separated-tokens": "^2.0.0",
2304 "style-to-js": "^1.0.0"
2838 },2305 },
2839 "engines": {2306 "funding": {
2840 "node": ">= 6"2307 "url": "https://github.com/sponsors/remcohaszing"
2841 }2308 }
2842 },2309 },
2843 "node_modules/hast-util-to-estree": {2310 "node_modules/hast-util-to-estree": {
...@@ -3075,15 +2542,6 @@...@@ -3075,15 +2542,6 @@
3075 "url": "https://github.com/sponsors/wooorm"2542 "url": "https://github.com/sponsors/wooorm"
3076 }2543 }
3077 },2544 },
3078 "node_modules/is-extglob": {
3079 "version": "2.1.1",
3080 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
3081 "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
3082 "license": "MIT",
3083 "engines": {
3084 "node": ">=0.10.0"
3085 }
3086 },
3087 "node_modules/is-fullwidth-code-point": {2545 "node_modules/is-fullwidth-code-point": {
3088 "version": "3.0.0",2546 "version": "3.0.0",
3089 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",2547 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
...@@ -3093,18 +2551,6 @@...@@ -3093,18 +2551,6 @@
3093 "node": ">=8"2551 "node": ">=8"
3094 }2552 }
3095 },2553 },
3096 "node_modules/is-glob": {
3097 "version": "4.0.3",
3098 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
3099 "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
3100 "license": "MIT",
3101 "dependencies": {
3102 "is-extglob": "^2.1.1"
3103 },
3104 "engines": {
3105 "node": ">=0.10.0"
3106 }
3107 },
3108 "node_modules/is-hexadecimal": {2554 "node_modules/is-hexadecimal": {
3109 "version": "2.0.1",2555 "version": "2.0.1",
3110 "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",2556 "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
...@@ -3115,15 +2561,6 @@...@@ -3115,15 +2561,6 @@
3115 "url": "https://github.com/sponsors/wooorm"2561 "url": "https://github.com/sponsors/wooorm"
3116 }2562 }
3117 },2563 },
3118 "node_modules/is-number": {
3119 "version": "7.0.0",
3120 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
3121 "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
3122 "license": "MIT",
3123 "engines": {
3124 "node": ">=0.12.0"
3125 }
3126 },
3127 "node_modules/is-plain-obj": {2564 "node_modules/is-plain-obj": {
3128 "version": "4.1.0",2565 "version": "4.1.0",
3129 "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",2566 "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
...@@ -3463,15 +2900,6 @@...@@ -3463,15 +2900,6 @@
3463 "url": "https://opencollective.com/unified"2900 "url": "https://opencollective.com/unified"
3464 }2901 }
3465 },2902 },
3466 "node_modules/merge2": {
3467 "version": "1.4.1",
3468 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
3469 "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
3470 "license": "MIT",
3471 "engines": {
3472 "node": ">= 8"
3473 }
3474 },
3475 "node_modules/micromark": {2903 "node_modules/micromark": {
3476 "version": "4.0.2",2904 "version": "4.0.2",
3477 "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",2905 "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
...@@ -4068,55 +3496,12 @@...@@ -4068,55 +3496,12 @@
4068 ],3496 ],
4069 "license": "MIT"3497 "license": "MIT"
4070 },3498 },
4071 "node_modules/micromatch": {
4072 "version": "4.0.8",
4073 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
4074 "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
4075 "license": "MIT",
4076 "dependencies": {
4077 "braces": "^3.0.3",
4078 "picomatch": "^2.3.1"
4079 },
4080 "engines": {
4081 "node": ">=8.6"
4082 }
4083 },
4084 "node_modules/minimatch": {
4085 "version": "9.0.5",
4086 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
4087 "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
4088 "license": "ISC",
4089 "dependencies": {
4090 "brace-expansion": "^2.0.1"
4091 },
4092 "engines": {
4093 "node": ">=16 || 14 >=14.17"
4094 },
4095 "funding": {
4096 "url": "https://github.com/sponsors/isaacs"
4097 }
4098 },
4099 "node_modules/mitt": {3499 "node_modules/mitt": {
4100 "version": "3.0.1",3500 "version": "3.0.1",
4101 "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",3501 "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
4102 "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",3502 "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
4103 "license": "MIT"3503 "license": "MIT"
4104 },3504 },
4105 "node_modules/mkdirp": {
4106 "version": "3.0.1",
4107 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
4108 "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
4109 "license": "MIT",
4110 "bin": {
4111 "mkdirp": "dist/cjs/src/bin.js"
4112 },
4113 "engines": {
4114 "node": ">=10"
4115 },
4116 "funding": {
4117 "url": "https://github.com/sponsors/isaacs"
4118 }
4119 },
4120 "node_modules/ms": {3505 "node_modules/ms": {
4121 "version": "2.1.3",3506 "version": "2.1.3",
4122 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",3507 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
...@@ -4298,18 +3683,6 @@...@@ -4298,18 +3683,6 @@
4298 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",3683 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
4299 "license": "ISC"3684 "license": "ISC"
4300 },3685 },
4301 "node_modules/picomatch": {
4302 "version": "2.3.1",
4303 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
4304 "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
4305 "license": "MIT",
4306 "engines": {
4307 "node": ">=8.6"
4308 },
4309 "funding": {
4310 "url": "https://github.com/sponsors/jonschlinkert"
4311 }
4312 },
4313 "node_modules/progress": {3686 "node_modules/progress": {
4314 "version": "2.0.3",3687 "version": "2.0.3",
4315 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",3688 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
...@@ -4412,26 +3785,6 @@...@@ -4412,26 +3785,6 @@
4412 "node": ">=18"3785 "node": ">=18"
4413 }3786 }
4414 },3787 },
4415 "node_modules/queue-microtask": {
4416 "version": "1.2.3",
4417 "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
4418 "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
4419 "funding": [
4420 {
4421 "type": "github",
4422 "url": "https://github.com/sponsors/feross"
4423 },
4424 {
4425 "type": "patreon",
4426 "url": "https://www.patreon.com/feross"
4427 },
4428 {
4429 "type": "consulting",
4430 "url": "https://feross.org/support"
4431 }
4432 ],
4433 "license": "MIT"
4434 },
4435 "node_modules/raptor-async": {3788 "node_modules/raptor-async": {
4436 "version": "1.1.3",3789 "version": "1.1.3",
4437 "resolved": "https://registry.npmjs.org/raptor-async/-/raptor-async-1.1.3.tgz",3790 "resolved": "https://registry.npmjs.org/raptor-async/-/raptor-async-1.1.3.tgz",
...@@ -4514,6 +3867,24 @@...@@ -4514,6 +3867,24 @@
4514 "url": "https://opencollective.com/unified"3867 "url": "https://opencollective.com/unified"
4515 }3868 }
4516 },3869 },
3870 "node_modules/rehype-mdx-code-props": {
3871 "version": "3.0.1",
3872 "resolved": "https://registry.npmjs.org/rehype-mdx-code-props/-/rehype-mdx-code-props-3.0.1.tgz",
3873 "integrity": "sha512-BWWKn0N6r7/qd7lbLgv5J8of7imz1l1PyCNoY7BH0AOR9JdJlQIfA9cKqTZVEb2h2GPKh473qrBajF0i01fq3A==",
3874 "license": "MIT",
3875 "dependencies": {
3876 "@types/hast": "^3.0.0",
3877 "hast-util-properties-to-mdx-jsx-attributes": "^1.0.0",
3878 "mdast-util-from-markdown": "^2.0.0",
3879 "mdast-util-mdx": "^3.0.0",
3880 "micromark-extension-mdxjs": "^3.0.0",
3881 "unified": "^11.0.0",
3882 "unist-util-visit-parents": "^6.0.0"
3883 },
3884 "funding": {
3885 "url": "https://github.com/sponsors/remcohaszing"
3886 }
3887 },
4517 "node_modules/rehype-recma": {3888 "node_modules/rehype-recma": {
4518 "version": "1.0.0",3889 "version": "1.0.0",
4519 "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",3890 "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
...@@ -4600,39 +3971,6 @@...@@ -4600,39 +3971,6 @@
4600 "node": ">=8"3971 "node": ">=8"
4601 }3972 }
4602 },3973 },
4603 "node_modules/reusify": {
4604 "version": "1.1.0",
4605 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
4606 "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
4607 "license": "MIT",
4608 "engines": {
4609 "iojs": ">=1.0.0",
4610 "node": ">=0.10.0"
4611 }
4612 },
4613 "node_modules/run-parallel": {
4614 "version": "1.2.0",
4615 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
4616 "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
4617 "funding": [
4618 {
4619 "type": "github",
4620 "url": "https://github.com/sponsors/feross"
4621 },
4622 {
4623 "type": "patreon",
4624 "url": "https://www.patreon.com/feross"
4625 },
4626 {
4627 "type": "consulting",
4628 "url": "https://feross.org/support"
4629 }
4630 ],
4631 "license": "MIT",
4632 "dependencies": {
4633 "queue-microtask": "^1.2.2"
4634 }
4635 },
4636 "node_modules/sax": {3974 "node_modules/sax": {
4637 "version": "1.2.1",3975 "version": "1.2.1",
4638 "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",3976 "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
...@@ -4657,74 +3995,6 @@...@@ -4657,74 +3995,6 @@
4657 "semver": "bin/semver.js"3995 "semver": "bin/semver.js"
4658 }3996 }
4659 },3997 },
4660 "node_modules/sharp": {
4661 "version": "0.34.2",
4662 "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz",
4663 "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==",
4664 "hasInstallScript": true,
4665 "license": "Apache-2.0",
4666 "dependencies": {
4667 "color": "^4.2.3",
4668 "detect-libc": "^2.0.4",
4669 "semver": "^7.7.2"
4670 },
4671 "engines": {
4672 "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
4673 },
4674 "funding": {
4675 "url": "https://opencollective.com/libvips"
4676 },
4677 "optionalDependencies": {
4678 "@img/sharp-darwin-arm64": "0.34.2",
4679 "@img/sharp-darwin-x64": "0.34.2",
4680 "@img/sharp-libvips-darwin-arm64": "1.1.0",
4681 "@img/sharp-libvips-darwin-x64": "1.1.0",
4682 "@img/sharp-libvips-linux-arm": "1.1.0",
4683 "@img/sharp-libvips-linux-arm64": "1.1.0",
4684 "@img/sharp-libvips-linux-ppc64": "1.1.0",
4685 "@img/sharp-libvips-linux-s390x": "1.1.0",
4686 "@img/sharp-libvips-linux-x64": "1.1.0",
4687 "@img/sharp-libvips-linuxmusl-arm64": "1.1.0",
4688 "@img/sharp-libvips-linuxmusl-x64": "1.1.0",
4689 "@img/sharp-linux-arm": "0.34.2",
4690 "@img/sharp-linux-arm64": "0.34.2",
4691 "@img/sharp-linux-s390x": "0.34.2",
4692 "@img/sharp-linux-x64": "0.34.2",
4693 "@img/sharp-linuxmusl-arm64": "0.34.2",
4694 "@img/sharp-linuxmusl-x64": "0.34.2",
4695 "@img/sharp-wasm32": "0.34.2",
4696 "@img/sharp-win32-arm64": "0.34.2",
4697 "@img/sharp-win32-ia32": "0.34.2",
4698 "@img/sharp-win32-x64": "0.34.2"
4699 }
4700 },
4701 "node_modules/sharp/node_modules/semver": {
4702 "version": "7.7.2",
4703 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
4704 "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
4705 "license": "ISC",
4706 "bin": {
4707 "semver": "bin/semver.js"
4708 },
4709 "engines": {
4710 "node": ">=10"
4711 }
4712 },
4713 "node_modules/simple-swizzle": {
4714 "version": "0.2.2",
4715 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
4716 "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
4717 "license": "MIT",
4718 "dependencies": {
4719 "is-arrayish": "^0.3.1"
4720 }
4721 },
4722 "node_modules/simple-swizzle/node_modules/is-arrayish": {
4723 "version": "0.3.2",
4724 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
4725 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
4726 "license": "MIT"
4727 },
4728 "node_modules/smart-buffer": {3998 "node_modules/smart-buffer": {
4729 "version": "4.2.0",3999 "version": "4.2.0",
4730 "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",4000 "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
...@@ -4916,18 +4186,6 @@...@@ -4916,18 +4186,6 @@
4916 "b4a": "^1.6.4"4186 "b4a": "^1.6.4"
4917 }4187 }
4918 },4188 },
4919 "node_modules/to-regex-range": {
4920 "version": "5.0.1",
4921 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
4922 "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
4923 "license": "MIT",
4924 "dependencies": {
4925 "is-number": "^7.0.0"
4926 },
4927 "engines": {
4928 "node": ">=8.0"
4929 }
4930 },
4931 "node_modules/trim-lines": {4189 "node_modules/trim-lines": {
4932 "version": "3.0.1",4190 "version": "3.0.1",
4933 "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",4191 "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
...@@ -4948,32 +4206,6 @@...@@ -4948,32 +4206,6 @@
4948 "url": "https://github.com/sponsors/wooorm"4206 "url": "https://github.com/sponsors/wooorm"
4949 }4207 }
4950 },4208 },
4951 "node_modules/ts-morph": {
4952 "version": "23.0.0",
4953 "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-23.0.0.tgz",
4954 "integrity": "sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==",
4955 "license": "MIT",
4956 "dependencies": {
4957 "@ts-morph/common": "~0.24.0",
4958 "code-block-writer": "^13.0.1"
4959 }
4960 },
4961 "node_modules/ts-to-jsdoc": {
4962 "version": "2.4.0",
4963 "resolved": "https://registry.npmjs.org/ts-to-jsdoc/-/ts-to-jsdoc-2.4.0.tgz",
4964 "integrity": "sha512-RiI9ipxkLjXESp5+YjXIQJ5GgtjwWTZU4uDahxsIdr1HKLFaC/nQOtgkGRJ+AFxqHrrhwrXtPh093r0nXQwKmw==",
4965 "license": "MIT",
4966 "dependencies": {
4967 "arg": "^5.0.1",
4968 "ts-morph": "^23.0.0"
4969 },
4970 "bin": {
4971 "ts-to-jsdoc": "bin/ts-to-jsdoc"
4972 },
4973 "optionalDependencies": {
4974 "typescript": "*"
4975 }
4976 },
4977 "node_modules/tslib": {4209 "node_modules/tslib": {
4978 "version": "2.8.1",4210 "version": "2.8.1",
4979 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",4211 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
package.json+3-1
...@@ -13,6 +13,7 @@...@@ -13,6 +13,7 @@
13 "marko": "6.0.82",13 "marko": "6.0.82",
14 "msgpackr": "1.11.5",14 "msgpackr": "1.11.5",
15 "puppeteer": "24.23.0",15 "puppeteer": "24.23.0",
16 "rehype-mdx-code-props": "^3.0.1",
16 "source-map-support": "0.5.21",17 "source-map-support": "0.5.21",
17 "unique-names-generator": "4.7.1",18 "unique-names-generator": "4.7.1",
18 "vscode-oniguruma": "2.0.1",19 "vscode-oniguruma": "2.0.1",
...@@ -39,6 +40,7 @@...@@ -39,6 +40,7 @@
39 "deno": "hono/deno",40 "deno": "hono/deno",
40 "node": "@hono/node-server/conninfo",41 "node": "@hono/node-server/conninfo",
41 "worker": "hono/cloudflare-workers"42 "worker": "hono/cloudflare-workers"
42 }43 },
44 "#mdx": "./framework/mdx-hack.tsx"
43 }45 }
44}46}
src/bin/deploy.ts created+61
...@@ -0,0 +1,61 @@
1export async function main() {
2 await rsync.spawn({
3 cwd: Path.resolve(import.meta.dirname).parent!.toString(),
4 args: [
5 "-a",
6 "--progress",
7 "clo@zenith:/mnt/storage1/clover/Documents/Config/paperclover/cache.sqlite",
8 ".clover/",
9 ],
10 progress: progress.start("download file cache"),
11 });
12 await rsync.spawn({
13 cwd: Path.resolve(import.meta.dirname).parent!.toString(),
14 args: [
15 "-a",
16 "--progress",
17 "clo@paperclover.net:~/paperclover.net/.clover/questions.sqlite",
18 ".clover/",
19 ],
20 progress: progress.start("download questions state"),
21 });
22
23 // cannot call incr.restore until database calls are
24 // considered in the watch graph.
25 // await incr.restore()
26 await incr.compile(generate);
27
28 await rsync.spawn({
29 cwd: Path.resolve(import.meta.dirname).parent!.parent!.toString(),
30 args: [
31 "-a",
32 "-r",
33 "--progress",
34 "--delete",
35 "--exclude=node_modules",
36 "--exclude=.clover",
37 "package.json",
38 "package-lock.json",
39 ".clover/o/",
40 "paperclover.net:~/paperclover.net/",
41 ],
42 progress: progress.start("copy site files"),
43 });
44 await subprocess.spawnAndWait({
45 stdio: "inherit",
46 cmd: [
47 "ssh",
48 "paperclover.net",
49 "cd paperclover.net && " +
50 "npm i &&" +
51 "pm2 restart site",
52 ],
53 });
54}
55
56import * as incr from "../../framework/incremental.ts";
57import { generate } from "../../framework/generate.ts";
58import * as progress from "lib/progress.ts";
59import * as subprocess from "lib/subprocess.ts";
60import * as rsync from "../file-viewer/rsync.ts";
61import { Path } from "#sitegen/path";
src/bin/package-lib.ts created+226
...@@ -0,0 +1,226 @@
1export async function updateJsrPackageExportsToAll(
2 absPath: string,
3 p: progress.Ref,
4) {
5 using _ = p.start("update deno.json");
6 const manifestPath = path.join(absPath, "deno.json");
7 const deno = JSON.parse(
8 await fs.readFile(manifestPath, "utf-8"),
9 );
10 const newExports: Record<string, string> = {};
11 for (const subPath of await fs.readdir(absPath, { recursive: true })) {
12 if (!subPath.match(/\.tsx?$/)) continue;
13 if (subPath.match(/\.(test|sample)\.tsx?$/)) continue;
14 if (subPath.startsWith("dist")) continue;
15 newExports["./" + subPath] = "./" + subPath;
16 }
17 deno.exports = Object.fromEntries(
18 Object.entries(newExports).sort(([a], [b]) => a.localeCompare(b)),
19 ) as typeof deno.exports;
20 await fs.writeFile(manifestPath, JSON.stringify(deno, null, 2));
21}
22
23export async function transpileForNpm(
24 absPath: string,
25 p: progress.Ref,
26 packageJson: Record<string, unknown>,
27) {
28 using node = p.start("transpile into js for npm");
29 const manifestPath = path.join(absPath, "deno.json");
30 const deno = JSON.parse(
31 await fs.readFile(manifestPath, "utf-8"),
32 );
33 const distPath = path.join(absPath, "dist-npm");
34 await fs.rm(distPath, { recursive: true, force: true });
35 await fs.mkdir(distPath, { recursive: true });
36
37 const files: string[] = [];
38 const exports: Record<string, string> = {};
39 for (const subPath of await fs.readdir(absPath, { recursive: true })) {
40 if (!subPath.match(/\.tsx?$/)) continue;
41 if (subPath.startsWith("dist")) continue;
42 files.push(subPath);
43 }
44 const tsFiles: string[] = [];
45 for (const subPath of files) {
46 using _ = node.start(subPath);
47 const targetSubPath = subPath.replace(/\.tsx?$/, ".js");
48 if (!subPath.match(/\.(test|sample)\.tsx?$/)) {
49 exports["./" + subPath] = "./" + targetSubPath;
50 }
51 const out = path.join(distPath, subPath);
52 await fs.mkdir(path.dirname(out), { recursive: true });
53 tsFiles.push(out);
54
55 let code = await fs.readFile(path.join(absPath, subPath), "utf-8");
56 code = code.replace(
57 / from "lib\/([^"]+)"/g,
58 (_, src) => {
59 return ' from "./' + path.relative(
60 path.dirname(subPath),
61 src.replace(/\.tsx?$/, ".js"),
62 ) + '"';
63 },
64 );
65 await fs.writeFile(out, code);
66 }
67 await subprocess.spawnAndWait({
68 cmd: [
69 "npx",
70 "tsc",
71 "--outdir",
72 distPath,
73 "--sourceMap",
74 "--declarationMap",
75 "--declaration",
76 "--module",
77 "nodenext",
78 "--lib",
79 "esnext",
80 "--skipLibCheck",
81 "--jsx",
82 "react-jsx",
83 "--jsxImportSource",
84 "./lib/dist-npm/render",
85 "--target",
86 "esnext",
87 "--isolatedModules",
88 "--verbatimModuleSyntax",
89 "--allowSyntheticDefaultImports",
90 "--moduleResolution",
91 "nodenext",
92 ...tsFiles,
93 ],
94 });
95 await fs.writeFile(
96 path.join(distPath, "readme.md"),
97 (await fs.readFile(path.join(absPath, "readme.md"), "utf-8")).replace(
98 "<!--%npm%-->\n",
99 await fs.readFile(path.join(absPath, "readme.npm.md"), "utf-8"),
100 ),
101 ).catch((e) => {
102 if (e.code !== "ENOENT") throw e;
103 });
104 await fs.cp(
105 path.join(absPath, "readme.changes.md"),
106 path.join(distPath, "readme.changes.md"),
107 ).catch((e) => {
108 if (e.code !== "ENOENT") throw e;
109 });
110 const { name, description, ...rest } = packageJson;
111 await fs.writeFile(
112 path.join(distPath, "package.json"),
113 JSON.stringify(
114 {
115 name,
116 description,
117 version: deno.version,
118 type: "module",
119 exports,
120 ...rest,
121 },
122 null,
123 2,
124 ),
125 );
126}
127
128// TODO: failed experiment
129//
130// export async function transpileForNpm(
131// absPath: string,
132// p: progress.Ref,
133// packageJson: Record<string, unknown>,
134// ) {
135// const { transpileFile } = await import("ts-to-jsdoc") as TsToJsdoc;
136//
137// using node = p.start("transpile into jsdoc for npm");
138// const manifestPath = path.join(absPath, "deno.json");
139// const deno = JSON.parse(
140// await fs.readFile(manifestPath, "utf-8"),
141// );
142// const distPath = path.join(absPath, "dist-npm");
143// await fs.rm(distPath, { recursive: true, force: true });
144// await fs.mkdir(distPath, { recursive: true });
145//
146// const files: string[] = [];
147// const exports: Record<string, string> = {};
148// for (const subPath of await fs.readdir(absPath, { recursive: true })) {
149// if (!subPath.match(/\.tsx?$/)) continue;
150// if (subPath.startsWith("dist")) continue;
151// files.push(subPath);
152// }
153// node.estimate = Object.keys(exports).length;
154// for (const subPath of files) {
155// using _ = node.start(subPath);
156// const targetSubPath = subPath.replace(/\.tsx?$/, ".js");
157// if (!subPath.match(/\.(test|sample)\.tsx?$/)) {
158// exports["./" + subPath] = "./" + targetSubPath;
159// }
160//
161// let code = transpileFile({
162// code: await fs.readFile(path.join(absPath, subPath), "utf-8"),
163// });
164// code = code.replace(
165// / from "lib\/([^"]+)"/g,
166// (_, src) => {
167// return ' from "./' + path.relative(
168// path.dirname(subPath),
169// src.replace(/\.tsx?$/, ".js"),
170// ) + '"';
171// },
172// );
173// if (packageJson.homepage) {
174// code =
175// "// This file is transpiled from TypeScript from paper clover's sitegen\n" +
176// "// " + packageJson.homepage + "/" + subPath + "\n" +
177// code;
178// }
179// const out = path.join(distPath, targetSubPath);
180// await fs.mkdir(path.dirname(out), { recursive: true });
181// await fs.writeFile(out, code);
182// node.value += 1;
183// }
184// await fs.cp(
185// path.join(absPath, "readme.npm.md"),
186// path.join(distPath, "readme.md"),
187// ).catch((e) => {
188// if (e.code !== "ENOENT") throw e;
189// });
190// await fs.cp(
191// path.join(absPath, "readme.changes.md"),
192// path.join(distPath, "readme.changes.md"),
193// ).catch((e) => {
194// if (e.code !== "ENOENT") throw e;
195// });
196// const { name, description, ...rest } = packageJson;
197// await fs.writeFile(
198// path.join(distPath, "package.json"),
199// JSON.stringify({
200// name,
201// description,
202// version: deno.version,
203// type: "module",
204// ...rest,
205// }),
206// );
207// }
208//
209export function main() {
210 const main = path.resolve("lib");
211 updateJsrPackageExportsToAll(main, progress)
212 .then(() =>
213 transpileForNpm(main, progress, {
214 name: "@paperclover/lib",
215 description: "high quality typescript libraries",
216 homepage:
217 "https://git.paperclover.net/clo/sitegen/src/branch/master/lib",
218 })
219 );
220}
221
222import * as progress from "lib/progress.ts";
223import * as path from "node:path";
224import * as fs from "node:fs/promises";
225import * as subprocess from "lib/subprocess.ts";
226import { UNWRAP } from "lib/assert.ts";
src/blog/blog.css created+204
...@@ -0,0 +1,204 @@
1:root {
2 --secondary: #a291ff;
3}
4main {
5 font-weight: 350;
6 color: #e9eaff;
7}
8h1, .description {
9 color: var(--primary);
10}
11h1 {
12 margin-bottom: 0.5rem;
13}
14p {
15 line-height: 1.6;
16}
17.description {
18 margin-top: 0.5rem;
19 margin-bottom: 0.5rem;
20 font-style: italic;
21}
22.tag-list {
23 display: flex;
24 gap: 0.5rem;
25 font-size: 80%;
26}
27.tag {
28 background-color: #0005;
29 border-radius: 8px;
30 padding: 0.35rem;
31 color: #fffc;
32 &.date {
33 color: var(--secondary);
34 }
35}
36hr {
37 margin: 1rem 0;
38 border: 2px solid var(--primary);
39}
40img {
41 width: 100%;
42 border-radius: 8px;
43}
44
45#toc {
46 background-color: #0003;
47 border-radius: 8px;
48 padding: 1rem;
49
50 h2 {
51 text-decoration: none;
52 margin: 0;
53 text-transform: uppercase;
54 font-weight: bold;
55 letter-spacing: 1px;
56 font-size: 0.8rem;
57 color: #fff8;
58 }
59 ul {
60 margin: 0;
61 }
62 li {
63 list-style-type: square;
64 &::marker {
65 color: var(--primary);
66 }
67 li {
68 --primary: var(--secondary);
69 }
70 }
71}
72
73h3 {
74 --primary: var(--secondary);
75}
76h2, h3 {
77 color: var(--primary);
78 text-decoration: underline;
79 text-decoration-color: var(--primary);
80 text-decoration-thickness: 2px;
81 text-underline-offset: 2px;
82 a.return {
83 display: inline-block;
84 font-size: 1rem;
85 margin-right: 0.1rem;
86 transform: translateY(-4px);
87 }
88}
89
90b {
91 color: var(--secondary);
92 &.server {
93 color: #ff7770;
94 }
95 &.client {
96 color: #ffcd70;
97 }
98}
99
100blockquote {
101 & > :first-child {
102 margin-top: 0;
103 }
104 & > :last-child {
105 margin-bottom: 0;
106 }
107 figure.code {
108 border: none;
109 pre {
110 padding: 0;
111 }
112 }
113 background-color: #0008;
114 border-radius: 8px;
115 padding: 1rem;
116 border-left: 4px solid var(--secondary);
117 border-top-left-radius: 0;
118 border-bottom-left-radius: 0;
119}
120
121code, kbd {
122 /* box-decoration-break: clone; */
123 border: 1px solid rgb(from var(--secondary) r g b / 0.8);
124 border-radius: 4px;
125 padding: 1px 5px;
126 background-color: #0008;
127}
128kbd {
129 /* box-decoration-break: clone; */
130 border-color: white;
131}
132a > code {
133 --secondary: var(--primary);
134}
135figure.code {
136 border: 4px solid var(--secondary);
137 background-color: lch(from var(--secondary) 4 2 h);
138
139 &:has(figcaption) {
140 border-top: none;
141 }
142
143 &.server {
144 --secondary: #ff7770;
145
146 .variable {
147 color: lch(from var(--secondary) 70 c calc(h + 50));
148 }
149 }
150 &.client {
151 --secondary: #ffcd70;
152
153 .variable {
154 color: lch(from var(--secondary) 70 c calc(h + 50));
155 }
156 }
157 figcaption {
158 padding: 0.5rem;
159 font-family: "rmo", monospace;
160 font-weight: bold;
161 color: black;
162 background-color: rgb(from var(--secondary) r g b / 100%);
163 }
164 pre {
165 padding: 0.5rem;
166 overflow-x: auto;
167 font-size: 95%;
168 }
169 pre > code {
170 border: unset;
171 border-radius: unset;
172 padding: unset;
173 background-color: unset;
174
175 color: lch(from var(--secondary) 90 10 h);
176
177 .keyword {
178 color: var(--secondary);
179 color: lch(from var(--secondary) l c h / 90%);
180 font-weight: bold;
181 }
182 .string {
183 color: lch(from var(--secondary) 90 90 calc(h + 20));
184 }
185 .constant {
186 color: lch(from var(--secondary) 90 90 calc(h - 10));
187 }
188 .method {
189 color: lch(from var(--secondary) 70 c calc(h + 20));
190 }
191 .builtin {
192 color: lch(from var(--secondary) 90 90 calc(h - 25));
193 }
194 .variable {
195 color: lch(from var(--secondary) 50 c calc(h + 50));
196 }
197 .comment {
198 color: lch(from var(--secondary) 90 40 h / 50%);
199 }
200 .property, .parameter {
201 color: lch(from var(--secondary) 90 calc(c - 20) h);
202 }
203 }
204}
src/blog/drafts/webdev/deranged-typescript.md created+87
...@@ -0,0 +1,87 @@
1- imports at the bottom
2 - order your file by importance.
3 - 'G' to jump to imports, etc
4 - prefer namespace imports
5 - easier to type and refactor. easier to read.
6- large files are okay
7 - all files are their own library
8 - split files up by making components modular, not by "oh it's too big"
9 - engine/render.ts is a standalone library, in order to split JSX, Suspense,
10 and Marko out, the main file was made modular.
11- lowercase
12- name objects ultra-concisely
13 - filenames are often one word describing what they contain
14 - avoid useless descriptors like "utils", "helpers", and "data"
15 - examples
16 - async.ts contains all the async library functions.
17 - watch.ts contains the file watcher and watch-reload mode.
18 - render.*, Io
19- be ultra-concise in comments
20- no "discarded" variables, embrace `void x`
21 - makes code more readable
22 - note how i want to write a lint for this
23 - note the one proposal i want about void
24- push the ts inference engine (as const, ReturnType, etc)
25 - reduces how much you repeat yourself making it easier to refactor things
26 - use the code as the source of truth
27- push the ts inference engine (generics)
28 - do not implement crazy things with the TS engine, instead use generic input
29 types, and then use regular control to narrow and transform the return type.
30 source of truth is your code.
31- UNWRAP, ASSERT utility globals are amazing
32 - ban postfix '!'
33 - stripped for production frontend builds
34- destructure often
35 - use the one example from work lol
36- package.json "imports" are amazing
37 - remapping
38 - implementation switching
39 - testing
40- embrace the web and node.js APIs
41 - sitegen relies on so many node features that bun and deno fail to run it.
42 - overlay modules are great
43- avoid dependencies
44 - once you build your own mini standard library you win
45 - talk about regrets with mdx
46
47## imports at the bottom
48
49Here is an abridged version of my website's `backend.ts`. When reading it from
50top to bottom it is immediately obvious that it is a Hono web server.
51
52```ts
53// This is the main file for paperclover.net's server.
54const app = new Hono();
55const logHttp = console.scoped("http", { color: "magenta" });
56
57// Middleware
58app.use(...);
59...
60
61// Backends
62app.route("", require("./q+a/backend.ts").app);
63...
64
65export default app;
66
67...
68
69import { type Context, Hono, type Next } from "#hono";
70import { logger } from "hono/logger";
71import { trimTrailingSlash } from "hono/trailing-slash";
72import * as assets from "#sitegen/assets";
73import * as admin from "./admin.ts";
74import * as console from "@paperclover/console";
75```
76
77Since `import`/`export` statements are hoisted like `var` and `function`, the
78position of these statements within the file does not matter. The imported
79modules have to be loaded first before this file can start. With this, I've
80found it nicer to sort the file by _importance_ rather than by arbitrary rules
81dictated by how C-style `#include`s worked.
82
83Start with a documentation comment, then the most important
84functions/variables/types, sort the file by importance. Imports are not really
85important since you very quickly get to know where common namespaces come from.
86And since they're at the bottom, you can just press `G` in Vim or `CMD+Down` on
87the Mac to scroll to the end of the file.
src/blog/drafts/webdev/marko-intro.markodown created+339
...@@ -0,0 +1,339 @@
1export const blog: BlogMeta = {
2 title: "Marko is the coziest HTML templating language",
3 desc: "...todo...",
4 created: "2025-06-13",
5 draft: true,
6};
7export const meta = formatBlogMeta(blob);
8export * as layout from "@/blog/layout.tsx";
9
10I've been recently playing around [Marko], and after adding limited support
11for it in my website generator, [sitegen], I instantly fell in love with how
12minimalistic it is in comparison to JSX, Astro components, and Svelte.
13
14[Marko]: https://next.markojs.com
15[sitegen]: https://paperclover.dev/clo/sitegen
16
17## Introduction to Marko
18
19If JSX was taking HTML and shoving its syntax into JavaScript, Marko is shoving
20JavaScript into HTML. Attributes are JavaScript expressions.
21
22```marko
23<div>
24 // `input` is like props, but given in the top-level scope
25 <time datetime=input.date.toISOString()>
26 // Interpolation with JS template string syntax
27 ${formatTimeNicely(input.date)}
28 </time>
29 <div>
30 <a href=`/users/${input.user.id}`>${input.user.name}</a>
31 </div>
32
33 // Capital letter variables for imported components
34 <MarkdownContent message=input.message />
35
36 // Components also can be auto-imported by lowercase.
37 // This will look upwards for a `tags/` folder containing
38 // "custom-footer.marko", similar to how Node.js finds
39 // package names in all upwards `node_modules` folders.
40 <custom-footer />
41</div>
42
43// ESM `import` / `export` just work as expected.
44// I prefer my imports at the end, to highlight the markup.
45import MarkdownContent from "./MarkdownContent.marko";
46import { formatTimeNicely } from "../date-helpers.ts";
47```
48
49Tags with the `value` attribute have a shorthand, which is used by the built-in
50`<if>` for conditional rendering.
51
52```marko
53// Sugar for <input value="string" />
54<input="string" />
55
56// and it composes amazingly to the 'if' built-in
57<if=input.user>
58 <UserProfile=input.user />
59</if>
60```
61
62Tags can also return values into the scope for use in the template using `/`, such as `<id>` for unique ID generation. This is available to components that `<return=output/>`.
63
64```
65<id/uniqueId />
66
67<input id=uniqueId type="checkbox" name="allow_trans_rights" />
68<label for=uniqueId>click me!</>
69// ^ oh, you can also omit the
70// closing tag name if you want.
71```
72
73It's important that I started with the two forms of "Tag I/O": `=` for input
74and `/` for output. With those building blocks, we introduce local variables
75with `const`
76
77```
78<const/rendered = markdownToHtml(input.value) />
79
80// This is how you insert raw HTML to the document
81<inline-html=rendered />
82
83// It supports all of the cozy destructuring syntax JS has
84<const/{ id, name } = user />
85```
86
87Unlike JSX, when you pass content within a tag (`input.content` instead of
88JSX's `children`), instead of it being a JSX element, it is actually a
89function. This means that the `for` tag can render the content multiple times.
90
91```
92<ul>
93 <for from=1 to=10>
94 // Renders a new random number for each iteration.
95 <li>${Math.random()}</li>
96 </>
97</ul>
98```
99
100Since `content` is a function, it can take arguments. This is done with `|`
101
102```
103<h1>my friends</h1>
104<ul>
105 // I tend to omit the closing tag names for the built-in control
106 // flow tags, but I keep them for HTML tags. It's kinda like how
107 // in JavaScript you just write `}` to close your `if`s and loops.
108 //
109 // Anyways <for> also has 'of'
110 <for|item| of=user.friends>
111 <li class="friend">${item.name}</li>
112 </>
113
114 // They support the same syntax JavaScript function params allows,
115 // so you can have destructuring here too, and multiple params.
116 <for|{ name }, index| of=user.friends>
117 // By the way you can also use emmet-style class and ID shorthands.
118 <li.friend>My #${index + 1} friend is ${name}</li>
119 </>
120</ul>
121```
122
123Instead of named slots, Marko has attribute tags. These are more powerful than
124slots since they are functions, and can also act as sugar for more complicated
125attributes.
126
127```
128<Layout title="Welcome">
129 <@header variant="big">
130 <h1>the next big thing</h1>
131 </@header>
132
133 <p>body text...</p>
134</Layout>
135
136// The `input` variable inside of <Layout /> is:
137//
138// {
139// title: "Welcome",
140// header: {
141// content: /* function rendering "<h1>the next big thing</h1>" */,
142// variant: "big",
143// },
144// content: /* function rendering "<p>body text</p>" */
145// }
146```
147
148This layout could be implemented as such:
149
150```marko
151<main>
152 <if=input.header />
153 <const/{ ...headerProps, content }=input.header />
154 <header ...headerProps>
155 // Instead of assigning to a variable with a capital letter,
156 // template interpolation works on tag names. This can also
157 // be a string to render the native HTML tag of that kind.
158 <${content} />
159 </header>
160 <hr />
161 </>
162
163 <${input.content} />
164</main>
165```
166
167The last syntax feature missing is calling a tag with parameters. That is done
168just like a regular function call, with '('.
169
170```
171<Something(item, index) />
172```
173
174In fact, attributes can just be sugar over this syntax. (this technically isn't
175true but it's close enough for the example)
176
177```
178<SpecialButton type="submit" class="red" />
179
180// is equal to
181
182<SpecialButton({ type: "submit", class: "red" }) />
183```
184
185All of the above is about how Marko's syntax works, and how it performs HTML
186generation with components. Marko also allows interactive components, but an
187explaination of that is beyond the scope of this page, mostly since I have not
188used it. A brief example of it, modified from their documentation.
189
190```marko
191// Reactive variables with <let/> just work...
192<let/basicCounter=0 />
193<button onClick() { basicCounter += 1 }>${basicCounter}</button>
194// ...but a counter is boring.
195
196<let/todos=[
197 { id: 0, text: "Learn Marko" },
198 { id: 1, text: "Make a Website" },
199]/>
200
201// 'by' is like React JSX's "key" property, but it's optional.
202<ul><for|todo, i| of=todos by=(todo => todo.id)>
203 <li.todo>
204 // this variable remains stable even if the list
205 // re-orders, because 'by' was specified.
206 <let/done=false/>
207 <label>
208 <span>${todo.text}</span>
209 // ':=' creates a two-way reactive binding,
210 // (it passes a callback for `checkedChanged`)
211 <input type="checkbox" checked:=done />
212 </label>
213 <button
214 title="delete"
215 disabled=!done
216 onClick() {
217 todos = todos.toSpliced(i, 1);
218 }
219 > &times; </button>
220 </li>
221</></ul>
222
223// Form example
224<let/nextId=2/>
225<form onSubmit(e) {
226 e.preventDefault();
227 todos = todos.concat({
228 id: nextId++,
229 // HTMLFormElement exposes all its named input
230 // elements as extra properties on the object.
231 text: e.target.text.value,
232 });
233 // And you can clear it with 'reset()'
234 e.target.reset();
235}>
236 // We don't 'onChange' like a React loser. The form
237 // value can be read in the submit event like normal.
238 <input name="text" placeholder="Another Item">
239 <button type="submit">Add</button>
240</form>
241```
242
243<SectionHeader updated="2025-08-11">Usage on `paperclover.net`</Section>
244
245Using Marko for HTML generation is quite easy. `.marko` files can be compiled
246into `.js` using the `@marko/compiler` library.
247
248```ts
249const src = fs.readFileSync("page.marko", "utf8");
250const compile = marko.compileSync(src, filepath);
251fs.writeFileSync("page.js", compile.code);
252
253const page = require("./page.js");
254console.info(page);
255
256import * as fs from "node:fs";
257import * as marko from "@marko/compiler";
258```
259
260To get client side JavaScript, an option can be passed to the Marko compiler to
261generate the client side code. While it is a big selling point of Marko, I do
262not use any of their client side features, instead deferring to manually-written
263frontend scripts. This is because that is how my website has been for years,
264statically generated. And for websites like mine that are content focused, this
265is the correct way to do things.
266
267Since I have a custom HTML generation library (built on JSX and some React-like
268patterns), I have written a simple integration for it to utilize Marko
269components, which is loaded by replacing the generated import to `marko/html`,
270which lets me overwrite functions like `createTemplate` (to change the signature
271of a component), `dynamicTag` (to allow Marko to render non-Marko components),
272and `fork` (to enable async integration with the rendering framework). An
273additional feature of this is I have a Node.js loader hook to allow importing
274these files directly.
275
276```tsx
277function Page() {
278 const q = Question.getByDate(new Date("2025-06-07 12:12 EST"));
279 return <div>
280 <h1>example question</h1>
281 <QuestionRender question={q} />
282 </div>;
283}
284
285// The synchronous render can be used because `Page` and `question.marko`
286// do not await any promises (SQLite runs synchronously)
287console.info(render.sync(<Page />).text);
288
289import * as render from "#engine/render";
290import QuestionRender from "@/q+a/tags/question.marko";
291import { Question } from "@/q+a/models/Question.ts";
292```
293
294Here is the `question.marko` tag used to render [questions on the clover q+a](/q+a).
295
296```marko
297// Renders a `Question` entry including its markdown body.
298export interface Input {
299 question: Question;
300 admin?: boolean;
301}
302
303// 2024-12-31 05:00:00 EST
304export const transitionDate = 1735639200000;
305
306<const/{ question, admin } = input />
307<const/{ id, date, text } = question/>
308
309<${"e-"}
310 f=(date > transitionDate ? true : undefined)
311 id=admin ? `q${id}` : undefined
312>
313 <if=admin>
314 <a
315 style="margin-right: 0.5rem"
316 href=`/admin/q+a/${id}`
317 >[EDIT]</a>
318 </>
319 <a>
320 <time
321 datetime=formatQuestionISOTimestamp(date)
322 >${formatQuestionTimestamp(date)}</time>
323 </a>
324
325 <CloverMarkdown ...{ text } />
326</>
327
328// this singleton script will make all the '<time>' tags clickable.
329client import "./clickable-links.client.ts";
330
331import type { Question } from "@/q+a/models/Question.ts";
332import { formatQuestionTimestamp, formatQuestionISOTimestamp } from "@/q+a/format.ts";
333import { CloverMarkdown } from "@/q+a/clover-markdown.tsx";
334```
335
336The integration is great, `client import` is quite a magical concept, and I've
337tuned it to do the expected thing in my framework.
338
339import { type BlogMeta, formatBlogMeta } from '@/blog/helpers.ts';
src/blog/helpers.ts deleted
src/blog/layout.tsx+31
...@@ -0,0 +1,31 @@...@@ -0,0 +1,31 @@
1import "./blog.css";
2
3export const theme = {
4 bg: "#271a30",
5 fg: "#ffffff",
6 primary: "#91ffc6",
7};
8
9export function Layout({ meta: { title, description }, date, tags, children }) {
10 return (
11 <>
12 <main>
13 <header>
14 {/* <a href="/blog">back to clover's garden</a> */}
15 <a href="/blog">back to the home page</a>
16
17 <h1>{title}</h1>
18 <p class="description">
19 <em>{description}</em>
20 </p>
21 <div class="tag-list">
22 <div class="tag date">{date}</div>
23 {tags.map((tag) => <div class="tag">{tag}</div>)}
24 </div>
25 <hr />
26 </header>
27 {children}
28 </main>
29 </>
30 );
31}
src/blog/pages/webdev/deranged-typescript.md deleted-87
...@@ -1,87 +0,0 @@
1- imports at the bottom
2 - order your file by importance.
3 - 'G' to jump to imports, etc
4 - prefer namespace imports
5 - easier to type and refactor. easier to read.
6- large files are okay
7 - all files are their own library
8 - split files up by making components modular, not by "oh it's too big"
9 - engine/render.ts is a standalone library, in order to split JSX, Suspense,
10 and Marko out, the main file was made modular.
11- lowercase
12- name objects ultra-concisely
13 - filenames are often one word describing what they contain
14 - avoid useless descriptors like "utils", "helpers", and "data"
15 - examples
16 - async.ts contains all the async library functions.
17 - watch.ts contains the file watcher and watch-reload mode.
18 - render.*, Io
19- be ultra-concise in comments
20- no "discarded" variables, embrace `void x`
21 - makes code more readable
22 - note how i want to write a lint for this
23 - note the one proposal i want about void
24- push the ts inference engine (as const, ReturnType, etc)
25 - reduces how much you repeat yourself making it easier to refactor things
26 - use the code as the source of truth
27- push the ts inference engine (generics)
28 - do not implement crazy things with the TS engine, instead use generic input
29 types, and then use regular control to narrow and transform the return type.
30 source of truth is your code.
31- UNWRAP, ASSERT utility globals are amazing
32 - ban postfix '!'
33 - stripped for production frontend builds
34- destructure often
35 - use the one example from work lol
36- package.json "imports" are amazing
37 - remapping
38 - implementation switching
39 - testing
40- embrace the web and node.js APIs
41 - sitegen relies on so many node features that bun and deno fail to run it.
42 - overlay modules are great
43- avoid dependencies
44 - once you build your own mini standard library you win
45 - talk about regrets with mdx
46
47## imports at the bottom
48
49Here is an abridged version of my website's `backend.ts`. When reading it from
50top to bottom it is immediately obvious that it is a Hono web server.
51
52```ts
53// This is the main file for paperclover.net's server.
54const app = new Hono();
55const logHttp = console.scoped("http", { color: "magenta" });
56
57// Middleware
58app.use(...);
59...
60
61// Backends
62app.route("", require("./q+a/backend.ts").app);
63...
64
65export default app;
66
67...
68
69import { type Context, Hono, type Next } from "#hono";
70import { logger } from "hono/logger";
71import { trimTrailingSlash } from "hono/trailing-slash";
72import * as assets from "#sitegen/assets";
73import * as admin from "./admin.ts";
74import * as console from "@paperclover/console";
75```
76
77Since `import`/`export` statements are hoisted like `var` and `function`, the
78position of these statements within the file does not matter. The imported
79modules have to be loaded first before this file can start. With this, I've
80found it nicer to sort the file by _importance_ rather than by arbitrary rules
81dictated by how C-style `#include`s worked.
82
83Start with a documentation comment, then the most important
84functions/variables/types, sort the file by importance. Imports are not really
85important since you very quickly get to know where common namespaces come from.
86And since they're at the bottom, you can just press `G` in Vim or `CMD+Down` on
87the Mac to scroll to the end of the file.
src/blog/pages/webdev/everyone-hates-nextjs.mdx created+831
...@@ -0,0 +1,831 @@
1import TableOfContents from "../../tags/table-of-contents.tsx";
2import Heading from "../../tags/heading.tsx";
3import { Layout } from "../../layout.tsx";
4export { theme } from "../../layout.tsx";
5
6export const meta = {
7 title: "Everyone Hates Next.js",
8 description: "A critique of React Server Components in Next.js 15,"
9 + " and how my company escaped it.",
10 keywords: ["webdev", "technical analysis", "opinion"],
11 authors: ["clover caruso"],
12 embed: {
13 thumbnail: "/open-graph/everyone-hates-nextjs.png"
14 },
15 canonical: "/blog/webdev/everyone-hates-nextjs"
16};
17
18<Layout
19 meta={meta}
20 date={'Oct 21st, 2025'}
21 slug="everyone-hates-nextjs"
22 tags={meta.keywords}
23>
24
25As I've been using [Next.js] professionally on my employer's web app, I find the
26core design of their App Router and [React Server Components] (RSC) to be
27extremely frustrating. And it's not small bugs or that the API is confusing,
28but large disagreements about the fundamental design decisions that Vercel and
29the React team made when building it.
30
31The more webdev events I go to, the more I see people who dislike Next.js, but
32still get stuck using it. By the end of this article, I will share how me and
33my colleagues escaped this hell, seamlessly migrating our entire frontend to
34[TanStack Start].
35
36[Next.js]: https://nextjs.org
37[React Server Components]: https://react.dev/reference/rsc/server-components
38
39<TableOfContents>
40
41- [A Technical Review, What are Server Components?][§1]
42- [Real-world Pitfalls of the App Router][§2]
43 - [Optimistic Updates are Impossible][§2.1]
44 - [Every Navigation is Another Fetch][§2.2]
45 - [Layouts are Artificially Restricted][§2.3]
46 - [You Still Download All the Content Twice][§2.4]
47 - [Turbopack Sucks][§2.5]
48- [Seamlessly Ditching Next.js and Vercel at Work][§3]
49 - [`next/metadata` is Great][§3.1]
50 - [`next/og` is Good Too][§3.2]
51- [My Experience Feels Like the Usual][§4]
52- [Prefer Tools that Respect You][§5]
53
54</TableOfContents>
55
56[§1]: #technical-review
57
58<Heading
59 level='h2'
60 slug='technical-review'
61>A Technical Review, What are Server Components?</Heading>
62
63The pitch of RSC is that components are put into two categories,
64<b class='server'>"server"</b> components and <b class='client'>"client"</b>
65components. Server components don't have `useState`, `useEffect`, but can be
66`async function`s and refer to backend tools like directly calling into a
67database. Client components are the existing
68model, where there is code on the backend to generate HTML text and frontend
69code to manage the DOM using `window.document.*`.
70
71> The first disaster: naming!! React is now using the words
72> <b class='server'>"server"</b> and <b class='client'>"client"</b> to refer to
73> a very specific things, ignoring their existing definitions. This would be
74> fine, except <b class='client'>Client</b> components can run on the backend
75> too! In this article, I'll be using the terms <b>"backend"</b> and
76> <b>"frontend"</b> to describe the two execution environments that web apps
77> exist in: a Node.js process and a Web browser, respectively.
78
79This <b class='server'>Server</b>/<b class='client'>Client</b> component model
80is interesting. Since built-ins like `<Suspense />` get serialized across the
81network, data fetching can be very trivially modeled with async <b
82class='server'>server components</b>, and the fallback UI works as if it were
83client-side.
84
85```tsx filename="src/app/[username]/page.tsx" tint="server"
86// For this article, server components will be highlighted in red
87export default async function Page({ params }) {
88 // Page params are given as a resolved promise
89 const { username } = await params;
90
91 // The components `UserInfo` and `UserPostList` will be run at the same
92 // time. Once `UserInfo` is ready, the visitor will see the page with a
93 // `PostListSkeleton` if the post list is not yet ready.
94 return <main>
95 <UserInfo username={username} />
96
97 <Suspense fallback={<PostListSkeleton />}>
98 <UserPostList username={username} />
99 </Suspense>
100 </main>
101}
102
103// Waterfalls are avoided by having multiple components, which
104// are all evaluated at the same time.
105
106async function UserInfo({ username }) {
107 const user = await fetchUserInfo(username);
108 return <>
109 <h1>{user.displayName}</h1>
110 {user.bio ? <Markdown content={user.bio} /> : ""}
111 </>
112}
113
114async function UserPostList({ username }) {
115 const posts = await fetchUserPostList(username);
116 return /* post list ui omitted for brevity */;
117}
118```
119
120If we ignore the 40kB gzipped bundle size of React itself, the above example
121has zero JavaScript for the UI and data fetching &mdash; it just streams the
122markup! For example, the imagined markdown parser within the `<Markdown />`
123component stays on the backend. When an interactive frontend is needed, <b class='client'>Client
124components</b> can be created by putting them in a file starting with `"use
125client"`.
126
127```tsx filename="src/components/CopyButton.tsx" tint="client"
128"use client"; // This comment marks the file for client-side bundling.
129
130export function CopyButton({ url }) {
131 return <>
132 <span>{url}</span>
133 <button onClick={() => {
134 const full = new URL(url, location.href);
135 navigator.clipboard.writeText(full.href);
136 // omitting error handling, success ui, styles
137 }}>copy</button>
138 </>
139}
140```
141```tsx filename="src/app/q+a/Card.tsx" tint="server"
142export function Card() {
143 return <article>
144 <header>
145 {/* Make the browser import the copy button */}
146 <CopyButton url="/q+a/2506010139" />
147 </header>
148 <p>
149 {/* Process markdown on the backend */}
150 <Markdown content=".........." />
151 </p>
152 </article>
153}
154```
155
156[§2]: #real-world-pitfalls
157
158<Heading
159 level='h2'
160 slug='real-world-pitfalls'
161>Real-world Pitfalls of the App Router</Heading>
162
163After quitting [Bun] as a runtime engineer (I implemented [Server Components
164bundling] and [a RSC template][bun-rsc] there), I joined a small company working on the
165front lines: a Next.js app with a Hono backend. The following notes are
166simplifications from the real world problems I've encountered when trying to
167maintain and develop new features. As a result of all of these, everyone's time
168is wasted either working around design flaws, or explaining to each other why
169what should be a non-issue is an immovable object.
170
171[Bun]: https://bun.com
172[Server Components bundling]: https://github.com/oven-sh/bun/blob/67f0c3e016aa479738469adac2b79a1862b88122/src/bake/bake.d.ts
173[bun-rsc]: https://github.com/oven-sh/bun/tree/e7790894d92b730758ecadf971cb935063508dfb/src/bake/bun-framework-react
174
175[§2.1]: #optimistic-updates
176
177<Heading
178 level='h3'
179 slug='optimistic-updates'
180>Optimistic Updates are Impossible</Heading>
181
182The Next.js documentation for performing mutations [does not mention optimistic
183updates][nextjs-updating-data]; it appears this case was not thought about.
184Components rendered by the <b class='server'>React Server</b>, by design, can
185not be modified after mounting. Elements that could change need to be inside a
186client component, but data fetching cannot happen on the client components,
187even during SSR on the backend. This results in awkwardly small server
188components that only do data fetching and then have a client component that
189contains a mostly-static version of the page.
190
191```tsx filename="src/app/user/[username]/page.tsx" tint="server"
192
193export default async function Page() {
194 const user = await fetchUserInfo(username);
195 return <ProfileLayout>
196 <UserProfile user={user} />
197 </ProfileLayout>;
198}
199```
200```tsx filename="src/app/user/[username]/UserProfile.tsx" tint="client"
201
202"use client"; // Must separate the client code into a second file!
203
204export function UserProfile({ user: initialUser }) {
205 // There are many great state management libraries out there;
206 // for simplicity, this example will use one state cell.
207 const [user, optimisticUpdateUser] = useState(initialUser);
208
209 async function onEdit(newUser) {
210 optimisticUpdateUser(newUser);
211 const resp = await fetch("...", {
212 method: 'POST',
213 body: JSON.stringify(newUser),
214 ... // (headers, credentials, tracing, and more)
215 })
216 if (!resp.ok) /* always remember to test for errors! */
217 }
218
219 return <main>{/* user interface with editable fields... */}</main>:
220}
221```
222
223As more of the page needs interactivity, it gets messier trying to keep the
224static parts truly server-side. On the work app, nearly every piece of UI
225displays some dynamic data. A [`WebSocket`][ws] synchronizes data live as it
226updates (for example, a user card's online state along with their basic
227profile). Since these component setups are harder to understand and maintain
228for engineers, almost all of our pages are entirely `"use client"` with a
229`page.tsx` that defines the data fetching.
230
231A more concrete example of what this looks like in practice with the
232data-fetching library we use at work, [TanStack Query].
233
234[TanStack Query]: https://github.com/tanstack/query#readme
235
236```ts filename="src/queries/users.ts"
237// At work, there is a helper function `defineQuery` for type safety.
238// Fetchers are trivial and can run on the backend or the frontend.
239export const queryUserInfo = (username) => ({
240 queryKey: ['user', username],
241 queryFn: async ({ ... }) => /* fetch data */
242});
243```
244```tsx filename="src/app/user/[username]/page.tsx" tint="server"
245export default async function Page({ params }) {
246 const { username } = await params;
247
248 // There's no global state in the React Server. Since layouts
249 // are executed in parallel, the TanStack `QueryClient` has to
250 // be reconstructed multiple times per route.
251 const queryClient = new QueryClient();
252 await queryClient.ensureQueryData(queryUserInfo(username));
253
254 // HydrationBoundary is a client component that passes JSON
255 // data from the React server to the client component.
256 return <HydrationBoundary state={dehydrate(queryClient)}>
257 <ClientPage />
258 </HydrationBoundary>;
259}
260```
261```tsx filename="src/app/user/[username]/ClientPage.tsx" tint="client"
262"use client";
263export function ClientPage() {
264 const { username } = useParams();
265 const { data: user } = useSuspenseQuery(queryUserInfo(username));
266
267 // ... some hooks
268
269 return <main>
270 {/* ... an interactive web page */}
271 </main>;
272}
273```
274
275This example has to be three separate files because of the rules of server
276component bundling. (The client component needs `"use client"`, and server
277component files often can't be imported on the client due to server-only
278imports.). In the Pages router, this could've been a single file because of the
279tree-shaking that `getStaticProps` and `getServerSideProps` has.
280
281[ws]: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
282[nextjs-updating-data]: https://nextjs.org/docs/app/getting-started/updating-data
283
284
285[§2.2]: #redundant-fetches
286
287<Heading
288 level='h3'
289 slug='redundant-fetches'
290>Every Navigation is Another Fetch</Heading>
291
292Since the App Router starts every page as a server component, with (ideally)
293small areas of interactivity, a navigation to a new page *has* to fetch the
294Next.js server, regardless of what data the client already has available! Even
295with a a `loading.tsx` file, opening `/`, navigating to `/other`, and then
296going back to `/` will show the loading state while it re-fetches the homepage.
297
298The only case this works is for **perfectly static content**, where instant
299navigations and prefetching work great. But **web apps are not static**, they
300have lots of dynamic content. Being logged in affects the homepage, which is
301infuriating because the client literally has everything needed to display the
302page instantly. It's not like the cookies changed.
303
304> **aside**: In further testing on a blank project, I observe cases where the
305> Next frontend code would pre-fetch routes, but **without any real contents**.
306> On the hello world example, this was a 1.8kB RSC payload that pointed to 2
307> different JS chunks 4 separate times. This is just pure waste of our
308> bandwidth and egress, especially considering all of this information is
309> re-fetched when I actually click the link.
310>
311> ```json whitespace="pre-wrap"
312> 1:"$Sreact.fragment"
313> 2:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
314> 3:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
315> 4:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"ViewportBoundary"]
316> 6:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"MetadataBoundary"]
317> 7:"$Sreact.suspense"
318> 0:{"b":"TdwnOXsfOJapNex_HjHGt","f":[["children","other",["other",{"children":["__PAGE__",{}]}],["other",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":null},[["$","div","l",{"children":"loading..."}],[],[]],false],["$","$1","h",{"children":[null,["$","$1","KCFxAJdIDH3BlYXAHsbcVv",{"children":[["$","$L4",null,{"children":"$L5"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],["$","$L6","KCFxAJdIDH3BlYXAHsbcVm",{"children":["$","div",null,{"hidden":true,"children":["$","$7",null,{"fallback":null,"children":"$L8"}]}]}]]}],false]],"S":false}
319> 5:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
320> 9:I[27201,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"IconMark"]
321> 8:[["$","title","0",{"children":"Create Next App"}],["$","meta","1",{"name":"description","content":"Generated by create next app"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0b3bf435.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L9","3",{}]]
322> ```
323>
324> In review, I found there is actually some content in here: the loading state.
325> Do you see it?
326>
327> ```json
328> ["$","div","l",{"children":"loading..."}]
329> ```
330>
331> It's still a lot of waste, since all of this data gets re-emitted in the
332> actual page RSC.
333
334The solution to this appears to be [`staleTime`][nextjs-stale], but it's marked
335experimental and "not recommended for production". The fact this is a
336non-default afterthought configuration option is embarassing. Even it we used
337it, you cannot make multiple pages that refer to the same underlying data share
338any of it.
339
340One form of loading state that cannot be represented with the App Router is
341having a page such as a page like a git project's issue page, and clicking on a
342user name to navigate to their profile page. With `loading.tsx`, the entire
343page is a skeleton, but when modeling these queries with TanStack Query it is
344possible to show the username and avatar instantly while the user's bio and
345repositories are fetched in. Server components don't support this form of
346navigation because the data is only available in rendered components, so it
347must be re-fetched.
348
349[nextjs-stale]: https://nextjs.org/docs/app/api-reference/config/next-config-js/staleTimes
350[nextjs-stale-bug]: https://github.com/vercel/next.js/issues/70661
351
352In our Next.js site, we have this line of code on our server component data
353fetchers to make soft navigations faster by skipping the data fetch phase all
354together.
355
356```tsx filename="src/util/tanstack-query-helpers.server.ts" tint="server"
357export function serverSidePrefetchQueries(queries) {
358 if ((await headers()).get("next-url")) {
359 // This is a soft-navigation. SKIP the prefetching to make it faster.
360 // The client might already have this data, and if not, they have the
361 // loading state. Ideally, this server request wouldn't exist -- The
362 // client side has nearly ALL the code since the app is written mostly
363 // as client components. Kind of a design flaw of the App router TBH.
364 return;
365 }
366 // ... data prefetching-logic ...
367}
368```
369
370In addition to this, `loading.tsx` should contain the `useQuery` calls so that
371while the network request for the empty RSC happens, the data is being fetched
372if it actually is needed. In fact, the `loading.tsx` state can just be the
373actual client component, and you'll see the client page.
374
375```tsx filename="src/app/user/[username]/loading.tsx" tint="client"
376"use client";
377export default function PageLoadingSkeleton() {
378 return <ClientPage />;
379}
380```
381
382> At work, we just make our `loading.tsx` files contain the `useQuery`
383> calls and show a skeleton. This is because when Next.js loads the actual Server
384> Component, no matter what, the entire page re-mounts. No VDOM diffing here,
385> meaning all hooks (`useState`) will reset slightly after the request
386> completes. I tried to reproduce a simple case where I was *begging* Next.js to
387> just *update the existing DOM* and preserve state, but it just doesn't.
388> Thankfully, the time the blank RSC call takes is short enough.
389
390[§2.3]: #layout-restrictions
391
392<Heading
393 level='h3'
394 slug='layout-restrictions'
395>Layouts are Artificially Restricted</Heading>
396
397Layouts can perform data fetching, but they can't observe or alter the request
398in any way. This is done so that Next.js can fetch and cache layouts whenever they
399wants. In every other framework, layouts are just regular components that have
400no feature difference compared to page components.
401
402Fetching layouts in isolation is a cute idea, but it ends up being silly
403because it also means that any data fetching has to be re-done per layout. You
404can't share a `QueryClient`; instead, you must rely on their [monkey-patched
405`fetch`][nextjs-fetch] to cache the same `GET` request like they promise.
406
407When a coworker asks me about why Next.js rejects some code, I've given up on
408explaining the technical intricacies and just say *"It's a Next.js Skill Issue,
409I'm going to blow it up soon don't worry."* These rules are too hard for normal
410developers to understand.
411
412[nextjs-fetch]: https://nextjs.org/docs/app/api-reference/functions/fetch
413
414[§2.4]: #rsc-payload
415
416<Heading
417 level='h3'
418 slug='rsc-payload'
419>You Still Download All the Content Twice</Heading>
420
421Unlike the ["Islands Architecture"][islands], Server Components still have to
422be hydrated on the frontend to support `Suspense` and preserving client
423component state. When doing soft navigations, the "RSC Payload" (which is not
424HTML at all) is retrieved by `fetch`. On a fresh reload, HTML is needed for the
425[first paint], but the information about Client components and `Suspense` is
426not contained within that HTML. React's solution is to **send a second copy of
427the entire page's markup**. An example of what a Next.js production server
428would send in a dynamic page render would be something like this:
429
430[first paint]: https://web.dev/articles/fcp
431
432```html filename="GET /user/clover"
433<!DOCTYPE html>
434<html>
435<head>
436 {link and meta tags}
437</head>
438<body>
439 {server side render}
440 <script>
441 // a bootstrap script that sets up global `__next_f` as
442 // an array. once React loads, this `.push` function
443 // gets overwritten to write new chunks directly to the
444 // RSC decoder. this script has some dom helpers too
445 (self.__next_f=self.__next_f||[]).push([0])
446 </script>
447 <script>
448 // the RSC payload for the application shell.
449 self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[658993,[\"/_next/st{...}"])
450 </script>
451
452 <!--
453 the closing </body> is NOT written yet, since there is a
454 suspense boundary not resolved. time passes, and only
455 then is more data is written
456 -->
457 <div class="user-post-list">
458 {server side render of a Suspense boundary}
459 </div>
460 <script>
461 // the RSC payload for the suspense boundary
462 self.__next_f.push([2,"14:[\"$\",\"div\",null,{\"children\":[[\"$\",\"h4\"{...}"])
463 </script>
464
465 <!-- HTML and script tags repeat until the entire page is done -->
466</body>
467</html>
468```
469
470This solution **doubles the size of the initial HTML payload**. Except it's
471worse, because the RSC payload includes JSON quoted in JS string literals, which
472format is much less efficient than HTML. While it seems to compress fine
473with brotli and render fast in the browser, this is wasteful. With the
474hydration pattern, at least the data locally could be re-used for interactivity
475and other pages.
476
477Even on pages that have little to no interactivity, you pay the cost. To use
478the Next.js documentation as an example, loading [its
479homepage](https://nextjs.org/docs) loads an page that is around 750kB (250kB of
480HTML and the 500kB of script tags), and content is in there twice.
481
482You can verify that by pressing <kbd>Cmd</kbd> + <kbd>Opt</kbd> + <kbd>u</kbd>
483on Mac or <kbd>Ctrl</kbd> + <kbd>u</kbd> on other platforms. And then
484<kbd>Cmd</kbd> / <kbd>Ctrl</kbd> + <kbd>f</kbd> to locate any string of the
485blog, such as "building full-stack web applications". It's there twice. And
486**there is no way around this**, since it's a fundamental piece of React Server
487Components.
488
489This RSC format certainly has more waste. But I really don't feel like digging into
490why the string `/_next/static/chunks/6192a3719cda7dcc.js` appears 27 separate
491times. What the hell, guys? Is your bandwidth free???
492
493[islands]: https://www.patterns.dev/vanilla/islands-architecture/
494
495[§2.5]: #turbopack
496
497<Heading
498 level='h3'
499 slug='turbopack'
500>Turbopack Sucks</Heading>
501
502This section is not constructive.
503
504- Turbopack isn't fast
505- Turbopack emits code that is hard to debug in a debugger (in development mode)
506- Turbopack throws bad error messages in many cases
507
508I wouldn't have given this point a section in the blog normally, but I want to
509point out three actual examples directly from the project.
510
511The first is a place where during some refactoring to satisfy the Server/Client
512component models, I accidentally made a Client component `async`. This one was
513quite anoying because it didn't say at all where the issue was, but only
514contained the <b class='server'>server</b> stack trace.
515
516![Next.js error](/file/2025/blog-everyone-hates-nextjs/asyncerror.png)
517
518Another case of a terrible error message:
519
520![Next.js error](/file/2025/blog-everyone-hates-nextjs/nexterror.png)
521
522> After fixing the underlying issue in this second error (which I cannot recall),
523> the Dev server hung and had to be restarted to recover.
524
525The final one is the dozen times I place a debugger breakpoint and the
526variable name `hello` gets turned into
527`__TURBOPACK__imported__module__$5b$project$5d2f$client$2f$src$2f$utils$2f$filename$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["hello"]`
528and other bullshit.
529
530Okay. This all sucks. What can we do?
531
532[§3]: #ditching-nextjs
533
534<Heading
535 level='h2'
536 slug='ditching-nextjs'
537>Seamlessly Ditching Next.js and Vercel at Work</Heading>
538
539There are two types of web projects:
540
541- A web site with mostly static content.
542- A web app with majorly dynamic and interactive components.
543
544And Next.js is the wrong tool for both of these jobs. If you're in the first
545category with a static web site, go for [Astro] or [Fresh]. For everyone who
546needs the full power of React, this section is about how I replaced the vendor
547locked Next with [TanStack Start], incrementally and seamlessly.
548
549[Astro]: https://astro.build/
550[Fresh]: https://fresh.deno.dev/
551[TanStack Start]: https://tanstack.com/start/latest
552
553It started with this Vite config.
554
555```ts filename="vite.config.ts"
556const config = defineConfig(({ mode }) => {
557 const env = loadEnv(mode, process.cwd(), "NEXT_PUBLIC_");
558 return {
559 // Use the Next.js default port 3000
560 server: { port: 3000 },
561 // Use the Next.js default env prefix "NEXT_PUBLIC_"
562 define: Object.fromEntries(Object.entries(env).map(
563 ([k, v]) => [`process.env.${k}`, JSON.stringify(v)])),
564 plugins: [
565 viteTsConfigPaths({ projects: ["./tsconfig.json"] }),
566 tailwindcss(),
567 // For ease of understanding from coworkers, I started porting
568 // the routes in `src/tanstack-routes`. When the migration was
569 // done, it would go back to the default `src/routes`.
570 tanstackStart({
571 router: { routesDirectory: "src/tanstack-routes" },
572 }),
573 viteReact(),
574 ],
575 resolve: {
576 // The key to the incremental migration: redirect `next` elsewhere
577 alias: { next: path.resolve("./src/tanstack-next/") },
578 conditions: ["tanstack"],
579 extensions: [
580 // Allow a file named like `utils/session.tanstack.ts` to
581 // override `utils/session.ts` when imported.
582 ".tanstack.tsx", ".tanstack.ts",
583 // Default import extensions
584 ".mjs", ".js", ".mts", ".ts",
585 ".jsx", ".tsx", ".json",
586 ],
587 },
588 };
589});
590```
591
592Then, I looked for every usage of a Next.js API, and either removed it or made
593a stub for TanStack. For example, `src/tanstack-next/link.tsx` implements
594`next/link`:
595
596```tsx filename="src/tanstack-next/link.tsx"
597import { Link } from "@tanstack/react-router";
598import type { LinkProps } from "next/link";
599
600export default function LinkAdapter({ href, ...rest }: LinkProps) {
601 return <Link {...rest} to={href as unknown as any} />;
602}
603```
604
605> Some of these stubs can be extremely simple. Starting out, my implementation
606> of `useRouter` was just `return {}`, but later I had to add a couple methods
607> to the object. The code here doesn't have to be clean, because it is
608> temporary.
609
610Now, the new site can import nearly every client component by either stubbing
611out the Next.js APIs it needs, or by using the `.tanstack.ts` extension to
612re-implement logic on a file-by-file basis. And shortly after, I got the site's
613homepage to work in TanStack Start, and we merged the branch.
614
615![My "nextgate" PR](/file/2025/blog-everyone-hates-nextjs/pr.png)
616
617> This first PR only supported one of our pages, and was able to do it in a
618> thousand lines of added code, and 40 lines deleted. I had previous patches to
619> remove the few uses of `next/image` and `next/font`.
620
621What was left was porting every other route over. The one thing we lose in
622migrating from Next.js to any other framework is the ability to `await`
623data-fetching functions in the UI. In practice, moving every route into a
624`loader` function made it much more clear what happened when a page was SSR'd.
625For pages that had multiple fetches, these could be combined into a single,
626special API call that would return all of the relevant data for that page.
627
628To re-iterate in bold font: <strong style='color:var(--secondary)'>The
629migration path from Server Components is to just simplify your code &mdash; RSC
630inherently drives you down a chaotic road of things you do not need</strong>.
631Nearly every complex part of our site got easier to understand for all
632engineers. The exception to this was having everyone get used to the new file
633system routing conventions. With enough examples, we all got the hang of it.
634
635With the incremental migration in place, new code did not break the existing
636deployment. TanStack slowly took over the codebase, and we eventually deleted
637all of the Next.js stubs and gained all of the beautiful [type-safety features]
638that the TanStack Router provides. At the end, the site performed faster from
639every angle: Development Mode, Production page load times, Soft navigations,
640and at a lower price than our Next depoyment with Vercel.
641
642[type-safety features]: https://tanstack.com/router/v1/docs/framework/react/guide/type-safety
643
644We're not the only ones seeing the change. While I try and keep myself off of
645social media, someone sent me [the results of Brian Anglin's work at
646Superwall][superwall-twitter], showing incredible CPU reductions on TanStack
647Start. I also recall ChatGPT switching from Next.js to Remix (random online
648chatter: [[1][chatgpt-1]] [[2][chatgpt-2]] [[3][chatgpt-3]]) a year ago.
649
650[superwall-twitter]: https://twitter.com/BriansAngles/status/1978834116079436242#m
651[chatgpt-1]: https://xcancel.com/ryanflorence/status/1831379475654947233
652[chatgpt-2]: https://old.reddit.com/r/reactjs/comments/1f97zgr/chatgpt_migrates_from_nextjs_to_remix
653[chatgpt-3]: https://old.reddit.com/r/nextjs/comments/1f92jdv/chatgptcom_switched_from_nextjs_to_remix
654
655[§3.1]: #next-metadata
656
657<Heading
658 level='h3'
659 slug='next-metadata'
660><code>next/metadata</code> is Great</Heading>
661
662In my opinion, this is one of the only good APIs Next.js has, and was the one
663place in our code where moving to TanStack made things harder to do. Instead of
664worsening the code, I just ported their metadata API into a regular function,
665so everyone can use it. Originally, I had a 1:1 port on NPM, but earlier this
666year I simplified it's API into one short and understandable
667file. As of this blog post, I have added a TanStack-compatible
668`meta.toTags` API, which can be installed from [JSR][lib-jsr], [NPM][lib-npm],
669or simply copied into your project.
670
671> **notice**: Due to time constraints with writing this article, the library
672> has not yet been updated. I'll probably get around to it by the end of this
673> week (Oct 24th). As a placeholder, I'm able to share the version that is used
674> at work to my website: [`meta.tanstack.ts`](https://paperclover.net/file/2025/blog-everyone-hates-nextjs/meta.tanstack.ts).
675
676```tsx
677// once in your project
678import * as meta from "@clo/lib/meta.ts";
679
680export const defineHead = meta.toTags.bind(null, {
681 // site-wide options
682 base: new URL("https://paperclover.net"),
683 titleTemplate: (title) => [title, "paper clover"]
684 .filter(Boolean).join(' | '),
685 // ...
686});
687
688// for each page...
689export const Route = createFileRoute("/blog")({
690 head: () =>
691 defineHead({
692 title: "clover's blog", // templated with `titleTemplate`
693 description: "a catgirl meows about her technology viewpoints",
694 canonical: "/blog", // joined with `base`
695
696 // When specified, configures Open Graph and Twitter embed,
697 // using the page title and description as the default.
698 // The defaults are good, but it supports more options.
699 embed: {},
700
701 // Every exotic meta tag is done with a JSX fragment. This
702 // doesn't render React, it just loops through the tags.
703 // My goal was to cover the most common 99% of uses.
704 extra: <>
705 <meta name="site-verification" content="waffles" />,
706 </>,
707 }),
708
709 component: Page,
710});
711
712function Page() {
713 ...
714}
715```
716
717My version wasn't concerned with covering the entire space of Next.js's metadata
718object, but instead uses inline JSX to fill that gap.
719
720[lib-jsr]: https://jsr.io/@clo/lib
721[lib-npm]: https://npmjs.com/@paperclover/lib
722
723[§3.2]: #vercel-og
724
725<Heading
726 level='h3'
727 slug='ditching-nextjs'
728><code>next/og</code> is Good Too</Heading>
729
730No strong opinions. I just want to remind everyone that the `@vercel/og` package exists.
731
732[§4]: #experience-feels-like-the-usual
733
734<Heading
735 level='h2'
736 slug='experience-feels-like-the-usual'
737>My Experience Feels like the Usual</Heading>
738
739At the Next.js Conf 2024, everyone there was raving about Server Components. I
740forget exactly who I talked to, but the big people were all in on this. I,
741having implemented the bundler end of RSC, saw a couple of the problems in the
742format. With Next 15 "stabilizing" the App Router last year, many companies are
743building their products on it, realizing these pitfalls first-hand.
744
745I came into the Next.js game late, only starting in June with version 15.
746But everyone I've talked to at events sympathize with my notes. All the people
747I talked to on the subject at Bun's 1.3 Party agreed with me. Even some people
748at Vercel told me they don't like how Next.js is to actually use.
749
750I hope as TanStack Start stabilizes, it becomes the Next.js replacement everyone
751wants.
752
753[§5]: #prefer-respectful-tools
754
755<Heading
756 level='h2'
757 slug='prefer-respectful-tools'
758>Prefer Tools that Respect You</Heading>
759
760A lot of in the JavaScript ecosystem is a mess. That mess is why web
761development gets made fun of. There were a lot of times I thought that working
762with the web was an unrecoverable mess, but the mess was actually just the
763commonly-used libraries I surrounded myself with. When that is peeled back,
764modern web development technologies are awesome.
765
766I've been making this website from scratch without any framework since late
7672024, by writing systems like my own [TUI progress widget][progress], [static
768file proxy][file-cache], incremental build system, and many more components.
769Working on this code has produced some of my best coding sessions (by
770happiness) in years. The viewers of *[paper clover]* get a better quality
771website; the mini-libraries I create get [extracted for public use][lib],
772everyone wins.
773
774This level of from-scratch is too much for most people, especially at the
775workplace. I say that at the minimum, we should only give our attention and
776money to high quality tools that respect us. And Next.js and the company behind
777it, Vercel, are not that.
778
779If you use Next.js, and feel that the experience doesn't remind you of respect
780too, consider whether you and your colleagues want to continue supporting their
781[serverless empire]. The Vite ecosystem seems pretty decent to build on right
782now, but I still have little experience in using their tools at scale in
783production. The [Vite+ launch from Void0][vite-plus] seems interesting, but
784only time will tell if these venture-funded tools will respect us (end-users
785and developers) long term.
786
787Next.js Conf 2025, as of writing, is [tomorrow][next-conf]. Instead of
788purchasing a $800 ticket, I decided to put that money [toward the TanStack
789team][tanstack-donate] for [respecting and improving the web development
790ecosystem][tanstack-ethos].
791
792[paper clover]: https://paperclover.net/
793[lib]: https://git.paperclover.net/clo/sitegen/src/branch/master/lib#readme
794[progress]: https://git.paperclover.net/clo/sitegen/src/branch/master/lib/progress.ts
795[file-cache]: https://git.paperclover.net/clo/sitegen/src/branch/master/src/file-viewer/cache.ts
796
797[next-conf]: https://nextjs.org/conf
798[vite-plus]: https://viteplus.dev/
799[tanstack-ethos]: https://tanstack.com/ethos
800[tanstack-donate]: https://github.com/sponsors/tannerlinsley
801[serverless empire]: https://youtu.be/SCIfWhAheVw
802
803## What the Future Holds
804
805Slowly, I've been replacing many pieces of software that disrespect me with
806better alternatives. Some examples of this are GitHub, Visual Studio Code,
807DaVinci Resolve, Discord, Google Drive/Workspace, along many more. I plan to
808write more on this blog about the technical things I do (that progress library,
809the purpose of my own site generator, learnings from my current job), including
810some of my past projects at Bun (details on HMR, the crash reporter, and the
811crazy system for bundling built-in modules). If it interests you, please
812subscribe to the email list:
813
814<a href="mailto:subscribe@paperclover.net?subject=paper%20clover%20mailing%20list&body=I%20would%20like%20to%20be%20subscribed%20to%20the%20following%20mailing%20lists%3A%0A%0A-%20Technical%20Blog%20Posts%20-%20YES%0A-%20Art%20(Original%20Music%2FVideo)%20-%20YES%0A%0A(feel%20free%20to%20write%20whatever%20else%20you%20want)">click here to send an email to <code>subscribe@paperclover.net</code>, requesting that you would like to be added to the mailing list.</a> (i manage this mailing list manually)
815
816[back to top](#top) &mdash; [ask a question about this article](/q+a)
817
818<br />
819<br />
820<br />
821<br />
822<br />
823<br />
824<footer>
8252025 (c) paper clover
826</footer>
827
828</Layout>
829
830<br />
831
src/blog/pages/webdev/marko-intro.markodown deleted-339
...@@ -1,339 +0,0 @@
1export const blog: BlogMeta = {
2 title: "Marko is the coziest HTML templating language",
3 desc: "...todo...",
4 created: "2025-06-13",
5 draft: true,
6};
7export const meta = formatBlogMeta(blob);
8export * as layout from "@/blog/layout.tsx";
9
10I've been recently playing around [Marko], and after adding limited support
11for it in my website generator, [sitegen], I instantly fell in love with how
12minimalistic it is in comparison to JSX, Astro components, and Svelte.
13
14[Marko]: https://next.markojs.com
15[sitegen]: https://paperclover.dev/clo/sitegen
16
17## Introduction to Marko
18
19If JSX was taking HTML and shoving its syntax into JavaScript, Marko is shoving
20JavaScript into HTML. Attributes are JavaScript expressions.
21
22```marko
23<div>
24 // `input` is like props, but given in the top-level scope
25 <time datetime=input.date.toISOString()>
26 // Interpolation with JS template string syntax
27 ${formatTimeNicely(input.date)}
28 </time>
29 <div>
30 <a href=`/users/${input.user.id}`>${input.user.name}</a>
31 </div>
32
33 // Capital letter variables for imported components
34 <MarkdownContent message=input.message />
35
36 // Components also can be auto-imported by lowercase.
37 // This will look upwards for a `tags/` folder containing
38 // "custom-footer.marko", similar to how Node.js finds
39 // package names in all upwards `node_modules` folders.
40 <custom-footer />
41</div>
42
43// ESM `import` / `export` just work as expected.
44// I prefer my imports at the end, to highlight the markup.
45import MarkdownContent from "./MarkdownContent.marko";
46import { formatTimeNicely } from "../date-helpers.ts";
47```
48
49Tags with the `value` attribute have a shorthand, which is used by the built-in
50`<if>` for conditional rendering.
51
52```marko
53// Sugar for <input value="string" />
54<input="string" />
55
56// and it composes amazingly to the 'if' built-in
57<if=input.user>
58 <UserProfile=input.user />
59</if>
60```
61
62Tags can also return values into the scope for use in the template using `/`, such as `<id>` for unique ID generation. This is available to components that `<return=output/>`.
63
64```
65<id/uniqueId />
66
67<input id=uniqueId type="checkbox" name="allow_trans_rights" />
68<label for=uniqueId>click me!</>
69// ^ oh, you can also omit the
70// closing tag name if you want.
71```
72
73It's important that I started with the two forms of "Tag I/O": `=` for input
74and `/` for output. With those building blocks, we introduce local variables
75with `const`
76
77```
78<const/rendered = markdownToHtml(input.value) />
79
80// This is how you insert raw HTML to the document
81<inline-html=rendered />
82
83// It supports all of the cozy destructuring syntax JS has
84<const/{ id, name } = user />
85```
86
87Unlike JSX, when you pass content within a tag (`input.content` instead of
88JSX's `children`), instead of it being a JSX element, it is actually a
89function. This means that the `for` tag can render the content multiple times.
90
91```
92<ul>
93 <for from=1 to=10>
94 // Renders a new random number for each iteration.
95 <li>${Math.random()}</li>
96 </>
97</ul>
98```
99
100Since `content` is a function, it can take arguments. This is done with `|`
101
102```
103<h1>my friends</h1>
104<ul>
105 // I tend to omit the closing tag names for the built-in control
106 // flow tags, but I keep them for HTML tags. It's kinda like how
107 // in JavaScript you just write `}` to close your `if`s and loops.
108 //
109 // Anyways <for> also has 'of'
110 <for|item| of=user.friends>
111 <li class="friend">${item.name}</li>
112 </>
113
114 // They support the same syntax JavaScript function params allows,
115 // so you can have destructuring here too, and multiple params.
116 <for|{ name }, index| of=user.friends>
117 // By the way you can also use emmet-style class and ID shorthands.
118 <li.friend>My #${index + 1} friend is ${name}</li>
119 </>
120</ul>
121```
122
123Instead of named slots, Marko has attribute tags. These are more powerful than
124slots since they are functions, and can also act as sugar for more complicated
125attributes.
126
127```
128<Layout title="Welcome">
129 <@header variant="big">
130 <h1>the next big thing</h1>
131 </@header>
132
133 <p>body text...</p>
134</Layout>
135
136// The `input` variable inside of <Layout /> is:
137//
138// {
139// title: "Welcome",
140// header: {
141// content: /* function rendering "<h1>the next big thing</h1>" */,
142// variant: "big",
143// },
144// content: /* function rendering "<p>body text</p>" */
145// }
146```
147
148This layout could be implemented as such:
149
150```marko
151<main>
152 <if=input.header />
153 <const/{ ...headerProps, content }=input.header />
154 <header ...headerProps>
155 // Instead of assigning to a variable with a capital letter,
156 // template interpolation works on tag names. This can also
157 // be a string to render the native HTML tag of that kind.
158 <${content} />
159 </header>
160 <hr />
161 </>
162
163 <${input.content} />
164</main>
165```
166
167The last syntax feature missing is calling a tag with parameters. That is done
168just like a regular function call, with '('.
169
170```
171<Something(item, index) />
172```
173
174In fact, attributes can just be sugar over this syntax. (this technically isn't
175true but it's close enough for the example)
176
177```
178<SpecialButton type="submit" class="red" />
179
180// is equal to
181
182<SpecialButton({ type: "submit", class: "red" }) />
183```
184
185All of the above is about how Marko's syntax works, and how it performs HTML
186generation with components. Marko also allows interactive components, but an
187explaination of that is beyond the scope of this page, mostly since I have not
188used it. A brief example of it, modified from their documentation.
189
190```marko
191// Reactive variables with <let/> just work...
192<let/basicCounter=0 />
193<button onClick() { basicCounter += 1 }>${basicCounter}</button>
194// ...but a counter is boring.
195
196<let/todos=[
197 { id: 0, text: "Learn Marko" },
198 { id: 1, text: "Make a Website" },
199]/>
200
201// 'by' is like React JSX's "key" property, but it's optional.
202<ul><for|todo, i| of=todos by=(todo => todo.id)>
203 <li.todo>
204 // this variable remains stable even if the list
205 // re-orders, because 'by' was specified.
206 <let/done=false/>
207 <label>
208 <span>${todo.text}</span>
209 // ':=' creates a two-way reactive binding,
210 // (it passes a callback for `checkedChanged`)
211 <input type="checkbox" checked:=done />
212 </label>
213 <button
214 title="delete"
215 disabled=!done
216 onClick() {
217 todos = todos.toSpliced(i, 1);
218 }
219 > &times; </button>
220 </li>
221</></ul>
222
223// Form example
224<let/nextId=2/>
225<form onSubmit(e) {
226 e.preventDefault();
227 todos = todos.concat({
228 id: nextId++,
229 // HTMLFormElement exposes all its named input
230 // elements as extra properties on the object.
231 text: e.target.text.value,
232 });
233 // And you can clear it with 'reset()'
234 e.target.reset();
235}>
236 // We don't 'onChange' like a React loser. The form
237 // value can be read in the submit event like normal.
238 <input name="text" placeholder="Another Item">
239 <button type="submit">Add</button>
240</form>
241```
242
243<SectionHeader updated="2025-08-11">Usage on `paperclover.net`</Section>
244
245Using Marko for HTML generation is quite easy. `.marko` files can be compiled
246into `.js` using the `@marko/compiler` library.
247
248```ts
249const src = fs.readFileSync("page.marko", "utf8");
250const compile = marko.compileSync(src, filepath);
251fs.writeFileSync("page.js", compile.code);
252
253const page = require("./page.js");
254console.info(page);
255
256import * as fs from "node:fs";
257import * as marko from "@marko/compiler";
258```
259
260To get client side JavaScript, an option can be passed to the Marko compiler to
261generate the client side code. While it is a big selling point of Marko, I do
262not use any of their client side features, instead deferring to manually-written
263frontend scripts. This is because that is how my website has been for years,
264statically generated. And for websites like mine that are content focused, this
265is the correct way to do things.
266
267Since I have a custom HTML generation library (built on JSX and some React-like
268patterns), I have written a simple integration for it to utilize Marko
269components, which is loaded by replacing the generated import to `marko/html`,
270which lets me overwrite functions like `createTemplate` (to change the signature
271of a component), `dynamicTag` (to allow Marko to render non-Marko components),
272and `fork` (to enable async integration with the rendering framework). An
273additional feature of this is I have a Node.js loader hook to allow importing
274these files directly.
275
276```tsx
277function Page() {
278 const q = Question.getByDate(new Date("2025-06-07 12:12 EST"));
279 return <div>
280 <h1>example question</h1>
281 <QuestionRender question={q} />
282 </div>;
283}
284
285// The synchronous render can be used because `Page` and `question.marko`
286// do not await any promises (SQLite runs synchronously)
287console.info(render.sync(<Page />).text);
288
289import * as render from "#engine/render";
290import QuestionRender from "@/q+a/tags/question.marko";
291import { Question } from "@/q+a/models/Question.ts";
292```
293
294Here is the `question.marko` tag used to render [questions on the clover q+a](/q+a).
295
296```marko
297// Renders a `Question` entry including its markdown body.
298export interface Input {
299 question: Question;
300 admin?: boolean;
301}
302
303// 2024-12-31 05:00:00 EST
304export const transitionDate = 1735639200000;
305
306<const/{ question, admin } = input />
307<const/{ id, date, text } = question/>
308
309<${"e-"}
310 f=(date > transitionDate ? true : undefined)
311 id=admin ? `q${id}` : undefined
312>
313 <if=admin>
314 <a
315 style="margin-right: 0.5rem"
316 href=`/admin/q+a/${id}`
317 >[EDIT]</a>
318 </>
319 <a>
320 <time
321 datetime=formatQuestionISOTimestamp(date)
322 >${formatQuestionTimestamp(date)}</time>
323 </a>
324
325 <CloverMarkdown ...{ text } />
326</>
327
328// this singleton script will make all the '<time>' tags clickable.
329client import "./clickable-links.client.ts";
330
331import type { Question } from "@/q+a/models/Question.ts";
332import { formatQuestionTimestamp, formatQuestionISOTimestamp } from "@/q+a/format.ts";
333import { CloverMarkdown } from "@/q+a/clover-markdown.tsx";
334```
335
336The integration is great, `client import` is quite a magical concept, and I've
337tuned it to do the expected thing in my framework.
338
339import { type BlogMeta, formatBlogMeta } from '@/blog/helpers.ts';
src/blog/tags/heading.tsx created+10
...@@ -0,0 +1,10 @@
1export default function ({ level: Level, slug, children }) {
2 return (
3 <>
4 <Level id={slug}>
5 <a class="return" href="#toc">§</a>
6 {children}
7 </Level>
8 </>
9 );
10}
src/blog/tags/table-of-contents.tsx created+8
...@@ -0,0 +1,8 @@
1export default function ({ children }) {
2 return (
3 <div id="toc">
4 <h2>Contents:</h2>
5 {children}
6 </div>
7 );
8}
src/deploy.ts deleted-61
...@@ -1,61 +0,0 @@
1export async function main() {
2 await rsync.spawn({
3 cwd: Path.resolve(import.meta.dirname).parent!.toString(),
4 args: [
5 "-a",
6 "--progress",
7 "clo@zenith:/mnt/storage1/clover/Documents/Config/paperclover/cache.sqlite",
8 ".clover/",
9 ],
10 progress: progress.start("download file cache"),
11 });
12 await rsync.spawn({
13 cwd: Path.resolve(import.meta.dirname).parent!.toString(),
14 args: [
15 "-a",
16 "--progress",
17 "clo@paperclover.net:~/paperclover.net/.clover/questions.sqlite",
18 ".clover/",
19 ],
20 progress: progress.start("download questions state"),
21 });
22
23 // cannot call incr.restore until database calls are
24 // considered in the watch graph.
25 // await incr.restore()
26 await incr.compile(generate);
27
28 await rsync.spawn({
29 cwd: Path.resolve(import.meta.dirname).parent!.toString(),
30 args: [
31 "-a",
32 "-r",
33 "--progress",
34 "--delete",
35 "--exclude=node_modules",
36 "--exclude=.clover",
37 "package.json",
38 "package-lock.json",
39 ".clover/o/",
40 "paperclover.net:~/paperclover.net/",
41 ],
42 progress: progress.start("copy site files"),
43 });
44 await subprocess.spawnAndWait({
45 stdio: "inherit",
46 cmd: [
47 "ssh",
48 "paperclover.net",
49 "cd paperclover.net && " +
50 "npm i &&" +
51 "pm2 restart site",
52 ],
53 });
54}
55
56import * as incr from "../framework/incremental.ts";
57import { generate } from "../framework/generate.ts";
58import * as progress from "lib/progress.ts";
59import * as subprocess from "lib/subprocess.ts";
60import * as rsync from "./file-viewer/rsync.ts";
61import { Path } from "#sitegen/path";
src/file-viewer/highlight-grammar/html.plist created+4215
...@@ -0,0 +1,4215 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>html</string>
8 <string>htm</string>
9 <string>shtml</string>
10 <string>xhtml</string>
11 <string>inc</string>
12 <string>tmpl</string>
13 <string>tpl</string>
14 </array>
15 <key>firstLineMatch</key>
16 <string>&lt;(?i:(!DOCTYPE\s*)?html)</string>
17 <key>injections</key>
18 <dict>
19 <key>R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)</key>
20 <dict>
21 <key>comment</key>
22 <string>Uses R: to ensure this matches after any other injections.</string>
23 <key>patterns</key>
24 <array>
25 <dict>
26 <key>match</key>
27 <string>&lt;</string>
28 <key>name</key>
29 <string>invalid.illegal.bad-angle-bracket.html</string>
30 </dict>
31 </array>
32 </dict>
33 </dict>
34 <key>keyEquivalent</key>
35 <string>^~H</string>
36 <key>name</key>
37 <string>HTML</string>
38 <key>patterns</key>
39 <array>
40 <dict>
41 <key>include</key>
42 <string>#xml-processing</string>
43 </dict>
44 <dict>
45 <key>include</key>
46 <string>#comment</string>
47 </dict>
48 <dict>
49 <key>include</key>
50 <string>#doctype</string>
51 </dict>
52 <dict>
53 <key>include</key>
54 <string>#cdata</string>
55 </dict>
56 <dict>
57 <key>include</key>
58 <string>#tags-valid</string>
59 </dict>
60 <dict>
61 <key>include</key>
62 <string>#tags-invalid</string>
63 </dict>
64 <dict>
65 <key>include</key>
66 <string>#entities</string>
67 </dict>
68 </array>
69 <key>repository</key>
70 <dict>
71 <key>attribute</key>
72 <dict>
73 <key>patterns</key>
74 <array>
75 <dict>
76 <key>begin</key>
77 <string>(s(hape|cope|t(ep|art)|ize(s)?|p(ellcheck|an)|elected|lot|andbox|rc(set|doc|lang)?)|h(ttp-equiv|i(dden|gh)|e(ight|aders)|ref(lang)?)|n(o(nce|validate|module)|ame)|c(h(ecked|arset)|ite|o(nt(ent(editable)?|rols)|ords|l(s(pan)?|or))|lass|rossorigin)|t(ype(mustmatch)?|itle|a(rget|bindex)|ranslate)|i(s(map)?|n(tegrity|putmode)|tem(scope|type|id|prop|ref)|d)|op(timum|en)|d(i(sabled|r(name)?)|ownload|e(coding|f(er|ault))|at(etime|a)|raggable)|usemap|p(ing|oster|la(ysinline|ceholder)|attern|reload)|enctype|value|kind|for(m(novalidate|target|enctype|action|method)?)?|w(idth|rap)|l(ist|o(op|w)|a(ng|bel))|a(s(ync)?|c(ce(sskey|pt(-charset)?)|tion)|uto(c(omplete|apitalize)|play|focus)|l(t|low(usermedia|paymentrequest|fullscreen))|bbr)|r(ows(pan)?|e(versed|quired|ferrerpolicy|l|adonly))|m(in(length)?|u(ted|ltiple)|e(thod|dia)|a(nifest|x(length)?)))(?![\w:-])</string>
78 <key>beginCaptures</key>
79 <dict>
80 <key>0</key>
81 <dict>
82 <key>name</key>
83 <string>entity.other.attribute-name.html</string>
84 </dict>
85 </dict>
86 <key>comment</key>
87 <string>HTML5 attributes, not event handlers</string>
88 <key>end</key>
89 <string>(?=\s*+[^=\s])</string>
90 <key>name</key>
91 <string>meta.attribute.$1.html</string>
92 <key>patterns</key>
93 <array>
94 <dict>
95 <key>include</key>
96 <string>#attribute-interior</string>
97 </dict>
98 </array>
99 </dict>
100 <dict>
101 <key>begin</key>
102 <string>style(?![\w:-])</string>
103 <key>beginCaptures</key>
104 <dict>
105 <key>0</key>
106 <dict>
107 <key>name</key>
108 <string>entity.other.attribute-name.html</string>
109 </dict>
110 </dict>
111 <key>comment</key>
112 <string>HTML5 style attribute</string>
113 <key>end</key>
114 <string>(?=\s*+[^=\s])</string>
115 <key>name</key>
116 <string>meta.attribute.style.html</string>
117 <key>patterns</key>
118 <array>
119 <dict>
120 <key>begin</key>
121 <string>=</string>
122 <key>beginCaptures</key>
123 <dict>
124 <key>0</key>
125 <dict>
126 <key>name</key>
127 <string>punctuation.separator.key-value.html</string>
128 </dict>
129 </dict>
130 <key>end</key>
131 <string>(?&lt;=[^\s=])(?!\s*=)|(?=/?&gt;)</string>
132 <key>patterns</key>
133 <array>
134 <dict>
135 <key>begin</key>
136 <string>(?=[^\s=&lt;&gt;`/]|/(?!&gt;))</string>
137 <key>end</key>
138 <string>(?!\G)</string>
139 <key>name</key>
140 <string>meta.embedded.line.css</string>
141 <key>patterns</key>
142 <array>
143 <dict>
144 <key>captures</key>
145 <dict>
146 <key>0</key>
147 <dict>
148 <key>name</key>
149 <string>source.css</string>
150 </dict>
151 </dict>
152 <key>match</key>
153 <string>([^\s"'=&lt;&gt;`/]|/(?!&gt;))+</string>
154 <key>name</key>
155 <string>string.unquoted.html</string>
156 </dict>
157 <dict>
158 <key>begin</key>
159 <string>"</string>
160 <key>beginCaptures</key>
161 <dict>
162 <key>0</key>
163 <dict>
164 <key>name</key>
165 <string>punctuation.definition.string.begin.html</string>
166 </dict>
167 </dict>
168 <key>contentName</key>
169 <string>source.css</string>
170 <key>end</key>
171 <string>(")</string>
172 <key>endCaptures</key>
173 <dict>
174 <key>0</key>
175 <dict>
176 <key>name</key>
177 <string>punctuation.definition.string.end.html</string>
178 </dict>
179 <key>1</key>
180 <dict>
181 <key>name</key>
182 <string>source.css</string>
183 </dict>
184 </dict>
185 <key>name</key>
186 <string>string.quoted.double.html</string>
187 <key>patterns</key>
188 <array>
189 <dict>
190 <key>include</key>
191 <string>#entities</string>
192 </dict>
193 </array>
194 </dict>
195 <dict>
196 <key>begin</key>
197 <string>'</string>
198 <key>beginCaptures</key>
199 <dict>
200 <key>0</key>
201 <dict>
202 <key>name</key>
203 <string>punctuation.definition.string.begin.html</string>
204 </dict>
205 </dict>
206 <key>contentName</key>
207 <string>source.css</string>
208 <key>end</key>
209 <string>(')</string>
210 <key>endCaptures</key>
211 <dict>
212 <key>0</key>
213 <dict>
214 <key>name</key>
215 <string>punctuation.definition.string.end.html</string>
216 </dict>
217 <key>1</key>
218 <dict>
219 <key>name</key>
220 <string>source.css</string>
221 </dict>
222 </dict>
223 <key>name</key>
224 <string>string.quoted.single.html</string>
225 <key>patterns</key>
226 <array>
227 <dict>
228 <key>include</key>
229 <string>#entities</string>
230 </dict>
231 </array>
232 </dict>
233 </array>
234 </dict>
235 <dict>
236 <key>match</key>
237 <string>=</string>
238 <key>name</key>
239 <string>invalid.illegal.unexpected-equals-sign.html</string>
240 </dict>
241 </array>
242 </dict>
243 </array>
244 </dict>
245 <dict>
246 <key>begin</key>
247 <string>on(s(croll|t(orage|alled)|u(spend|bmit)|e(curitypolicyviolation|ek(ing|ed)|lect))|hashchange|c(hange|o(ntextmenu|py)|u(t|echange)|l(ick|ose)|an(cel|play(through)?))|t(imeupdate|oggle)|in(put|valid)|o(nline|ffline)|d(urationchange|r(op|ag(start|over|e(n(ter|d)|xit)|leave)?)|blclick)|un(handledrejection|load)|p(opstate|lay(ing)?|a(ste|use|ge(show|hide))|rogress)|e(nded|rror|mptied)|volumechange|key(down|up|press)|focus|w(heel|aiting)|l(oad(start|e(nd|d(data|metadata)))?|anguagechange)|a(uxclick|fterprint|bort)|r(e(s(ize|et)|jectionhandled)|atechange)|m(ouse(o(ut|ver)|down|up|enter|leave|move)|essage(error)?)|b(efore(unload|print)|lur))(?![\w:-])</string>
248 <key>beginCaptures</key>
249 <dict>
250 <key>0</key>
251 <dict>
252 <key>name</key>
253 <string>entity.other.attribute-name.html</string>
254 </dict>
255 </dict>
256 <key>comment</key>
257 <string>HTML5 attributes, event handlers</string>
258 <key>end</key>
259 <string>(?=\s*+[^=\s])</string>
260 <key>name</key>
261 <string>meta.attribute.event-handler.$1.html</string>
262 <key>patterns</key>
263 <array>
264 <dict>
265 <key>begin</key>
266 <string>=</string>
267 <key>beginCaptures</key>
268 <dict>
269 <key>0</key>
270 <dict>
271 <key>name</key>
272 <string>punctuation.separator.key-value.html</string>
273 </dict>
274 </dict>
275 <key>end</key>
276 <string>(?&lt;=[^\s=])(?!\s*=)|(?=/?&gt;)</string>
277 <key>patterns</key>
278 <array>
279 <dict>
280 <key>begin</key>
281 <string>(?=[^\s=&lt;&gt;`/]|/(?!&gt;))</string>
282 <key>end</key>
283 <string>(?!\G)</string>
284 <key>name</key>
285 <string>meta.embedded.line.js</string>
286 <key>patterns</key>
287 <array>
288 <dict>
289 <key>captures</key>
290 <dict>
291 <key>0</key>
292 <dict>
293 <key>name</key>
294 <string>source.js</string>
295 </dict>
296 <key>1</key>
297 <dict>
298 <key>patterns</key>
299 <array>
300 <dict>
301 <key>include</key>
302 <string>source.js</string>
303 </dict>
304 </array>
305 </dict>
306 </dict>
307 <key>match</key>
308 <string>(([^\s"'=&lt;&gt;`/]|/(?!&gt;))+)</string>
309 <key>name</key>
310 <string>string.unquoted.html</string>
311 </dict>
312 <dict>
313 <key>begin</key>
314 <string>"</string>
315 <key>beginCaptures</key>
316 <dict>
317 <key>0</key>
318 <dict>
319 <key>name</key>
320 <string>punctuation.definition.string.begin.html</string>
321 </dict>
322 </dict>
323 <key>contentName</key>
324 <string>source.js</string>
325 <key>end</key>
326 <string>(")</string>
327 <key>endCaptures</key>
328 <dict>
329 <key>0</key>
330 <dict>
331 <key>name</key>
332 <string>punctuation.definition.string.end.html</string>
333 </dict>
334 <key>1</key>
335 <dict>
336 <key>name</key>
337 <string>source.js</string>
338 </dict>
339 </dict>
340 <key>name</key>
341 <string>string.quoted.double.html</string>
342 <key>patterns</key>
343 <array>
344 <dict>
345 <key>captures</key>
346 <dict>
347 <key>0</key>
348 <dict>
349 <key>patterns</key>
350 <array>
351 <dict>
352 <key>include</key>
353 <string>source.js</string>
354 </dict>
355 </array>
356 </dict>
357 </dict>
358 <key>match</key>
359 <string>([^\n"/]|/(?![/*]))+</string>
360 </dict>
361 <dict>
362 <key>begin</key>
363 <string>//</string>
364 <key>beginCaptures</key>
365 <dict>
366 <key>0</key>
367 <dict>
368 <key>name</key>
369 <string>punctuation.definition.comment.js</string>
370 </dict>
371 </dict>
372 <key>end</key>
373 <string>(?=")|\n</string>
374 <key>name</key>
375 <string>comment.line.double-slash.js</string>
376 </dict>
377 <dict>
378 <key>begin</key>
379 <string>/\*</string>
380 <key>beginCaptures</key>
381 <dict>
382 <key>0</key>
383 <dict>
384 <key>name</key>
385 <string>punctuation.definition.comment.begin.js</string>
386 </dict>
387 </dict>
388 <key>end</key>
389 <string>(?=")|\*/</string>
390 <key>endCaptures</key>
391 <dict>
392 <key>0</key>
393 <dict>
394 <key>name</key>
395 <string>punctuation.definition.comment.end.js</string>
396 </dict>
397 </dict>
398 <key>name</key>
399 <string>comment.block.js</string>
400 </dict>
401 </array>
402 </dict>
403 <dict>
404 <key>begin</key>
405 <string>'</string>
406 <key>beginCaptures</key>
407 <dict>
408 <key>0</key>
409 <dict>
410 <key>name</key>
411 <string>punctuation.definition.string.begin.html</string>
412 </dict>
413 </dict>
414 <key>contentName</key>
415 <string>source.js</string>
416 <key>end</key>
417 <string>(')</string>
418 <key>endCaptures</key>
419 <dict>
420 <key>0</key>
421 <dict>
422 <key>name</key>
423 <string>punctuation.definition.string.end.html</string>
424 </dict>
425 <key>1</key>
426 <dict>
427 <key>name</key>
428 <string>source.js</string>
429 </dict>
430 </dict>
431 <key>name</key>
432 <string>string.quoted.single.html</string>
433 <key>patterns</key>
434 <array>
435 <dict>
436 <key>captures</key>
437 <dict>
438 <key>0</key>
439 <dict>
440 <key>patterns</key>
441 <array>
442 <dict>
443 <key>include</key>
444 <string>source.js</string>
445 </dict>
446 </array>
447 </dict>
448 </dict>
449 <key>match</key>
450 <string>([^\n'/]|/(?![/*]))+</string>
451 </dict>
452 <dict>
453 <key>begin</key>
454 <string>//</string>
455 <key>beginCaptures</key>
456 <dict>
457 <key>0</key>
458 <dict>
459 <key>name</key>
460 <string>punctuation.definition.comment.js</string>
461 </dict>
462 </dict>
463 <key>end</key>
464 <string>(?=')|\n</string>
465 <key>name</key>
466 <string>comment.line.double-slash.js</string>
467 </dict>
468 <dict>
469 <key>begin</key>
470 <string>/\*</string>
471 <key>beginCaptures</key>
472 <dict>
473 <key>0</key>
474 <dict>
475 <key>name</key>
476 <string>punctuation.definition.comment.begin.js</string>
477 </dict>
478 </dict>
479 <key>end</key>
480 <string>(?=')|\*/</string>
481 <key>endCaptures</key>
482 <dict>
483 <key>0</key>
484 <dict>
485 <key>name</key>
486 <string>punctuation.definition.comment.end.js</string>
487 </dict>
488 </dict>
489 <key>name</key>
490 <string>comment.block.js</string>
491 </dict>
492 </array>
493 </dict>
494 </array>
495 </dict>
496 <dict>
497 <key>match</key>
498 <string>=</string>
499 <key>name</key>
500 <string>invalid.illegal.unexpected-equals-sign.html</string>
501 </dict>
502 </array>
503 </dict>
504 </array>
505 </dict>
506 <dict>
507 <key>begin</key>
508 <string>(data-[a-z\-]+)(?![\w:-])</string>
509 <key>beginCaptures</key>
510 <dict>
511 <key>0</key>
512 <dict>
513 <key>name</key>
514 <string>entity.other.attribute-name.html</string>
515 </dict>
516 </dict>
517 <key>comment</key>
518 <string>HTML5 attributes, data-*</string>
519 <key>end</key>
520 <string>(?=\s*+[^=\s])</string>
521 <key>name</key>
522 <string>meta.attribute.data-x.$1.html</string>
523 <key>patterns</key>
524 <array>
525 <dict>
526 <key>include</key>
527 <string>#attribute-interior</string>
528 </dict>
529 </array>
530 </dict>
531 <dict>
532 <key>begin</key>
533 <string>(align|bgcolor|border)(?![\w:-])</string>
534 <key>beginCaptures</key>
535 <dict>
536 <key>0</key>
537 <dict>
538 <key>name</key>
539 <string>invalid.deprecated.entity.other.attribute-name.html</string>
540 </dict>
541 </dict>
542 <key>comment</key>
543 <string>HTML attributes, deprecated</string>
544 <key>end</key>
545 <string>(?=\s*+[^=\s])</string>
546 <key>name</key>
547 <string>meta.attribute.$1.html</string>
548 <key>patterns</key>
549 <array>
550 <dict>
551 <key>include</key>
552 <string>#attribute-interior</string>
553 </dict>
554 </array>
555 </dict>
556 <dict>
557 <key>begin</key>
558 <string>([^\x{0020}"'&lt;&gt;/=\x{0000}-\x{001F}\x{007F}-\x{009F}\x{FDD0}-\x{FDEF}\x{FFFE}\x{FFFF}\x{1FFFE}\x{1FFFF}\x{2FFFE}\x{2FFFF}\x{3FFFE}\x{3FFFF}\x{4FFFE}\x{4FFFF}\x{5FFFE}\x{5FFFF}\x{6FFFE}\x{6FFFF}\x{7FFFE}\x{7FFFF}\x{8FFFE}\x{8FFFF}\x{9FFFE}\x{9FFFF}\x{AFFFE}\x{AFFFF}\x{BFFFE}\x{BFFFF}\x{CFFFE}\x{CFFFF}\x{DFFFE}\x{DFFFF}\x{EFFFE}\x{EFFFF}\x{FFFFE}\x{FFFFF}\x{10FFFE}\x{10FFFF}]+)</string>
559 <key>beginCaptures</key>
560 <dict>
561 <key>0</key>
562 <dict>
563 <key>name</key>
564 <string>entity.other.attribute-name.html</string>
565 </dict>
566 </dict>
567 <key>comment</key>
568 <string>Anything else that is valid</string>
569 <key>end</key>
570 <string>(?=\s*+[^=\s])</string>
571 <key>name</key>
572 <string>meta.attribute.unrecognized.$1.html</string>
573 <key>patterns</key>
574 <array>
575 <dict>
576 <key>include</key>
577 <string>#attribute-interior</string>
578 </dict>
579 </array>
580 </dict>
581 <dict>
582 <key>match</key>
583 <string>[^\s&gt;]+</string>
584 <key>name</key>
585 <string>invalid.illegal.character-not-allowed-here.html</string>
586 </dict>
587 </array>
588 </dict>
589 <key>attribute-interior</key>
590 <dict>
591 <key>patterns</key>
592 <array>
593 <dict>
594 <key>begin</key>
595 <string>=</string>
596 <key>beginCaptures</key>
597 <dict>
598 <key>0</key>
599 <dict>
600 <key>name</key>
601 <string>punctuation.separator.key-value.html</string>
602 </dict>
603 </dict>
604 <key>end</key>
605 <string>(?&lt;=[^\s=])(?!\s*=)|(?=/?&gt;)</string>
606 <key>patterns</key>
607 <array>
608 <dict>
609 <key>match</key>
610 <string>([^\s"'=&lt;&gt;`/]|/(?!&gt;))+</string>
611 <key>name</key>
612 <string>string.unquoted.html</string>
613 </dict>
614 <dict>
615 <key>begin</key>
616 <string>"</string>
617 <key>beginCaptures</key>
618 <dict>
619 <key>0</key>
620 <dict>
621 <key>name</key>
622 <string>punctuation.definition.string.begin.html</string>
623 </dict>
624 </dict>
625 <key>end</key>
626 <string>"</string>
627 <key>endCaptures</key>
628 <dict>
629 <key>0</key>
630 <dict>
631 <key>name</key>
632 <string>punctuation.definition.string.end.html</string>
633 </dict>
634 </dict>
635 <key>name</key>
636 <string>string.quoted.double.html</string>
637 <key>patterns</key>
638 <array>
639 <dict>
640 <key>include</key>
641 <string>#entities</string>
642 </dict>
643 </array>
644 </dict>
645 <dict>
646 <key>begin</key>
647 <string>'</string>
648 <key>beginCaptures</key>
649 <dict>
650 <key>0</key>
651 <dict>
652 <key>name</key>
653 <string>punctuation.definition.string.begin.html</string>
654 </dict>
655 </dict>
656 <key>end</key>
657 <string>'</string>
658 <key>endCaptures</key>
659 <dict>
660 <key>0</key>
661 <dict>
662 <key>name</key>
663 <string>punctuation.definition.string.end.html</string>
664 </dict>
665 </dict>
666 <key>name</key>
667 <string>string.quoted.single.html</string>
668 <key>patterns</key>
669 <array>
670 <dict>
671 <key>include</key>
672 <string>#entities</string>
673 </dict>
674 </array>
675 </dict>
676 <dict>
677 <key>match</key>
678 <string>=</string>
679 <key>name</key>
680 <string>invalid.illegal.unexpected-equals-sign.html</string>
681 </dict>
682 </array>
683 </dict>
684 </array>
685 </dict>
686 <key>cdata</key>
687 <dict>
688 <key>begin</key>
689 <string>&lt;!\[CDATA\[</string>
690 <key>beginCaptures</key>
691 <dict>
692 <key>0</key>
693 <dict>
694 <key>name</key>
695 <string>punctuation.definition.tag.begin.html</string>
696 </dict>
697 </dict>
698 <key>contentName</key>
699 <string>string.other.inline-data.html</string>
700 <key>end</key>
701 <string>]]&gt;</string>
702 <key>endCaptures</key>
703 <dict>
704 <key>0</key>
705 <dict>
706 <key>name</key>
707 <string>punctuation.definition.tag.end.html</string>
708 </dict>
709 </dict>
710 <key>name</key>
711 <string>meta.tag.metadata.cdata.html</string>
712 </dict>
713 <key>comment</key>
714 <dict>
715 <key>begin</key>
716 <string>&lt;!--</string>
717 <key>captures</key>
718 <dict>
719 <key>0</key>
720 <dict>
721 <key>name</key>
722 <string>punctuation.definition.comment.html</string>
723 </dict>
724 </dict>
725 <key>end</key>
726 <string>--&gt;</string>
727 <key>name</key>
728 <string>comment.block.html</string>
729 <key>patterns</key>
730 <array>
731 <dict>
732 <key>match</key>
733 <string>\G-?&gt;</string>
734 <key>name</key>
735 <string>invalid.illegal.characters-not-allowed-here.html</string>
736 </dict>
737 <dict>
738 <key>match</key>
739 <string>&lt;!--(?!&gt;)|&lt;!-(?=--&gt;)</string>
740 <key>name</key>
741 <string>invalid.illegal.characters-not-allowed-here.html</string>
742 </dict>
743 <dict>
744 <key>match</key>
745 <string>--!&gt;</string>
746 <key>name</key>
747 <string>invalid.illegal.characters-not-allowed-here.html</string>
748 </dict>
749 </array>
750 </dict>
751 <key>core-minus-invalid</key>
752 <dict>
753 <key>comment</key>
754 <string>This should be the root pattern array includes minus #tags-invalid</string>
755 <key>patterns</key>
756 <array>
757 <dict>
758 <key>include</key>
759 <string>#xml-processing</string>
760 </dict>
761 <dict>
762 <key>include</key>
763 <string>#comment</string>
764 </dict>
765 <dict>
766 <key>include</key>
767 <string>#doctype</string>
768 </dict>
769 <dict>
770 <key>include</key>
771 <string>#cdata</string>
772 </dict>
773 <dict>
774 <key>include</key>
775 <string>#tags-valid</string>
776 </dict>
777 <dict>
778 <key>include</key>
779 <string>#entities</string>
780 </dict>
781 </array>
782 </dict>
783 <key>doctype</key>
784 <dict>
785 <key>begin</key>
786 <string>&lt;!(?=(?i:DOCTYPE\s))</string>
787 <key>beginCaptures</key>
788 <dict>
789 <key>0</key>
790 <dict>
791 <key>name</key>
792 <string>punctuation.definition.tag.begin.html</string>
793 </dict>
794 </dict>
795 <key>end</key>
796 <string>&gt;</string>
797 <key>endCaptures</key>
798 <dict>
799 <key>0</key>
800 <dict>
801 <key>name</key>
802 <string>punctuation.definition.tag.end.html</string>
803 </dict>
804 </dict>
805 <key>name</key>
806 <string>meta.tag.metadata.doctype.html</string>
807 <key>patterns</key>
808 <array>
809 <dict>
810 <key>match</key>
811 <string>\G(?i:DOCTYPE)</string>
812 <key>name</key>
813 <string>entity.name.tag.html</string>
814 </dict>
815 <dict>
816 <key>begin</key>
817 <string>"</string>
818 <key>end</key>
819 <string>"</string>
820 <key>name</key>
821 <string>string.quoted.double.html</string>
822 </dict>
823 <dict>
824 <key>match</key>
825 <string>[^\s&gt;]+</string>
826 <key>name</key>
827 <string>entity.other.attribute-name.html</string>
828 </dict>
829 </array>
830 </dict>
831 <key>entities</key>
832 <dict>
833 <key>patterns</key>
834 <array>
835 <dict>
836 <key>captures</key>
837 <dict>
838 <key>1</key>
839 <dict>
840 <key>name</key>
841 <string>punctuation.definition.entity.html</string>
842 </dict>
843 <key>912</key>
844 <dict>
845 <key>name</key>
846 <string>punctuation.definition.entity.html</string>
847 </dict>
848 </dict>
849 <key>comment</key>
850 <string>Yes this is a bit ridiculous, there are quite a lot of these</string>
851 <key>match</key>
852 <string>(?x)
853 (&amp;) (?=[a-zA-Z])
854 (
855 (a(s(ymp(eq)?|cr|t)|n(d(slope|d|v|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a(h|c|d|e|f|a|g|b))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|e|E|acir)?|elig|f(r)?|w(conint|int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))
856 | (B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h(d|u|D|U)?|times|H(d|u|D|U)?|d(R|l|r|L)|u(R|l|r|L)|plus|D(R|l|r|L)|v(R|h|H|l|r|L)?|U(R|l|r|L)|V(R|h|H|l|r|L)?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1(2|4)|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))
857 | (c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr(l|r)|p(s|c(up|ap)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w(conint|int)|lubs(uit)?|a(cute|p(s|c(up|ap)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly(DoubleQuote|Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))
858 | (d(s(c(y|r)|trok|ol)|har(l|r)|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up(DownArrow|Arrow)|VerticalBar|L(ong(RightArrow|Left(RightArrow|Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))
859 | (e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t(h|a)|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(ot|Dot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1(3|4))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty(SmallSquare|VerySmallSquare)|acr)))
860 | (f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(ig|lig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1(2|8|3|4|5|6)|78|2(3|5)|3(8|4|5)|45|5(8|6)))))|F(scr|cy|illed(SmallSquare|VerySmallSquare)|o(uriertrf|pf|rAll)|fr))
861 | (G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im(e|l)?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(qless|less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l(j|E|a)?|a(cute|p|mma(d)?)|rave|g(g)?|breve))
862 | (h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok(leftarrow|rightarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks(earow|warow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))
863 | (i(s(cr|in(s(v)?|dot|v|E)?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(nt|int)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f(f|r)|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))
864 | (j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))
865 | (k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))
866 | (l(s(h|cr|trok|im(e|g)?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(il|dil)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i(e|f)?|Par))?|Har|o(ng(left(arrow|rightarrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r(dhar|ushar))|ur(dshar|uhar)|jcy|par(lt)?|e(s(s(sim|dot|eq(qgtr|gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left(arrow|rightarrow)|rightarrow|Left(RightArrow|Arrow))|pf|wer(RightArrow|LeftArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))
867 | (M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u(ltimap|map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))
868 | (n(s(hort(parallel|mid)|c(cue|e|r)?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|e|E)?|b(set(eq(q)?)?|e|E)?)|par|qsu(pe|be)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v(c|a|b))?|in(dot|v(c|a|b)|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g(t|e))|fr|w(near|ar(hk|r(ow)?)|Arr)|V(dash|Dash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft(arrow|rightarrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr(c|w)?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft(arrow|rightarrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes(SlantEqual|Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi(nSpace|ckSpace)|VeryThinSpace))|Jcy|fr|acute))
869 | (o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|f|m)?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly(DoubleQuote|Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))
870 | (p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d(o|u)|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))
871 | (q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))
872 | (R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(il|dil)|aron)|Barr|t(hree|imes|ri(e|f|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng(d|e|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr)))
873 | (s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma(v|f)?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot(e|b)?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n(e|E)|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|n(e|E)|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar(e|f))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort(RightArrow|DownArrow|UpArrow|LeftArrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))
874 | (t(s(hcy|c(y|r)|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead(leftarrow|rightarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i(nSpace|ckSpace)|e(ta|refore))|c(y|edil|aron)|S(cy|Hcy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a(u|b)|ripleDot))
875 | (u(scr|h(ar(l|r)|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per(RightArrow|LeftArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))
876 | (v(s(cr|u(pn(e|E)|bn(e|E)))|nsu(p|b)|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))
877 | (w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))
878 | (X(scr|i|opf|fr)|x(s(cr|qcup)|h(arr|Arr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l(arr|Arr)|r(arr|Arr)|map))
879 | (y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))
880 | (z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(nj|j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute))
881 )
882 (;)
883 </string>
884 <key>name</key>
885 <string>constant.character.entity.named.$2.html</string>
886 </dict>
887 <dict>
888 <key>captures</key>
889 <dict>
890 <key>1</key>
891 <dict>
892 <key>name</key>
893 <string>punctuation.definition.entity.html</string>
894 </dict>
895 <key>3</key>
896 <dict>
897 <key>name</key>
898 <string>punctuation.definition.entity.html</string>
899 </dict>
900 </dict>
901 <key>match</key>
902 <string>(&amp;)#[0-9]+(;)</string>
903 <key>name</key>
904 <string>constant.character.entity.numeric.decimal.html</string>
905 </dict>
906 <dict>
907 <key>captures</key>
908 <dict>
909 <key>1</key>
910 <dict>
911 <key>name</key>
912 <string>punctuation.definition.entity.html</string>
913 </dict>
914 <key>3</key>
915 <dict>
916 <key>name</key>
917 <string>punctuation.definition.entity.html</string>
918 </dict>
919 </dict>
920 <key>match</key>
921 <string>(&amp;)#[xX][0-9a-fA-F]+(;)</string>
922 <key>name</key>
923 <string>constant.character.entity.numeric.hexadecimal.html</string>
924 </dict>
925 <dict>
926 <key>match</key>
927 <string>&amp;(?=[a-zA-Z0-9]+;)</string>
928 <key>name</key>
929 <string>invalid.illegal.ambiguous-ampersand.html</string>
930 </dict>
931 </array>
932 </dict>
933 <key>math</key>
934 <dict>
935 <key>patterns</key>
936 <array>
937 <dict>
938 <key>begin</key>
939 <string>(?i)(&lt;)(math)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
940 <key>beginCaptures</key>
941 <dict>
942 <key>0</key>
943 <dict>
944 <key>name</key>
945 <string>meta.tag.structure.$2.start.html</string>
946 </dict>
947 <key>1</key>
948 <dict>
949 <key>name</key>
950 <string>punctuation.definition.tag.begin.html</string>
951 </dict>
952 <key>2</key>
953 <dict>
954 <key>name</key>
955 <string>entity.name.tag.html</string>
956 </dict>
957 <key>3</key>
958 <dict>
959 <key>patterns</key>
960 <array>
961 <dict>
962 <key>include</key>
963 <string>#attribute</string>
964 </dict>
965 </array>
966 </dict>
967 <key>5</key>
968 <dict>
969 <key>name</key>
970 <string>punctuation.definition.tag.end.html</string>
971 </dict>
972 </dict>
973 <key>end</key>
974 <string>(?i)(&lt;/)(\2)\s*(&gt;)</string>
975 <key>endCaptures</key>
976 <dict>
977 <key>0</key>
978 <dict>
979 <key>name</key>
980 <string>meta.tag.structure.$2.end.html</string>
981 </dict>
982 <key>1</key>
983 <dict>
984 <key>name</key>
985 <string>punctuation.definition.tag.begin.html</string>
986 </dict>
987 <key>2</key>
988 <dict>
989 <key>name</key>
990 <string>entity.name.tag.html</string>
991 </dict>
992 <key>3</key>
993 <dict>
994 <key>name</key>
995 <string>punctuation.definition.tag.end.html</string>
996 </dict>
997 </dict>
998 <key>name</key>
999 <string>meta.element.structure.$2.html</string>
1000 <key>patterns</key>
1001 <array>
1002 <dict>
1003 <key>begin</key>
1004 <string>(?&lt;!&gt;)\G</string>
1005 <key>end</key>
1006 <string>&gt;</string>
1007 <key>endCaptures</key>
1008 <dict>
1009 <key>0</key>
1010 <dict>
1011 <key>name</key>
1012 <string>punctuation.definition.tag.end.html</string>
1013 </dict>
1014 </dict>
1015 <key>name</key>
1016 <string>meta.tag.structure.start.html</string>
1017 <key>patterns</key>
1018 <array>
1019 <dict>
1020 <key>include</key>
1021 <string>#attribute</string>
1022 </dict>
1023 </array>
1024 </dict>
1025 <dict>
1026 <key>include</key>
1027 <string>#tags</string>
1028 </dict>
1029 </array>
1030 </dict>
1031 </array>
1032 <key>repository</key>
1033 <dict>
1034 <key>attribute</key>
1035 <dict>
1036 <key>patterns</key>
1037 <array>
1038 <dict>
1039 <key>begin</key>
1040 <string>(s(hift|ymmetric|cript(sizemultiplier|level|minsize)|t(ackalign|retchy)|ide|u(pscriptshift|bscriptshift)|e(parator(s)?|lection)|rc)|h(eight|ref)|n(otation|umalign)|c(haralign|olumn(spa(n|cing)|width|lines|align)|lose|rossout)|i(n(dent(shift(first|last)?|target|align(first|last)?)|fixlinebreakstyle)|d)|o(pen|verflow)|d(i(splay(style)?|r)|e(nomalign|cimalpoint|pth))|position|e(dge|qual(columns|rows))|voffset|f(orm|ence|rame(spacing)?)|width|l(space|ine(thickness|leading|break(style|multchar)?)|o(ngdivstyle|cation)|ength|quote|argeop)|a(c(cent(under)?|tiontype)|l(t(text|img(-(height|valign|width))?)|ign(mentscope)?))|r(space|ow(spa(n|cing)|lines|align)|quote)|groupalign|x(link:href|mlns)|m(in(size|labelspacing)|ovablelimits|a(th(size|color|variant|background)|xsize))|bevelled)(?![\w:-])</string>
1041 <key>beginCaptures</key>
1042 <dict>
1043 <key>0</key>
1044 <dict>
1045 <key>name</key>
1046 <string>entity.other.attribute-name.html</string>
1047 </dict>
1048 </dict>
1049 <key>end</key>
1050 <string>(?=\s*+[^=\s])</string>
1051 <key>name</key>
1052 <string>meta.attribute.$1.html</string>
1053 <key>patterns</key>
1054 <array>
1055 <dict>
1056 <key>include</key>
1057 <string>#attribute-interior</string>
1058 </dict>
1059 </array>
1060 </dict>
1061 <dict>
1062 <key>begin</key>
1063 <string>([^\x{0020}"'&lt;&gt;/=\x{0000}-\x{001F}\x{007F}-\x{009F}\x{FDD0}-\x{FDEF}\x{FFFE}\x{FFFF}\x{1FFFE}\x{1FFFF}\x{2FFFE}\x{2FFFF}\x{3FFFE}\x{3FFFF}\x{4FFFE}\x{4FFFF}\x{5FFFE}\x{5FFFF}\x{6FFFE}\x{6FFFF}\x{7FFFE}\x{7FFFF}\x{8FFFE}\x{8FFFF}\x{9FFFE}\x{9FFFF}\x{AFFFE}\x{AFFFF}\x{BFFFE}\x{BFFFF}\x{CFFFE}\x{CFFFF}\x{DFFFE}\x{DFFFF}\x{EFFFE}\x{EFFFF}\x{FFFFE}\x{FFFFF}\x{10FFFE}\x{10FFFF}]+)</string>
1064 <key>beginCaptures</key>
1065 <dict>
1066 <key>0</key>
1067 <dict>
1068 <key>name</key>
1069 <string>entity.other.attribute-name.html</string>
1070 </dict>
1071 </dict>
1072 <key>comment</key>
1073 <string>Anything else that is valid</string>
1074 <key>end</key>
1075 <string>(?=\s*+[^=\s])</string>
1076 <key>name</key>
1077 <string>meta.attribute.unrecognized.$1.html</string>
1078 <key>patterns</key>
1079 <array>
1080 <dict>
1081 <key>include</key>
1082 <string>#attribute-interior</string>
1083 </dict>
1084 </array>
1085 </dict>
1086 <dict>
1087 <key>match</key>
1088 <string>[^\s&gt;]+</string>
1089 <key>name</key>
1090 <string>invalid.illegal.character-not-allowed-here.html</string>
1091 </dict>
1092 </array>
1093 </dict>
1094 <key>tags</key>
1095 <dict>
1096 <key>patterns</key>
1097 <array>
1098 <dict>
1099 <key>include</key>
1100 <string>#comment</string>
1101 </dict>
1102 <dict>
1103 <key>include</key>
1104 <string>#cdata</string>
1105 </dict>
1106 <dict>
1107 <key>captures</key>
1108 <dict>
1109 <key>0</key>
1110 <dict>
1111 <key>name</key>
1112 <string>meta.tag.structure.math.$2.void.html</string>
1113 </dict>
1114 <key>1</key>
1115 <dict>
1116 <key>name</key>
1117 <string>punctuation.definition.tag.begin.html</string>
1118 </dict>
1119 <key>2</key>
1120 <dict>
1121 <key>name</key>
1122 <string>entity.name.tag.html</string>
1123 </dict>
1124 <key>3</key>
1125 <dict>
1126 <key>patterns</key>
1127 <array>
1128 <dict>
1129 <key>include</key>
1130 <string>#attribute</string>
1131 </dict>
1132 </array>
1133 </dict>
1134 <key>5</key>
1135 <dict>
1136 <key>name</key>
1137 <string>punctuation.definition.tag.end.html</string>
1138 </dict>
1139 </dict>
1140 <key>match</key>
1141 <string>(?i)(&lt;)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
1142 <key>name</key>
1143 <string>meta.element.structure.math.$2.html</string>
1144 </dict>
1145 <dict>
1146 <key>begin</key>
1147 <string>(?i)(&lt;)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1148 <key>beginCaptures</key>
1149 <dict>
1150 <key>0</key>
1151 <dict>
1152 <key>name</key>
1153 <string>meta.tag.structure.math.$2.start.html</string>
1154 </dict>
1155 <key>1</key>
1156 <dict>
1157 <key>name</key>
1158 <string>punctuation.definition.tag.begin.html</string>
1159 </dict>
1160 <key>2</key>
1161 <dict>
1162 <key>name</key>
1163 <string>entity.name.tag.html</string>
1164 </dict>
1165 <key>3</key>
1166 <dict>
1167 <key>patterns</key>
1168 <array>
1169 <dict>
1170 <key>include</key>
1171 <string>#attribute</string>
1172 </dict>
1173 </array>
1174 </dict>
1175 <key>5</key>
1176 <dict>
1177 <key>name</key>
1178 <string>punctuation.definition.tag.end.html</string>
1179 </dict>
1180 </dict>
1181 <key>end</key>
1182 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
1183 <key>endCaptures</key>
1184 <dict>
1185 <key>0</key>
1186 <dict>
1187 <key>name</key>
1188 <string>meta.tag.structure.math.$2.end.html</string>
1189 </dict>
1190 <key>1</key>
1191 <dict>
1192 <key>name</key>
1193 <string>punctuation.definition.tag.begin.html</string>
1194 </dict>
1195 <key>2</key>
1196 <dict>
1197 <key>name</key>
1198 <string>entity.name.tag.html</string>
1199 </dict>
1200 <key>3</key>
1201 <dict>
1202 <key>name</key>
1203 <string>punctuation.definition.tag.end.html</string>
1204 </dict>
1205 <key>4</key>
1206 <dict>
1207 <key>name</key>
1208 <string>punctuation.definition.tag.end.html</string>
1209 </dict>
1210 </dict>
1211 <key>name</key>
1212 <string>meta.element.structure.math.$2.html</string>
1213 <key>patterns</key>
1214 <array>
1215 <dict>
1216 <key>begin</key>
1217 <string>(?&lt;!&gt;)\G</string>
1218 <key>end</key>
1219 <string>(?=/&gt;)|&gt;</string>
1220 <key>endCaptures</key>
1221 <dict>
1222 <key>0</key>
1223 <dict>
1224 <key>name</key>
1225 <string>punctuation.definition.tag.end.html</string>
1226 </dict>
1227 </dict>
1228 <key>name</key>
1229 <string>meta.tag.structure.start.html</string>
1230 <key>patterns</key>
1231 <array>
1232 <dict>
1233 <key>include</key>
1234 <string>#attribute</string>
1235 </dict>
1236 </array>
1237 </dict>
1238 <dict>
1239 <key>include</key>
1240 <string>#tags</string>
1241 </dict>
1242 </array>
1243 </dict>
1244 <dict>
1245 <key>captures</key>
1246 <dict>
1247 <key>0</key>
1248 <dict>
1249 <key>name</key>
1250 <string>meta.tag.inline.math.$2.void.html</string>
1251 </dict>
1252 <key>1</key>
1253 <dict>
1254 <key>name</key>
1255 <string>punctuation.definition.tag.begin.html</string>
1256 </dict>
1257 <key>2</key>
1258 <dict>
1259 <key>name</key>
1260 <string>entity.name.tag.html</string>
1261 </dict>
1262 <key>3</key>
1263 <dict>
1264 <key>patterns</key>
1265 <array>
1266 <dict>
1267 <key>include</key>
1268 <string>#attribute</string>
1269 </dict>
1270 </array>
1271 </dict>
1272 <key>5</key>
1273 <dict>
1274 <key>name</key>
1275 <string>punctuation.definition.tag.end.html</string>
1276 </dict>
1277 </dict>
1278 <key>match</key>
1279 <string>(?i)(&lt;)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
1280 <key>name</key>
1281 <string>meta.element.inline.math.$2.html</string>
1282 </dict>
1283 <dict>
1284 <key>begin</key>
1285 <string>(?i)(&lt;)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1286 <key>beginCaptures</key>
1287 <dict>
1288 <key>0</key>
1289 <dict>
1290 <key>name</key>
1291 <string>meta.tag.inline.math.$2.start.html</string>
1292 </dict>
1293 <key>1</key>
1294 <dict>
1295 <key>name</key>
1296 <string>punctuation.definition.tag.begin.html</string>
1297 </dict>
1298 <key>2</key>
1299 <dict>
1300 <key>name</key>
1301 <string>entity.name.tag.html</string>
1302 </dict>
1303 <key>3</key>
1304 <dict>
1305 <key>patterns</key>
1306 <array>
1307 <dict>
1308 <key>include</key>
1309 <string>#attribute</string>
1310 </dict>
1311 </array>
1312 </dict>
1313 <key>5</key>
1314 <dict>
1315 <key>name</key>
1316 <string>punctuation.definition.tag.end.html</string>
1317 </dict>
1318 </dict>
1319 <key>end</key>
1320 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
1321 <key>endCaptures</key>
1322 <dict>
1323 <key>0</key>
1324 <dict>
1325 <key>name</key>
1326 <string>meta.tag.inline.math.$2.end.html</string>
1327 </dict>
1328 <key>1</key>
1329 <dict>
1330 <key>name</key>
1331 <string>punctuation.definition.tag.begin.html</string>
1332 </dict>
1333 <key>2</key>
1334 <dict>
1335 <key>name</key>
1336 <string>entity.name.tag.html</string>
1337 </dict>
1338 <key>3</key>
1339 <dict>
1340 <key>name</key>
1341 <string>punctuation.definition.tag.end.html</string>
1342 </dict>
1343 <key>4</key>
1344 <dict>
1345 <key>name</key>
1346 <string>punctuation.definition.tag.end.html</string>
1347 </dict>
1348 </dict>
1349 <key>name</key>
1350 <string>meta.element.inline.math.$2.html</string>
1351 <key>patterns</key>
1352 <array>
1353 <dict>
1354 <key>begin</key>
1355 <string>(?&lt;!&gt;)\G</string>
1356 <key>end</key>
1357 <string>(?=/&gt;)|&gt;</string>
1358 <key>endCaptures</key>
1359 <dict>
1360 <key>0</key>
1361 <dict>
1362 <key>name</key>
1363 <string>punctuation.definition.tag.end.html</string>
1364 </dict>
1365 </dict>
1366 <key>name</key>
1367 <string>meta.tag.inline.start.html</string>
1368 <key>patterns</key>
1369 <array>
1370 <dict>
1371 <key>include</key>
1372 <string>#attribute</string>
1373 </dict>
1374 </array>
1375 </dict>
1376 <dict>
1377 <key>include</key>
1378 <string>#tags</string>
1379 </dict>
1380 </array>
1381 </dict>
1382 <dict>
1383 <key>captures</key>
1384 <dict>
1385 <key>0</key>
1386 <dict>
1387 <key>name</key>
1388 <string>meta.tag.object.math.$2.void.html</string>
1389 </dict>
1390 <key>1</key>
1391 <dict>
1392 <key>name</key>
1393 <string>punctuation.definition.tag.begin.html</string>
1394 </dict>
1395 <key>2</key>
1396 <dict>
1397 <key>name</key>
1398 <string>entity.name.tag.html</string>
1399 </dict>
1400 <key>3</key>
1401 <dict>
1402 <key>patterns</key>
1403 <array>
1404 <dict>
1405 <key>include</key>
1406 <string>#attribute</string>
1407 </dict>
1408 </array>
1409 </dict>
1410 <key>5</key>
1411 <dict>
1412 <key>name</key>
1413 <string>punctuation.definition.tag.end.html</string>
1414 </dict>
1415 </dict>
1416 <key>match</key>
1417 <string>(?i)(&lt;)(mglyph)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
1418 <key>name</key>
1419 <string>meta.element.object.math.$2.html</string>
1420 </dict>
1421 <dict>
1422 <key>begin</key>
1423 <string>(?i)(&lt;)(mglyph)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1424 <key>beginCaptures</key>
1425 <dict>
1426 <key>0</key>
1427 <dict>
1428 <key>name</key>
1429 <string>meta.tag.object.math.$2.start.html</string>
1430 </dict>
1431 <key>1</key>
1432 <dict>
1433 <key>name</key>
1434 <string>punctuation.definition.tag.begin.html</string>
1435 </dict>
1436 <key>2</key>
1437 <dict>
1438 <key>name</key>
1439 <string>entity.name.tag.html</string>
1440 </dict>
1441 <key>3</key>
1442 <dict>
1443 <key>patterns</key>
1444 <array>
1445 <dict>
1446 <key>include</key>
1447 <string>#attribute</string>
1448 </dict>
1449 </array>
1450 </dict>
1451 <key>5</key>
1452 <dict>
1453 <key>name</key>
1454 <string>punctuation.definition.tag.end.html</string>
1455 </dict>
1456 </dict>
1457 <key>end</key>
1458 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
1459 <key>endCaptures</key>
1460 <dict>
1461 <key>0</key>
1462 <dict>
1463 <key>name</key>
1464 <string>meta.tag.object.math.$2.end.html</string>
1465 </dict>
1466 <key>1</key>
1467 <dict>
1468 <key>name</key>
1469 <string>punctuation.definition.tag.begin.html</string>
1470 </dict>
1471 <key>2</key>
1472 <dict>
1473 <key>name</key>
1474 <string>entity.name.tag.html</string>
1475 </dict>
1476 <key>3</key>
1477 <dict>
1478 <key>name</key>
1479 <string>punctuation.definition.tag.end.html</string>
1480 </dict>
1481 <key>4</key>
1482 <dict>
1483 <key>name</key>
1484 <string>punctuation.definition.tag.end.html</string>
1485 </dict>
1486 </dict>
1487 <key>name</key>
1488 <string>meta.element.object.math.$2.html</string>
1489 <key>patterns</key>
1490 <array>
1491 <dict>
1492 <key>begin</key>
1493 <string>(?&lt;!&gt;)\G</string>
1494 <key>end</key>
1495 <string>(?=/&gt;)|&gt;</string>
1496 <key>endCaptures</key>
1497 <dict>
1498 <key>0</key>
1499 <dict>
1500 <key>name</key>
1501 <string>punctuation.definition.tag.end.html</string>
1502 </dict>
1503 </dict>
1504 <key>name</key>
1505 <string>meta.tag.object.start.html</string>
1506 <key>patterns</key>
1507 <array>
1508 <dict>
1509 <key>include</key>
1510 <string>#attribute</string>
1511 </dict>
1512 </array>
1513 </dict>
1514 <dict>
1515 <key>include</key>
1516 <string>#tags</string>
1517 </dict>
1518 </array>
1519 </dict>
1520 <dict>
1521 <key>captures</key>
1522 <dict>
1523 <key>0</key>
1524 <dict>
1525 <key>name</key>
1526 <string>meta.tag.other.invalid.void.html</string>
1527 </dict>
1528 <key>1</key>
1529 <dict>
1530 <key>name</key>
1531 <string>punctuation.definition.tag.begin.html</string>
1532 </dict>
1533 <key>2</key>
1534 <dict>
1535 <key>name</key>
1536 <string>entity.name.tag.html</string>
1537 </dict>
1538 <key>3</key>
1539 <dict>
1540 <key>name</key>
1541 <string>invalid.illegal.unrecognized-tag.html</string>
1542 </dict>
1543 <key>4</key>
1544 <dict>
1545 <key>patterns</key>
1546 <array>
1547 <dict>
1548 <key>include</key>
1549 <string>#attribute</string>
1550 </dict>
1551 </array>
1552 </dict>
1553 <key>6</key>
1554 <dict>
1555 <key>name</key>
1556 <string>punctuation.definition.tag.end.html</string>
1557 </dict>
1558 </dict>
1559 <key>match</key>
1560 <string>(?i)(&lt;)(([\w:]+))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
1561 <key>name</key>
1562 <string>meta.element.other.invalid.html</string>
1563 </dict>
1564 <dict>
1565 <key>begin</key>
1566 <string>(?i)(&lt;)((\w[^\s&gt;]*))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1567 <key>beginCaptures</key>
1568 <dict>
1569 <key>0</key>
1570 <dict>
1571 <key>name</key>
1572 <string>meta.tag.other.invalid.start.html</string>
1573 </dict>
1574 <key>1</key>
1575 <dict>
1576 <key>name</key>
1577 <string>punctuation.definition.tag.begin.html</string>
1578 </dict>
1579 <key>2</key>
1580 <dict>
1581 <key>name</key>
1582 <string>entity.name.tag.html</string>
1583 </dict>
1584 <key>3</key>
1585 <dict>
1586 <key>name</key>
1587 <string>invalid.illegal.unrecognized-tag.html</string>
1588 </dict>
1589 <key>4</key>
1590 <dict>
1591 <key>patterns</key>
1592 <array>
1593 <dict>
1594 <key>include</key>
1595 <string>#attribute</string>
1596 </dict>
1597 </array>
1598 </dict>
1599 <key>6</key>
1600 <dict>
1601 <key>name</key>
1602 <string>punctuation.definition.tag.end.html</string>
1603 </dict>
1604 </dict>
1605 <key>end</key>
1606 <string>(?i)(&lt;/)((\2))\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
1607 <key>endCaptures</key>
1608 <dict>
1609 <key>0</key>
1610 <dict>
1611 <key>name</key>
1612 <string>meta.tag.other.invalid.end.html</string>
1613 </dict>
1614 <key>1</key>
1615 <dict>
1616 <key>name</key>
1617 <string>punctuation.definition.tag.begin.html</string>
1618 </dict>
1619 <key>2</key>
1620 <dict>
1621 <key>name</key>
1622 <string>entity.name.tag.html</string>
1623 </dict>
1624 <key>3</key>
1625 <dict>
1626 <key>name</key>
1627 <string>invalid.illegal.unrecognized-tag.html</string>
1628 </dict>
1629 <key>4</key>
1630 <dict>
1631 <key>name</key>
1632 <string>punctuation.definition.tag.end.html</string>
1633 </dict>
1634 <key>5</key>
1635 <dict>
1636 <key>name</key>
1637 <string>punctuation.definition.tag.end.html</string>
1638 </dict>
1639 </dict>
1640 <key>name</key>
1641 <string>meta.element.other.invalid.html</string>
1642 <key>patterns</key>
1643 <array>
1644 <dict>
1645 <key>begin</key>
1646 <string>(?&lt;!&gt;)\G</string>
1647 <key>end</key>
1648 <string>(?=/&gt;)|&gt;</string>
1649 <key>endCaptures</key>
1650 <dict>
1651 <key>0</key>
1652 <dict>
1653 <key>name</key>
1654 <string>punctuation.definition.tag.end.html</string>
1655 </dict>
1656 </dict>
1657 <key>name</key>
1658 <string>meta.tag.other.invalid.start.html</string>
1659 <key>patterns</key>
1660 <array>
1661 <dict>
1662 <key>include</key>
1663 <string>#attribute</string>
1664 </dict>
1665 </array>
1666 </dict>
1667 <dict>
1668 <key>include</key>
1669 <string>#tags</string>
1670 </dict>
1671 </array>
1672 </dict>
1673 <dict>
1674 <key>include</key>
1675 <string>#tags-invalid</string>
1676 </dict>
1677 </array>
1678 </dict>
1679 </dict>
1680 </dict>
1681 <key>svg</key>
1682 <dict>
1683 <key>patterns</key>
1684 <array>
1685 <dict>
1686 <key>begin</key>
1687 <string>(?i)(&lt;)(svg)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1688 <key>beginCaptures</key>
1689 <dict>
1690 <key>0</key>
1691 <dict>
1692 <key>name</key>
1693 <string>meta.tag.structure.$2.start.html</string>
1694 </dict>
1695 <key>1</key>
1696 <dict>
1697 <key>name</key>
1698 <string>punctuation.definition.tag.begin.html</string>
1699 </dict>
1700 <key>2</key>
1701 <dict>
1702 <key>name</key>
1703 <string>entity.name.tag.html</string>
1704 </dict>
1705 <key>3</key>
1706 <dict>
1707 <key>patterns</key>
1708 <array>
1709 <dict>
1710 <key>include</key>
1711 <string>#attribute</string>
1712 </dict>
1713 </array>
1714 </dict>
1715 <key>5</key>
1716 <dict>
1717 <key>name</key>
1718 <string>punctuation.definition.tag.end.html</string>
1719 </dict>
1720 </dict>
1721 <key>end</key>
1722 <string>(?i)(&lt;/)(\2)\s*(&gt;)</string>
1723 <key>endCaptures</key>
1724 <dict>
1725 <key>0</key>
1726 <dict>
1727 <key>name</key>
1728 <string>meta.tag.structure.$2.end.html</string>
1729 </dict>
1730 <key>1</key>
1731 <dict>
1732 <key>name</key>
1733 <string>punctuation.definition.tag.begin.html</string>
1734 </dict>
1735 <key>2</key>
1736 <dict>
1737 <key>name</key>
1738 <string>entity.name.tag.html</string>
1739 </dict>
1740 <key>3</key>
1741 <dict>
1742 <key>name</key>
1743 <string>punctuation.definition.tag.end.html</string>
1744 </dict>
1745 </dict>
1746 <key>name</key>
1747 <string>meta.element.structure.$2.html</string>
1748 <key>patterns</key>
1749 <array>
1750 <dict>
1751 <key>begin</key>
1752 <string>(?&lt;!&gt;)\G</string>
1753 <key>end</key>
1754 <string>&gt;</string>
1755 <key>endCaptures</key>
1756 <dict>
1757 <key>0</key>
1758 <dict>
1759 <key>name</key>
1760 <string>punctuation.definition.tag.end.html</string>
1761 </dict>
1762 </dict>
1763 <key>name</key>
1764 <string>meta.tag.structure.start.html</string>
1765 <key>patterns</key>
1766 <array>
1767 <dict>
1768 <key>include</key>
1769 <string>#attribute</string>
1770 </dict>
1771 </array>
1772 </dict>
1773 <dict>
1774 <key>include</key>
1775 <string>#tags</string>
1776 </dict>
1777 </array>
1778 </dict>
1779 </array>
1780 <key>repository</key>
1781 <dict>
1782 <key>attribute</key>
1783 <dict>
1784 <key>patterns</key>
1785 <array>
1786 <dict>
1787 <key>begin</key>
1788 <string>(s(hape-rendering|ystemLanguage|cale|t(yle|itchTiles|op-(color|opacity)|dDeviation|em(h|v)|artOffset|r(i(ng|kethrough-(thickness|position))|oke(-(opacity|dash(offset|array)|width|line(cap|join)|miterlimit))?))|urfaceScale|p(e(cular(Constant|Exponent)|ed)|acing|readMethod)|eed|lope)|h(oriz-(origin-x|adv-x)|eight|anging|ref(lang)?)|y(1|2|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS(criptType|tyleType)|lor(-(interpolation(-filters)?|profile|rendering))?)|ursor|l(ip(-(path|rule)|PathUnits)?|ass)|a(p-height|lcMode)|x)|t(ype|o|ext(-(decoration|anchor|rendering)|Length)|a(rget(X|Y)?|b(index|leValues))|ransform)|i(n(tercept|2)?|d(eographic)?|mage-rendering)|z(oomAndPan)?|o(p(erator|acity)|ver(flow|line-(thickness|position))|ffset|r(i(ent(ation)?|gin)|der))|d(y|i(splay|visor|ffuseConstant|rection)|ominant-baseline|ur|e(scent|celerate)|x)?|u(1|n(i(code(-(range|bidi))?|ts-per-em)|derline-(thickness|position))|2)|p(ing|oint(s(At(X|Y|Z))?|er-events)|a(nose-1|t(h(Length)?|tern(ContentUnits|Transform|Units))|int-order)|r(imitiveUnits|eserveA(spectRatio|lpha)))|e(n(d|able-background)|dgeMode|levation|x(ternalResourcesRequired|ponent))|v(i(sibility|ew(Box|Target))|-(hanging|ideographic|alphabetic|mathematical)|e(ctor-effect|r(sion|t-(origin-(y|x)|adv-y)))|alues)|k(1|2|3|e(y(Splines|Times|Points)|rn(ing|el(Matrix|UnitLength)))|4)?|f(y|il(ter(Res|Units)?|l(-(opacity|rule))?)|o(nt-(s(t(yle|retch)|ize(-adjust)?)|variant|family|weight)|rmat)|lood-(color|opacity)|r(om)?|x)|w(idth(s)?|ord-spacing|riting-mode)|l(i(ghting-color|mitingConeAngle)|ocal|e(ngthAdjust|tter-spacing)|ang)|a(scent|cc(umulate|ent-height)|ttribute(Name|Type)|zimuth|dditive|utoReverse|l(ignment-baseline|phabetic|lowReorder)|rabic-form|mplitude)|r(y|otate|e(s(tart|ult)|ndering-intent|peat(Count|Dur)|quired(Extensions|Features)|f(X|Y|errerPolicy)|l)|adius|x)?|g(1|2|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x(1|2|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk(ContentUnits|Units)?|thematical|rker(Height|-(start|end|mid)|Units|Width)|x))|b(y|ias|egin|ase(Profile|line-shift|Frequency)|box))(?![\w:-])</string>
1789 <key>beginCaptures</key>
1790 <dict>
1791 <key>0</key>
1792 <dict>
1793 <key>name</key>
1794 <string>entity.other.attribute-name.html</string>
1795 </dict>
1796 </dict>
1797 <key>end</key>
1798 <string>(?=\s*+[^=\s])</string>
1799 <key>name</key>
1800 <string>meta.attribute.$1.html</string>
1801 <key>patterns</key>
1802 <array>
1803 <dict>
1804 <key>include</key>
1805 <string>#attribute-interior</string>
1806 </dict>
1807 </array>
1808 </dict>
1809 <dict>
1810 <key>begin</key>
1811 <string>([^\x{0020}"'&lt;&gt;/=\x{0000}-\x{001F}\x{007F}-\x{009F}\x{FDD0}-\x{FDEF}\x{FFFE}\x{FFFF}\x{1FFFE}\x{1FFFF}\x{2FFFE}\x{2FFFF}\x{3FFFE}\x{3FFFF}\x{4FFFE}\x{4FFFF}\x{5FFFE}\x{5FFFF}\x{6FFFE}\x{6FFFF}\x{7FFFE}\x{7FFFF}\x{8FFFE}\x{8FFFF}\x{9FFFE}\x{9FFFF}\x{AFFFE}\x{AFFFF}\x{BFFFE}\x{BFFFF}\x{CFFFE}\x{CFFFF}\x{DFFFE}\x{DFFFF}\x{EFFFE}\x{EFFFF}\x{FFFFE}\x{FFFFF}\x{10FFFE}\x{10FFFF}]+)</string>
1812 <key>beginCaptures</key>
1813 <dict>
1814 <key>0</key>
1815 <dict>
1816 <key>name</key>
1817 <string>entity.other.attribute-name.html</string>
1818 </dict>
1819 </dict>
1820 <key>comment</key>
1821 <string>Anything else that is valid</string>
1822 <key>end</key>
1823 <string>(?=\s*+[^=\s])</string>
1824 <key>name</key>
1825 <string>meta.attribute.unrecognized.$1.html</string>
1826 <key>patterns</key>
1827 <array>
1828 <dict>
1829 <key>include</key>
1830 <string>#attribute-interior</string>
1831 </dict>
1832 </array>
1833 </dict>
1834 <dict>
1835 <key>match</key>
1836 <string>[^\s&gt;]+</string>
1837 <key>name</key>
1838 <string>invalid.illegal.character-not-allowed-here.html</string>
1839 </dict>
1840 </array>
1841 </dict>
1842 <key>tags</key>
1843 <dict>
1844 <key>patterns</key>
1845 <array>
1846 <dict>
1847 <key>include</key>
1848 <string>#comment</string>
1849 </dict>
1850 <dict>
1851 <key>include</key>
1852 <string>#cdata</string>
1853 </dict>
1854 <dict>
1855 <key>captures</key>
1856 <dict>
1857 <key>0</key>
1858 <dict>
1859 <key>name</key>
1860 <string>meta.tag.metadata.svg.$2.void.html</string>
1861 </dict>
1862 <key>1</key>
1863 <dict>
1864 <key>name</key>
1865 <string>punctuation.definition.tag.begin.html</string>
1866 </dict>
1867 <key>2</key>
1868 <dict>
1869 <key>name</key>
1870 <string>entity.name.tag.html</string>
1871 </dict>
1872 <key>3</key>
1873 <dict>
1874 <key>patterns</key>
1875 <array>
1876 <dict>
1877 <key>include</key>
1878 <string>#attribute</string>
1879 </dict>
1880 </array>
1881 </dict>
1882 <key>5</key>
1883 <dict>
1884 <key>name</key>
1885 <string>punctuation.definition.tag.end.html</string>
1886 </dict>
1887 </dict>
1888 <key>match</key>
1889 <string>(?i)(&lt;)(color-profile|desc|metadata|script|style|title)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
1890 <key>name</key>
1891 <string>meta.element.metadata.svg.$2.html</string>
1892 </dict>
1893 <dict>
1894 <key>begin</key>
1895 <string>(?i)(&lt;)(color-profile|desc|metadata|script|style|title)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
1896 <key>beginCaptures</key>
1897 <dict>
1898 <key>0</key>
1899 <dict>
1900 <key>name</key>
1901 <string>meta.tag.metadata.svg.$2.start.html</string>
1902 </dict>
1903 <key>1</key>
1904 <dict>
1905 <key>name</key>
1906 <string>punctuation.definition.tag.begin.html</string>
1907 </dict>
1908 <key>2</key>
1909 <dict>
1910 <key>name</key>
1911 <string>entity.name.tag.html</string>
1912 </dict>
1913 <key>3</key>
1914 <dict>
1915 <key>patterns</key>
1916 <array>
1917 <dict>
1918 <key>include</key>
1919 <string>#attribute</string>
1920 </dict>
1921 </array>
1922 </dict>
1923 <key>5</key>
1924 <dict>
1925 <key>name</key>
1926 <string>punctuation.definition.tag.end.html</string>
1927 </dict>
1928 </dict>
1929 <key>end</key>
1930 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
1931 <key>endCaptures</key>
1932 <dict>
1933 <key>0</key>
1934 <dict>
1935 <key>name</key>
1936 <string>meta.tag.metadata.svg.$2.end.html</string>
1937 </dict>
1938 <key>1</key>
1939 <dict>
1940 <key>name</key>
1941 <string>punctuation.definition.tag.begin.html</string>
1942 </dict>
1943 <key>2</key>
1944 <dict>
1945 <key>name</key>
1946 <string>entity.name.tag.html</string>
1947 </dict>
1948 <key>3</key>
1949 <dict>
1950 <key>name</key>
1951 <string>punctuation.definition.tag.end.html</string>
1952 </dict>
1953 <key>4</key>
1954 <dict>
1955 <key>name</key>
1956 <string>punctuation.definition.tag.end.html</string>
1957 </dict>
1958 </dict>
1959 <key>name</key>
1960 <string>meta.element.metadata.svg.$2.html</string>
1961 <key>patterns</key>
1962 <array>
1963 <dict>
1964 <key>begin</key>
1965 <string>(?&lt;!&gt;)\G</string>
1966 <key>end</key>
1967 <string>(?=/&gt;)|&gt;</string>
1968 <key>endCaptures</key>
1969 <dict>
1970 <key>0</key>
1971 <dict>
1972 <key>name</key>
1973 <string>punctuation.definition.tag.end.html</string>
1974 </dict>
1975 </dict>
1976 <key>name</key>
1977 <string>meta.tag.metadata.start.html</string>
1978 <key>patterns</key>
1979 <array>
1980 <dict>
1981 <key>include</key>
1982 <string>#attribute</string>
1983 </dict>
1984 </array>
1985 </dict>
1986 <dict>
1987 <key>include</key>
1988 <string>#tags</string>
1989 </dict>
1990 </array>
1991 </dict>
1992 <dict>
1993 <key>captures</key>
1994 <dict>
1995 <key>0</key>
1996 <dict>
1997 <key>name</key>
1998 <string>meta.tag.structure.svg.$2.void.html</string>
1999 </dict>
2000 <key>1</key>
2001 <dict>
2002 <key>name</key>
2003 <string>punctuation.definition.tag.begin.html</string>
2004 </dict>
2005 <key>2</key>
2006 <dict>
2007 <key>name</key>
2008 <string>entity.name.tag.html</string>
2009 </dict>
2010 <key>3</key>
2011 <dict>
2012 <key>patterns</key>
2013 <array>
2014 <dict>
2015 <key>include</key>
2016 <string>#attribute</string>
2017 </dict>
2018 </array>
2019 </dict>
2020 <key>5</key>
2021 <dict>
2022 <key>name</key>
2023 <string>punctuation.definition.tag.end.html</string>
2024 </dict>
2025 </dict>
2026 <key>match</key>
2027 <string>(?i)(&lt;)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
2028 <key>name</key>
2029 <string>meta.element.structure.svg.$2.html</string>
2030 </dict>
2031 <dict>
2032 <key>begin</key>
2033 <string>(?i)(&lt;)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
2034 <key>beginCaptures</key>
2035 <dict>
2036 <key>0</key>
2037 <dict>
2038 <key>name</key>
2039 <string>meta.tag.structure.svg.$2.start.html</string>
2040 </dict>
2041 <key>1</key>
2042 <dict>
2043 <key>name</key>
2044 <string>punctuation.definition.tag.begin.html</string>
2045 </dict>
2046 <key>2</key>
2047 <dict>
2048 <key>name</key>
2049 <string>entity.name.tag.html</string>
2050 </dict>
2051 <key>3</key>
2052 <dict>
2053 <key>patterns</key>
2054 <array>
2055 <dict>
2056 <key>include</key>
2057 <string>#attribute</string>
2058 </dict>
2059 </array>
2060 </dict>
2061 <key>5</key>
2062 <dict>
2063 <key>name</key>
2064 <string>punctuation.definition.tag.end.html</string>
2065 </dict>
2066 </dict>
2067 <key>end</key>
2068 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
2069 <key>endCaptures</key>
2070 <dict>
2071 <key>0</key>
2072 <dict>
2073 <key>name</key>
2074 <string>meta.tag.structure.svg.$2.end.html</string>
2075 </dict>
2076 <key>1</key>
2077 <dict>
2078 <key>name</key>
2079 <string>punctuation.definition.tag.begin.html</string>
2080 </dict>
2081 <key>2</key>
2082 <dict>
2083 <key>name</key>
2084 <string>entity.name.tag.html</string>
2085 </dict>
2086 <key>3</key>
2087 <dict>
2088 <key>name</key>
2089 <string>punctuation.definition.tag.end.html</string>
2090 </dict>
2091 <key>4</key>
2092 <dict>
2093 <key>name</key>
2094 <string>punctuation.definition.tag.end.html</string>
2095 </dict>
2096 </dict>
2097 <key>name</key>
2098 <string>meta.element.structure.svg.$2.html</string>
2099 <key>patterns</key>
2100 <array>
2101 <dict>
2102 <key>begin</key>
2103 <string>(?&lt;!&gt;)\G</string>
2104 <key>end</key>
2105 <string>(?=/&gt;)|&gt;</string>
2106 <key>endCaptures</key>
2107 <dict>
2108 <key>0</key>
2109 <dict>
2110 <key>name</key>
2111 <string>punctuation.definition.tag.end.html</string>
2112 </dict>
2113 </dict>
2114 <key>name</key>
2115 <string>meta.tag.structure.start.html</string>
2116 <key>patterns</key>
2117 <array>
2118 <dict>
2119 <key>include</key>
2120 <string>#attribute</string>
2121 </dict>
2122 </array>
2123 </dict>
2124 <dict>
2125 <key>include</key>
2126 <string>#tags</string>
2127 </dict>
2128 </array>
2129 </dict>
2130 <dict>
2131 <key>captures</key>
2132 <dict>
2133 <key>0</key>
2134 <dict>
2135 <key>name</key>
2136 <string>meta.tag.inline.svg.$2.void.html</string>
2137 </dict>
2138 <key>1</key>
2139 <dict>
2140 <key>name</key>
2141 <string>punctuation.definition.tag.begin.html</string>
2142 </dict>
2143 <key>2</key>
2144 <dict>
2145 <key>name</key>
2146 <string>entity.name.tag.html</string>
2147 </dict>
2148 <key>3</key>
2149 <dict>
2150 <key>patterns</key>
2151 <array>
2152 <dict>
2153 <key>include</key>
2154 <string>#attribute</string>
2155 </dict>
2156 </array>
2157 </dict>
2158 <key>5</key>
2159 <dict>
2160 <key>name</key>
2161 <string>punctuation.definition.tag.end.html</string>
2162 </dict>
2163 </dict>
2164 <key>match</key>
2165 <string>(?i)(&lt;)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
2166 <key>name</key>
2167 <string>meta.element.inline.svg.$2.html</string>
2168 </dict>
2169 <dict>
2170 <key>begin</key>
2171 <string>(?i)(&lt;)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
2172 <key>beginCaptures</key>
2173 <dict>
2174 <key>0</key>
2175 <dict>
2176 <key>name</key>
2177 <string>meta.tag.inline.svg.$2.start.html</string>
2178 </dict>
2179 <key>1</key>
2180 <dict>
2181 <key>name</key>
2182 <string>punctuation.definition.tag.begin.html</string>
2183 </dict>
2184 <key>2</key>
2185 <dict>
2186 <key>name</key>
2187 <string>entity.name.tag.html</string>
2188 </dict>
2189 <key>3</key>
2190 <dict>
2191 <key>patterns</key>
2192 <array>
2193 <dict>
2194 <key>include</key>
2195 <string>#attribute</string>
2196 </dict>
2197 </array>
2198 </dict>
2199 <key>5</key>
2200 <dict>
2201 <key>name</key>
2202 <string>punctuation.definition.tag.end.html</string>
2203 </dict>
2204 </dict>
2205 <key>end</key>
2206 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
2207 <key>endCaptures</key>
2208 <dict>
2209 <key>0</key>
2210 <dict>
2211 <key>name</key>
2212 <string>meta.tag.inline.svg.$2.end.html</string>
2213 </dict>
2214 <key>1</key>
2215 <dict>
2216 <key>name</key>
2217 <string>punctuation.definition.tag.begin.html</string>
2218 </dict>
2219 <key>2</key>
2220 <dict>
2221 <key>name</key>
2222 <string>entity.name.tag.html</string>
2223 </dict>
2224 <key>3</key>
2225 <dict>
2226 <key>name</key>
2227 <string>punctuation.definition.tag.end.html</string>
2228 </dict>
2229 <key>4</key>
2230 <dict>
2231 <key>name</key>
2232 <string>punctuation.definition.tag.end.html</string>
2233 </dict>
2234 </dict>
2235 <key>name</key>
2236 <string>meta.element.inline.svg.$2.html</string>
2237 <key>patterns</key>
2238 <array>
2239 <dict>
2240 <key>begin</key>
2241 <string>(?&lt;!&gt;)\G</string>
2242 <key>end</key>
2243 <string>(?=/&gt;)|&gt;</string>
2244 <key>endCaptures</key>
2245 <dict>
2246 <key>0</key>
2247 <dict>
2248 <key>name</key>
2249 <string>punctuation.definition.tag.end.html</string>
2250 </dict>
2251 </dict>
2252 <key>name</key>
2253 <string>meta.tag.inline.start.html</string>
2254 <key>patterns</key>
2255 <array>
2256 <dict>
2257 <key>include</key>
2258 <string>#attribute</string>
2259 </dict>
2260 </array>
2261 </dict>
2262 <dict>
2263 <key>include</key>
2264 <string>#tags</string>
2265 </dict>
2266 </array>
2267 </dict>
2268 <dict>
2269 <key>captures</key>
2270 <dict>
2271 <key>0</key>
2272 <dict>
2273 <key>name</key>
2274 <string>meta.tag.object.svg.$2.void.html</string>
2275 </dict>
2276 <key>1</key>
2277 <dict>
2278 <key>name</key>
2279 <string>punctuation.definition.tag.begin.html</string>
2280 </dict>
2281 <key>2</key>
2282 <dict>
2283 <key>name</key>
2284 <string>entity.name.tag.html</string>
2285 </dict>
2286 <key>3</key>
2287 <dict>
2288 <key>patterns</key>
2289 <array>
2290 <dict>
2291 <key>include</key>
2292 <string>#attribute</string>
2293 </dict>
2294 </array>
2295 </dict>
2296 <key>5</key>
2297 <dict>
2298 <key>name</key>
2299 <string>punctuation.definition.tag.end.html</string>
2300 </dict>
2301 </dict>
2302 <key>match</key>
2303 <string>(?i)(&lt;)(circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
2304 <key>name</key>
2305 <string>meta.element.object.svg.$2.html</string>
2306 </dict>
2307 <dict>
2308 <key>begin</key>
2309 <string>(?i)(&lt;)(a|circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
2310 <key>beginCaptures</key>
2311 <dict>
2312 <key>0</key>
2313 <dict>
2314 <key>name</key>
2315 <string>meta.tag.object.svg.$2.start.html</string>
2316 </dict>
2317 <key>1</key>
2318 <dict>
2319 <key>name</key>
2320 <string>punctuation.definition.tag.begin.html</string>
2321 </dict>
2322 <key>2</key>
2323 <dict>
2324 <key>name</key>
2325 <string>entity.name.tag.html</string>
2326 </dict>
2327 <key>3</key>
2328 <dict>
2329 <key>patterns</key>
2330 <array>
2331 <dict>
2332 <key>include</key>
2333 <string>#attribute</string>
2334 </dict>
2335 </array>
2336 </dict>
2337 <key>5</key>
2338 <dict>
2339 <key>name</key>
2340 <string>punctuation.definition.tag.end.html</string>
2341 </dict>
2342 </dict>
2343 <key>end</key>
2344 <string>(?i)(&lt;/)(\2)\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
2345 <key>endCaptures</key>
2346 <dict>
2347 <key>0</key>
2348 <dict>
2349 <key>name</key>
2350 <string>meta.tag.object.svg.$2.end.html</string>
2351 </dict>
2352 <key>1</key>
2353 <dict>
2354 <key>name</key>
2355 <string>punctuation.definition.tag.begin.html</string>
2356 </dict>
2357 <key>2</key>
2358 <dict>
2359 <key>name</key>
2360 <string>entity.name.tag.html</string>
2361 </dict>
2362 <key>3</key>
2363 <dict>
2364 <key>name</key>
2365 <string>punctuation.definition.tag.end.html</string>
2366 </dict>
2367 <key>4</key>
2368 <dict>
2369 <key>name</key>
2370 <string>punctuation.definition.tag.end.html</string>
2371 </dict>
2372 </dict>
2373 <key>name</key>
2374 <string>meta.element.object.svg.$2.html</string>
2375 <key>patterns</key>
2376 <array>
2377 <dict>
2378 <key>begin</key>
2379 <string>(?&lt;!&gt;)\G</string>
2380 <key>end</key>
2381 <string>(?=/&gt;)|&gt;</string>
2382 <key>endCaptures</key>
2383 <dict>
2384 <key>0</key>
2385 <dict>
2386 <key>name</key>
2387 <string>punctuation.definition.tag.end.html</string>
2388 </dict>
2389 </dict>
2390 <key>name</key>
2391 <string>meta.tag.object.start.html</string>
2392 <key>patterns</key>
2393 <array>
2394 <dict>
2395 <key>include</key>
2396 <string>#attribute</string>
2397 </dict>
2398 </array>
2399 </dict>
2400 <dict>
2401 <key>include</key>
2402 <string>#tags</string>
2403 </dict>
2404 </array>
2405 </dict>
2406 <dict>
2407 <key>captures</key>
2408 <dict>
2409 <key>0</key>
2410 <dict>
2411 <key>name</key>
2412 <string>meta.tag.other.svg.$2.void.html</string>
2413 </dict>
2414 <key>1</key>
2415 <dict>
2416 <key>name</key>
2417 <string>punctuation.definition.tag.begin.html</string>
2418 </dict>
2419 <key>2</key>
2420 <dict>
2421 <key>name</key>
2422 <string>entity.name.tag.html</string>
2423 </dict>
2424 <key>3</key>
2425 <dict>
2426 <key>name</key>
2427 <string>invalid.deprecated.html</string>
2428 </dict>
2429 <key>4</key>
2430 <dict>
2431 <key>patterns</key>
2432 <array>
2433 <dict>
2434 <key>include</key>
2435 <string>#attribute</string>
2436 </dict>
2437 </array>
2438 </dict>
2439 <key>6</key>
2440 <dict>
2441 <key>name</key>
2442 <string>punctuation.definition.tag.end.html</string>
2443 </dict>
2444 </dict>
2445 <key>match</key>
2446 <string>(?i)(&lt;)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
2447 <key>name</key>
2448 <string>meta.element.other.svg.$2.html</string>
2449 </dict>
2450 <dict>
2451 <key>begin</key>
2452 <string>(?i)(&lt;)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
2453 <key>beginCaptures</key>
2454 <dict>
2455 <key>0</key>
2456 <dict>
2457 <key>name</key>
2458 <string>meta.tag.other.svg.$2.start.html</string>
2459 </dict>
2460 <key>1</key>
2461 <dict>
2462 <key>name</key>
2463 <string>punctuation.definition.tag.begin.html</string>
2464 </dict>
2465 <key>2</key>
2466 <dict>
2467 <key>name</key>
2468 <string>entity.name.tag.html</string>
2469 </dict>
2470 <key>3</key>
2471 <dict>
2472 <key>name</key>
2473 <string>invalid.deprecated.html</string>
2474 </dict>
2475 <key>4</key>
2476 <dict>
2477 <key>patterns</key>
2478 <array>
2479 <dict>
2480 <key>include</key>
2481 <string>#attribute</string>
2482 </dict>
2483 </array>
2484 </dict>
2485 <key>6</key>
2486 <dict>
2487 <key>name</key>
2488 <string>punctuation.definition.tag.end.html</string>
2489 </dict>
2490 </dict>
2491 <key>end</key>
2492 <string>(?i)(&lt;/)((\2))\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
2493 <key>endCaptures</key>
2494 <dict>
2495 <key>0</key>
2496 <dict>
2497 <key>name</key>
2498 <string>meta.tag.other.svg.$2.end.html</string>
2499 </dict>
2500 <key>1</key>
2501 <dict>
2502 <key>name</key>
2503 <string>punctuation.definition.tag.begin.html</string>
2504 </dict>
2505 <key>2</key>
2506 <dict>
2507 <key>name</key>
2508 <string>entity.name.tag.html</string>
2509 </dict>
2510 <key>3</key>
2511 <dict>
2512 <key>name</key>
2513 <string>invalid.deprecated.html</string>
2514 </dict>
2515 <key>4</key>
2516 <dict>
2517 <key>name</key>
2518 <string>punctuation.definition.tag.end.html</string>
2519 </dict>
2520 <key>5</key>
2521 <dict>
2522 <key>name</key>
2523 <string>punctuation.definition.tag.end.html</string>
2524 </dict>
2525 </dict>
2526 <key>name</key>
2527 <string>meta.element.other.svg.$2.html</string>
2528 <key>patterns</key>
2529 <array>
2530 <dict>
2531 <key>begin</key>
2532 <string>(?&lt;!&gt;)\G</string>
2533 <key>end</key>
2534 <string>(?=/&gt;)|&gt;</string>
2535 <key>endCaptures</key>
2536 <dict>
2537 <key>0</key>
2538 <dict>
2539 <key>name</key>
2540 <string>punctuation.definition.tag.end.html</string>
2541 </dict>
2542 </dict>
2543 <key>name</key>
2544 <string>meta.tag.other.start.html</string>
2545 <key>patterns</key>
2546 <array>
2547 <dict>
2548 <key>include</key>
2549 <string>#attribute</string>
2550 </dict>
2551 </array>
2552 </dict>
2553 <dict>
2554 <key>include</key>
2555 <string>#tags</string>
2556 </dict>
2557 </array>
2558 </dict>
2559 <dict>
2560 <key>captures</key>
2561 <dict>
2562 <key>0</key>
2563 <dict>
2564 <key>name</key>
2565 <string>meta.tag.other.invalid.void.html</string>
2566 </dict>
2567 <key>1</key>
2568 <dict>
2569 <key>name</key>
2570 <string>punctuation.definition.tag.begin.html</string>
2571 </dict>
2572 <key>2</key>
2573 <dict>
2574 <key>name</key>
2575 <string>entity.name.tag.html</string>
2576 </dict>
2577 <key>3</key>
2578 <dict>
2579 <key>name</key>
2580 <string>invalid.illegal.unrecognized-tag.html</string>
2581 </dict>
2582 <key>4</key>
2583 <dict>
2584 <key>patterns</key>
2585 <array>
2586 <dict>
2587 <key>include</key>
2588 <string>#attribute</string>
2589 </dict>
2590 </array>
2591 </dict>
2592 <key>6</key>
2593 <dict>
2594 <key>name</key>
2595 <string>punctuation.definition.tag.end.html</string>
2596 </dict>
2597 </dict>
2598 <key>match</key>
2599 <string>(?i)(&lt;)(([\w:]+))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(/&gt;))</string>
2600 <key>name</key>
2601 <string>meta.element.other.invalid.html</string>
2602 </dict>
2603 <dict>
2604 <key>begin</key>
2605 <string>(?i)(&lt;)((\w[^\s&gt;]*))(?=\s|/?&gt;)(?:(([^"'&gt;]|"[^"]*"|'[^']*')*)(&gt;))?</string>
2606 <key>beginCaptures</key>
2607 <dict>
2608 <key>0</key>
2609 <dict>
2610 <key>name</key>
2611 <string>meta.tag.other.invalid.start.html</string>
2612 </dict>
2613 <key>1</key>
2614 <dict>
2615 <key>name</key>
2616 <string>punctuation.definition.tag.begin.html</string>
2617 </dict>
2618 <key>2</key>
2619 <dict>
2620 <key>name</key>
2621 <string>entity.name.tag.html</string>
2622 </dict>
2623 <key>3</key>
2624 <dict>
2625 <key>name</key>
2626 <string>invalid.illegal.unrecognized-tag.html</string>
2627 </dict>
2628 <key>4</key>
2629 <dict>
2630 <key>patterns</key>
2631 <array>
2632 <dict>
2633 <key>include</key>
2634 <string>#attribute</string>
2635 </dict>
2636 </array>
2637 </dict>
2638 <key>6</key>
2639 <dict>
2640 <key>name</key>
2641 <string>punctuation.definition.tag.end.html</string>
2642 </dict>
2643 </dict>
2644 <key>end</key>
2645 <string>(?i)(&lt;/)((\2))\s*(&gt;)|(/&gt;)|(?=&lt;/\w+)</string>
2646 <key>endCaptures</key>
2647 <dict>
2648 <key>0</key>
2649 <dict>
2650 <key>name</key>
2651 <string>meta.tag.other.invalid.end.html</string>
2652 </dict>
2653 <key>1</key>
2654 <dict>
2655 <key>name</key>
2656 <string>punctuation.definition.tag.begin.html</string>
2657 </dict>
2658 <key>2</key>
2659 <dict>
2660 <key>name</key>
2661 <string>entity.name.tag.html</string>
2662 </dict>
2663 <key>3</key>
2664 <dict>
2665 <key>name</key>
2666 <string>invalid.illegal.unrecognized-tag.html</string>
2667 </dict>
2668 <key>4</key>
2669 <dict>
2670 <key>name</key>
2671 <string>punctuation.definition.tag.end.html</string>
2672 </dict>
2673 <key>5</key>
2674 <dict>
2675 <key>name</key>
2676 <string>punctuation.definition.tag.end.html</string>
2677 </dict>
2678 </dict>
2679 <key>name</key>
2680 <string>meta.element.other.invalid.html</string>
2681 <key>patterns</key>
2682 <array>
2683 <dict>
2684 <key>begin</key>
2685 <string>(?&lt;!&gt;)\G</string>
2686 <key>end</key>
2687 <string>(?=/&gt;)|&gt;</string>
2688 <key>endCaptures</key>
2689 <dict>
2690 <key>0</key>
2691 <dict>
2692 <key>name</key>
2693 <string>punctuation.definition.tag.end.html</string>
2694 </dict>
2695 </dict>
2696 <key>name</key>
2697 <string>meta.tag.other.invalid.start.html</string>
2698 <key>patterns</key>
2699 <array>
2700 <dict>
2701 <key>include</key>
2702 <string>#attribute</string>
2703 </dict>
2704 </array>
2705 </dict>
2706 <dict>
2707 <key>include</key>
2708 <string>#tags</string>
2709 </dict>
2710 </array>
2711 </dict>
2712 <dict>
2713 <key>include</key>
2714 <string>#tags-invalid</string>
2715 </dict>
2716 </array>
2717 </dict>
2718 </dict>
2719 </dict>
2720 <key>tags-invalid</key>
2721 <dict>
2722 <key>patterns</key>
2723 <array>
2724 <dict>
2725 <key>begin</key>
2726 <string>(&lt;/?)((\w[^\s&gt;]*))(?&lt;!/)</string>
2727 <key>beginCaptures</key>
2728 <dict>
2729 <key>1</key>
2730 <dict>
2731 <key>name</key>
2732 <string>punctuation.definition.tag.begin.html</string>
2733 </dict>
2734 <key>2</key>
2735 <dict>
2736 <key>name</key>
2737 <string>entity.name.tag.html</string>
2738 </dict>
2739 <key>3</key>
2740 <dict>
2741 <key>name</key>
2742 <string>invalid.illegal.unrecognized-tag.html</string>
2743 </dict>
2744 </dict>
2745 <key>end</key>
2746 <string>((?: ?/)?&gt;)</string>
2747 <key>endCaptures</key>
2748 <dict>
2749 <key>1</key>
2750 <dict>
2751 <key>name</key>
2752 <string>punctuation.definition.tag.end.html</string>
2753 </dict>
2754 </dict>
2755 <key>name</key>
2756 <string>meta.tag.other.$2.html</string>
2757 <key>patterns</key>
2758 <array>
2759 <dict>
2760 <key>include</key>
2761 <string>#attribute</string>
2762 </dict>
2763 </array>
2764 </dict>
2765 </array>
2766 </dict>
2767 <key>tags-valid</key>
2768 <dict>
2769 <key>patterns</key>
2770 <array>
2771 <dict>
2772 <key>begin</key>
2773 <string>(^[ \t]+)?(?=&lt;(?i:style)\b(?!-))</string>
2774 <key>beginCaptures</key>
2775 <dict>
2776 <key>1</key>
2777 <dict>
2778 <key>name</key>
2779 <string>punctuation.whitespace.embedded.leading.html</string>
2780 </dict>
2781 </dict>
2782 <key>end</key>
2783 <string>(?!\G)([ \t]*$\n?)?</string>
2784 <key>endCaptures</key>
2785 <dict>
2786 <key>1</key>
2787 <dict>
2788 <key>name</key>
2789 <string>punctuation.whitespace.embedded.trailing.html</string>
2790 </dict>
2791 </dict>
2792 <key>patterns</key>
2793 <array>
2794 <dict>
2795 <key>begin</key>
2796 <string>(?i)(&lt;)(style)(?=\s|/?&gt;)</string>
2797 <key>beginCaptures</key>
2798 <dict>
2799 <key>0</key>
2800 <dict>
2801 <key>name</key>
2802 <string>meta.tag.metadata.style.start.html</string>
2803 </dict>
2804 <key>1</key>
2805 <dict>
2806 <key>name</key>
2807 <string>punctuation.definition.tag.begin.html</string>
2808 </dict>
2809 <key>2</key>
2810 <dict>
2811 <key>name</key>
2812 <string>entity.name.tag.html</string>
2813 </dict>
2814 </dict>
2815 <key>end</key>
2816 <string>(?i)((&lt;)/)(style)\s*(&gt;)</string>
2817 <key>endCaptures</key>
2818 <dict>
2819 <key>0</key>
2820 <dict>
2821 <key>name</key>
2822 <string>meta.tag.metadata.style.end.html</string>
2823 </dict>
2824 <key>1</key>
2825 <dict>
2826 <key>name</key>
2827 <string>punctuation.definition.tag.begin.html</string>
2828 </dict>
2829 <key>2</key>
2830 <dict>
2831 <key>name</key>
2832 <string>source.css</string>
2833 </dict>
2834 <key>3</key>
2835 <dict>
2836 <key>name</key>
2837 <string>entity.name.tag.html</string>
2838 </dict>
2839 <key>4</key>
2840 <dict>
2841 <key>name</key>
2842 <string>punctuation.definition.tag.end.html</string>
2843 </dict>
2844 </dict>
2845 <key>name</key>
2846 <string>meta.embedded.block.html</string>
2847 <key>patterns</key>
2848 <array>
2849 <dict>
2850 <key>begin</key>
2851 <string>\G</string>
2852 <key>captures</key>
2853 <dict>
2854 <key>1</key>
2855 <dict>
2856 <key>name</key>
2857 <string>punctuation.definition.tag.end.html</string>
2858 </dict>
2859 </dict>
2860 <key>end</key>
2861 <string>(&gt;)</string>
2862 <key>name</key>
2863 <string>meta.tag.metadata.style.start.html</string>
2864 <key>patterns</key>
2865 <array>
2866 <dict>
2867 <key>include</key>
2868 <string>#attribute</string>
2869 </dict>
2870 </array>
2871 </dict>
2872 <dict>
2873 <key>begin</key>
2874 <string>(?!\G)</string>
2875 <key>end</key>
2876 <string>(?=&lt;/(?i:style))</string>
2877 <key>name</key>
2878 <string>source.css</string>
2879 <key>patterns</key>
2880 <array>
2881 <dict>
2882 <key>include</key>
2883 <string>source.css</string>
2884 </dict>
2885 </array>
2886 </dict>
2887 </array>
2888 </dict>
2889 </array>
2890 </dict>
2891 <dict>
2892 <key>begin</key>
2893 <string>(^[ \t]+)?(?=&lt;(?i:script)\b(?!-))</string>
2894 <key>beginCaptures</key>
2895 <dict>
2896 <key>1</key>
2897 <dict>
2898 <key>name</key>
2899 <string>punctuation.whitespace.embedded.leading.html</string>
2900 </dict>
2901 </dict>
2902 <key>end</key>
2903 <string>(?!\G)([ \t]*$\n?)?</string>
2904 <key>endCaptures</key>
2905 <dict>
2906 <key>1</key>
2907 <dict>
2908 <key>name</key>
2909 <string>punctuation.whitespace.embedded.trailing.html</string>
2910 </dict>
2911 </dict>
2912 <key>patterns</key>
2913 <array>
2914 <dict>
2915 <key>begin</key>
2916 <string>(&lt;)((?i:script))\b</string>
2917 <key>beginCaptures</key>
2918 <dict>
2919 <key>0</key>
2920 <dict>
2921 <key>name</key>
2922 <string>meta.tag.metadata.script.start.html</string>
2923 </dict>
2924 <key>1</key>
2925 <dict>
2926 <key>name</key>
2927 <string>punctuation.definition.tag.begin.html</string>
2928 </dict>
2929 <key>2</key>
2930 <dict>
2931 <key>name</key>
2932 <string>entity.name.tag.html</string>
2933 </dict>
2934 </dict>
2935 <key>end</key>
2936 <string>(/)((?i:script))(&gt;)</string>
2937 <key>endCaptures</key>
2938 <dict>
2939 <key>0</key>
2940 <dict>
2941 <key>name</key>
2942 <string>meta.tag.metadata.script.end.html</string>
2943 </dict>
2944 <key>1</key>
2945 <dict>
2946 <key>name</key>
2947 <string>punctuation.definition.tag.begin.html</string>
2948 </dict>
2949 <key>2</key>
2950 <dict>
2951 <key>name</key>
2952 <string>entity.name.tag.html</string>
2953 </dict>
2954 <key>3</key>
2955 <dict>
2956 <key>name</key>
2957 <string>punctuation.definition.tag.end.html</string>
2958 </dict>
2959 </dict>
2960 <key>name</key>
2961 <string>meta.embedded.block.html</string>
2962 <key>patterns</key>
2963 <array>
2964 <dict>
2965 <key>begin</key>
2966 <string>\G</string>
2967 <key>end</key>
2968 <string>(?=/)</string>
2969 <key>patterns</key>
2970 <array>
2971 <dict>
2972 <key>begin</key>
2973 <string>(&gt;)</string>
2974 <key>beginCaptures</key>
2975 <dict>
2976 <key>0</key>
2977 <dict>
2978 <key>name</key>
2979 <string>meta.tag.metadata.script.start.html</string>
2980 </dict>
2981 <key>1</key>
2982 <dict>
2983 <key>name</key>
2984 <string>punctuation.definition.tag.end.html</string>
2985 </dict>
2986 </dict>
2987 <key>end</key>
2988 <string>((&lt;))(?=/(?i:script))</string>
2989 <key>endCaptures</key>
2990 <dict>
2991 <key>0</key>
2992 <dict>
2993 <key>name</key>
2994 <string>meta.tag.metadata.script.end.html</string>
2995 </dict>
2996 <key>1</key>
2997 <dict>
2998 <key>name</key>
2999 <string>punctuation.definition.tag.begin.html</string>
3000 </dict>
3001 <key>2</key>
3002 <dict>
3003 <key>name</key>
3004 <string>source.js</string>
3005 </dict>
3006 </dict>
3007 <key>patterns</key>
3008 <array>
3009 <dict>
3010 <key>begin</key>
3011 <string>\G</string>
3012 <key>end</key>
3013 <string>(?=&lt;/(?i:script))</string>
3014 <key>name</key>
3015 <string>source.js</string>
3016 <key>patterns</key>
3017 <array>
3018 <dict>
3019 <key>begin</key>
3020 <string>(^[ \t]+)?(?=//)</string>
3021 <key>beginCaptures</key>
3022 <dict>
3023 <key>1</key>
3024 <dict>
3025 <key>name</key>
3026 <string>punctuation.whitespace.comment.leading.js</string>
3027 </dict>
3028 </dict>
3029 <key>end</key>
3030 <string>(?!\G)</string>
3031 <key>patterns</key>
3032 <array>
3033 <dict>
3034 <key>begin</key>
3035 <string>//</string>
3036 <key>beginCaptures</key>
3037 <dict>
3038 <key>0</key>
3039 <dict>
3040 <key>name</key>
3041 <string>punctuation.definition.comment.js</string>
3042 </dict>
3043 </dict>
3044 <key>end</key>
3045 <string>(?=&lt;/script)|\n</string>
3046 <key>name</key>
3047 <string>comment.line.double-slash.js</string>
3048 </dict>
3049 </array>
3050 </dict>
3051 <dict>
3052 <key>begin</key>
3053 <string>/\*</string>
3054 <key>captures</key>
3055 <dict>
3056 <key>0</key>
3057 <dict>
3058 <key>name</key>
3059 <string>punctuation.definition.comment.js</string>
3060 </dict>
3061 </dict>
3062 <key>end</key>
3063 <string>\*/|(?=&lt;/script)</string>
3064 <key>name</key>
3065 <string>comment.block.js</string>
3066 </dict>
3067 <dict>
3068 <key>include</key>
3069 <string>source.js</string>
3070 </dict>
3071 </array>
3072 </dict>
3073 </array>
3074 </dict>
3075 <dict>
3076 <key>begin</key>
3077 <string>\G</string>
3078 <key>end</key>
3079 <string>(?ix:
3080 (?=&gt; # Tag without type attribute
3081 | type(?=[\s=])
3082 (?!\s*=\s*
3083 (
3084 '' # Empty
3085 | "" # Values
3086 | ('|"|)
3087 (
3088 text/ # Text mime-types
3089 (
3090 javascript(1\.[0-5])?
3091 | x-javascript
3092 | jscript
3093 | livescript
3094 | (x-)?ecmascript
3095 | babel # Javascript variant currently
3096 # recognized as such
3097 )
3098 | application/ # Application mime-types
3099 (
3100 (x-)?javascript
3101 | (x-)?ecmascript
3102 )
3103 | module
3104 )
3105 [\s"'&gt;]
3106 )
3107 )
3108 )
3109 )</string>
3110 <key>name</key>
3111 <string>meta.tag.metadata.script.start.html</string>
3112 <key>patterns</key>
3113 <array>
3114 <dict>
3115 <key>include</key>
3116 <string>#attribute</string>
3117 </dict>
3118 </array>
3119 </dict>
3120 <dict>
3121 <key>begin</key>
3122 <string>(?ix:
3123 (?=
3124 type\s*=\s*
3125 ('|"|)
3126 text/
3127 (
3128 x-handlebars
3129 | (x-(handlebars-)?|ng-)?template
3130 | html
3131 )
3132 [\s"'&gt;]
3133 )
3134 )</string>
3135 <key>end</key>
3136 <string>((&lt;))(?=/(?i:script))</string>
3137 <key>endCaptures</key>
3138 <dict>
3139 <key>0</key>
3140 <dict>
3141 <key>name</key>
3142 <string>meta.tag.metadata.script.end.html</string>
3143 </dict>
3144 <key>1</key>
3145 <dict>
3146 <key>name</key>
3147 <string>punctuation.definition.tag.begin.html</string>
3148 </dict>
3149 <key>2</key>
3150 <dict>
3151 <key>name</key>
3152 <string>text.html.basic</string>
3153 </dict>
3154 </dict>
3155 <key>patterns</key>
3156 <array>
3157 <dict>
3158 <key>begin</key>
3159 <string>\G</string>
3160 <key>end</key>
3161 <string>(&gt;)</string>
3162 <key>endCaptures</key>
3163 <dict>
3164 <key>1</key>
3165 <dict>
3166 <key>name</key>
3167 <string>punctuation.definition.tag.end.html</string>
3168 </dict>
3169 </dict>
3170 <key>name</key>
3171 <string>meta.tag.metadata.script.start.html</string>
3172 <key>patterns</key>
3173 <array>
3174 <dict>
3175 <key>include</key>
3176 <string>#attribute</string>
3177 </dict>
3178 </array>
3179 </dict>
3180 <dict>
3181 <key>begin</key>
3182 <string>(?!\G)</string>
3183 <key>end</key>
3184 <string>(?=&lt;/(?i:script))</string>
3185 <key>name</key>
3186 <string>text.html.basic</string>
3187 <key>patterns</key>
3188 <array>
3189 <dict>
3190 <key>include</key>
3191 <string>text.html.basic</string>
3192 </dict>
3193 </array>
3194 </dict>
3195 </array>
3196 </dict>
3197 <dict>
3198 <key>begin</key>
3199 <string>(?=(?i:type))</string>
3200 <key>end</key>
3201 <string>(&lt;)(?=/(?i:script))</string>
3202 <key>endCaptures</key>
3203 <dict>
3204 <key>0</key>
3205 <dict>
3206 <key>name</key>
3207 <string>meta.tag.metadata.script.end.html</string>
3208 </dict>
3209 <key>1</key>
3210 <dict>
3211 <key>name</key>
3212 <string>punctuation.definition.tag.begin.html</string>
3213 </dict>
3214 </dict>
3215 <key>patterns</key>
3216 <array>
3217 <dict>
3218 <key>begin</key>
3219 <string>\G</string>
3220 <key>end</key>
3221 <string>(&gt;)</string>
3222 <key>endCaptures</key>
3223 <dict>
3224 <key>1</key>
3225 <dict>
3226 <key>name</key>
3227 <string>punctuation.definition.tag.end.html</string>
3228 </dict>
3229 </dict>
3230 <key>name</key>
3231 <string>meta.tag.metadata.script.start.html</string>
3232 <key>patterns</key>
3233 <array>
3234 <dict>
3235 <key>include</key>
3236 <string>#attribute</string>
3237 </dict>
3238 </array>
3239 </dict>
3240 <dict>
3241 <key>begin</key>
3242 <string>(?!\G)</string>
3243 <key>end</key>
3244 <string>(?=&lt;/(?i:script))</string>
3245 <key>name</key>
3246 <string>source.unknown</string>
3247 </dict>
3248 </array>
3249 </dict>
3250 </array>
3251 </dict>
3252 </array>
3253 </dict>
3254 </array>
3255 </dict>
3256 <dict>
3257 <key>begin</key>
3258 <string>(?i)(&lt;)(base|link|meta)(?=\s|/?&gt;)</string>
3259 <key>beginCaptures</key>
3260 <dict>
3261 <key>1</key>
3262 <dict>
3263 <key>name</key>
3264 <string>punctuation.definition.tag.begin.html</string>
3265 </dict>
3266 <key>2</key>
3267 <dict>
3268 <key>name</key>
3269 <string>entity.name.tag.html</string>
3270 </dict>
3271 </dict>
3272 <key>end</key>
3273 <string>/?&gt;</string>
3274 <key>endCaptures</key>
3275 <dict>
3276 <key>0</key>
3277 <dict>
3278 <key>name</key>
3279 <string>punctuation.definition.tag.end.html</string>
3280 </dict>
3281 </dict>
3282 <key>name</key>
3283 <string>meta.tag.metadata.$2.void.html</string>
3284 <key>patterns</key>
3285 <array>
3286 <dict>
3287 <key>include</key>
3288 <string>#attribute</string>
3289 </dict>
3290 </array>
3291 </dict>
3292 <dict>
3293 <key>begin</key>
3294 <string>(?i)(&lt;)(noscript|title)(?=\s|/?&gt;)</string>
3295 <key>beginCaptures</key>
3296 <dict>
3297 <key>1</key>
3298 <dict>
3299 <key>name</key>
3300 <string>punctuation.definition.tag.begin.html</string>
3301 </dict>
3302 <key>2</key>
3303 <dict>
3304 <key>name</key>
3305 <string>entity.name.tag.html</string>
3306 </dict>
3307 </dict>
3308 <key>end</key>
3309 <string>&gt;</string>
3310 <key>endCaptures</key>
3311 <dict>
3312 <key>0</key>
3313 <dict>
3314 <key>name</key>
3315 <string>punctuation.definition.tag.end.html</string>
3316 </dict>
3317 </dict>
3318 <key>name</key>
3319 <string>meta.tag.metadata.$2.start.html</string>
3320 <key>patterns</key>
3321 <array>
3322 <dict>
3323 <key>include</key>
3324 <string>#attribute</string>
3325 </dict>
3326 </array>
3327 </dict>
3328 <dict>
3329 <key>begin</key>
3330 <string>(?i)(&lt;/)(noscript|title)(?=\s|/?&gt;)</string>
3331 <key>beginCaptures</key>
3332 <dict>
3333 <key>1</key>
3334 <dict>
3335 <key>name</key>
3336 <string>punctuation.definition.tag.begin.html</string>
3337 </dict>
3338 <key>2</key>
3339 <dict>
3340 <key>name</key>
3341 <string>entity.name.tag.html</string>
3342 </dict>
3343 </dict>
3344 <key>end</key>
3345 <string>&gt;</string>
3346 <key>endCaptures</key>
3347 <dict>
3348 <key>0</key>
3349 <dict>
3350 <key>name</key>
3351 <string>punctuation.definition.tag.end.html</string>
3352 </dict>
3353 </dict>
3354 <key>name</key>
3355 <string>meta.tag.metadata.$2.end.html</string>
3356 <key>patterns</key>
3357 <array>
3358 <dict>
3359 <key>include</key>
3360 <string>#attribute</string>
3361 </dict>
3362 </array>
3363 </dict>
3364 <dict>
3365 <key>begin</key>
3366 <string>(?i)(&lt;)(col|hr|input)(?=\s|/?&gt;)</string>
3367 <key>beginCaptures</key>
3368 <dict>
3369 <key>1</key>
3370 <dict>
3371 <key>name</key>
3372 <string>punctuation.definition.tag.begin.html</string>
3373 </dict>
3374 <key>2</key>
3375 <dict>
3376 <key>name</key>
3377 <string>entity.name.tag.html</string>
3378 </dict>
3379 </dict>
3380 <key>end</key>
3381 <string>/?&gt;</string>
3382 <key>endCaptures</key>
3383 <dict>
3384 <key>0</key>
3385 <dict>
3386 <key>name</key>
3387 <string>punctuation.definition.tag.end.html</string>
3388 </dict>
3389 </dict>
3390 <key>name</key>
3391 <string>meta.tag.structure.$2.void.html</string>
3392 <key>patterns</key>
3393 <array>
3394 <dict>
3395 <key>include</key>
3396 <string>#attribute</string>
3397 </dict>
3398 </array>
3399 </dict>
3400 <dict>
3401 <key>begin</key>
3402 <string>(?i)(&lt;)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\s|/?&gt;)</string>
3403 <key>beginCaptures</key>
3404 <dict>
3405 <key>1</key>
3406 <dict>
3407 <key>name</key>
3408 <string>punctuation.definition.tag.begin.html</string>
3409 </dict>
3410 <key>2</key>
3411 <dict>
3412 <key>name</key>
3413 <string>entity.name.tag.html</string>
3414 </dict>
3415 </dict>
3416 <key>end</key>
3417 <string>&gt;</string>
3418 <key>endCaptures</key>
3419 <dict>
3420 <key>0</key>
3421 <dict>
3422 <key>name</key>
3423 <string>punctuation.definition.tag.end.html</string>
3424 </dict>
3425 </dict>
3426 <key>name</key>
3427 <string>meta.tag.structure.$2.start.html</string>
3428 <key>patterns</key>
3429 <array>
3430 <dict>
3431 <key>include</key>
3432 <string>#attribute</string>
3433 </dict>
3434 </array>
3435 </dict>
3436 <dict>
3437 <key>begin</key>
3438 <string>(?i)(&lt;/)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\s|/?&gt;)</string>
3439 <key>beginCaptures</key>
3440 <dict>
3441 <key>1</key>
3442 <dict>
3443 <key>name</key>
3444 <string>punctuation.definition.tag.begin.html</string>
3445 </dict>
3446 <key>2</key>
3447 <dict>
3448 <key>name</key>
3449 <string>entity.name.tag.html</string>
3450 </dict>
3451 </dict>
3452 <key>end</key>
3453 <string>&gt;</string>
3454 <key>endCaptures</key>
3455 <dict>
3456 <key>0</key>
3457 <dict>
3458 <key>name</key>
3459 <string>punctuation.definition.tag.end.html</string>
3460 </dict>
3461 </dict>
3462 <key>name</key>
3463 <string>meta.tag.structure.$2.end.html</string>
3464 <key>patterns</key>
3465 <array>
3466 <dict>
3467 <key>include</key>
3468 <string>#attribute</string>
3469 </dict>
3470 </array>
3471 </dict>
3472 <dict>
3473 <key>begin</key>
3474 <string>(?i)(&lt;)(area|br|wbr)(?=\s|/?&gt;)</string>
3475 <key>beginCaptures</key>
3476 <dict>
3477 <key>1</key>
3478 <dict>
3479 <key>name</key>
3480 <string>punctuation.definition.tag.begin.html</string>
3481 </dict>
3482 <key>2</key>
3483 <dict>
3484 <key>name</key>
3485 <string>entity.name.tag.html</string>
3486 </dict>
3487 </dict>
3488 <key>end</key>
3489 <string>/?&gt;</string>
3490 <key>endCaptures</key>
3491 <dict>
3492 <key>0</key>
3493 <dict>
3494 <key>name</key>
3495 <string>punctuation.definition.tag.end.html</string>
3496 </dict>
3497 </dict>
3498 <key>name</key>
3499 <string>meta.tag.inline.$2.void.html</string>
3500 <key>patterns</key>
3501 <array>
3502 <dict>
3503 <key>include</key>
3504 <string>#attribute</string>
3505 </dict>
3506 </array>
3507 </dict>
3508 <dict>
3509 <key>begin</key>
3510 <string>(?i)(&lt;)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\s|/?&gt;)</string>
3511 <key>beginCaptures</key>
3512 <dict>
3513 <key>1</key>
3514 <dict>
3515 <key>name</key>
3516 <string>punctuation.definition.tag.begin.html</string>
3517 </dict>
3518 <key>2</key>
3519 <dict>
3520 <key>name</key>
3521 <string>entity.name.tag.html</string>
3522 </dict>
3523 </dict>
3524 <key>end</key>
3525 <string>&gt;</string>
3526 <key>endCaptures</key>
3527 <dict>
3528 <key>0</key>
3529 <dict>
3530 <key>name</key>
3531 <string>punctuation.definition.tag.end.html</string>
3532 </dict>
3533 </dict>
3534 <key>name</key>
3535 <string>meta.tag.inline.$2.start.html</string>
3536 <key>patterns</key>
3537 <array>
3538 <dict>
3539 <key>include</key>
3540 <string>#attribute</string>
3541 </dict>
3542 </array>
3543 </dict>
3544 <dict>
3545 <key>begin</key>
3546 <string>(?i)(&lt;/)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\s|/?&gt;)</string>
3547 <key>beginCaptures</key>
3548 <dict>
3549 <key>1</key>
3550 <dict>
3551 <key>name</key>
3552 <string>punctuation.definition.tag.begin.html</string>
3553 </dict>
3554 <key>2</key>
3555 <dict>
3556 <key>name</key>
3557 <string>entity.name.tag.html</string>
3558 </dict>
3559 </dict>
3560 <key>end</key>
3561 <string>&gt;</string>
3562 <key>endCaptures</key>
3563 <dict>
3564 <key>0</key>
3565 <dict>
3566 <key>name</key>
3567 <string>punctuation.definition.tag.end.html</string>
3568 </dict>
3569 </dict>
3570 <key>name</key>
3571 <string>meta.tag.inline.$2.end.html</string>
3572 <key>patterns</key>
3573 <array>
3574 <dict>
3575 <key>include</key>
3576 <string>#attribute</string>
3577 </dict>
3578 </array>
3579 </dict>
3580 <dict>
3581 <key>begin</key>
3582 <string>(?i)(&lt;)(embed|img|param|source|track)(?=\s|/?&gt;)</string>
3583 <key>beginCaptures</key>
3584 <dict>
3585 <key>1</key>
3586 <dict>
3587 <key>name</key>
3588 <string>punctuation.definition.tag.begin.html</string>
3589 </dict>
3590 <key>2</key>
3591 <dict>
3592 <key>name</key>
3593 <string>entity.name.tag.html</string>
3594 </dict>
3595 </dict>
3596 <key>end</key>
3597 <string>/?&gt;</string>
3598 <key>endCaptures</key>
3599 <dict>
3600 <key>0</key>
3601 <dict>
3602 <key>name</key>
3603 <string>punctuation.definition.tag.end.html</string>
3604 </dict>
3605 </dict>
3606 <key>name</key>
3607 <string>meta.tag.object.$2.void.html</string>
3608 <key>patterns</key>
3609 <array>
3610 <dict>
3611 <key>include</key>
3612 <string>#attribute</string>
3613 </dict>
3614 </array>
3615 </dict>
3616 <dict>
3617 <key>begin</key>
3618 <string>(?i)(&lt;)(audio|canvas|iframe|object|picture|video)(?=\s|/?&gt;)</string>
3619 <key>beginCaptures</key>
3620 <dict>
3621 <key>1</key>
3622 <dict>
3623 <key>name</key>
3624 <string>punctuation.definition.tag.begin.html</string>
3625 </dict>
3626 <key>2</key>
3627 <dict>
3628 <key>name</key>
3629 <string>entity.name.tag.html</string>
3630 </dict>
3631 </dict>
3632 <key>end</key>
3633 <string>&gt;</string>
3634 <key>endCaptures</key>
3635 <dict>
3636 <key>0</key>
3637 <dict>
3638 <key>name</key>
3639 <string>punctuation.definition.tag.end.html</string>
3640 </dict>
3641 </dict>
3642 <key>name</key>
3643 <string>meta.tag.object.$2.start.html</string>
3644 <key>patterns</key>
3645 <array>
3646 <dict>
3647 <key>include</key>
3648 <string>#attribute</string>
3649 </dict>
3650 </array>
3651 </dict>
3652 <dict>
3653 <key>begin</key>
3654 <string>(?i)(&lt;/)(audio|canvas|iframe|object|picture|video)(?=\s|/?&gt;)</string>
3655 <key>beginCaptures</key>
3656 <dict>
3657 <key>1</key>
3658 <dict>
3659 <key>name</key>
3660 <string>punctuation.definition.tag.begin.html</string>
3661 </dict>
3662 <key>2</key>
3663 <dict>
3664 <key>name</key>
3665 <string>entity.name.tag.html</string>
3666 </dict>
3667 </dict>
3668 <key>end</key>
3669 <string>&gt;</string>
3670 <key>endCaptures</key>
3671 <dict>
3672 <key>0</key>
3673 <dict>
3674 <key>name</key>
3675 <string>punctuation.definition.tag.end.html</string>
3676 </dict>
3677 </dict>
3678 <key>name</key>
3679 <string>meta.tag.object.$2.end.html</string>
3680 <key>patterns</key>
3681 <array>
3682 <dict>
3683 <key>include</key>
3684 <string>#attribute</string>
3685 </dict>
3686 </array>
3687 </dict>
3688 <dict>
3689 <key>begin</key>
3690 <string>(?i)(&lt;)((basefont|isindex))(?=\s|/?&gt;)</string>
3691 <key>beginCaptures</key>
3692 <dict>
3693 <key>1</key>
3694 <dict>
3695 <key>name</key>
3696 <string>punctuation.definition.tag.begin.html</string>
3697 </dict>
3698 <key>2</key>
3699 <dict>
3700 <key>name</key>
3701 <string>entity.name.tag.html</string>
3702 </dict>
3703 <key>3</key>
3704 <dict>
3705 <key>name</key>
3706 <string>invalid.deprecated.html</string>
3707 </dict>
3708 </dict>
3709 <key>end</key>
3710 <string>/?&gt;</string>
3711 <key>endCaptures</key>
3712 <dict>
3713 <key>0</key>
3714 <dict>
3715 <key>name</key>
3716 <string>punctuation.definition.tag.end.html</string>
3717 </dict>
3718 </dict>
3719 <key>name</key>
3720 <string>meta.tag.metadata.$2.void.html</string>
3721 <key>patterns</key>
3722 <array>
3723 <dict>
3724 <key>include</key>
3725 <string>#attribute</string>
3726 </dict>
3727 </array>
3728 </dict>
3729 <dict>
3730 <key>begin</key>
3731 <string>(?i)(&lt;)((center|frameset|noembed|noframes))(?=\s|/?&gt;)</string>
3732 <key>beginCaptures</key>
3733 <dict>
3734 <key>1</key>
3735 <dict>
3736 <key>name</key>
3737 <string>punctuation.definition.tag.begin.html</string>
3738 </dict>
3739 <key>2</key>
3740 <dict>
3741 <key>name</key>
3742 <string>entity.name.tag.html</string>
3743 </dict>
3744 <key>3</key>
3745 <dict>
3746 <key>name</key>
3747 <string>invalid.deprecated.html</string>
3748 </dict>
3749 </dict>
3750 <key>end</key>
3751 <string>&gt;</string>
3752 <key>endCaptures</key>
3753 <dict>
3754 <key>0</key>
3755 <dict>
3756 <key>name</key>
3757 <string>punctuation.definition.tag.end.html</string>
3758 </dict>
3759 </dict>
3760 <key>name</key>
3761 <string>meta.tag.structure.$2.start.html</string>
3762 <key>patterns</key>
3763 <array>
3764 <dict>
3765 <key>include</key>
3766 <string>#attribute</string>
3767 </dict>
3768 </array>
3769 </dict>
3770 <dict>
3771 <key>begin</key>
3772 <string>(?i)(&lt;/)((center|frameset|noembed|noframes))(?=\s|/?&gt;)</string>
3773 <key>beginCaptures</key>
3774 <dict>
3775 <key>1</key>
3776 <dict>
3777 <key>name</key>
3778 <string>punctuation.definition.tag.begin.html</string>
3779 </dict>
3780 <key>2</key>
3781 <dict>
3782 <key>name</key>
3783 <string>entity.name.tag.html</string>
3784 </dict>
3785 <key>3</key>
3786 <dict>
3787 <key>name</key>
3788 <string>invalid.deprecated.html</string>
3789 </dict>
3790 </dict>
3791 <key>end</key>
3792 <string>&gt;</string>
3793 <key>endCaptures</key>
3794 <dict>
3795 <key>0</key>
3796 <dict>
3797 <key>name</key>
3798 <string>punctuation.definition.tag.end.html</string>
3799 </dict>
3800 </dict>
3801 <key>name</key>
3802 <string>meta.tag.structure.$2.end.html</string>
3803 <key>patterns</key>
3804 <array>
3805 <dict>
3806 <key>include</key>
3807 <string>#attribute</string>
3808 </dict>
3809 </array>
3810 </dict>
3811 <dict>
3812 <key>begin</key>
3813 <string>(?i)(&lt;)((acronym|big|blink|font|strike|tt|xmp))(?=\s|/?&gt;)</string>
3814 <key>beginCaptures</key>
3815 <dict>
3816 <key>1</key>
3817 <dict>
3818 <key>name</key>
3819 <string>punctuation.definition.tag.begin.html</string>
3820 </dict>
3821 <key>2</key>
3822 <dict>
3823 <key>name</key>
3824 <string>entity.name.tag.html</string>
3825 </dict>
3826 <key>3</key>
3827 <dict>
3828 <key>name</key>
3829 <string>invalid.deprecated.html</string>
3830 </dict>
3831 </dict>
3832 <key>end</key>
3833 <string>&gt;</string>
3834 <key>endCaptures</key>
3835 <dict>
3836 <key>0</key>
3837 <dict>
3838 <key>name</key>
3839 <string>punctuation.definition.tag.end.html</string>
3840 </dict>
3841 </dict>
3842 <key>name</key>
3843 <string>meta.tag.inline.$2.start.html</string>
3844 <key>patterns</key>
3845 <array>
3846 <dict>
3847 <key>include</key>
3848 <string>#attribute</string>
3849 </dict>
3850 </array>
3851 </dict>
3852 <dict>
3853 <key>begin</key>
3854 <string>(?i)(&lt;/)((acronym|big|blink|font|strike|tt|xmp))(?=\s|/?&gt;)</string>
3855 <key>beginCaptures</key>
3856 <dict>
3857 <key>1</key>
3858 <dict>
3859 <key>name</key>
3860 <string>punctuation.definition.tag.begin.html</string>
3861 </dict>
3862 <key>2</key>
3863 <dict>
3864 <key>name</key>
3865 <string>entity.name.tag.html</string>
3866 </dict>
3867 <key>3</key>
3868 <dict>
3869 <key>name</key>
3870 <string>invalid.deprecated.html</string>
3871 </dict>
3872 </dict>
3873 <key>end</key>
3874 <string>&gt;</string>
3875 <key>endCaptures</key>
3876 <dict>
3877 <key>0</key>
3878 <dict>
3879 <key>name</key>
3880 <string>punctuation.definition.tag.end.html</string>
3881 </dict>
3882 </dict>
3883 <key>name</key>
3884 <string>meta.tag.inline.$2.end.html</string>
3885 <key>patterns</key>
3886 <array>
3887 <dict>
3888 <key>include</key>
3889 <string>#attribute</string>
3890 </dict>
3891 </array>
3892 </dict>
3893 <dict>
3894 <key>begin</key>
3895 <string>(?i)(&lt;)((frame))(?=\s|/?&gt;)</string>
3896 <key>beginCaptures</key>
3897 <dict>
3898 <key>1</key>
3899 <dict>
3900 <key>name</key>
3901 <string>punctuation.definition.tag.begin.html</string>
3902 </dict>
3903 <key>2</key>
3904 <dict>
3905 <key>name</key>
3906 <string>entity.name.tag.html</string>
3907 </dict>
3908 <key>3</key>
3909 <dict>
3910 <key>name</key>
3911 <string>invalid.deprecated.html</string>
3912 </dict>
3913 </dict>
3914 <key>end</key>
3915 <string>/?&gt;</string>
3916 <key>endCaptures</key>
3917 <dict>
3918 <key>0</key>
3919 <dict>
3920 <key>name</key>
3921 <string>punctuation.definition.tag.end.html</string>
3922 </dict>
3923 </dict>
3924 <key>name</key>
3925 <string>meta.tag.object.$2.void.html</string>
3926 <key>patterns</key>
3927 <array>
3928 <dict>
3929 <key>include</key>
3930 <string>#attribute</string>
3931 </dict>
3932 </array>
3933 </dict>
3934 <dict>
3935 <key>begin</key>
3936 <string>(?i)(&lt;)((applet))(?=\s|/?&gt;)</string>
3937 <key>beginCaptures</key>
3938 <dict>
3939 <key>1</key>
3940 <dict>
3941 <key>name</key>
3942 <string>punctuation.definition.tag.begin.html</string>
3943 </dict>
3944 <key>2</key>
3945 <dict>
3946 <key>name</key>
3947 <string>entity.name.tag.html</string>
3948 </dict>
3949 <key>3</key>
3950 <dict>
3951 <key>name</key>
3952 <string>invalid.deprecated.html</string>
3953 </dict>
3954 </dict>
3955 <key>end</key>
3956 <string>&gt;</string>
3957 <key>endCaptures</key>
3958 <dict>
3959 <key>0</key>
3960 <dict>
3961 <key>name</key>
3962 <string>punctuation.definition.tag.end.html</string>
3963 </dict>
3964 </dict>
3965 <key>name</key>
3966 <string>meta.tag.object.$2.start.html</string>
3967 <key>patterns</key>
3968 <array>
3969 <dict>
3970 <key>include</key>
3971 <string>#attribute</string>
3972 </dict>
3973 </array>
3974 </dict>
3975 <dict>
3976 <key>begin</key>
3977 <string>(?i)(&lt;/)((applet))(?=\s|/?&gt;)</string>
3978 <key>beginCaptures</key>
3979 <dict>
3980 <key>1</key>
3981 <dict>
3982 <key>name</key>
3983 <string>punctuation.definition.tag.begin.html</string>
3984 </dict>
3985 <key>2</key>
3986 <dict>
3987 <key>name</key>
3988 <string>entity.name.tag.html</string>
3989 </dict>
3990 <key>3</key>
3991 <dict>
3992 <key>name</key>
3993 <string>invalid.deprecated.html</string>
3994 </dict>
3995 </dict>
3996 <key>end</key>
3997 <string>&gt;</string>
3998 <key>endCaptures</key>
3999 <dict>
4000 <key>0</key>
4001 <dict>
4002 <key>name</key>
4003 <string>punctuation.definition.tag.end.html</string>
4004 </dict>
4005 </dict>
4006 <key>name</key>
4007 <string>meta.tag.object.$2.end.html</string>
4008 <key>patterns</key>
4009 <array>
4010 <dict>
4011 <key>include</key>
4012 <string>#attribute</string>
4013 </dict>
4014 </array>
4015 </dict>
4016 <dict>
4017 <key>begin</key>
4018 <string>(?i)(&lt;)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\s|/?&gt;)</string>
4019 <key>beginCaptures</key>
4020 <dict>
4021 <key>1</key>
4022 <dict>
4023 <key>name</key>
4024 <string>punctuation.definition.tag.begin.html</string>
4025 </dict>
4026 <key>2</key>
4027 <dict>
4028 <key>name</key>
4029 <string>entity.name.tag.html</string>
4030 </dict>
4031 <key>3</key>
4032 <dict>
4033 <key>name</key>
4034 <string>invalid.illegal.no-longer-supported.html</string>
4035 </dict>
4036 </dict>
4037 <key>end</key>
4038 <string>&gt;</string>
4039 <key>endCaptures</key>
4040 <dict>
4041 <key>0</key>
4042 <dict>
4043 <key>name</key>
4044 <string>punctuation.definition.tag.end.html</string>
4045 </dict>
4046 </dict>
4047 <key>name</key>
4048 <string>meta.tag.other.$2.start.html</string>
4049 <key>patterns</key>
4050 <array>
4051 <dict>
4052 <key>include</key>
4053 <string>#attribute</string>
4054 </dict>
4055 </array>
4056 </dict>
4057 <dict>
4058 <key>begin</key>
4059 <string>(?i)(&lt;/)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\s|/?&gt;)</string>
4060 <key>beginCaptures</key>
4061 <dict>
4062 <key>1</key>
4063 <dict>
4064 <key>name</key>
4065 <string>punctuation.definition.tag.begin.html</string>
4066 </dict>
4067 <key>2</key>
4068 <dict>
4069 <key>name</key>
4070 <string>entity.name.tag.html</string>
4071 </dict>
4072 <key>3</key>
4073 <dict>
4074 <key>name</key>
4075 <string>invalid.illegal.no-longer-supported.html</string>
4076 </dict>
4077 </dict>
4078 <key>end</key>
4079 <string>&gt;</string>
4080 <key>endCaptures</key>
4081 <dict>
4082 <key>0</key>
4083 <dict>
4084 <key>name</key>
4085 <string>punctuation.definition.tag.end.html</string>
4086 </dict>
4087 </dict>
4088 <key>name</key>
4089 <string>meta.tag.other.$2.end.html</string>
4090 <key>patterns</key>
4091 <array>
4092 <dict>
4093 <key>include</key>
4094 <string>#attribute</string>
4095 </dict>
4096 </array>
4097 </dict>
4098 <dict>
4099 <key>include</key>
4100 <string>#math</string>
4101 </dict>
4102 <dict>
4103 <key>include</key>
4104 <string>#svg</string>
4105 </dict>
4106 <dict>
4107 <key>begin</key>
4108 <string>(&lt;)([a-zA-Z][.0-9_a-zA-Z\x{00B7}\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{203F}-\x{2040}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]*-[\-.0-9_a-zA-Z\x{00B7}\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{203F}-\x{2040}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]*)(?=\s|/?&gt;)</string>
4109 <key>beginCaptures</key>
4110 <dict>
4111 <key>1</key>
4112 <dict>
4113 <key>name</key>
4114 <string>punctuation.definition.tag.begin.html</string>
4115 </dict>
4116 <key>2</key>
4117 <dict>
4118 <key>name</key>
4119 <string>entity.name.tag.html</string>
4120 </dict>
4121 </dict>
4122 <key>end</key>
4123 <string>/?&gt;</string>
4124 <key>endCaptures</key>
4125 <dict>
4126 <key>0</key>
4127 <dict>
4128 <key>name</key>
4129 <string>punctuation.definition.tag.end.html</string>
4130 </dict>
4131 </dict>
4132 <key>name</key>
4133 <string>meta.tag.custom.start.html</string>
4134 <key>patterns</key>
4135 <array>
4136 <dict>
4137 <key>include</key>
4138 <string>#attribute</string>
4139 </dict>
4140 </array>
4141 </dict>
4142 <dict>
4143 <key>begin</key>
4144 <string>(&lt;/)([a-zA-Z][.0-9_a-zA-Z\x{00B7}\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{203F}-\x{2040}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]*-[\-.0-9_a-zA-Z\x{00B7}\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{203F}-\x{2040}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]*)(?=\s|/?&gt;)</string>
4145 <key>beginCaptures</key>
4146 <dict>
4147 <key>1</key>
4148 <dict>
4149 <key>name</key>
4150 <string>punctuation.definition.tag.begin.html</string>
4151 </dict>
4152 <key>2</key>
4153 <dict>
4154 <key>name</key>
4155 <string>entity.name.tag.html</string>
4156 </dict>
4157 </dict>
4158 <key>end</key>
4159 <string>&gt;</string>
4160 <key>endCaptures</key>
4161 <dict>
4162 <key>0</key>
4163 <dict>
4164 <key>name</key>
4165 <string>punctuation.definition.tag.end.html</string>
4166 </dict>
4167 </dict>
4168 <key>name</key>
4169 <string>meta.tag.custom.end.html</string>
4170 <key>patterns</key>
4171 <array>
4172 <dict>
4173 <key>include</key>
4174 <string>#attribute</string>
4175 </dict>
4176 </array>
4177 </dict>
4178 </array>
4179 </dict>
4180 <key>xml-processing</key>
4181 <dict>
4182 <key>begin</key>
4183 <string>(&lt;\?)(xml)</string>
4184 <key>captures</key>
4185 <dict>
4186 <key>1</key>
4187 <dict>
4188 <key>name</key>
4189 <string>punctuation.definition.tag.html</string>
4190 </dict>
4191 <key>2</key>
4192 <dict>
4193 <key>name</key>
4194 <string>entity.name.tag.html</string>
4195 </dict>
4196 </dict>
4197 <key>end</key>
4198 <string>(\?&gt;)</string>
4199 <key>name</key>
4200 <string>meta.tag.metadata.processing.xml.html</string>
4201 <key>patterns</key>
4202 <array>
4203 <dict>
4204 <key>include</key>
4205 <string>#attribute</string>
4206 </dict>
4207 </array>
4208 </dict>
4209 </dict>
4210 <key>scopeName</key>
4211 <string>text.html.basic</string>
4212 <key>uuid</key>
4213 <string>17994EC8-6B1D-11D9-AC3A-000D93589AF6</string>
4214</dict>
4215</plist>
src/file-viewer/highlight-grammar/js.plist created+9858
...@@ -0,0 +1,9858 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>name</key>
6 <string>JavaScript</string>
7 <key>scopeName</key>
8 <string>source.js</string>
9 <key>fileTypes</key>
10 <array>
11 <string>ts</string>
12 </array>
13 <key>uuid</key>
14 <string>ef98eb90-bf9b-11e4-bb52-0800200c9a66</string>
15 <key>patterns</key>
16 <array>
17 <dict>
18 <key>include</key>
19 <string>#directives</string>
20 </dict>
21 <dict>
22 <key>include</key>
23 <string>#statements</string>
24 </dict>
25 <dict>
26 <key>include</key>
27 <string>#shebang</string>
28 </dict>
29 </array>
30 <key>repository</key>
31 <dict>
32 <key>shebang</key>
33 <dict>
34 <key>name</key>
35 <string>comment.line.shebang.ts</string>
36 <key>match</key>
37 <string>\A(#!).*(?=$)</string>
38 <key>captures</key>
39 <dict>
40 <key>1</key>
41 <dict>
42 <key>name</key>
43 <string>punctuation.definition.comment.ts</string>
44 </dict>
45 </dict>
46 </dict>
47 <key>statements</key>
48 <dict>
49 <key>patterns</key>
50 <array>
51 <dict>
52 <key>include</key>
53 <string>#declaration</string>
54 </dict>
55 <dict>
56 <key>include</key>
57 <string>#control-statement</string>
58 </dict>
59 <dict>
60 <key>include</key>
61 <string>#after-operator-block-as-object-literal</string>
62 </dict>
63 <dict>
64 <key>include</key>
65 <string>#decl-block</string>
66 </dict>
67 <dict>
68 <key>include</key>
69 <string>#label</string>
70 </dict>
71 <dict>
72 <key>include</key>
73 <string>#expression</string>
74 </dict>
75 <dict>
76 <key>include</key>
77 <string>#punctuation-semicolon</string>
78 </dict>
79 <dict>
80 <key>include</key>
81 <string>#string</string>
82 </dict>
83 <dict>
84 <key>include</key>
85 <string>#comment</string>
86 </dict>
87 </array>
88 </dict>
89 <key>declaration</key>
90 <dict>
91 <key>patterns</key>
92 <array>
93 <dict>
94 <key>include</key>
95 <string>#decorator</string>
96 </dict>
97 <dict>
98 <key>include</key>
99 <string>#var-expr</string>
100 </dict>
101 <dict>
102 <key>include</key>
103 <string>#function-declaration</string>
104 </dict>
105 <dict>
106 <key>include</key>
107 <string>#class-declaration</string>
108 </dict>
109 <dict>
110 <key>include</key>
111 <string>#interface-declaration</string>
112 </dict>
113 <dict>
114 <key>include</key>
115 <string>#enum-declaration</string>
116 </dict>
117 <dict>
118 <key>include</key>
119 <string>#namespace-declaration</string>
120 </dict>
121 <dict>
122 <key>include</key>
123 <string>#type-alias-declaration</string>
124 </dict>
125 <dict>
126 <key>include</key>
127 <string>#import-equals-declaration</string>
128 </dict>
129 <dict>
130 <key>include</key>
131 <string>#import-declaration</string>
132 </dict>
133 <dict>
134 <key>include</key>
135 <string>#export-declaration</string>
136 </dict>
137 <dict>
138 <key>name</key>
139 <string>storage.modifier.ts</string>
140 <key>match</key>
141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
142 </dict>
143 </array>
144 </dict>
145 <key>control-statement</key>
146 <dict>
147 <key>patterns</key>
148 <array>
149 <dict>
150 <key>include</key>
151 <string>#switch-statement</string>
152 </dict>
153 <dict>
154 <key>include</key>
155 <string>#for-loop</string>
156 </dict>
157 <dict>
158 <key>name</key>
159 <string>keyword.control.trycatch.ts</string>
160 <key>match</key>
161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
166 <key>captures</key>
167 <dict>
168 <key>1</key>
169 <dict>
170 <key>name</key>
171 <string>keyword.control.loop.ts</string>
172 </dict>
173 <key>2</key>
174 <dict>
175 <key>name</key>
176 <string>entity.name.label.ts</string>
177 </dict>
178 </dict>
179 </dict>
180 <dict>
181 <key>name</key>
182 <string>keyword.control.loop.ts</string>
183 <key>match</key>
184 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
185 </dict>
186 <dict>
187 <key>begin</key>
188 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
189 <key>beginCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>keyword.control.flow.ts</string>
195 </dict>
196 </dict>
197 <key>end</key>
198 <string>(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
199 <key>patterns</key>
200 <array>
201 <dict>
202 <key>include</key>
203 <string>#expression</string>
204 </dict>
205 </array>
206 </dict>
207 <dict>
208 <key>name</key>
209 <string>keyword.control.switch.ts</string>
210 <key>match</key>
211 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
212 </dict>
213 <dict>
214 <key>include</key>
215 <string>#if-statement</string>
216 </dict>
217 <dict>
218 <key>name</key>
219 <string>keyword.control.conditional.ts</string>
220 <key>match</key>
221 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
222 </dict>
223 <dict>
224 <key>name</key>
225 <string>keyword.control.with.ts</string>
226 <key>match</key>
227 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
228 </dict>
229 <dict>
230 <key>name</key>
231 <string>keyword.control.ts</string>
232 <key>match</key>
233 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
234 </dict>
235 <dict>
236 <key>name</key>
237 <string>keyword.other.debugger.ts</string>
238 <key>match</key>
239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
240 </dict>
241 </array>
242 </dict>
243 <key>label</key>
244 <dict>
245 <key>patterns</key>
246 <array>
247 <dict>
248 <key>begin</key>
249 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)</string>
250 <key>beginCaptures</key>
251 <dict>
252 <key>1</key>
253 <dict>
254 <key>name</key>
255 <string>entity.name.label.ts</string>
256 </dict>
257 <key>2</key>
258 <dict>
259 <key>name</key>
260 <string>punctuation.separator.label.ts</string>
261 </dict>
262 </dict>
263 <key>end</key>
264 <string>(?&lt;=\})</string>
265 <key>patterns</key>
266 <array>
267 <dict>
268 <key>include</key>
269 <string>#decl-block</string>
270 </dict>
271 </array>
272 </dict>
273 <dict>
274 <key>match</key>
275 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
276 <key>captures</key>
277 <dict>
278 <key>1</key>
279 <dict>
280 <key>name</key>
281 <string>entity.name.label.ts</string>
282 </dict>
283 <key>2</key>
284 <dict>
285 <key>name</key>
286 <string>punctuation.separator.label.ts</string>
287 </dict>
288 </dict>
289 </dict>
290 </array>
291 </dict>
292 <key>expression</key>
293 <dict>
294 <key>patterns</key>
295 <array>
296 <dict>
297 <key>include</key>
298 <string>#expressionWithoutIdentifiers</string>
299 </dict>
300 <dict>
301 <key>include</key>
302 <string>#identifiers</string>
303 </dict>
304 <dict>
305 <key>include</key>
306 <string>#expressionPunctuations</string>
307 </dict>
308 </array>
309 </dict>
310 <key>expressionWithoutIdentifiers</key>
311 <dict>
312 <key>patterns</key>
313 <array>
314 <dict>
315 <key>include</key>
316 <string>#string</string>
317 </dict>
318 <dict>
319 <key>include</key>
320 <string>#regex</string>
321 </dict>
322 <dict>
323 <key>include</key>
324 <string>#comment</string>
325 </dict>
326 <dict>
327 <key>include</key>
328 <string>#function-expression</string>
329 </dict>
330 <dict>
331 <key>include</key>
332 <string>#class-expression</string>
333 </dict>
334 <dict>
335 <key>include</key>
336 <string>#arrow-function</string>
337 </dict>
338 <dict>
339 <key>include</key>
340 <string>#paren-expression-possibly-arrow</string>
341 </dict>
342 <dict>
343 <key>include</key>
344 <string>#cast</string>
345 </dict>
346 <dict>
347 <key>include</key>
348 <string>#ternary-expression</string>
349 </dict>
350 <dict>
351 <key>include</key>
352 <string>#new-expr</string>
353 </dict>
354 <dict>
355 <key>include</key>
356 <string>#instanceof-expr</string>
357 </dict>
358 <dict>
359 <key>include</key>
360 <string>#object-literal</string>
361 </dict>
362 <dict>
363 <key>include</key>
364 <string>#expression-operators</string>
365 </dict>
366 <dict>
367 <key>include</key>
368 <string>#function-call</string>
369 </dict>
370 <dict>
371 <key>include</key>
372 <string>#literal</string>
373 </dict>
374 <dict>
375 <key>include</key>
376 <string>#support-objects</string>
377 </dict>
378 <dict>
379 <key>include</key>
380 <string>#paren-expression</string>
381 </dict>
382 </array>
383 </dict>
384 <key>expressionPunctuations</key>
385 <dict>
386 <key>patterns</key>
387 <array>
388 <dict>
389 <key>include</key>
390 <string>#punctuation-comma</string>
391 </dict>
392 <dict>
393 <key>include</key>
394 <string>#punctuation-accessor</string>
395 </dict>
396 </array>
397 </dict>
398 <key>decorator</key>
399 <dict>
400 <key>name</key>
401 <string>meta.decorator.ts</string>
402 <key>begin</key>
403 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))\@</string>
404 <key>beginCaptures</key>
405 <dict>
406 <key>0</key>
407 <dict>
408 <key>name</key>
409 <string>punctuation.decorator.ts</string>
410 </dict>
411 </dict>
412 <key>end</key>
413 <string>(?=\s)</string>
414 <key>patterns</key>
415 <array>
416 <dict>
417 <key>include</key>
418 <string>#expression</string>
419 </dict>
420 </array>
421 </dict>
422 <key>var-expr</key>
423 <dict>
424 <key>patterns</key>
425 <array>
426 <dict>
427 <key>name</key>
428 <string>meta.var.expr.ts</string>
429 <key>begin</key>
430 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
431 <key>end</key>
432 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))</string>
433 <key>patterns</key>
434 <array>
435 <dict>
436 <key>begin</key>
437 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
438 <key>beginCaptures</key>
439 <dict>
440 <key>1</key>
441 <dict>
442 <key>name</key>
443 <string>keyword.control.export.ts</string>
444 </dict>
445 <key>2</key>
446 <dict>
447 <key>name</key>
448 <string>storage.modifier.ts</string>
449 </dict>
450 <key>3</key>
451 <dict>
452 <key>name</key>
453 <string>storage.type.ts</string>
454 </dict>
455 </dict>
456 <key>end</key>
457 <string>(?=\S)</string>
458 </dict>
459 <dict>
460 <key>include</key>
461 <string>#destructuring-variable</string>
462 </dict>
463 <dict>
464 <key>include</key>
465 <string>#var-single-variable</string>
466 </dict>
467 <dict>
468 <key>include</key>
469 <string>#variable-initializer</string>
470 </dict>
471 <dict>
472 <key>include</key>
473 <string>#comment</string>
474 </dict>
475 <dict>
476 <key>begin</key>
477 <string>(,)\s*(?=$|\/\/)</string>
478 <key>beginCaptures</key>
479 <dict>
480 <key>1</key>
481 <dict>
482 <key>name</key>
483 <string>punctuation.separator.comma.ts</string>
484 </dict>
485 </dict>
486 <key>end</key>
487 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
488 <key>patterns</key>
489 <array>
490 <dict>
491 <key>include</key>
492 <string>#single-line-comment-consuming-line-ending</string>
493 </dict>
494 <dict>
495 <key>include</key>
496 <string>#comment</string>
497 </dict>
498 <dict>
499 <key>include</key>
500 <string>#destructuring-variable</string>
501 </dict>
502 <dict>
503 <key>include</key>
504 <string>#var-single-variable</string>
505 </dict>
506 <dict>
507 <key>include</key>
508 <string>#punctuation-comma</string>
509 </dict>
510 </array>
511 </dict>
512 <dict>
513 <key>include</key>
514 <string>#punctuation-comma</string>
515 </dict>
516 </array>
517 </dict>
518 <dict>
519 <key>name</key>
520 <string>meta.var.expr.ts</string>
521 <key>begin</key>
522 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
523 <key>beginCaptures</key>
524 <dict>
525 <key>1</key>
526 <dict>
527 <key>name</key>
528 <string>keyword.control.export.ts</string>
529 </dict>
530 <key>2</key>
531 <dict>
532 <key>name</key>
533 <string>storage.modifier.ts</string>
534 </dict>
535 <key>3</key>
536 <dict>
537 <key>name</key>
538 <string>storage.type.ts</string>
539 </dict>
540 </dict>
541 <key>end</key>
542 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^const|[^\._$[:alnum:]]const)(?=\s*$)))</string>
543 <key>patterns</key>
544 <array>
545 <dict>
546 <key>begin</key>
547 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
548 <key>beginCaptures</key>
549 <dict>
550 <key>1</key>
551 <dict>
552 <key>name</key>
553 <string>keyword.control.export.ts</string>
554 </dict>
555 <key>2</key>
556 <dict>
557 <key>name</key>
558 <string>storage.modifier.ts</string>
559 </dict>
560 <key>3</key>
561 <dict>
562 <key>name</key>
563 <string>storage.type.ts</string>
564 </dict>
565 </dict>
566 <key>end</key>
567 <string>(?=\S)</string>
568 </dict>
569 <dict>
570 <key>include</key>
571 <string>#destructuring-const</string>
572 </dict>
573 <dict>
574 <key>include</key>
575 <string>#var-single-const</string>
576 </dict>
577 <dict>
578 <key>include</key>
579 <string>#variable-initializer</string>
580 </dict>
581 <dict>
582 <key>include</key>
583 <string>#comment</string>
584 </dict>
585 <dict>
586 <key>begin</key>
587 <string>(,)\s*(?=$|\/\/)</string>
588 <key>beginCaptures</key>
589 <dict>
590 <key>1</key>
591 <dict>
592 <key>name</key>
593 <string>punctuation.separator.comma.ts</string>
594 </dict>
595 </dict>
596 <key>end</key>
597 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
598 <key>patterns</key>
599 <array>
600 <dict>
601 <key>include</key>
602 <string>#single-line-comment-consuming-line-ending</string>
603 </dict>
604 <dict>
605 <key>include</key>
606 <string>#comment</string>
607 </dict>
608 <dict>
609 <key>include</key>
610 <string>#destructuring-const</string>
611 </dict>
612 <dict>
613 <key>include</key>
614 <string>#var-single-const</string>
615 </dict>
616 <dict>
617 <key>include</key>
618 <string>#punctuation-comma</string>
619 </dict>
620 </array>
621 </dict>
622 <dict>
623 <key>include</key>
624 <string>#punctuation-comma</string>
625 </dict>
626 </array>
627 </dict>
628 <dict>
629 <key>name</key>
630 <string>meta.var.expr.ts</string>
631 <key>begin</key>
632 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
633 <key>beginCaptures</key>
634 <dict>
635 <key>1</key>
636 <dict>
637 <key>name</key>
638 <string>keyword.control.export.ts</string>
639 </dict>
640 <key>2</key>
641 <dict>
642 <key>name</key>
643 <string>storage.modifier.ts</string>
644 </dict>
645 <key>3</key>
646 <dict>
647 <key>name</key>
648 <string>storage.type.ts</string>
649 </dict>
650 </dict>
651 <key>end</key>
652 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$)))</string>
653 <key>patterns</key>
654 <array>
655 <dict>
656 <key>begin</key>
657 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
658 <key>beginCaptures</key>
659 <dict>
660 <key>1</key>
661 <dict>
662 <key>name</key>
663 <string>keyword.control.export.ts</string>
664 </dict>
665 <key>2</key>
666 <dict>
667 <key>name</key>
668 <string>storage.modifier.ts</string>
669 </dict>
670 <key>3</key>
671 <dict>
672 <key>name</key>
673 <string>storage.type.ts</string>
674 </dict>
675 </dict>
676 <key>end</key>
677 <string>(?=\S)</string>
678 </dict>
679 <dict>
680 <key>include</key>
681 <string>#var-single-const</string>
682 </dict>
683 <dict>
684 <key>include</key>
685 <string>#variable-initializer</string>
686 </dict>
687 <dict>
688 <key>include</key>
689 <string>#comment</string>
690 </dict>
691 <dict>
692 <key>begin</key>
693 <string>(,)\s*((?!\S)|(?=\/\/))</string>
694 <key>beginCaptures</key>
695 <dict>
696 <key>1</key>
697 <dict>
698 <key>name</key>
699 <string>punctuation.separator.comma.ts</string>
700 </dict>
701 </dict>
702 <key>end</key>
703 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
704 <key>patterns</key>
705 <array>
706 <dict>
707 <key>include</key>
708 <string>#single-line-comment-consuming-line-ending</string>
709 </dict>
710 <dict>
711 <key>include</key>
712 <string>#comment</string>
713 </dict>
714 <dict>
715 <key>include</key>
716 <string>#var-single-const</string>
717 </dict>
718 <dict>
719 <key>include</key>
720 <string>#punctuation-comma</string>
721 </dict>
722 </array>
723 </dict>
724 <dict>
725 <key>include</key>
726 <string>#punctuation-comma</string>
727 </dict>
728 </array>
729 </dict>
730 </array>
731 </dict>
732 <key>var-single-variable</key>
733 <dict>
734 <key>patterns</key>
735 <array>
736 <dict>
737 <key>name</key>
738 <string>meta.var-single-variable.expr.ts</string>
739 <key>begin</key>
740 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s*
741# function assignment |
742(=\s*(
743 ((async\s+)?(
744 (function\s*[(&lt;*]) |
745 (function\s+) |
746 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
747 )) |
748 ((async\s*)?(
749 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
750 # sure shot arrow functions even if =&gt; is on new line
751(
752 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
753 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
754 (
755 ([)]\s*:) | # ():
756 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
757 )
758) |
759
760# arrow function possible to detect only with =&gt; on same line
761(
762 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
763 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
764 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
765 \s*=&gt; # arrow operator
766)
767 ))
768)) |
769# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
770(:\s*(
771 (&lt;) |
772 ([(]\s*(
773 ([)]) |
774 (\.\.\.) |
775 ([_$[:alnum:]]+\s*(
776 ([:,?=])|
777 ([)]\s*=&gt;)
778 ))
779 ))
780)) |
781(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
782(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
783(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
784 ((async\s+)?(
785 (function\s*[(&lt;*]) |
786 (function\s+) |
787 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
788 )) |
789 ((async\s*)?(
790 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
791 # sure shot arrow functions even if =&gt; is on new line
792(
793 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
794 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
795 (
796 ([)]\s*:) | # ():
797 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
798 )
799) |
800
801# arrow function possible to detect only with =&gt; on same line
802(
803 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
804 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
805 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
806 \s*=&gt; # arrow operator
807)
808 ))
809)))</string>
810 <key>beginCaptures</key>
811 <dict>
812 <key>1</key>
813 <dict>
814 <key>name</key>
815 <string>meta.definition.variable.ts entity.name.function.ts</string>
816 </dict>
817 <key>2</key>
818 <dict>
819 <key>name</key>
820 <string>keyword.operator.definiteassignment.ts</string>
821 </dict>
822 </dict>
823 <key>end</key>
824 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
825 <key>patterns</key>
826 <array>
827 <dict>
828 <key>include</key>
829 <string>#var-single-variable-type-annotation</string>
830 </dict>
831 </array>
832 </dict>
833 <dict>
834 <key>name</key>
835 <string>meta.var-single-variable.expr.ts</string>
836 <key>begin</key>
837 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)?</string>
838 <key>beginCaptures</key>
839 <dict>
840 <key>1</key>
841 <dict>
842 <key>name</key>
843 <string>meta.definition.variable.ts variable.other.constant.ts</string>
844 </dict>
845 <key>2</key>
846 <dict>
847 <key>name</key>
848 <string>keyword.operator.definiteassignment.ts</string>
849 </dict>
850 </dict>
851 <key>end</key>
852 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
853 <key>patterns</key>
854 <array>
855 <dict>
856 <key>include</key>
857 <string>#var-single-variable-type-annotation</string>
858 </dict>
859 </array>
860 </dict>
861 <dict>
862 <key>name</key>
863 <string>meta.var-single-variable.expr.ts</string>
864 <key>begin</key>
865 <string>([_$[:alpha:]][_$[:alnum:]]*)(\!)?</string>
866 <key>beginCaptures</key>
867 <dict>
868 <key>1</key>
869 <dict>
870 <key>name</key>
871 <string>meta.definition.variable.ts variable.other.readwrite.ts</string>
872 </dict>
873 <key>2</key>
874 <dict>
875 <key>name</key>
876 <string>keyword.operator.definiteassignment.ts</string>
877 </dict>
878 </dict>
879 <key>end</key>
880 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
881 <key>patterns</key>
882 <array>
883 <dict>
884 <key>include</key>
885 <string>#var-single-variable-type-annotation</string>
886 </dict>
887 </array>
888 </dict>
889 </array>
890 </dict>
891 <key>var-single-const</key>
892 <dict>
893 <key>patterns</key>
894 <array>
895 <dict>
896 <key>name</key>
897 <string>meta.var-single-variable.expr.ts</string>
898 <key>begin</key>
899 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
900# function assignment |
901(=\s*(
902 ((async\s+)?(
903 (function\s*[(&lt;*]) |
904 (function\s+) |
905 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
906 )) |
907 ((async\s*)?(
908 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
909 # sure shot arrow functions even if =&gt; is on new line
910(
911 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
912 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
913 (
914 ([)]\s*:) | # ():
915 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
916 )
917) |
918
919# arrow function possible to detect only with =&gt; on same line
920(
921 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
922 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
923 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
924 \s*=&gt; # arrow operator
925)
926 ))
927)) |
928# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
929(:\s*(
930 (&lt;) |
931 ([(]\s*(
932 ([)]) |
933 (\.\.\.) |
934 ([_$[:alnum:]]+\s*(
935 ([:,?=])|
936 ([)]\s*=&gt;)
937 ))
938 ))
939)) |
940(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
941(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
942(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
943 ((async\s+)?(
944 (function\s*[(&lt;*]) |
945 (function\s+) |
946 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
947 )) |
948 ((async\s*)?(
949 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
950 # sure shot arrow functions even if =&gt; is on new line
951(
952 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
953 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
954 (
955 ([)]\s*:) | # ():
956 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
957 )
958) |
959
960# arrow function possible to detect only with =&gt; on same line
961(
962 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
963 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
964 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
965 \s*=&gt; # arrow operator
966)
967 ))
968)))</string>
969 <key>beginCaptures</key>
970 <dict>
971 <key>1</key>
972 <dict>
973 <key>name</key>
974 <string>meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts</string>
975 </dict>
976 </dict>
977 <key>end</key>
978 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
979 <key>patterns</key>
980 <array>
981 <dict>
982 <key>include</key>
983 <string>#var-single-variable-type-annotation</string>
984 </dict>
985 </array>
986 </dict>
987 <dict>
988 <key>name</key>
989 <string>meta.var-single-variable.expr.ts</string>
990 <key>begin</key>
991 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
992 <key>beginCaptures</key>
993 <dict>
994 <key>1</key>
995 <dict>
996 <key>name</key>
997 <string>meta.definition.variable.ts variable.other.constant.ts</string>
998 </dict>
999 </dict>
1000 <key>end</key>
1001 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
1002 <key>patterns</key>
1003 <array>
1004 <dict>
1005 <key>include</key>
1006 <string>#var-single-variable-type-annotation</string>
1007 </dict>
1008 </array>
1009 </dict>
1010 </array>
1011 </dict>
1012 <key>var-single-variable-type-annotation</key>
1013 <dict>
1014 <key>patterns</key>
1015 <array>
1016 <dict>
1017 <key>include</key>
1018 <string>#type-annotation</string>
1019 </dict>
1020 <dict>
1021 <key>include</key>
1022 <string>#string</string>
1023 </dict>
1024 <dict>
1025 <key>include</key>
1026 <string>#comment</string>
1027 </dict>
1028 </array>
1029 </dict>
1030 <key>destructuring-variable</key>
1031 <dict>
1032 <key>patterns</key>
1033 <array>
1034 <dict>
1035 <key>name</key>
1036 <string>meta.object-binding-pattern-variable.ts</string>
1037 <key>begin</key>
1038 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1039 <key>end</key>
1040 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1041 <key>patterns</key>
1042 <array>
1043 <dict>
1044 <key>include</key>
1045 <string>#object-binding-pattern</string>
1046 </dict>
1047 <dict>
1048 <key>include</key>
1049 <string>#type-annotation</string>
1050 </dict>
1051 <dict>
1052 <key>include</key>
1053 <string>#comment</string>
1054 </dict>
1055 </array>
1056 </dict>
1057 <dict>
1058 <key>name</key>
1059 <string>meta.array-binding-pattern-variable.ts</string>
1060 <key>begin</key>
1061 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1062 <key>end</key>
1063 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1064 <key>patterns</key>
1065 <array>
1066 <dict>
1067 <key>include</key>
1068 <string>#array-binding-pattern</string>
1069 </dict>
1070 <dict>
1071 <key>include</key>
1072 <string>#type-annotation</string>
1073 </dict>
1074 <dict>
1075 <key>include</key>
1076 <string>#comment</string>
1077 </dict>
1078 </array>
1079 </dict>
1080 </array>
1081 </dict>
1082 <key>destructuring-const</key>
1083 <dict>
1084 <key>patterns</key>
1085 <array>
1086 <dict>
1087 <key>name</key>
1088 <string>meta.object-binding-pattern-variable.ts</string>
1089 <key>begin</key>
1090 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1091 <key>end</key>
1092 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1093 <key>patterns</key>
1094 <array>
1095 <dict>
1096 <key>include</key>
1097 <string>#object-binding-pattern-const</string>
1098 </dict>
1099 <dict>
1100 <key>include</key>
1101 <string>#type-annotation</string>
1102 </dict>
1103 <dict>
1104 <key>include</key>
1105 <string>#comment</string>
1106 </dict>
1107 </array>
1108 </dict>
1109 <dict>
1110 <key>name</key>
1111 <string>meta.array-binding-pattern-variable.ts</string>
1112 <key>begin</key>
1113 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1114 <key>end</key>
1115 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1116 <key>patterns</key>
1117 <array>
1118 <dict>
1119 <key>include</key>
1120 <string>#array-binding-pattern-const</string>
1121 </dict>
1122 <dict>
1123 <key>include</key>
1124 <string>#type-annotation</string>
1125 </dict>
1126 <dict>
1127 <key>include</key>
1128 <string>#comment</string>
1129 </dict>
1130 </array>
1131 </dict>
1132 </array>
1133 </dict>
1134 <key>object-binding-element</key>
1135 <dict>
1136 <key>patterns</key>
1137 <array>
1138 <dict>
1139 <key>include</key>
1140 <string>#comment</string>
1141 </dict>
1142 <dict>
1143 <key>begin</key>
1144 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1145 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1146 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1147 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1148 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1149 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1150 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1151 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1152 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1153)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1154 <key>end</key>
1155 <string>(?=,|\})</string>
1156 <key>patterns</key>
1157 <array>
1158 <dict>
1159 <key>include</key>
1160 <string>#object-binding-element-propertyName</string>
1161 </dict>
1162 <dict>
1163 <key>include</key>
1164 <string>#binding-element</string>
1165 </dict>
1166 </array>
1167 </dict>
1168 <dict>
1169 <key>include</key>
1170 <string>#object-binding-pattern</string>
1171 </dict>
1172 <dict>
1173 <key>include</key>
1174 <string>#destructuring-variable-rest</string>
1175 </dict>
1176 <dict>
1177 <key>include</key>
1178 <string>#variable-initializer</string>
1179 </dict>
1180 <dict>
1181 <key>include</key>
1182 <string>#punctuation-comma</string>
1183 </dict>
1184 </array>
1185 </dict>
1186 <key>object-binding-element-const</key>
1187 <dict>
1188 <key>patterns</key>
1189 <array>
1190 <dict>
1191 <key>include</key>
1192 <string>#comment</string>
1193 </dict>
1194 <dict>
1195 <key>begin</key>
1196 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1197 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1198 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1199 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1200 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1201 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1202 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1203 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1204 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1205)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1206 <key>end</key>
1207 <string>(?=,|\})</string>
1208 <key>patterns</key>
1209 <array>
1210 <dict>
1211 <key>include</key>
1212 <string>#object-binding-element-propertyName</string>
1213 </dict>
1214 <dict>
1215 <key>include</key>
1216 <string>#binding-element-const</string>
1217 </dict>
1218 </array>
1219 </dict>
1220 <dict>
1221 <key>include</key>
1222 <string>#object-binding-pattern-const</string>
1223 </dict>
1224 <dict>
1225 <key>include</key>
1226 <string>#destructuring-variable-rest-const</string>
1227 </dict>
1228 <dict>
1229 <key>include</key>
1230 <string>#variable-initializer</string>
1231 </dict>
1232 <dict>
1233 <key>include</key>
1234 <string>#punctuation-comma</string>
1235 </dict>
1236 </array>
1237 </dict>
1238 <key>object-binding-element-propertyName</key>
1239 <dict>
1240 <key>begin</key>
1241 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1242 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1243 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1244 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1245 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1246 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1247 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1248 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1249 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1250)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1251 <key>end</key>
1252 <string>(:)</string>
1253 <key>endCaptures</key>
1254 <dict>
1255 <key>0</key>
1256 <dict>
1257 <key>name</key>
1258 <string>punctuation.destructuring.ts</string>
1259 </dict>
1260 </dict>
1261 <key>patterns</key>
1262 <array>
1263 <dict>
1264 <key>include</key>
1265 <string>#string</string>
1266 </dict>
1267 <dict>
1268 <key>include</key>
1269 <string>#array-literal</string>
1270 </dict>
1271 <dict>
1272 <key>include</key>
1273 <string>#numeric-literal</string>
1274 </dict>
1275 <dict>
1276 <key>name</key>
1277 <string>variable.object.property.ts</string>
1278 <key>match</key>
1279 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1280 </dict>
1281 </array>
1282 </dict>
1283 <key>binding-element</key>
1284 <dict>
1285 <key>patterns</key>
1286 <array>
1287 <dict>
1288 <key>include</key>
1289 <string>#comment</string>
1290 </dict>
1291 <dict>
1292 <key>include</key>
1293 <string>#string</string>
1294 </dict>
1295 <dict>
1296 <key>include</key>
1297 <string>#numeric-literal</string>
1298 </dict>
1299 <dict>
1300 <key>include</key>
1301 <string>#regex</string>
1302 </dict>
1303 <dict>
1304 <key>include</key>
1305 <string>#object-binding-pattern</string>
1306 </dict>
1307 <dict>
1308 <key>include</key>
1309 <string>#array-binding-pattern</string>
1310 </dict>
1311 <dict>
1312 <key>include</key>
1313 <string>#destructuring-variable-rest</string>
1314 </dict>
1315 <dict>
1316 <key>include</key>
1317 <string>#variable-initializer</string>
1318 </dict>
1319 </array>
1320 </dict>
1321 <key>binding-element-const</key>
1322 <dict>
1323 <key>patterns</key>
1324 <array>
1325 <dict>
1326 <key>include</key>
1327 <string>#comment</string>
1328 </dict>
1329 <dict>
1330 <key>include</key>
1331 <string>#string</string>
1332 </dict>
1333 <dict>
1334 <key>include</key>
1335 <string>#numeric-literal</string>
1336 </dict>
1337 <dict>
1338 <key>include</key>
1339 <string>#regex</string>
1340 </dict>
1341 <dict>
1342 <key>include</key>
1343 <string>#object-binding-pattern-const</string>
1344 </dict>
1345 <dict>
1346 <key>include</key>
1347 <string>#array-binding-pattern-const</string>
1348 </dict>
1349 <dict>
1350 <key>include</key>
1351 <string>#destructuring-variable-rest-const</string>
1352 </dict>
1353 <dict>
1354 <key>include</key>
1355 <string>#variable-initializer</string>
1356 </dict>
1357 </array>
1358 </dict>
1359 <key>destructuring-variable-rest</key>
1360 <dict>
1361 <key>match</key>
1362 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1363 <key>captures</key>
1364 <dict>
1365 <key>1</key>
1366 <dict>
1367 <key>name</key>
1368 <string>keyword.operator.rest.ts</string>
1369 </dict>
1370 <key>2</key>
1371 <dict>
1372 <key>name</key>
1373 <string>meta.definition.variable.ts variable.other.readwrite.ts</string>
1374 </dict>
1375 </dict>
1376 </dict>
1377 <key>destructuring-variable-rest-const</key>
1378 <dict>
1379 <key>match</key>
1380 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1381 <key>captures</key>
1382 <dict>
1383 <key>1</key>
1384 <dict>
1385 <key>name</key>
1386 <string>keyword.operator.rest.ts</string>
1387 </dict>
1388 <key>2</key>
1389 <dict>
1390 <key>name</key>
1391 <string>meta.definition.variable.ts variable.other.constant.ts</string>
1392 </dict>
1393 </dict>
1394 </dict>
1395 <key>object-binding-pattern</key>
1396 <dict>
1397 <key>begin</key>
1398 <string>(?:(\.\.\.)\s*)?(\{)</string>
1399 <key>beginCaptures</key>
1400 <dict>
1401 <key>1</key>
1402 <dict>
1403 <key>name</key>
1404 <string>keyword.operator.rest.ts</string>
1405 </dict>
1406 <key>2</key>
1407 <dict>
1408 <key>name</key>
1409 <string>punctuation.definition.binding-pattern.object.ts</string>
1410 </dict>
1411 </dict>
1412 <key>end</key>
1413 <string>\}</string>
1414 <key>endCaptures</key>
1415 <dict>
1416 <key>0</key>
1417 <dict>
1418 <key>name</key>
1419 <string>punctuation.definition.binding-pattern.object.ts</string>
1420 </dict>
1421 </dict>
1422 <key>patterns</key>
1423 <array>
1424 <dict>
1425 <key>include</key>
1426 <string>#object-binding-element</string>
1427 </dict>
1428 </array>
1429 </dict>
1430 <key>object-binding-pattern-const</key>
1431 <dict>
1432 <key>begin</key>
1433 <string>(?:(\.\.\.)\s*)?(\{)</string>
1434 <key>beginCaptures</key>
1435 <dict>
1436 <key>1</key>
1437 <dict>
1438 <key>name</key>
1439 <string>keyword.operator.rest.ts</string>
1440 </dict>
1441 <key>2</key>
1442 <dict>
1443 <key>name</key>
1444 <string>punctuation.definition.binding-pattern.object.ts</string>
1445 </dict>
1446 </dict>
1447 <key>end</key>
1448 <string>\}</string>
1449 <key>endCaptures</key>
1450 <dict>
1451 <key>0</key>
1452 <dict>
1453 <key>name</key>
1454 <string>punctuation.definition.binding-pattern.object.ts</string>
1455 </dict>
1456 </dict>
1457 <key>patterns</key>
1458 <array>
1459 <dict>
1460 <key>include</key>
1461 <string>#object-binding-element-const</string>
1462 </dict>
1463 </array>
1464 </dict>
1465 <key>array-binding-pattern</key>
1466 <dict>
1467 <key>begin</key>
1468 <string>(?:(\.\.\.)\s*)?(\[)</string>
1469 <key>beginCaptures</key>
1470 <dict>
1471 <key>1</key>
1472 <dict>
1473 <key>name</key>
1474 <string>keyword.operator.rest.ts</string>
1475 </dict>
1476 <key>2</key>
1477 <dict>
1478 <key>name</key>
1479 <string>punctuation.definition.binding-pattern.array.ts</string>
1480 </dict>
1481 </dict>
1482 <key>end</key>
1483 <string>\]</string>
1484 <key>endCaptures</key>
1485 <dict>
1486 <key>0</key>
1487 <dict>
1488 <key>name</key>
1489 <string>punctuation.definition.binding-pattern.array.ts</string>
1490 </dict>
1491 </dict>
1492 <key>patterns</key>
1493 <array>
1494 <dict>
1495 <key>include</key>
1496 <string>#binding-element</string>
1497 </dict>
1498 <dict>
1499 <key>include</key>
1500 <string>#punctuation-comma</string>
1501 </dict>
1502 </array>
1503 </dict>
1504 <key>array-binding-pattern-const</key>
1505 <dict>
1506 <key>begin</key>
1507 <string>(?:(\.\.\.)\s*)?(\[)</string>
1508 <key>beginCaptures</key>
1509 <dict>
1510 <key>1</key>
1511 <dict>
1512 <key>name</key>
1513 <string>keyword.operator.rest.ts</string>
1514 </dict>
1515 <key>2</key>
1516 <dict>
1517 <key>name</key>
1518 <string>punctuation.definition.binding-pattern.array.ts</string>
1519 </dict>
1520 </dict>
1521 <key>end</key>
1522 <string>\]</string>
1523 <key>endCaptures</key>
1524 <dict>
1525 <key>0</key>
1526 <dict>
1527 <key>name</key>
1528 <string>punctuation.definition.binding-pattern.array.ts</string>
1529 </dict>
1530 </dict>
1531 <key>patterns</key>
1532 <array>
1533 <dict>
1534 <key>include</key>
1535 <string>#binding-element-const</string>
1536 </dict>
1537 <dict>
1538 <key>include</key>
1539 <string>#punctuation-comma</string>
1540 </dict>
1541 </array>
1542 </dict>
1543 <key>parameter-name</key>
1544 <dict>
1545 <key>patterns</key>
1546 <array>
1547 <dict>
1548 <key>match</key>
1549 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
1550 <key>captures</key>
1551 <dict>
1552 <key>1</key>
1553 <dict>
1554 <key>name</key>
1555 <string>storage.modifier.ts</string>
1556 </dict>
1557 </dict>
1558 </dict>
1559 <dict>
1560 <key>match</key>
1561 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1562# function assignment |
1563(=\s*(
1564 ((async\s+)?(
1565 (function\s*[(&lt;*]) |
1566 (function\s+) |
1567 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1568 )) |
1569 ((async\s*)?(
1570 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1571 # sure shot arrow functions even if =&gt; is on new line
1572(
1573 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1574 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1575 (
1576 ([)]\s*:) | # ():
1577 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1578 )
1579) |
1580
1581# arrow function possible to detect only with =&gt; on same line
1582(
1583 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1584 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1585 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1586 \s*=&gt; # arrow operator
1587)
1588 ))
1589)) |
1590# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
1591(:\s*(
1592 (&lt;) |
1593 ([(]\s*(
1594 ([)]) |
1595 (\.\.\.) |
1596 ([_$[:alnum:]]+\s*(
1597 ([:,?=])|
1598 ([)]\s*=&gt;)
1599 ))
1600 ))
1601)) |
1602(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1603(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1604(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1605 ((async\s+)?(
1606 (function\s*[(&lt;*]) |
1607 (function\s+) |
1608 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1609 )) |
1610 ((async\s*)?(
1611 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1612 # sure shot arrow functions even if =&gt; is on new line
1613(
1614 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1615 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1616 (
1617 ([)]\s*:) | # ():
1618 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1619 )
1620) |
1621
1622# arrow function possible to detect only with =&gt; on same line
1623(
1624 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1625 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1626 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1627 \s*=&gt; # arrow operator
1628)
1629 ))
1630)))</string>
1631 <key>captures</key>
1632 <dict>
1633 <key>1</key>
1634 <dict>
1635 <key>name</key>
1636 <string>storage.modifier.ts</string>
1637 </dict>
1638 <key>2</key>
1639 <dict>
1640 <key>name</key>
1641 <string>keyword.operator.rest.ts</string>
1642 </dict>
1643 <key>3</key>
1644 <dict>
1645 <key>name</key>
1646 <string>entity.name.function.ts variable.language.this.ts</string>
1647 </dict>
1648 <key>4</key>
1649 <dict>
1650 <key>name</key>
1651 <string>entity.name.function.ts</string>
1652 </dict>
1653 <key>5</key>
1654 <dict>
1655 <key>name</key>
1656 <string>keyword.operator.optional.ts</string>
1657 </dict>
1658 </dict>
1659 </dict>
1660 <dict>
1661 <key>match</key>
1662 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)</string>
1663 <key>captures</key>
1664 <dict>
1665 <key>1</key>
1666 <dict>
1667 <key>name</key>
1668 <string>storage.modifier.ts</string>
1669 </dict>
1670 <key>2</key>
1671 <dict>
1672 <key>name</key>
1673 <string>keyword.operator.rest.ts</string>
1674 </dict>
1675 <key>3</key>
1676 <dict>
1677 <key>name</key>
1678 <string>variable.parameter.ts variable.language.this.ts</string>
1679 </dict>
1680 <key>4</key>
1681 <dict>
1682 <key>name</key>
1683 <string>variable.parameter.ts</string>
1684 </dict>
1685 <key>5</key>
1686 <dict>
1687 <key>name</key>
1688 <string>keyword.operator.optional.ts</string>
1689 </dict>
1690 </dict>
1691 </dict>
1692 </array>
1693 </dict>
1694 <key>destructuring-parameter</key>
1695 <dict>
1696 <key>patterns</key>
1697 <array>
1698 <dict>
1699 <key>name</key>
1700 <string>meta.parameter.object-binding-pattern.ts</string>
1701 <key>begin</key>
1702 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\{)</string>
1703 <key>beginCaptures</key>
1704 <dict>
1705 <key>1</key>
1706 <dict>
1707 <key>name</key>
1708 <string>keyword.operator.rest.ts</string>
1709 </dict>
1710 <key>2</key>
1711 <dict>
1712 <key>name</key>
1713 <string>punctuation.definition.binding-pattern.object.ts</string>
1714 </dict>
1715 </dict>
1716 <key>end</key>
1717 <string>\}</string>
1718 <key>endCaptures</key>
1719 <dict>
1720 <key>0</key>
1721 <dict>
1722 <key>name</key>
1723 <string>punctuation.definition.binding-pattern.object.ts</string>
1724 </dict>
1725 </dict>
1726 <key>patterns</key>
1727 <array>
1728 <dict>
1729 <key>include</key>
1730 <string>#parameter-object-binding-element</string>
1731 </dict>
1732 </array>
1733 </dict>
1734 <dict>
1735 <key>name</key>
1736 <string>meta.paramter.array-binding-pattern.ts</string>
1737 <key>begin</key>
1738 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\[)</string>
1739 <key>beginCaptures</key>
1740 <dict>
1741 <key>1</key>
1742 <dict>
1743 <key>name</key>
1744 <string>keyword.operator.rest.ts</string>
1745 </dict>
1746 <key>2</key>
1747 <dict>
1748 <key>name</key>
1749 <string>punctuation.definition.binding-pattern.array.ts</string>
1750 </dict>
1751 </dict>
1752 <key>end</key>
1753 <string>\]</string>
1754 <key>endCaptures</key>
1755 <dict>
1756 <key>0</key>
1757 <dict>
1758 <key>name</key>
1759 <string>punctuation.definition.binding-pattern.array.ts</string>
1760 </dict>
1761 </dict>
1762 <key>patterns</key>
1763 <array>
1764 <dict>
1765 <key>include</key>
1766 <string>#parameter-binding-element</string>
1767 </dict>
1768 <dict>
1769 <key>include</key>
1770 <string>#punctuation-comma</string>
1771 </dict>
1772 </array>
1773 </dict>
1774 </array>
1775 </dict>
1776 <key>parameter-object-binding-element</key>
1777 <dict>
1778 <key>patterns</key>
1779 <array>
1780 <dict>
1781 <key>include</key>
1782 <string>#comment</string>
1783 </dict>
1784 <dict>
1785 <key>begin</key>
1786 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1787 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1788 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1789 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1790 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1791 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1792 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1793 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1794 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1795)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1796 <key>end</key>
1797 <string>(?=,|\})</string>
1798 <key>patterns</key>
1799 <array>
1800 <dict>
1801 <key>include</key>
1802 <string>#object-binding-element-propertyName</string>
1803 </dict>
1804 <dict>
1805 <key>include</key>
1806 <string>#parameter-binding-element</string>
1807 </dict>
1808 <dict>
1809 <key>include</key>
1810 <string>#paren-expression</string>
1811 </dict>
1812 </array>
1813 </dict>
1814 <dict>
1815 <key>include</key>
1816 <string>#parameter-object-binding-pattern</string>
1817 </dict>
1818 <dict>
1819 <key>include</key>
1820 <string>#destructuring-parameter-rest</string>
1821 </dict>
1822 <dict>
1823 <key>include</key>
1824 <string>#variable-initializer</string>
1825 </dict>
1826 <dict>
1827 <key>include</key>
1828 <string>#punctuation-comma</string>
1829 </dict>
1830 </array>
1831 </dict>
1832 <key>parameter-binding-element</key>
1833 <dict>
1834 <key>patterns</key>
1835 <array>
1836 <dict>
1837 <key>include</key>
1838 <string>#comment</string>
1839 </dict>
1840 <dict>
1841 <key>include</key>
1842 <string>#string</string>
1843 </dict>
1844 <dict>
1845 <key>include</key>
1846 <string>#numeric-literal</string>
1847 </dict>
1848 <dict>
1849 <key>include</key>
1850 <string>#regex</string>
1851 </dict>
1852 <dict>
1853 <key>include</key>
1854 <string>#parameter-object-binding-pattern</string>
1855 </dict>
1856 <dict>
1857 <key>include</key>
1858 <string>#parameter-array-binding-pattern</string>
1859 </dict>
1860 <dict>
1861 <key>include</key>
1862 <string>#destructuring-parameter-rest</string>
1863 </dict>
1864 <dict>
1865 <key>include</key>
1866 <string>#variable-initializer</string>
1867 </dict>
1868 </array>
1869 </dict>
1870 <key>destructuring-parameter-rest</key>
1871 <dict>
1872 <key>match</key>
1873 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1874 <key>captures</key>
1875 <dict>
1876 <key>1</key>
1877 <dict>
1878 <key>name</key>
1879 <string>keyword.operator.rest.ts</string>
1880 </dict>
1881 <key>2</key>
1882 <dict>
1883 <key>name</key>
1884 <string>variable.parameter.ts</string>
1885 </dict>
1886 </dict>
1887 </dict>
1888 <key>parameter-object-binding-pattern</key>
1889 <dict>
1890 <key>begin</key>
1891 <string>(?:(\.\.\.)\s*)?(\{)</string>
1892 <key>beginCaptures</key>
1893 <dict>
1894 <key>1</key>
1895 <dict>
1896 <key>name</key>
1897 <string>keyword.operator.rest.ts</string>
1898 </dict>
1899 <key>2</key>
1900 <dict>
1901 <key>name</key>
1902 <string>punctuation.definition.binding-pattern.object.ts</string>
1903 </dict>
1904 </dict>
1905 <key>end</key>
1906 <string>\}</string>
1907 <key>endCaptures</key>
1908 <dict>
1909 <key>0</key>
1910 <dict>
1911 <key>name</key>
1912 <string>punctuation.definition.binding-pattern.object.ts</string>
1913 </dict>
1914 </dict>
1915 <key>patterns</key>
1916 <array>
1917 <dict>
1918 <key>include</key>
1919 <string>#parameter-object-binding-element</string>
1920 </dict>
1921 </array>
1922 </dict>
1923 <key>parameter-array-binding-pattern</key>
1924 <dict>
1925 <key>begin</key>
1926 <string>(?:(\.\.\.)\s*)?(\[)</string>
1927 <key>beginCaptures</key>
1928 <dict>
1929 <key>1</key>
1930 <dict>
1931 <key>name</key>
1932 <string>keyword.operator.rest.ts</string>
1933 </dict>
1934 <key>2</key>
1935 <dict>
1936 <key>name</key>
1937 <string>punctuation.definition.binding-pattern.array.ts</string>
1938 </dict>
1939 </dict>
1940 <key>end</key>
1941 <string>\]</string>
1942 <key>endCaptures</key>
1943 <dict>
1944 <key>0</key>
1945 <dict>
1946 <key>name</key>
1947 <string>punctuation.definition.binding-pattern.array.ts</string>
1948 </dict>
1949 </dict>
1950 <key>patterns</key>
1951 <array>
1952 <dict>
1953 <key>include</key>
1954 <string>#parameter-binding-element</string>
1955 </dict>
1956 <dict>
1957 <key>include</key>
1958 <string>#punctuation-comma</string>
1959 </dict>
1960 </array>
1961 </dict>
1962 <key>field-declaration</key>
1963 <dict>
1964 <key>name</key>
1965 <string>meta.field.declaration.ts</string>
1966 <key>begin</key>
1967 <string>(?x)(?&lt;!\()(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s+)?(?=\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1968 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1969 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1970 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1971 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1972 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1973 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1974 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1975 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1976)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$))</string>
1977 <key>beginCaptures</key>
1978 <dict>
1979 <key>1</key>
1980 <dict>
1981 <key>name</key>
1982 <string>storage.modifier.ts</string>
1983 </dict>
1984 </dict>
1985 <key>end</key>
1986 <string>(?x)(?=\}|;|,|$|(^(?!\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1987 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1988 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1989 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1990 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1991 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1992 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1993 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1994 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1995)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?&lt;=\})</string>
1996 <key>patterns</key>
1997 <array>
1998 <dict>
1999 <key>include</key>
2000 <string>#variable-initializer</string>
2001 </dict>
2002 <dict>
2003 <key>include</key>
2004 <string>#type-annotation</string>
2005 </dict>
2006 <dict>
2007 <key>include</key>
2008 <string>#string</string>
2009 </dict>
2010 <dict>
2011 <key>include</key>
2012 <string>#array-literal</string>
2013 </dict>
2014 <dict>
2015 <key>include</key>
2016 <string>#numeric-literal</string>
2017 </dict>
2018 <dict>
2019 <key>include</key>
2020 <string>#comment</string>
2021 </dict>
2022 <dict>
2023 <key>match</key>
2024 <string>(?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s*
2025# function assignment |
2026(=\s*(
2027 ((async\s+)?(
2028 (function\s*[(&lt;*]) |
2029 (function\s+) |
2030 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2031 )) |
2032 ((async\s*)?(
2033 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2034 # sure shot arrow functions even if =&gt; is on new line
2035(
2036 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2037 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2038 (
2039 ([)]\s*:) | # ():
2040 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2041 )
2042) |
2043
2044# arrow function possible to detect only with =&gt; on same line
2045(
2046 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2047 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2048 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2049 \s*=&gt; # arrow operator
2050)
2051 ))
2052)) |
2053# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
2054(:\s*(
2055 (&lt;) |
2056 ([(]\s*(
2057 ([)]) |
2058 (\.\.\.) |
2059 ([_$[:alnum:]]+\s*(
2060 ([:,?=])|
2061 ([)]\s*=&gt;)
2062 ))
2063 ))
2064)) |
2065(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2066(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2067(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
2068 ((async\s+)?(
2069 (function\s*[(&lt;*]) |
2070 (function\s+) |
2071 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2072 )) |
2073 ((async\s*)?(
2074 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2075 # sure shot arrow functions even if =&gt; is on new line
2076(
2077 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2078 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2079 (
2080 ([)]\s*:) | # ():
2081 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2082 )
2083) |
2084
2085# arrow function possible to detect only with =&gt; on same line
2086(
2087 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2088 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2089 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2090 \s*=&gt; # arrow operator
2091)
2092 ))
2093)))</string>
2094 <key>captures</key>
2095 <dict>
2096 <key>1</key>
2097 <dict>
2098 <key>name</key>
2099 <string>meta.definition.property.ts entity.name.function.ts</string>
2100 </dict>
2101 <key>2</key>
2102 <dict>
2103 <key>name</key>
2104 <string>keyword.operator.optional.ts</string>
2105 </dict>
2106 <key>3</key>
2107 <dict>
2108 <key>name</key>
2109 <string>keyword.operator.definiteassignment.ts</string>
2110 </dict>
2111 </dict>
2112 </dict>
2113 <dict>
2114 <key>name</key>
2115 <string>meta.definition.property.ts variable.object.property.ts</string>
2116 <key>match</key>
2117 <string>\#?[_$[:alpha:]][_$[:alnum:]]*</string>
2118 </dict>
2119 <dict>
2120 <key>name</key>
2121 <string>keyword.operator.optional.ts</string>
2122 <key>match</key>
2123 <string>\?</string>
2124 </dict>
2125 <dict>
2126 <key>name</key>
2127 <string>keyword.operator.definiteassignment.ts</string>
2128 <key>match</key>
2129 <string>\!</string>
2130 </dict>
2131 </array>
2132 </dict>
2133 <key>variable-initializer</key>
2134 <dict>
2135 <key>patterns</key>
2136 <array>
2137 <dict>
2138 <key>begin</key>
2139 <string>(?&lt;!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=&gt;\s*$)</string>
2140 <key>beginCaptures</key>
2141 <dict>
2142 <key>1</key>
2143 <dict>
2144 <key>name</key>
2145 <string>keyword.operator.assignment.ts</string>
2146 </dict>
2147 </dict>
2148 <key>end</key>
2149 <string>(?=$|^|[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
2150 <key>patterns</key>
2151 <array>
2152 <dict>
2153 <key>include</key>
2154 <string>#expression</string>
2155 </dict>
2156 </array>
2157 </dict>
2158 <dict>
2159 <key>begin</key>
2160 <string>(?&lt;!=|!)(=)(?!=)</string>
2161 <key>beginCaptures</key>
2162 <dict>
2163 <key>1</key>
2164 <dict>
2165 <key>name</key>
2166 <string>keyword.operator.assignment.ts</string>
2167 </dict>
2168 </dict>
2169 <key>end</key>
2170 <string>(?=[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))|(?=^\s*$)|(?&lt;![\|\&amp;\+\-\*\/])(?&lt;=\S)(?&lt;!=)(?=\s*$)</string>
2171 <key>patterns</key>
2172 <array>
2173 <dict>
2174 <key>include</key>
2175 <string>#expression</string>
2176 </dict>
2177 </array>
2178 </dict>
2179 </array>
2180 </dict>
2181 <key>function-declaration</key>
2182 <dict>
2183 <key>name</key>
2184 <string>meta.function.ts</string>
2185 <key>begin</key>
2186 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2187 <key>beginCaptures</key>
2188 <dict>
2189 <key>1</key>
2190 <dict>
2191 <key>name</key>
2192 <string>keyword.control.export.ts</string>
2193 </dict>
2194 <key>2</key>
2195 <dict>
2196 <key>name</key>
2197 <string>storage.modifier.ts</string>
2198 </dict>
2199 <key>3</key>
2200 <dict>
2201 <key>name</key>
2202 <string>storage.modifier.async.ts</string>
2203 </dict>
2204 <key>4</key>
2205 <dict>
2206 <key>name</key>
2207 <string>storage.type.function.ts</string>
2208 </dict>
2209 <key>5</key>
2210 <dict>
2211 <key>name</key>
2212 <string>keyword.generator.asterisk.ts</string>
2213 </dict>
2214 <key>6</key>
2215 <dict>
2216 <key>name</key>
2217 <string>meta.definition.function.ts entity.name.function.ts</string>
2218 </dict>
2219 </dict>
2220 <key>end</key>
2221 <string>(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|(?&lt;=\})</string>
2222 <key>patterns</key>
2223 <array>
2224 <dict>
2225 <key>include</key>
2226 <string>#function-name</string>
2227 </dict>
2228 <dict>
2229 <key>include</key>
2230 <string>#function-body</string>
2231 </dict>
2232 </array>
2233 </dict>
2234 <key>function-expression</key>
2235 <dict>
2236 <key>name</key>
2237 <string>meta.function.expression.ts</string>
2238 <key>begin</key>
2239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2240 <key>beginCaptures</key>
2241 <dict>
2242 <key>1</key>
2243 <dict>
2244 <key>name</key>
2245 <string>storage.modifier.async.ts</string>
2246 </dict>
2247 <key>2</key>
2248 <dict>
2249 <key>name</key>
2250 <string>storage.type.function.ts</string>
2251 </dict>
2252 <key>3</key>
2253 <dict>
2254 <key>name</key>
2255 <string>keyword.generator.asterisk.ts</string>
2256 </dict>
2257 <key>4</key>
2258 <dict>
2259 <key>name</key>
2260 <string>meta.definition.function.ts entity.name.function.ts</string>
2261 </dict>
2262 </dict>
2263 <key>end</key>
2264 <string>(?=;)|(?&lt;=\})</string>
2265 <key>patterns</key>
2266 <array>
2267 <dict>
2268 <key>include</key>
2269 <string>#function-name</string>
2270 </dict>
2271 <dict>
2272 <key>include</key>
2273 <string>#single-line-comment-consuming-line-ending</string>
2274 </dict>
2275 <dict>
2276 <key>include</key>
2277 <string>#function-body</string>
2278 </dict>
2279 </array>
2280 </dict>
2281 <key>function-name</key>
2282 <dict>
2283 <key>name</key>
2284 <string>meta.definition.function.ts entity.name.function.ts</string>
2285 <key>match</key>
2286 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2287 </dict>
2288 <key>function-body</key>
2289 <dict>
2290 <key>patterns</key>
2291 <array>
2292 <dict>
2293 <key>include</key>
2294 <string>#comment</string>
2295 </dict>
2296 <dict>
2297 <key>include</key>
2298 <string>#type-parameters</string>
2299 </dict>
2300 <dict>
2301 <key>include</key>
2302 <string>#function-parameters</string>
2303 </dict>
2304 <dict>
2305 <key>include</key>
2306 <string>#return-type</string>
2307 </dict>
2308 <dict>
2309 <key>include</key>
2310 <string>#type-function-return-type</string>
2311 </dict>
2312 <dict>
2313 <key>include</key>
2314 <string>#decl-block</string>
2315 </dict>
2316 <dict>
2317 <key>name</key>
2318 <string>keyword.generator.asterisk.ts</string>
2319 <key>match</key>
2320 <string>\*</string>
2321 </dict>
2322 </array>
2323 </dict>
2324 <key>method-declaration</key>
2325 <dict>
2326 <key>patterns</key>
2327 <array>
2328 <dict>
2329 <key>name</key>
2330 <string>meta.method.declaration.ts</string>
2331 <key>begin</key>
2332 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
2333 <key>beginCaptures</key>
2334 <dict>
2335 <key>1</key>
2336 <dict>
2337 <key>name</key>
2338 <string>storage.modifier.ts</string>
2339 </dict>
2340 <key>2</key>
2341 <dict>
2342 <key>name</key>
2343 <string>storage.modifier.ts</string>
2344 </dict>
2345 <key>3</key>
2346 <dict>
2347 <key>name</key>
2348 <string>storage.modifier.ts</string>
2349 </dict>
2350 <key>4</key>
2351 <dict>
2352 <key>name</key>
2353 <string>storage.modifier.async.ts</string>
2354 </dict>
2355 <key>5</key>
2356 <dict>
2357 <key>name</key>
2358 <string>storage.type.ts</string>
2359 </dict>
2360 </dict>
2361 <key>end</key>
2362 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2363 <key>patterns</key>
2364 <array>
2365 <dict>
2366 <key>include</key>
2367 <string>#method-declaration-name</string>
2368 </dict>
2369 <dict>
2370 <key>include</key>
2371 <string>#function-body</string>
2372 </dict>
2373 </array>
2374 </dict>
2375 <dict>
2376 <key>name</key>
2377 <string>meta.method.declaration.ts</string>
2378 <key>begin</key>
2379 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2380 <key>beginCaptures</key>
2381 <dict>
2382 <key>1</key>
2383 <dict>
2384 <key>name</key>
2385 <string>storage.modifier.ts</string>
2386 </dict>
2387 <key>2</key>
2388 <dict>
2389 <key>name</key>
2390 <string>storage.modifier.ts</string>
2391 </dict>
2392 <key>3</key>
2393 <dict>
2394 <key>name</key>
2395 <string>storage.modifier.ts</string>
2396 </dict>
2397 <key>4</key>
2398 <dict>
2399 <key>name</key>
2400 <string>storage.modifier.async.ts</string>
2401 </dict>
2402 <key>5</key>
2403 <dict>
2404 <key>name</key>
2405 <string>keyword.operator.new.ts</string>
2406 </dict>
2407 <key>6</key>
2408 <dict>
2409 <key>name</key>
2410 <string>keyword.generator.asterisk.ts</string>
2411 </dict>
2412 </dict>
2413 <key>end</key>
2414 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2415 <key>patterns</key>
2416 <array>
2417 <dict>
2418 <key>include</key>
2419 <string>#method-declaration-name</string>
2420 </dict>
2421 <dict>
2422 <key>include</key>
2423 <string>#function-body</string>
2424 </dict>
2425 </array>
2426 </dict>
2427 <dict>
2428 <key>name</key>
2429 <string>meta.method.declaration.ts</string>
2430 <key>begin</key>
2431 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2432 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2433 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2434 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2435 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2436 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2437 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2438 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2439 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2440)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2441 <key>beginCaptures</key>
2442 <dict>
2443 <key>1</key>
2444 <dict>
2445 <key>name</key>
2446 <string>storage.modifier.ts</string>
2447 </dict>
2448 <key>2</key>
2449 <dict>
2450 <key>name</key>
2451 <string>storage.modifier.ts</string>
2452 </dict>
2453 <key>3</key>
2454 <dict>
2455 <key>name</key>
2456 <string>storage.modifier.ts</string>
2457 </dict>
2458 <key>4</key>
2459 <dict>
2460 <key>name</key>
2461 <string>storage.modifier.async.ts</string>
2462 </dict>
2463 <key>5</key>
2464 <dict>
2465 <key>name</key>
2466 <string>storage.type.property.ts</string>
2467 </dict>
2468 <key>6</key>
2469 <dict>
2470 <key>name</key>
2471 <string>keyword.generator.asterisk.ts</string>
2472 </dict>
2473 </dict>
2474 <key>end</key>
2475 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2476 <key>patterns</key>
2477 <array>
2478 <dict>
2479 <key>include</key>
2480 <string>#method-declaration-name</string>
2481 </dict>
2482 <dict>
2483 <key>include</key>
2484 <string>#function-body</string>
2485 </dict>
2486 </array>
2487 </dict>
2488 </array>
2489 </dict>
2490 <key>object-literal-method-declaration</key>
2491 <dict>
2492 <key>name</key>
2493 <string>meta.method.declaration.ts</string>
2494 <key>begin</key>
2495 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2496 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2497 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2498 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2499 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2500 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2501 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2502 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2503 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2504)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2505 <key>beginCaptures</key>
2506 <dict>
2507 <key>1</key>
2508 <dict>
2509 <key>name</key>
2510 <string>storage.modifier.async.ts</string>
2511 </dict>
2512 <key>2</key>
2513 <dict>
2514 <key>name</key>
2515 <string>storage.type.property.ts</string>
2516 </dict>
2517 <key>3</key>
2518 <dict>
2519 <key>name</key>
2520 <string>keyword.generator.asterisk.ts</string>
2521 </dict>
2522 </dict>
2523 <key>end</key>
2524 <string>(?=\}|;|,)|(?&lt;=\})</string>
2525 <key>patterns</key>
2526 <array>
2527 <dict>
2528 <key>include</key>
2529 <string>#method-declaration-name</string>
2530 </dict>
2531 <dict>
2532 <key>include</key>
2533 <string>#function-body</string>
2534 </dict>
2535 <dict>
2536 <key>begin</key>
2537 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2538 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2539 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2540 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2541 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2542 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2543 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2544 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2545 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2546)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2547 <key>beginCaptures</key>
2548 <dict>
2549 <key>1</key>
2550 <dict>
2551 <key>name</key>
2552 <string>storage.modifier.async.ts</string>
2553 </dict>
2554 <key>2</key>
2555 <dict>
2556 <key>name</key>
2557 <string>storage.type.property.ts</string>
2558 </dict>
2559 <key>3</key>
2560 <dict>
2561 <key>name</key>
2562 <string>keyword.generator.asterisk.ts</string>
2563 </dict>
2564 </dict>
2565 <key>end</key>
2566 <string>(?=\(|\&lt;)</string>
2567 <key>patterns</key>
2568 <array>
2569 <dict>
2570 <key>include</key>
2571 <string>#method-declaration-name</string>
2572 </dict>
2573 </array>
2574 </dict>
2575 </array>
2576 </dict>
2577 <key>method-declaration-name</key>
2578 <dict>
2579 <key>begin</key>
2580 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2581 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2582 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2583 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2584 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2585 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2586 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2587 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2588 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2589)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\&lt;])</string>
2590 <key>end</key>
2591 <string>(?=\(|\&lt;)</string>
2592 <key>patterns</key>
2593 <array>
2594 <dict>
2595 <key>include</key>
2596 <string>#string</string>
2597 </dict>
2598 <dict>
2599 <key>include</key>
2600 <string>#array-literal</string>
2601 </dict>
2602 <dict>
2603 <key>include</key>
2604 <string>#numeric-literal</string>
2605 </dict>
2606 <dict>
2607 <key>name</key>
2608 <string>meta.definition.method.ts entity.name.function.ts</string>
2609 <key>match</key>
2610 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2611 </dict>
2612 <dict>
2613 <key>name</key>
2614 <string>keyword.operator.optional.ts</string>
2615 <key>match</key>
2616 <string>\?</string>
2617 </dict>
2618 </array>
2619 </dict>
2620 <key>arrow-function</key>
2621 <dict>
2622 <key>patterns</key>
2623 <array>
2624 <dict>
2625 <key>name</key>
2626 <string>meta.arrow.ts</string>
2627 <key>match</key>
2628 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
2629 <key>captures</key>
2630 <dict>
2631 <key>1</key>
2632 <dict>
2633 <key>name</key>
2634 <string>storage.modifier.async.ts</string>
2635 </dict>
2636 <key>2</key>
2637 <dict>
2638 <key>name</key>
2639 <string>variable.parameter.ts</string>
2640 </dict>
2641 </dict>
2642 </dict>
2643 <dict>
2644 <key>name</key>
2645 <string>meta.arrow.ts</string>
2646 <key>begin</key>
2647 <string>(?x) (?:
2648 (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)
2649)? ((?&lt;![})!\]])\s*
2650 (?=
2651 # sure shot arrow functions even if =&gt; is on new line
2652(
2653 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2654 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2655 (
2656 ([)]\s*:) | # ():
2657 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2658 )
2659) |
2660
2661# arrow function possible to detect only with =&gt; on same line
2662(
2663 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2664 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2665 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2666 \s*=&gt; # arrow operator
2667)
2668 )
2669)</string>
2670 <key>beginCaptures</key>
2671 <dict>
2672 <key>1</key>
2673 <dict>
2674 <key>name</key>
2675 <string>storage.modifier.async.ts</string>
2676 </dict>
2677 </dict>
2678 <key>end</key>
2679 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
2680 <key>patterns</key>
2681 <array>
2682 <dict>
2683 <key>include</key>
2684 <string>#comment</string>
2685 </dict>
2686 <dict>
2687 <key>include</key>
2688 <string>#type-parameters</string>
2689 </dict>
2690 <dict>
2691 <key>include</key>
2692 <string>#function-parameters</string>
2693 </dict>
2694 <dict>
2695 <key>include</key>
2696 <string>#arrow-return-type</string>
2697 </dict>
2698 <dict>
2699 <key>include</key>
2700 <string>#possibly-arrow-return-type</string>
2701 </dict>
2702 </array>
2703 </dict>
2704 <dict>
2705 <key>name</key>
2706 <string>meta.arrow.ts</string>
2707 <key>begin</key>
2708 <string>=&gt;</string>
2709 <key>beginCaptures</key>
2710 <dict>
2711 <key>0</key>
2712 <dict>
2713 <key>name</key>
2714 <string>storage.type.function.arrow.ts</string>
2715 </dict>
2716 </dict>
2717 <key>end</key>
2718 <string>((?&lt;=\}|\S)(?&lt;!=&gt;)|((?!\{)(?=\S)))(?!\/[\/\*])</string>
2719 <key>patterns</key>
2720 <array>
2721 <dict>
2722 <key>include</key>
2723 <string>#single-line-comment-consuming-line-ending</string>
2724 </dict>
2725 <dict>
2726 <key>include</key>
2727 <string>#decl-block</string>
2728 </dict>
2729 <dict>
2730 <key>include</key>
2731 <string>#expression</string>
2732 </dict>
2733 </array>
2734 </dict>
2735 </array>
2736 </dict>
2737 <key>indexer-declaration</key>
2738 <dict>
2739 <key>name</key>
2740 <string>meta.indexer.declaration.ts</string>
2741 <key>begin</key>
2742 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)</string>
2743 <key>beginCaptures</key>
2744 <dict>
2745 <key>1</key>
2746 <dict>
2747 <key>name</key>
2748 <string>storage.modifier.ts</string>
2749 </dict>
2750 <key>2</key>
2751 <dict>
2752 <key>name</key>
2753 <string>meta.brace.square.ts</string>
2754 </dict>
2755 <key>3</key>
2756 <dict>
2757 <key>name</key>
2758 <string>variable.parameter.ts</string>
2759 </dict>
2760 </dict>
2761 <key>end</key>
2762 <string>(\])\s*(\?\s*)?|$</string>
2763 <key>endCaptures</key>
2764 <dict>
2765 <key>1</key>
2766 <dict>
2767 <key>name</key>
2768 <string>meta.brace.square.ts</string>
2769 </dict>
2770 <key>2</key>
2771 <dict>
2772 <key>name</key>
2773 <string>keyword.operator.optional.ts</string>
2774 </dict>
2775 </dict>
2776 <key>patterns</key>
2777 <array>
2778 <dict>
2779 <key>include</key>
2780 <string>#type-annotation</string>
2781 </dict>
2782 </array>
2783 </dict>
2784 <key>indexer-mapped-type-declaration</key>
2785 <dict>
2786 <key>name</key>
2787 <string>meta.indexer.mappedtype.declaration.ts</string>
2788 <key>begin</key>
2789 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+</string>
2790 <key>beginCaptures</key>
2791 <dict>
2792 <key>1</key>
2793 <dict>
2794 <key>name</key>
2795 <string>keyword.operator.type.modifier.ts</string>
2796 </dict>
2797 <key>2</key>
2798 <dict>
2799 <key>name</key>
2800 <string>storage.modifier.ts</string>
2801 </dict>
2802 <key>3</key>
2803 <dict>
2804 <key>name</key>
2805 <string>meta.brace.square.ts</string>
2806 </dict>
2807 <key>4</key>
2808 <dict>
2809 <key>name</key>
2810 <string>entity.name.type.ts</string>
2811 </dict>
2812 <key>5</key>
2813 <dict>
2814 <key>name</key>
2815 <string>keyword.operator.expression.in.ts</string>
2816 </dict>
2817 </dict>
2818 <key>end</key>
2819 <string>(\])([+-])?\s*(\?\s*)?|$</string>
2820 <key>endCaptures</key>
2821 <dict>
2822 <key>1</key>
2823 <dict>
2824 <key>name</key>
2825 <string>meta.brace.square.ts</string>
2826 </dict>
2827 <key>2</key>
2828 <dict>
2829 <key>name</key>
2830 <string>keyword.operator.type.modifier.ts</string>
2831 </dict>
2832 <key>3</key>
2833 <dict>
2834 <key>name</key>
2835 <string>keyword.operator.optional.ts</string>
2836 </dict>
2837 </dict>
2838 <key>patterns</key>
2839 <array>
2840 <dict>
2841 <key>match</key>
2842 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+</string>
2843 <key>captures</key>
2844 <dict>
2845 <key>1</key>
2846 <dict>
2847 <key>name</key>
2848 <string>keyword.control.as.ts</string>
2849 </dict>
2850 </dict>
2851 </dict>
2852 <dict>
2853 <key>include</key>
2854 <string>#type</string>
2855 </dict>
2856 </array>
2857 </dict>
2858 <key>function-parameters</key>
2859 <dict>
2860 <key>name</key>
2861 <string>meta.parameters.ts</string>
2862 <key>begin</key>
2863 <string>\(</string>
2864 <key>beginCaptures</key>
2865 <dict>
2866 <key>0</key>
2867 <dict>
2868 <key>name</key>
2869 <string>punctuation.definition.parameters.begin.ts</string>
2870 </dict>
2871 </dict>
2872 <key>end</key>
2873 <string>\)</string>
2874 <key>endCaptures</key>
2875 <dict>
2876 <key>0</key>
2877 <dict>
2878 <key>name</key>
2879 <string>punctuation.definition.parameters.end.ts</string>
2880 </dict>
2881 </dict>
2882 <key>patterns</key>
2883 <array>
2884 <dict>
2885 <key>include</key>
2886 <string>#function-parameters-body</string>
2887 </dict>
2888 </array>
2889 </dict>
2890 <key>function-parameters-body</key>
2891 <dict>
2892 <key>patterns</key>
2893 <array>
2894 <dict>
2895 <key>include</key>
2896 <string>#comment</string>
2897 </dict>
2898 <dict>
2899 <key>include</key>
2900 <string>#string</string>
2901 </dict>
2902 <dict>
2903 <key>include</key>
2904 <string>#decorator</string>
2905 </dict>
2906 <dict>
2907 <key>include</key>
2908 <string>#destructuring-parameter</string>
2909 </dict>
2910 <dict>
2911 <key>include</key>
2912 <string>#parameter-name</string>
2913 </dict>
2914 <dict>
2915 <key>include</key>
2916 <string>#parameter-type-annotation</string>
2917 </dict>
2918 <dict>
2919 <key>include</key>
2920 <string>#variable-initializer</string>
2921 </dict>
2922 <dict>
2923 <key>name</key>
2924 <string>punctuation.separator.parameter.ts</string>
2925 <key>match</key>
2926 <string>,</string>
2927 </dict>
2928 </array>
2929 </dict>
2930 <key>class-declaration</key>
2931 <dict>
2932 <key>name</key>
2933 <string>meta.class.ts</string>
2934 <key>begin</key>
2935 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])</string>
2936 <key>beginCaptures</key>
2937 <dict>
2938 <key>1</key>
2939 <dict>
2940 <key>name</key>
2941 <string>keyword.control.export.ts</string>
2942 </dict>
2943 <key>2</key>
2944 <dict>
2945 <key>name</key>
2946 <string>storage.modifier.ts</string>
2947 </dict>
2948 <key>3</key>
2949 <dict>
2950 <key>name</key>
2951 <string>storage.modifier.ts</string>
2952 </dict>
2953 <key>4</key>
2954 <dict>
2955 <key>name</key>
2956 <string>storage.type.class.ts</string>
2957 </dict>
2958 </dict>
2959 <key>end</key>
2960 <string>(?&lt;=\})</string>
2961 <key>patterns</key>
2962 <array>
2963 <dict>
2964 <key>include</key>
2965 <string>#class-declaration-or-expression-patterns</string>
2966 </dict>
2967 </array>
2968 </dict>
2969 <key>class-expression</key>
2970 <dict>
2971 <key>name</key>
2972 <string>meta.class.ts</string>
2973 <key>begin</key>
2974 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[&lt;{]|\/[\/*])</string>
2975 <key>beginCaptures</key>
2976 <dict>
2977 <key>1</key>
2978 <dict>
2979 <key>name</key>
2980 <string>storage.modifier.ts</string>
2981 </dict>
2982 <key>2</key>
2983 <dict>
2984 <key>name</key>
2985 <string>storage.type.class.ts</string>
2986 </dict>
2987 </dict>
2988 <key>end</key>
2989 <string>(?&lt;=\})</string>
2990 <key>patterns</key>
2991 <array>
2992 <dict>
2993 <key>include</key>
2994 <string>#class-declaration-or-expression-patterns</string>
2995 </dict>
2996 </array>
2997 </dict>
2998 <key>class-declaration-or-expression-patterns</key>
2999 <dict>
3000 <key>patterns</key>
3001 <array>
3002 <dict>
3003 <key>include</key>
3004 <string>#comment</string>
3005 </dict>
3006 <dict>
3007 <key>include</key>
3008 <string>#class-or-interface-heritage</string>
3009 </dict>
3010 <dict>
3011 <key>match</key>
3012 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3013 <key>captures</key>
3014 <dict>
3015 <key>0</key>
3016 <dict>
3017 <key>name</key>
3018 <string>entity.name.type.class.ts</string>
3019 </dict>
3020 </dict>
3021 </dict>
3022 <dict>
3023 <key>include</key>
3024 <string>#type-parameters</string>
3025 </dict>
3026 <dict>
3027 <key>include</key>
3028 <string>#class-or-interface-body</string>
3029 </dict>
3030 </array>
3031 </dict>
3032 <key>interface-declaration</key>
3033 <dict>
3034 <key>name</key>
3035 <string>meta.interface.ts</string>
3036 <key>begin</key>
3037 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])</string>
3038 <key>beginCaptures</key>
3039 <dict>
3040 <key>1</key>
3041 <dict>
3042 <key>name</key>
3043 <string>keyword.control.export.ts</string>
3044 </dict>
3045 <key>2</key>
3046 <dict>
3047 <key>name</key>
3048 <string>storage.modifier.ts</string>
3049 </dict>
3050 <key>3</key>
3051 <dict>
3052 <key>name</key>
3053 <string>storage.modifier.ts</string>
3054 </dict>
3055 <key>4</key>
3056 <dict>
3057 <key>name</key>
3058 <string>storage.type.interface.ts</string>
3059 </dict>
3060 </dict>
3061 <key>end</key>
3062 <string>(?&lt;=\})</string>
3063 <key>patterns</key>
3064 <array>
3065 <dict>
3066 <key>include</key>
3067 <string>#comment</string>
3068 </dict>
3069 <dict>
3070 <key>include</key>
3071 <string>#class-or-interface-heritage</string>
3072 </dict>
3073 <dict>
3074 <key>match</key>
3075 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3076 <key>captures</key>
3077 <dict>
3078 <key>0</key>
3079 <dict>
3080 <key>name</key>
3081 <string>entity.name.type.interface.ts</string>
3082 </dict>
3083 </dict>
3084 </dict>
3085 <dict>
3086 <key>include</key>
3087 <string>#type-parameters</string>
3088 </dict>
3089 <dict>
3090 <key>include</key>
3091 <string>#class-or-interface-body</string>
3092 </dict>
3093 </array>
3094 </dict>
3095 <key>class-or-interface-heritage</key>
3096 <dict>
3097 <key>begin</key>
3098 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3099 <key>beginCaptures</key>
3100 <dict>
3101 <key>1</key>
3102 <dict>
3103 <key>name</key>
3104 <string>storage.modifier.ts</string>
3105 </dict>
3106 </dict>
3107 <key>end</key>
3108 <string>(?=\{)</string>
3109 <key>patterns</key>
3110 <array>
3111 <dict>
3112 <key>include</key>
3113 <string>#comment</string>
3114 </dict>
3115 <dict>
3116 <key>include</key>
3117 <string>#class-or-interface-heritage</string>
3118 </dict>
3119 <dict>
3120 <key>include</key>
3121 <string>#type-parameters</string>
3122 </dict>
3123 <dict>
3124 <key>include</key>
3125 <string>#expressionWithoutIdentifiers</string>
3126 </dict>
3127 <dict>
3128 <key>match</key>
3129 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*)</string>
3130 <key>captures</key>
3131 <dict>
3132 <key>1</key>
3133 <dict>
3134 <key>name</key>
3135 <string>entity.name.type.module.ts</string>
3136 </dict>
3137 <key>2</key>
3138 <dict>
3139 <key>name</key>
3140 <string>punctuation.accessor.ts</string>
3141 </dict>
3142 <key>3</key>
3143 <dict>
3144 <key>name</key>
3145 <string>punctuation.accessor.optional.ts</string>
3146 </dict>
3147 </dict>
3148 </dict>
3149 <dict>
3150 <key>match</key>
3151 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3152 <key>captures</key>
3153 <dict>
3154 <key>1</key>
3155 <dict>
3156 <key>name</key>
3157 <string>entity.other.inherited-class.ts</string>
3158 </dict>
3159 </dict>
3160 </dict>
3161 <dict>
3162 <key>include</key>
3163 <string>#expressionPunctuations</string>
3164 </dict>
3165 </array>
3166 </dict>
3167 <key>class-or-interface-body</key>
3168 <dict>
3169 <key>begin</key>
3170 <string>\{</string>
3171 <key>beginCaptures</key>
3172 <dict>
3173 <key>0</key>
3174 <dict>
3175 <key>name</key>
3176 <string>punctuation.definition.block.ts</string>
3177 </dict>
3178 </dict>
3179 <key>end</key>
3180 <string>\}</string>
3181 <key>endCaptures</key>
3182 <dict>
3183 <key>0</key>
3184 <dict>
3185 <key>name</key>
3186 <string>punctuation.definition.block.ts</string>
3187 </dict>
3188 </dict>
3189 <key>patterns</key>
3190 <array>
3191 <dict>
3192 <key>include</key>
3193 <string>#comment</string>
3194 </dict>
3195 <dict>
3196 <key>include</key>
3197 <string>#decorator</string>
3198 </dict>
3199 <dict>
3200 <key>begin</key>
3201 <string>(?&lt;=:)\s*</string>
3202 <key>end</key>
3203 <string>(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3204 <key>patterns</key>
3205 <array>
3206 <dict>
3207 <key>include</key>
3208 <string>#expression</string>
3209 </dict>
3210 </array>
3211 </dict>
3212 <dict>
3213 <key>include</key>
3214 <string>#method-declaration</string>
3215 </dict>
3216 <dict>
3217 <key>include</key>
3218 <string>#indexer-declaration</string>
3219 </dict>
3220 <dict>
3221 <key>include</key>
3222 <string>#field-declaration</string>
3223 </dict>
3224 <dict>
3225 <key>include</key>
3226 <string>#string</string>
3227 </dict>
3228 <dict>
3229 <key>include</key>
3230 <string>#type-annotation</string>
3231 </dict>
3232 <dict>
3233 <key>include</key>
3234 <string>#variable-initializer</string>
3235 </dict>
3236 <dict>
3237 <key>include</key>
3238 <string>#access-modifier</string>
3239 </dict>
3240 <dict>
3241 <key>include</key>
3242 <string>#property-accessor</string>
3243 </dict>
3244 <dict>
3245 <key>include</key>
3246 <string>#async-modifier</string>
3247 </dict>
3248 <dict>
3249 <key>include</key>
3250 <string>#after-operator-block-as-object-literal</string>
3251 </dict>
3252 <dict>
3253 <key>include</key>
3254 <string>#decl-block</string>
3255 </dict>
3256 <dict>
3257 <key>include</key>
3258 <string>#expression</string>
3259 </dict>
3260 <dict>
3261 <key>include</key>
3262 <string>#punctuation-comma</string>
3263 </dict>
3264 <dict>
3265 <key>include</key>
3266 <string>#punctuation-semicolon</string>
3267 </dict>
3268 </array>
3269 </dict>
3270 <key>access-modifier</key>
3271 <dict>
3272 <key>name</key>
3273 <string>storage.modifier.ts</string>
3274 <key>match</key>
3275 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3276 </dict>
3277 <key>property-accessor</key>
3278 <dict>
3279 <key>name</key>
3280 <string>storage.type.property.ts</string>
3281 <key>match</key>
3282 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3283 </dict>
3284 <key>async-modifier</key>
3285 <dict>
3286 <key>name</key>
3287 <string>storage.modifier.async.ts</string>
3288 <key>match</key>
3289 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3290 </dict>
3291 <key>enum-declaration</key>
3292 <dict>
3293 <key>name</key>
3294 <string>meta.enum.declaration.ts</string>
3295 <key>begin</key>
3296 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3297 <key>beginCaptures</key>
3298 <dict>
3299 <key>1</key>
3300 <dict>
3301 <key>name</key>
3302 <string>keyword.control.export.ts</string>
3303 </dict>
3304 <key>2</key>
3305 <dict>
3306 <key>name</key>
3307 <string>storage.modifier.ts</string>
3308 </dict>
3309 <key>3</key>
3310 <dict>
3311 <key>name</key>
3312 <string>storage.modifier.ts</string>
3313 </dict>
3314 <key>4</key>
3315 <dict>
3316 <key>name</key>
3317 <string>storage.type.enum.ts</string>
3318 </dict>
3319 <key>5</key>
3320 <dict>
3321 <key>name</key>
3322 <string>entity.name.type.enum.ts</string>
3323 </dict>
3324 </dict>
3325 <key>end</key>
3326 <string>(?&lt;=\})</string>
3327 <key>patterns</key>
3328 <array>
3329 <dict>
3330 <key>include</key>
3331 <string>#comment</string>
3332 </dict>
3333 <dict>
3334 <key>begin</key>
3335 <string>\{</string>
3336 <key>beginCaptures</key>
3337 <dict>
3338 <key>0</key>
3339 <dict>
3340 <key>name</key>
3341 <string>punctuation.definition.block.ts</string>
3342 </dict>
3343 </dict>
3344 <key>end</key>
3345 <string>\}</string>
3346 <key>endCaptures</key>
3347 <dict>
3348 <key>0</key>
3349 <dict>
3350 <key>name</key>
3351 <string>punctuation.definition.block.ts</string>
3352 </dict>
3353 </dict>
3354 <key>patterns</key>
3355 <array>
3356 <dict>
3357 <key>include</key>
3358 <string>#comment</string>
3359 </dict>
3360 <dict>
3361 <key>begin</key>
3362 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3363 <key>beginCaptures</key>
3364 <dict>
3365 <key>0</key>
3366 <dict>
3367 <key>name</key>
3368 <string>variable.other.enummember.ts</string>
3369 </dict>
3370 </dict>
3371 <key>end</key>
3372 <string>(?=,|\}|$)</string>
3373 <key>patterns</key>
3374 <array>
3375 <dict>
3376 <key>include</key>
3377 <string>#comment</string>
3378 </dict>
3379 <dict>
3380 <key>include</key>
3381 <string>#variable-initializer</string>
3382 </dict>
3383 </array>
3384 </dict>
3385 <dict>
3386 <key>begin</key>
3387 <string>(?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\])))</string>
3388 <key>end</key>
3389 <string>(?=,|\}|$)</string>
3390 <key>patterns</key>
3391 <array>
3392 <dict>
3393 <key>include</key>
3394 <string>#string</string>
3395 </dict>
3396 <dict>
3397 <key>include</key>
3398 <string>#array-literal</string>
3399 </dict>
3400 <dict>
3401 <key>include</key>
3402 <string>#comment</string>
3403 </dict>
3404 <dict>
3405 <key>include</key>
3406 <string>#variable-initializer</string>
3407 </dict>
3408 </array>
3409 </dict>
3410 <dict>
3411 <key>include</key>
3412 <string>#punctuation-comma</string>
3413 </dict>
3414 </array>
3415 </dict>
3416 </array>
3417 </dict>
3418 <key>namespace-declaration</key>
3419 <dict>
3420 <key>name</key>
3421 <string>meta.namespace.declaration.ts</string>
3422 <key>begin</key>
3423 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))</string>
3424 <key>beginCaptures</key>
3425 <dict>
3426 <key>1</key>
3427 <dict>
3428 <key>name</key>
3429 <string>keyword.control.export.ts</string>
3430 </dict>
3431 <key>2</key>
3432 <dict>
3433 <key>name</key>
3434 <string>storage.modifier.ts</string>
3435 </dict>
3436 <key>3</key>
3437 <dict>
3438 <key>name</key>
3439 <string>storage.type.namespace.ts</string>
3440 </dict>
3441 </dict>
3442 <key>end</key>
3443 <string>(?&lt;=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3444 <key>patterns</key>
3445 <array>
3446 <dict>
3447 <key>include</key>
3448 <string>#comment</string>
3449 </dict>
3450 <dict>
3451 <key>include</key>
3452 <string>#string</string>
3453 </dict>
3454 <dict>
3455 <key>name</key>
3456 <string>entity.name.type.module.ts</string>
3457 <key>match</key>
3458 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3459 </dict>
3460 <dict>
3461 <key>include</key>
3462 <string>#punctuation-accessor</string>
3463 </dict>
3464 <dict>
3465 <key>include</key>
3466 <string>#decl-block</string>
3467 </dict>
3468 </array>
3469 </dict>
3470 <key>type-alias-declaration</key>
3471 <dict>
3472 <key>name</key>
3473 <string>meta.type.declaration.ts</string>
3474 <key>begin</key>
3475 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*</string>
3476 <key>beginCaptures</key>
3477 <dict>
3478 <key>1</key>
3479 <dict>
3480 <key>name</key>
3481 <string>keyword.control.export.ts</string>
3482 </dict>
3483 <key>2</key>
3484 <dict>
3485 <key>name</key>
3486 <string>storage.modifier.ts</string>
3487 </dict>
3488 <key>3</key>
3489 <dict>
3490 <key>name</key>
3491 <string>storage.type.type.ts</string>
3492 </dict>
3493 <key>4</key>
3494 <dict>
3495 <key>name</key>
3496 <string>entity.name.type.alias.ts</string>
3497 </dict>
3498 </dict>
3499 <key>end</key>
3500 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3501 <key>patterns</key>
3502 <array>
3503 <dict>
3504 <key>include</key>
3505 <string>#comment</string>
3506 </dict>
3507 <dict>
3508 <key>include</key>
3509 <string>#type-parameters</string>
3510 </dict>
3511 <dict>
3512 <key>begin</key>
3513 <string>(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3514 <key>beginCaptures</key>
3515 <dict>
3516 <key>1</key>
3517 <dict>
3518 <key>name</key>
3519 <string>keyword.operator.assignment.ts</string>
3520 </dict>
3521 <key>2</key>
3522 <dict>
3523 <key>name</key>
3524 <string>keyword.control.intrinsic.ts</string>
3525 </dict>
3526 </dict>
3527 <key>end</key>
3528 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3529 <key>patterns</key>
3530 <array>
3531 <dict>
3532 <key>include</key>
3533 <string>#type</string>
3534 </dict>
3535 </array>
3536 </dict>
3537 <dict>
3538 <key>begin</key>
3539 <string>(=)\s*</string>
3540 <key>beginCaptures</key>
3541 <dict>
3542 <key>1</key>
3543 <dict>
3544 <key>name</key>
3545 <string>keyword.operator.assignment.ts</string>
3546 </dict>
3547 </dict>
3548 <key>end</key>
3549 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3550 <key>patterns</key>
3551 <array>
3552 <dict>
3553 <key>include</key>
3554 <string>#type</string>
3555 </dict>
3556 </array>
3557 </dict>
3558 </array>
3559 </dict>
3560 <key>import-equals-declaration</key>
3561 <dict>
3562 <key>patterns</key>
3563 <array>
3564 <dict>
3565 <key>name</key>
3566 <string>meta.import-equals.external.ts</string>
3567 <key>begin</key>
3568 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()</string>
3569 <key>beginCaptures</key>
3570 <dict>
3571 <key>1</key>
3572 <dict>
3573 <key>name</key>
3574 <string>keyword.control.export.ts</string>
3575 </dict>
3576 <key>2</key>
3577 <dict>
3578 <key>name</key>
3579 <string>storage.modifier.ts</string>
3580 </dict>
3581 <key>3</key>
3582 <dict>
3583 <key>name</key>
3584 <string>keyword.control.import.ts</string>
3585 </dict>
3586 <key>4</key>
3587 <dict>
3588 <key>name</key>
3589 <string>keyword.control.type.ts</string>
3590 </dict>
3591 <key>5</key>
3592 <dict>
3593 <key>name</key>
3594 <string>variable.other.readwrite.alias.ts</string>
3595 </dict>
3596 <key>6</key>
3597 <dict>
3598 <key>name</key>
3599 <string>keyword.operator.assignment.ts</string>
3600 </dict>
3601 <key>7</key>
3602 <dict>
3603 <key>name</key>
3604 <string>keyword.control.require.ts</string>
3605 </dict>
3606 <key>8</key>
3607 <dict>
3608 <key>name</key>
3609 <string>meta.brace.round.ts</string>
3610 </dict>
3611 </dict>
3612 <key>end</key>
3613 <string>\)</string>
3614 <key>endCaptures</key>
3615 <dict>
3616 <key>0</key>
3617 <dict>
3618 <key>name</key>
3619 <string>meta.brace.round.ts</string>
3620 </dict>
3621 </dict>
3622 <key>patterns</key>
3623 <array>
3624 <dict>
3625 <key>include</key>
3626 <string>#comment</string>
3627 </dict>
3628 <dict>
3629 <key>include</key>
3630 <string>#string</string>
3631 </dict>
3632 </array>
3633 </dict>
3634 <dict>
3635 <key>name</key>
3636 <string>meta.import-equals.internal.ts</string>
3637 <key>begin</key>
3638 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)</string>
3639 <key>beginCaptures</key>
3640 <dict>
3641 <key>1</key>
3642 <dict>
3643 <key>name</key>
3644 <string>keyword.control.export.ts</string>
3645 </dict>
3646 <key>2</key>
3647 <dict>
3648 <key>name</key>
3649 <string>storage.modifier.ts</string>
3650 </dict>
3651 <key>3</key>
3652 <dict>
3653 <key>name</key>
3654 <string>keyword.control.import.ts</string>
3655 </dict>
3656 <key>4</key>
3657 <dict>
3658 <key>name</key>
3659 <string>keyword.control.type.ts</string>
3660 </dict>
3661 <key>5</key>
3662 <dict>
3663 <key>name</key>
3664 <string>variable.other.readwrite.alias.ts</string>
3665 </dict>
3666 <key>6</key>
3667 <dict>
3668 <key>name</key>
3669 <string>keyword.operator.assignment.ts</string>
3670 </dict>
3671 </dict>
3672 <key>end</key>
3673 <string>(?=;|$|^)</string>
3674 <key>patterns</key>
3675 <array>
3676 <dict>
3677 <key>include</key>
3678 <string>#single-line-comment-consuming-line-ending</string>
3679 </dict>
3680 <dict>
3681 <key>include</key>
3682 <string>#comment</string>
3683 </dict>
3684 <dict>
3685 <key>match</key>
3686 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
3687 <key>captures</key>
3688 <dict>
3689 <key>1</key>
3690 <dict>
3691 <key>name</key>
3692 <string>entity.name.type.module.ts</string>
3693 </dict>
3694 <key>2</key>
3695 <dict>
3696 <key>name</key>
3697 <string>punctuation.accessor.ts</string>
3698 </dict>
3699 <key>3</key>
3700 <dict>
3701 <key>name</key>
3702 <string>punctuation.accessor.optional.ts</string>
3703 </dict>
3704 </dict>
3705 </dict>
3706 <dict>
3707 <key>name</key>
3708 <string>variable.other.readwrite.ts</string>
3709 <key>match</key>
3710 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3711 </dict>
3712 </array>
3713 </dict>
3714 </array>
3715 </dict>
3716 <key>import-declaration</key>
3717 <dict>
3718 <key>name</key>
3719 <string>meta.import.ts</string>
3720 <key>begin</key>
3721 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3722 <key>beginCaptures</key>
3723 <dict>
3724 <key>1</key>
3725 <dict>
3726 <key>name</key>
3727 <string>keyword.control.export.ts</string>
3728 </dict>
3729 <key>2</key>
3730 <dict>
3731 <key>name</key>
3732 <string>storage.modifier.ts</string>
3733 </dict>
3734 <key>3</key>
3735 <dict>
3736 <key>name</key>
3737 <string>keyword.control.import.ts</string>
3738 </dict>
3739 <key>4</key>
3740 <dict>
3741 <key>name</key>
3742 <string>keyword.control.type.ts</string>
3743 </dict>
3744 </dict>
3745 <key>end</key>
3746 <string>(?&lt;!^import|[^\._$[:alnum:]]import)(?=;|$|^)</string>
3747 <key>patterns</key>
3748 <array>
3749 <dict>
3750 <key>include</key>
3751 <string>#single-line-comment-consuming-line-ending</string>
3752 </dict>
3753 <dict>
3754 <key>include</key>
3755 <string>#comment</string>
3756 </dict>
3757 <dict>
3758 <key>include</key>
3759 <string>#string</string>
3760 </dict>
3761 <dict>
3762 <key>begin</key>
3763 <string>(?&lt;=^import|[^\._$[:alnum:]]import)(?!\s*["'])</string>
3764 <key>end</key>
3765 <string>\bfrom\b</string>
3766 <key>endCaptures</key>
3767 <dict>
3768 <key>0</key>
3769 <dict>
3770 <key>name</key>
3771 <string>keyword.control.from.ts</string>
3772 </dict>
3773 </dict>
3774 <key>patterns</key>
3775 <array>
3776 <dict>
3777 <key>include</key>
3778 <string>#import-export-declaration</string>
3779 </dict>
3780 </array>
3781 </dict>
3782 <dict>
3783 <key>include</key>
3784 <string>#import-export-declaration</string>
3785 </dict>
3786 </array>
3787 </dict>
3788 <key>export-declaration</key>
3789 <dict>
3790 <key>patterns</key>
3791 <array>
3792 <dict>
3793 <key>match</key>
3794 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3795 <key>captures</key>
3796 <dict>
3797 <key>1</key>
3798 <dict>
3799 <key>name</key>
3800 <string>keyword.control.export.ts</string>
3801 </dict>
3802 <key>2</key>
3803 <dict>
3804 <key>name</key>
3805 <string>keyword.control.as.ts</string>
3806 </dict>
3807 <key>3</key>
3808 <dict>
3809 <key>name</key>
3810 <string>storage.type.namespace.ts</string>
3811 </dict>
3812 <key>4</key>
3813 <dict>
3814 <key>name</key>
3815 <string>entity.name.type.module.ts</string>
3816 </dict>
3817 </dict>
3818 </dict>
3819 <dict>
3820 <key>name</key>
3821 <string>meta.export.default.ts</string>
3822 <key>begin</key>
3823 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))</string>
3824 <key>beginCaptures</key>
3825 <dict>
3826 <key>1</key>
3827 <dict>
3828 <key>name</key>
3829 <string>keyword.control.export.ts</string>
3830 </dict>
3831 <key>2</key>
3832 <dict>
3833 <key>name</key>
3834 <string>keyword.control.type.ts</string>
3835 </dict>
3836 <key>3</key>
3837 <dict>
3838 <key>name</key>
3839 <string>keyword.operator.assignment.ts</string>
3840 </dict>
3841 <key>4</key>
3842 <dict>
3843 <key>name</key>
3844 <string>keyword.control.default.ts</string>
3845 </dict>
3846 </dict>
3847 <key>end</key>
3848 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3849 <key>patterns</key>
3850 <array>
3851 <dict>
3852 <key>include</key>
3853 <string>#interface-declaration</string>
3854 </dict>
3855 <dict>
3856 <key>include</key>
3857 <string>#expression</string>
3858 </dict>
3859 </array>
3860 </dict>
3861 <dict>
3862 <key>name</key>
3863 <string>meta.export.ts</string>
3864 <key>begin</key>
3865 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
3866 <key>beginCaptures</key>
3867 <dict>
3868 <key>1</key>
3869 <dict>
3870 <key>name</key>
3871 <string>keyword.control.export.ts</string>
3872 </dict>
3873 <key>2</key>
3874 <dict>
3875 <key>name</key>
3876 <string>keyword.control.type.ts</string>
3877 </dict>
3878 </dict>
3879 <key>end</key>
3880 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3881 <key>patterns</key>
3882 <array>
3883 <dict>
3884 <key>include</key>
3885 <string>#import-export-declaration</string>
3886 </dict>
3887 </array>
3888 </dict>
3889 </array>
3890 </dict>
3891 <key>import-export-declaration</key>
3892 <dict>
3893 <key>patterns</key>
3894 <array>
3895 <dict>
3896 <key>include</key>
3897 <string>#comment</string>
3898 </dict>
3899 <dict>
3900 <key>include</key>
3901 <string>#string</string>
3902 </dict>
3903 <dict>
3904 <key>include</key>
3905 <string>#import-export-block</string>
3906 </dict>
3907 <dict>
3908 <key>name</key>
3909 <string>keyword.control.from.ts</string>
3910 <key>match</key>
3911 <string>\bfrom\b</string>
3912 </dict>
3913 <dict>
3914 <key>include</key>
3915 <string>#import-export-assert-clause</string>
3916 </dict>
3917 <dict>
3918 <key>include</key>
3919 <string>#import-export-clause</string>
3920 </dict>
3921 </array>
3922 </dict>
3923 <key>import-export-assert-clause</key>
3924 <dict>
3925 <key>begin</key>
3926 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(with)|(assert))\s*(\{)</string>
3927 <key>beginCaptures</key>
3928 <dict>
3929 <key>1</key>
3930 <dict>
3931 <key>name</key>
3932 <string>keyword.control.with.ts</string>
3933 </dict>
3934 <key>2</key>
3935 <dict>
3936 <key>name</key>
3937 <string>keyword.control.assert.ts</string>
3938 </dict>
3939 <key>3</key>
3940 <dict>
3941 <key>name</key>
3942 <string>punctuation.definition.block.ts</string>
3943 </dict>
3944 </dict>
3945 <key>end</key>
3946 <string>\}</string>
3947 <key>endCaptures</key>
3948 <dict>
3949 <key>0</key>
3950 <dict>
3951 <key>name</key>
3952 <string>punctuation.definition.block.ts</string>
3953 </dict>
3954 </dict>
3955 <key>patterns</key>
3956 <array>
3957 <dict>
3958 <key>include</key>
3959 <string>#comment</string>
3960 </dict>
3961 <dict>
3962 <key>include</key>
3963 <string>#string</string>
3964 </dict>
3965 <dict>
3966 <key>name</key>
3967 <string>meta.object-literal.key.ts</string>
3968 <key>match</key>
3969 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
3970 </dict>
3971 <dict>
3972 <key>name</key>
3973 <string>punctuation.separator.key-value.ts</string>
3974 <key>match</key>
3975 <string>:</string>
3976 </dict>
3977 </array>
3978 </dict>
3979 <key>import-export-block</key>
3980 <dict>
3981 <key>name</key>
3982 <string>meta.block.ts</string>
3983 <key>begin</key>
3984 <string>\{</string>
3985 <key>beginCaptures</key>
3986 <dict>
3987 <key>0</key>
3988 <dict>
3989 <key>name</key>
3990 <string>punctuation.definition.block.ts</string>
3991 </dict>
3992 </dict>
3993 <key>end</key>
3994 <string>\}</string>
3995 <key>endCaptures</key>
3996 <dict>
3997 <key>0</key>
3998 <dict>
3999 <key>name</key>
4000 <string>punctuation.definition.block.ts</string>
4001 </dict>
4002 </dict>
4003 <key>patterns</key>
4004 <array>
4005 <dict>
4006 <key>include</key>
4007 <string>#import-export-clause</string>
4008 </dict>
4009 </array>
4010 </dict>
4011 <key>import-export-clause</key>
4012 <dict>
4013 <key>patterns</key>
4014 <array>
4015 <dict>
4016 <key>include</key>
4017 <string>#comment</string>
4018 </dict>
4019 <dict>
4020 <key>match</key>
4021 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4022 <key>captures</key>
4023 <dict>
4024 <key>1</key>
4025 <dict>
4026 <key>name</key>
4027 <string>keyword.control.type.ts</string>
4028 </dict>
4029 <key>2</key>
4030 <dict>
4031 <key>name</key>
4032 <string>keyword.control.default.ts</string>
4033 </dict>
4034 <key>3</key>
4035 <dict>
4036 <key>name</key>
4037 <string>constant.language.import-export-all.ts</string>
4038 </dict>
4039 <key>4</key>
4040 <dict>
4041 <key>name</key>
4042 <string>variable.other.readwrite.ts</string>
4043 </dict>
4044 <key>5</key>
4045 <dict>
4046 <key>name</key>
4047 <string>string.quoted.alias.ts</string>
4048 </dict>
4049 <key>12</key>
4050 <dict>
4051 <key>name</key>
4052 <string>keyword.control.as.ts</string>
4053 </dict>
4054 <key>13</key>
4055 <dict>
4056 <key>name</key>
4057 <string>keyword.control.default.ts</string>
4058 </dict>
4059 <key>14</key>
4060 <dict>
4061 <key>name</key>
4062 <string>variable.other.readwrite.alias.ts</string>
4063 </dict>
4064 <key>15</key>
4065 <dict>
4066 <key>name</key>
4067 <string>string.quoted.alias.ts</string>
4068 </dict>
4069 </dict>
4070 </dict>
4071 <dict>
4072 <key>include</key>
4073 <string>#punctuation-comma</string>
4074 </dict>
4075 <dict>
4076 <key>name</key>
4077 <string>constant.language.import-export-all.ts</string>
4078 <key>match</key>
4079 <string>\*</string>
4080 </dict>
4081 <dict>
4082 <key>name</key>
4083 <string>keyword.control.default.ts</string>
4084 <key>match</key>
4085 <string>\b(default)\b</string>
4086 </dict>
4087 <dict>
4088 <key>match</key>
4089 <string>(?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4090 <key>captures</key>
4091 <dict>
4092 <key>1</key>
4093 <dict>
4094 <key>name</key>
4095 <string>keyword.control.type.ts</string>
4096 </dict>
4097 <key>2</key>
4098 <dict>
4099 <key>name</key>
4100 <string>variable.other.readwrite.alias.ts</string>
4101 </dict>
4102 <key>3</key>
4103 <dict>
4104 <key>name</key>
4105 <string>string.quoted.alias.ts</string>
4106 </dict>
4107 </dict>
4108 </dict>
4109 </array>
4110 </dict>
4111 <key>switch-statement</key>
4112 <dict>
4113 <key>name</key>
4114 <string>switch-statement.expr.ts</string>
4115 <key>begin</key>
4116 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bswitch\s*\()</string>
4117 <key>end</key>
4118 <string>\}</string>
4119 <key>endCaptures</key>
4120 <dict>
4121 <key>0</key>
4122 <dict>
4123 <key>name</key>
4124 <string>punctuation.definition.block.ts</string>
4125 </dict>
4126 </dict>
4127 <key>patterns</key>
4128 <array>
4129 <dict>
4130 <key>include</key>
4131 <string>#comment</string>
4132 </dict>
4133 <dict>
4134 <key>name</key>
4135 <string>switch-expression.expr.ts</string>
4136 <key>begin</key>
4137 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(switch)\s*(\()</string>
4138 <key>beginCaptures</key>
4139 <dict>
4140 <key>1</key>
4141 <dict>
4142 <key>name</key>
4143 <string>keyword.control.switch.ts</string>
4144 </dict>
4145 <key>2</key>
4146 <dict>
4147 <key>name</key>
4148 <string>meta.brace.round.ts</string>
4149 </dict>
4150 </dict>
4151 <key>end</key>
4152 <string>\)</string>
4153 <key>endCaptures</key>
4154 <dict>
4155 <key>0</key>
4156 <dict>
4157 <key>name</key>
4158 <string>meta.brace.round.ts</string>
4159 </dict>
4160 </dict>
4161 <key>patterns</key>
4162 <array>
4163 <dict>
4164 <key>include</key>
4165 <string>#expression</string>
4166 </dict>
4167 </array>
4168 </dict>
4169 <dict>
4170 <key>name</key>
4171 <string>switch-block.expr.ts</string>
4172 <key>begin</key>
4173 <string>\{</string>
4174 <key>beginCaptures</key>
4175 <dict>
4176 <key>0</key>
4177 <dict>
4178 <key>name</key>
4179 <string>punctuation.definition.block.ts</string>
4180 </dict>
4181 </dict>
4182 <key>end</key>
4183 <string>(?=\})</string>
4184 <key>patterns</key>
4185 <array>
4186 <dict>
4187 <key>name</key>
4188 <string>case-clause.expr.ts</string>
4189 <key>begin</key>
4190 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
4191 <key>beginCaptures</key>
4192 <dict>
4193 <key>1</key>
4194 <dict>
4195 <key>name</key>
4196 <string>keyword.control.switch.ts</string>
4197 </dict>
4198 </dict>
4199 <key>end</key>
4200 <string>(?=:)</string>
4201 <key>patterns</key>
4202 <array>
4203 <dict>
4204 <key>include</key>
4205 <string>#expression</string>
4206 </dict>
4207 </array>
4208 </dict>
4209 <dict>
4210 <key>begin</key>
4211 <string>(:)\s*(\{)</string>
4212 <key>beginCaptures</key>
4213 <dict>
4214 <key>1</key>
4215 <dict>
4216 <key>name</key>
4217 <string>case-clause.expr.ts punctuation.definition.section.case-statement.ts</string>
4218 </dict>
4219 <key>2</key>
4220 <dict>
4221 <key>name</key>
4222 <string>meta.block.ts punctuation.definition.block.ts</string>
4223 </dict>
4224 </dict>
4225 <key>end</key>
4226 <string>\}</string>
4227 <key>endCaptures</key>
4228 <dict>
4229 <key>0</key>
4230 <dict>
4231 <key>name</key>
4232 <string>meta.block.ts punctuation.definition.block.ts</string>
4233 </dict>
4234 </dict>
4235 <key>contentName</key>
4236 <string>meta.block.ts</string>
4237 <key>patterns</key>
4238 <array>
4239 <dict>
4240 <key>include</key>
4241 <string>#statements</string>
4242 </dict>
4243 </array>
4244 </dict>
4245 <dict>
4246 <key>match</key>
4247 <string>(:)</string>
4248 <key>captures</key>
4249 <dict>
4250 <key>0</key>
4251 <dict>
4252 <key>name</key>
4253 <string>case-clause.expr.ts punctuation.definition.section.case-statement.ts</string>
4254 </dict>
4255 </dict>
4256 </dict>
4257 <dict>
4258 <key>include</key>
4259 <string>#statements</string>
4260 </dict>
4261 </array>
4262 </dict>
4263 </array>
4264 </dict>
4265 <key>for-loop</key>
4266 <dict>
4267 <key>begin</key>
4268 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())</string>
4269 <key>beginCaptures</key>
4270 <dict>
4271 <key>0</key>
4272 <dict>
4273 <key>name</key>
4274 <string>keyword.control.loop.ts</string>
4275 </dict>
4276 </dict>
4277 <key>end</key>
4278 <string>(?&lt;=\))</string>
4279 <key>patterns</key>
4280 <array>
4281 <dict>
4282 <key>include</key>
4283 <string>#comment</string>
4284 </dict>
4285 <dict>
4286 <key>name</key>
4287 <string>keyword.control.loop.ts</string>
4288 <key>match</key>
4289 <string>await</string>
4290 </dict>
4291 <dict>
4292 <key>begin</key>
4293 <string>\(</string>
4294 <key>beginCaptures</key>
4295 <dict>
4296 <key>0</key>
4297 <dict>
4298 <key>name</key>
4299 <string>meta.brace.round.ts</string>
4300 </dict>
4301 </dict>
4302 <key>end</key>
4303 <string>\)</string>
4304 <key>endCaptures</key>
4305 <dict>
4306 <key>0</key>
4307 <dict>
4308 <key>name</key>
4309 <string>meta.brace.round.ts</string>
4310 </dict>
4311 </dict>
4312 <key>patterns</key>
4313 <array>
4314 <dict>
4315 <key>include</key>
4316 <string>#var-expr</string>
4317 </dict>
4318 <dict>
4319 <key>include</key>
4320 <string>#expression</string>
4321 </dict>
4322 <dict>
4323 <key>include</key>
4324 <string>#punctuation-semicolon</string>
4325 </dict>
4326 </array>
4327 </dict>
4328 </array>
4329 </dict>
4330 <key>if-statement</key>
4331 <dict>
4332 <key>patterns</key>
4333 <array>
4334 <dict>
4335 <key>begin</key>
4336 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))</string>
4337 <key>end</key>
4338 <string>(?=;|$|\})</string>
4339 <key>patterns</key>
4340 <array>
4341 <dict>
4342 <key>include</key>
4343 <string>#comment</string>
4344 </dict>
4345 <dict>
4346 <key>begin</key>
4347 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(if)\s*(\()</string>
4348 <key>beginCaptures</key>
4349 <dict>
4350 <key>1</key>
4351 <dict>
4352 <key>name</key>
4353 <string>keyword.control.conditional.ts</string>
4354 </dict>
4355 <key>2</key>
4356 <dict>
4357 <key>name</key>
4358 <string>meta.brace.round.ts</string>
4359 </dict>
4360 </dict>
4361 <key>end</key>
4362 <string>\)</string>
4363 <key>endCaptures</key>
4364 <dict>
4365 <key>0</key>
4366 <dict>
4367 <key>name</key>
4368 <string>meta.brace.round.ts</string>
4369 </dict>
4370 </dict>
4371 <key>patterns</key>
4372 <array>
4373 <dict>
4374 <key>include</key>
4375 <string>#expression</string>
4376 </dict>
4377 </array>
4378 </dict>
4379 <dict>
4380 <key>name</key>
4381 <string>string.regexp.ts</string>
4382 <key>begin</key>
4383 <string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4384 <key>beginCaptures</key>
4385 <dict>
4386 <key>0</key>
4387 <dict>
4388 <key>name</key>
4389 <string>punctuation.definition.string.begin.ts</string>
4390 </dict>
4391 </dict>
4392 <key>end</key>
4393 <string>(/)([dgimsuvy]*)</string>
4394 <key>endCaptures</key>
4395 <dict>
4396 <key>1</key>
4397 <dict>
4398 <key>name</key>
4399 <string>punctuation.definition.string.end.ts</string>
4400 </dict>
4401 <key>2</key>
4402 <dict>
4403 <key>name</key>
4404 <string>keyword.other.ts</string>
4405 </dict>
4406 </dict>
4407 <key>patterns</key>
4408 <array>
4409 <dict>
4410 <key>include</key>
4411 <string>#regexp</string>
4412 </dict>
4413 </array>
4414 </dict>
4415 <dict>
4416 <key>include</key>
4417 <string>#statements</string>
4418 </dict>
4419 </array>
4420 </dict>
4421 </array>
4422 </dict>
4423 <key>decl-block</key>
4424 <dict>
4425 <key>name</key>
4426 <string>meta.block.ts</string>
4427 <key>begin</key>
4428 <string>\{</string>
4429 <key>beginCaptures</key>
4430 <dict>
4431 <key>0</key>
4432 <dict>
4433 <key>name</key>
4434 <string>punctuation.definition.block.ts</string>
4435 </dict>
4436 </dict>
4437 <key>end</key>
4438 <string>\}</string>
4439 <key>endCaptures</key>
4440 <dict>
4441 <key>0</key>
4442 <dict>
4443 <key>name</key>
4444 <string>punctuation.definition.block.ts</string>
4445 </dict>
4446 </dict>
4447 <key>patterns</key>
4448 <array>
4449 <dict>
4450 <key>include</key>
4451 <string>#statements</string>
4452 </dict>
4453 </array>
4454 </dict>
4455 <key>after-operator-block-as-object-literal</key>
4456 <dict>
4457 <key>name</key>
4458 <string>meta.objectliteral.ts</string>
4459 <key>begin</key>
4460 <string>(?&lt;!\+\+|--)(?&lt;=[:=(,\[?+!&gt;]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
4461 <key>beginCaptures</key>
4462 <dict>
4463 <key>1</key>
4464 <dict>
4465 <key>name</key>
4466 <string>punctuation.definition.block.ts</string>
4467 </dict>
4468 </dict>
4469 <key>end</key>
4470 <string>\}</string>
4471 <key>endCaptures</key>
4472 <dict>
4473 <key>0</key>
4474 <dict>
4475 <key>name</key>
4476 <string>punctuation.definition.block.ts</string>
4477 </dict>
4478 </dict>
4479 <key>patterns</key>
4480 <array>
4481 <dict>
4482 <key>include</key>
4483 <string>#object-member</string>
4484 </dict>
4485 </array>
4486 </dict>
4487 <key>object-literal</key>
4488 <dict>
4489 <key>name</key>
4490 <string>meta.objectliteral.ts</string>
4491 <key>begin</key>
4492 <string>\{</string>
4493 <key>beginCaptures</key>
4494 <dict>
4495 <key>0</key>
4496 <dict>
4497 <key>name</key>
4498 <string>punctuation.definition.block.ts</string>
4499 </dict>
4500 </dict>
4501 <key>end</key>
4502 <string>\}</string>
4503 <key>endCaptures</key>
4504 <dict>
4505 <key>0</key>
4506 <dict>
4507 <key>name</key>
4508 <string>punctuation.definition.block.ts</string>
4509 </dict>
4510 </dict>
4511 <key>patterns</key>
4512 <array>
4513 <dict>
4514 <key>include</key>
4515 <string>#object-member</string>
4516 </dict>
4517 </array>
4518 </dict>
4519 <key>object-member</key>
4520 <dict>
4521 <key>patterns</key>
4522 <array>
4523 <dict>
4524 <key>include</key>
4525 <string>#comment</string>
4526 </dict>
4527 <dict>
4528 <key>include</key>
4529 <string>#object-literal-method-declaration</string>
4530 </dict>
4531 <dict>
4532 <key>name</key>
4533 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4534 <key>begin</key>
4535 <string>(?=\[)</string>
4536 <key>end</key>
4537 <string>(?=:)|((?&lt;=[\]])(?=\s*[\(\&lt;]))</string>
4538 <key>patterns</key>
4539 <array>
4540 <dict>
4541 <key>include</key>
4542 <string>#comment</string>
4543 </dict>
4544 <dict>
4545 <key>include</key>
4546 <string>#array-literal</string>
4547 </dict>
4548 </array>
4549 </dict>
4550 <dict>
4551 <key>name</key>
4552 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4553 <key>begin</key>
4554 <string>(?=[\'\"\`])</string>
4555 <key>end</key>
4556 <string>(?=:)|((?&lt;=[\'\"\`])(?=((\s*[\(\&lt;,}])|(\s+(as|satisifies)\s+))))</string>
4557 <key>patterns</key>
4558 <array>
4559 <dict>
4560 <key>include</key>
4561 <string>#comment</string>
4562 </dict>
4563 <dict>
4564 <key>include</key>
4565 <string>#string</string>
4566 </dict>
4567 </array>
4568 </dict>
4569 <dict>
4570 <key>name</key>
4571 <string>meta.object.member.ts meta.object-literal.key.ts</string>
4572 <key>begin</key>
4573 <string>(?x)(?=(\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
4574 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
4575 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
4576 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
4577 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
4578 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
4579 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
4580 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
4581 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
4582)(?!\$)))</string>
4583 <key>end</key>
4584 <string>(?=:)|(?=\s*([\(\&lt;,}])|(\s+as|satisifies\s+))</string>
4585 <key>patterns</key>
4586 <array>
4587 <dict>
4588 <key>include</key>
4589 <string>#comment</string>
4590 </dict>
4591 <dict>
4592 <key>include</key>
4593 <string>#numeric-literal</string>
4594 </dict>
4595 </array>
4596 </dict>
4597 <dict>
4598 <key>name</key>
4599 <string>meta.method.declaration.ts</string>
4600 <key>begin</key>
4601 <string>(?&lt;=[\]\'\"\`])(?=\s*[\(\&lt;])</string>
4602 <key>end</key>
4603 <string>(?=\}|;|,)|(?&lt;=\})</string>
4604 <key>patterns</key>
4605 <array>
4606 <dict>
4607 <key>include</key>
4608 <string>#function-body</string>
4609 </dict>
4610 </array>
4611 </dict>
4612 <dict>
4613 <key>name</key>
4614 <string>meta.object.member.ts</string>
4615 <key>match</key>
4616 <string>(?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4617 <key>captures</key>
4618 <dict>
4619 <key>0</key>
4620 <dict>
4621 <key>name</key>
4622 <string>meta.object-literal.key.ts</string>
4623 </dict>
4624 <key>1</key>
4625 <dict>
4626 <key>name</key>
4627 <string>constant.numeric.decimal.ts</string>
4628 </dict>
4629 </dict>
4630 </dict>
4631 <dict>
4632 <key>name</key>
4633 <string>meta.object.member.ts</string>
4634 <key>match</key>
4635 <string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*(
4636 ((async\s+)?(
4637 (function\s*[(&lt;*]) |
4638 (function\s+) |
4639 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
4640 )) |
4641 ((async\s*)?(
4642 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
4643 # sure shot arrow functions even if =&gt; is on new line
4644(
4645 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
4646 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
4647 (
4648 ([)]\s*:) | # ():
4649 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
4650 )
4651) |
4652
4653# arrow function possible to detect only with =&gt; on same line
4654(
4655 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
4656 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
4657 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
4658 \s*=&gt; # arrow operator
4659)
4660 ))
4661)))</string>
4662 <key>captures</key>
4663 <dict>
4664 <key>0</key>
4665 <dict>
4666 <key>name</key>
4667 <string>meta.object-literal.key.ts</string>
4668 </dict>
4669 <key>1</key>
4670 <dict>
4671 <key>name</key>
4672 <string>entity.name.function.ts</string>
4673 </dict>
4674 </dict>
4675 </dict>
4676 <dict>
4677 <key>name</key>
4678 <string>meta.object.member.ts</string>
4679 <key>match</key>
4680 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4681 <key>captures</key>
4682 <dict>
4683 <key>0</key>
4684 <dict>
4685 <key>name</key>
4686 <string>meta.object-literal.key.ts</string>
4687 </dict>
4688 </dict>
4689 </dict>
4690 <dict>
4691 <key>name</key>
4692 <string>meta.object.member.ts</string>
4693 <key>begin</key>
4694 <string>\.\.\.</string>
4695 <key>beginCaptures</key>
4696 <dict>
4697 <key>0</key>
4698 <dict>
4699 <key>name</key>
4700 <string>keyword.operator.spread.ts</string>
4701 </dict>
4702 </dict>
4703 <key>end</key>
4704 <string>(?=,|\})</string>
4705 <key>patterns</key>
4706 <array>
4707 <dict>
4708 <key>include</key>
4709 <string>#expression</string>
4710 </dict>
4711 </array>
4712 </dict>
4713 <dict>
4714 <key>name</key>
4715 <string>meta.object.member.ts</string>
4716 <key>match</key>
4717 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)</string>
4718 <key>captures</key>
4719 <dict>
4720 <key>1</key>
4721 <dict>
4722 <key>name</key>
4723 <string>variable.other.readwrite.ts</string>
4724 </dict>
4725 </dict>
4726 </dict>
4727 <dict>
4728 <key>name</key>
4729 <string>meta.object.member.ts</string>
4730 <key>match</key>
4731 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*([,}]|$))</string>
4732 <key>captures</key>
4733 <dict>
4734 <key>1</key>
4735 <dict>
4736 <key>name</key>
4737 <string>keyword.control.as.ts</string>
4738 </dict>
4739 <key>2</key>
4740 <dict>
4741 <key>name</key>
4742 <string>storage.modifier.ts</string>
4743 </dict>
4744 </dict>
4745 </dict>
4746 <dict>
4747 <key>name</key>
4748 <string>meta.object.member.ts</string>
4749 <key>begin</key>
4750 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
4751 <key>beginCaptures</key>
4752 <dict>
4753 <key>1</key>
4754 <dict>
4755 <key>name</key>
4756 <string>keyword.control.as.ts</string>
4757 </dict>
4758 <key>2</key>
4759 <dict>
4760 <key>name</key>
4761 <string>keyword.control.satisfies.ts</string>
4762 </dict>
4763 </dict>
4764 <key>end</key>
4765 <string>(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|^|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisifies)\s+))</string>
4766 <key>patterns</key>
4767 <array>
4768 <dict>
4769 <key>include</key>
4770 <string>#type</string>
4771 </dict>
4772 </array>
4773 </dict>
4774 <dict>
4775 <key>name</key>
4776 <string>meta.object.member.ts</string>
4777 <key>begin</key>
4778 <string>(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)</string>
4779 <key>end</key>
4780 <string>(?=,|\}|$|\/\/|\/\*)</string>
4781 <key>patterns</key>
4782 <array>
4783 <dict>
4784 <key>include</key>
4785 <string>#expression</string>
4786 </dict>
4787 </array>
4788 </dict>
4789 <dict>
4790 <key>name</key>
4791 <string>meta.object.member.ts</string>
4792 <key>begin</key>
4793 <string>:</string>
4794 <key>beginCaptures</key>
4795 <dict>
4796 <key>0</key>
4797 <dict>
4798 <key>name</key>
4799 <string>meta.object-literal.key.ts punctuation.separator.key-value.ts</string>
4800 </dict>
4801 </dict>
4802 <key>end</key>
4803 <string>(?=,|\})</string>
4804 <key>patterns</key>
4805 <array>
4806 <dict>
4807 <key>begin</key>
4808 <string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4809 <key>beginCaptures</key>
4810 <dict>
4811 <key>1</key>
4812 <dict>
4813 <key>name</key>
4814 <string>storage.modifier.async.ts</string>
4815 </dict>
4816 </dict>
4817 <key>end</key>
4818 <string>(?&lt;=\))</string>
4819 <key>patterns</key>
4820 <array>
4821 <dict>
4822 <key>include</key>
4823 <string>#type-parameters</string>
4824 </dict>
4825 <dict>
4826 <key>begin</key>
4827 <string>\(</string>
4828 <key>beginCaptures</key>
4829 <dict>
4830 <key>0</key>
4831 <dict>
4832 <key>name</key>
4833 <string>meta.brace.round.ts</string>
4834 </dict>
4835 </dict>
4836 <key>end</key>
4837 <string>\)</string>
4838 <key>endCaptures</key>
4839 <dict>
4840 <key>0</key>
4841 <dict>
4842 <key>name</key>
4843 <string>meta.brace.round.ts</string>
4844 </dict>
4845 </dict>
4846 <key>patterns</key>
4847 <array>
4848 <dict>
4849 <key>include</key>
4850 <string>#expression-inside-possibly-arrow-parens</string>
4851 </dict>
4852 </array>
4853 </dict>
4854 </array>
4855 </dict>
4856 <dict>
4857 <key>begin</key>
4858 <string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4859 <key>beginCaptures</key>
4860 <dict>
4861 <key>1</key>
4862 <dict>
4863 <key>name</key>
4864 <string>storage.modifier.async.ts</string>
4865 </dict>
4866 <key>2</key>
4867 <dict>
4868 <key>name</key>
4869 <string>meta.brace.round.ts</string>
4870 </dict>
4871 </dict>
4872 <key>end</key>
4873 <string>\)</string>
4874 <key>endCaptures</key>
4875 <dict>
4876 <key>0</key>
4877 <dict>
4878 <key>name</key>
4879 <string>meta.brace.round.ts</string>
4880 </dict>
4881 </dict>
4882 <key>patterns</key>
4883 <array>
4884 <dict>
4885 <key>include</key>
4886 <string>#expression-inside-possibly-arrow-parens</string>
4887 </dict>
4888 </array>
4889 </dict>
4890 <dict>
4891 <key>begin</key>
4892 <string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4893 <key>beginCaptures</key>
4894 <dict>
4895 <key>1</key>
4896 <dict>
4897 <key>name</key>
4898 <string>storage.modifier.async.ts</string>
4899 </dict>
4900 </dict>
4901 <key>end</key>
4902 <string>(?&lt;=\&gt;)</string>
4903 <key>patterns</key>
4904 <array>
4905 <dict>
4906 <key>include</key>
4907 <string>#type-parameters</string>
4908 </dict>
4909 </array>
4910 </dict>
4911 <dict>
4912 <key>begin</key>
4913 <string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4914 <key>beginCaptures</key>
4915 <dict>
4916 <key>1</key>
4917 <dict>
4918 <key>name</key>
4919 <string>meta.brace.round.ts</string>
4920 </dict>
4921 </dict>
4922 <key>end</key>
4923 <string>\)</string>
4924 <key>endCaptures</key>
4925 <dict>
4926 <key>0</key>
4927 <dict>
4928 <key>name</key>
4929 <string>meta.brace.round.ts</string>
4930 </dict>
4931 </dict>
4932 <key>patterns</key>
4933 <array>
4934 <dict>
4935 <key>include</key>
4936 <string>#expression-inside-possibly-arrow-parens</string>
4937 </dict>
4938 </array>
4939 </dict>
4940 <dict>
4941 <key>include</key>
4942 <string>#possibly-arrow-return-type</string>
4943 </dict>
4944 <dict>
4945 <key>include</key>
4946 <string>#expression</string>
4947 </dict>
4948 </array>
4949 </dict>
4950 <dict>
4951 <key>include</key>
4952 <string>#punctuation-comma</string>
4953 </dict>
4954 <dict>
4955 <key>include</key>
4956 <string>#decl-block</string>
4957 </dict>
4958 </array>
4959 </dict>
4960 <key>ternary-expression</key>
4961 <dict>
4962 <key>begin</key>
4963 <string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
4964 <key>beginCaptures</key>
4965 <dict>
4966 <key>1</key>
4967 <dict>
4968 <key>name</key>
4969 <string>keyword.operator.ternary.ts</string>
4970 </dict>
4971 </dict>
4972 <key>end</key>
4973 <string>\s*(:)</string>
4974 <key>endCaptures</key>
4975 <dict>
4976 <key>1</key>
4977 <dict>
4978 <key>name</key>
4979 <string>keyword.operator.ternary.ts</string>
4980 </dict>
4981 </dict>
4982 <key>patterns</key>
4983 <array>
4984 <dict>
4985 <key>include</key>
4986 <string>#expression</string>
4987 </dict>
4988 </array>
4989 </dict>
4990 <key>function-call</key>
4991 <dict>
4992 <key>patterns</key>
4993 <array>
4994 <dict>
4995 <key>begin</key>
4996 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
4997 <key>end</key>
4998 <string>(?&lt;=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
4999 <key>patterns</key>
5000 <array>
5001 <dict>
5002 <key>name</key>
5003 <string>meta.function-call.ts</string>
5004 <key>begin</key>
5005 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5006 <key>end</key>
5007 <string>(?=\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5008 <key>patterns</key>
5009 <array>
5010 <dict>
5011 <key>include</key>
5012 <string>#function-call-target</string>
5013 </dict>
5014 </array>
5015 </dict>
5016 <dict>
5017 <key>include</key>
5018 <string>#comment</string>
5019 </dict>
5020 <dict>
5021 <key>include</key>
5022 <string>#function-call-optionals</string>
5023 </dict>
5024 <dict>
5025 <key>include</key>
5026 <string>#type-arguments</string>
5027 </dict>
5028 <dict>
5029 <key>include</key>
5030 <string>#paren-expression</string>
5031 </dict>
5032 </array>
5033 </dict>
5034 <dict>
5035 <key>begin</key>
5036 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5037 <key>end</key>
5038 <string>(?&lt;=\&gt;)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5039 <key>patterns</key>
5040 <array>
5041 <dict>
5042 <key>name</key>
5043 <string>meta.function-call.ts</string>
5044 <key>begin</key>
5045 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5046 <key>end</key>
5047 <string>(?=(&lt;\s*[\{\[\(]\s*$))</string>
5048 <key>patterns</key>
5049 <array>
5050 <dict>
5051 <key>include</key>
5052 <string>#function-call-target</string>
5053 </dict>
5054 </array>
5055 </dict>
5056 <dict>
5057 <key>include</key>
5058 <string>#comment</string>
5059 </dict>
5060 <dict>
5061 <key>include</key>
5062 <string>#function-call-optionals</string>
5063 </dict>
5064 <dict>
5065 <key>include</key>
5066 <string>#type-arguments</string>
5067 </dict>
5068 </array>
5069 </dict>
5070 </array>
5071 </dict>
5072 <key>function-call-target</key>
5073 <dict>
5074 <key>patterns</key>
5075 <array>
5076 <dict>
5077 <key>include</key>
5078 <string>#support-function-call-identifiers</string>
5079 </dict>
5080 <dict>
5081 <key>name</key>
5082 <string>entity.name.function.ts</string>
5083 <key>match</key>
5084 <string>(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
5085 </dict>
5086 </array>
5087 </dict>
5088 <key>function-call-optionals</key>
5089 <dict>
5090 <key>patterns</key>
5091 <array>
5092 <dict>
5093 <key>name</key>
5094 <string>meta.function-call.ts punctuation.accessor.optional.ts</string>
5095 <key>match</key>
5096 <string>\?\.</string>
5097 </dict>
5098 <dict>
5099 <key>name</key>
5100 <string>meta.function-call.ts keyword.operator.definiteassignment.ts</string>
5101 <key>match</key>
5102 <string>\!</string>
5103 </dict>
5104 </array>
5105 </dict>
5106 <key>support-function-call-identifiers</key>
5107 <dict>
5108 <key>patterns</key>
5109 <array>
5110 <dict>
5111 <key>include</key>
5112 <string>#literal</string>
5113 </dict>
5114 <dict>
5115 <key>include</key>
5116 <string>#support-objects</string>
5117 </dict>
5118 <dict>
5119 <key>include</key>
5120 <string>#object-identifiers</string>
5121 </dict>
5122 <dict>
5123 <key>include</key>
5124 <string>#punctuation-accessor</string>
5125 </dict>
5126 <dict>
5127 <key>name</key>
5128 <string>keyword.operator.expression.import.ts</string>
5129 <key>match</key>
5130 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
5131 </dict>
5132 </array>
5133 </dict>
5134 <key>new-expr</key>
5135 <dict>
5136 <key>name</key>
5137 <string>new.expr.ts</string>
5138 <key>begin</key>
5139 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5140 <key>beginCaptures</key>
5141 <dict>
5142 <key>1</key>
5143 <dict>
5144 <key>name</key>
5145 <string>keyword.operator.new.ts</string>
5146 </dict>
5147 </dict>
5148 <key>end</key>
5149 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5150 <key>patterns</key>
5151 <array>
5152 <dict>
5153 <key>include</key>
5154 <string>#expression</string>
5155 </dict>
5156 </array>
5157 </dict>
5158 <key>instanceof-expr</key>
5159 <dict>
5160 <key>begin</key>
5161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5162 <key>beginCaptures</key>
5163 <dict>
5164 <key>1</key>
5165 <dict>
5166 <key>name</key>
5167 <string>keyword.operator.expression.instanceof.ts</string>
5168 </dict>
5169 </dict>
5170 <key>end</key>
5171 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|(===|!==|==|!=)|(([\&amp;\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5172 <key>patterns</key>
5173 <array>
5174 <dict>
5175 <key>include</key>
5176 <string>#type</string>
5177 </dict>
5178 </array>
5179 </dict>
5180 <key>paren-expression-possibly-arrow</key>
5181 <dict>
5182 <key>patterns</key>
5183 <array>
5184 <dict>
5185 <key>begin</key>
5186 <string>(?&lt;=[(=,])\s*(async)?(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
5187 <key>beginCaptures</key>
5188 <dict>
5189 <key>1</key>
5190 <dict>
5191 <key>name</key>
5192 <string>storage.modifier.async.ts</string>
5193 </dict>
5194 </dict>
5195 <key>end</key>
5196 <string>(?&lt;=\))</string>
5197 <key>patterns</key>
5198 <array>
5199 <dict>
5200 <key>include</key>
5201 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5202 </dict>
5203 </array>
5204 </dict>
5205 <dict>
5206 <key>begin</key>
5207 <string>(?&lt;=[(=,]|=&gt;|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\()|(&lt;)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)))\s*$)</string>
5208 <key>beginCaptures</key>
5209 <dict>
5210 <key>1</key>
5211 <dict>
5212 <key>name</key>
5213 <string>storage.modifier.async.ts</string>
5214 </dict>
5215 </dict>
5216 <key>end</key>
5217 <string>(?&lt;=\))</string>
5218 <key>patterns</key>
5219 <array>
5220 <dict>
5221 <key>include</key>
5222 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5223 </dict>
5224 </array>
5225 </dict>
5226 <dict>
5227 <key>include</key>
5228 <string>#possibly-arrow-return-type</string>
5229 </dict>
5230 </array>
5231 </dict>
5232 <key>paren-expression-possibly-arrow-with-typeparameters</key>
5233 <dict>
5234 <key>patterns</key>
5235 <array>
5236 <dict>
5237 <key>include</key>
5238 <string>#type-parameters</string>
5239 </dict>
5240 <dict>
5241 <key>begin</key>
5242 <string>\(</string>
5243 <key>beginCaptures</key>
5244 <dict>
5245 <key>0</key>
5246 <dict>
5247 <key>name</key>
5248 <string>meta.brace.round.ts</string>
5249 </dict>
5250 </dict>
5251 <key>end</key>
5252 <string>\)</string>
5253 <key>endCaptures</key>
5254 <dict>
5255 <key>0</key>
5256 <dict>
5257 <key>name</key>
5258 <string>meta.brace.round.ts</string>
5259 </dict>
5260 </dict>
5261 <key>patterns</key>
5262 <array>
5263 <dict>
5264 <key>include</key>
5265 <string>#expression-inside-possibly-arrow-parens</string>
5266 </dict>
5267 </array>
5268 </dict>
5269 </array>
5270 </dict>
5271 <key>expression-inside-possibly-arrow-parens</key>
5272 <dict>
5273 <key>patterns</key>
5274 <array>
5275 <dict>
5276 <key>include</key>
5277 <string>#expressionWithoutIdentifiers</string>
5278 </dict>
5279 <dict>
5280 <key>include</key>
5281 <string>#comment</string>
5282 </dict>
5283 <dict>
5284 <key>include</key>
5285 <string>#string</string>
5286 </dict>
5287 <dict>
5288 <key>include</key>
5289 <string>#decorator</string>
5290 </dict>
5291 <dict>
5292 <key>include</key>
5293 <string>#destructuring-parameter</string>
5294 </dict>
5295 <dict>
5296 <key>match</key>
5297 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
5298 <key>captures</key>
5299 <dict>
5300 <key>1</key>
5301 <dict>
5302 <key>name</key>
5303 <string>storage.modifier.ts</string>
5304 </dict>
5305 </dict>
5306 </dict>
5307 <dict>
5308 <key>match</key>
5309 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
5310# function assignment |
5311(=\s*(
5312 ((async\s+)?(
5313 (function\s*[(&lt;*]) |
5314 (function\s+) |
5315 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5316 )) |
5317 ((async\s*)?(
5318 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5319 # sure shot arrow functions even if =&gt; is on new line
5320(
5321 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5322 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5323 (
5324 ([)]\s*:) | # ():
5325 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5326 )
5327) |
5328
5329# arrow function possible to detect only with =&gt; on same line
5330(
5331 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5332 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5333 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5334 \s*=&gt; # arrow operator
5335)
5336 ))
5337)) |
5338# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
5339(:\s*(
5340 (&lt;) |
5341 ([(]\s*(
5342 ([)]) |
5343 (\.\.\.) |
5344 ([_$[:alnum:]]+\s*(
5345 ([:,?=])|
5346 ([)]\s*=&gt;)
5347 ))
5348 ))
5349)) |
5350(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
5351(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
5352(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
5353 ((async\s+)?(
5354 (function\s*[(&lt;*]) |
5355 (function\s+) |
5356 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5357 )) |
5358 ((async\s*)?(
5359 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5360 # sure shot arrow functions even if =&gt; is on new line
5361(
5362 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5363 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5364 (
5365 ([)]\s*:) | # ():
5366 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5367 )
5368) |
5369
5370# arrow function possible to detect only with =&gt; on same line
5371(
5372 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5373 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5374 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5375 \s*=&gt; # arrow operator
5376)
5377 ))
5378)))</string>
5379 <key>captures</key>
5380 <dict>
5381 <key>1</key>
5382 <dict>
5383 <key>name</key>
5384 <string>storage.modifier.ts</string>
5385 </dict>
5386 <key>2</key>
5387 <dict>
5388 <key>name</key>
5389 <string>keyword.operator.rest.ts</string>
5390 </dict>
5391 <key>3</key>
5392 <dict>
5393 <key>name</key>
5394 <string>entity.name.function.ts variable.language.this.ts</string>
5395 </dict>
5396 <key>4</key>
5397 <dict>
5398 <key>name</key>
5399 <string>entity.name.function.ts</string>
5400 </dict>
5401 <key>5</key>
5402 <dict>
5403 <key>name</key>
5404 <string>keyword.operator.optional.ts</string>
5405 </dict>
5406 </dict>
5407 </dict>
5408 <dict>
5409 <key>match</key>
5410 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)</string>
5411 <key>captures</key>
5412 <dict>
5413 <key>1</key>
5414 <dict>
5415 <key>name</key>
5416 <string>storage.modifier.ts</string>
5417 </dict>
5418 <key>2</key>
5419 <dict>
5420 <key>name</key>
5421 <string>keyword.operator.rest.ts</string>
5422 </dict>
5423 <key>3</key>
5424 <dict>
5425 <key>name</key>
5426 <string>variable.parameter.ts variable.language.this.ts</string>
5427 </dict>
5428 <key>4</key>
5429 <dict>
5430 <key>name</key>
5431 <string>variable.parameter.ts</string>
5432 </dict>
5433 <key>5</key>
5434 <dict>
5435 <key>name</key>
5436 <string>keyword.operator.optional.ts</string>
5437 </dict>
5438 </dict>
5439 </dict>
5440 <dict>
5441 <key>include</key>
5442 <string>#type-annotation</string>
5443 </dict>
5444 <dict>
5445 <key>include</key>
5446 <string>#variable-initializer</string>
5447 </dict>
5448 <dict>
5449 <key>name</key>
5450 <string>punctuation.separator.parameter.ts</string>
5451 <key>match</key>
5452 <string>,</string>
5453 </dict>
5454 <dict>
5455 <key>include</key>
5456 <string>#identifiers</string>
5457 </dict>
5458 <dict>
5459 <key>include</key>
5460 <string>#expressionPunctuations</string>
5461 </dict>
5462 </array>
5463 </dict>
5464 <key>paren-expression</key>
5465 <dict>
5466 <key>begin</key>
5467 <string>\(</string>
5468 <key>beginCaptures</key>
5469 <dict>
5470 <key>0</key>
5471 <dict>
5472 <key>name</key>
5473 <string>meta.brace.round.ts</string>
5474 </dict>
5475 </dict>
5476 <key>end</key>
5477 <string>\)</string>
5478 <key>endCaptures</key>
5479 <dict>
5480 <key>0</key>
5481 <dict>
5482 <key>name</key>
5483 <string>meta.brace.round.ts</string>
5484 </dict>
5485 </dict>
5486 <key>patterns</key>
5487 <array>
5488 <dict>
5489 <key>include</key>
5490 <string>#expression</string>
5491 </dict>
5492 </array>
5493 </dict>
5494 <key>cast</key>
5495 <dict>
5496 <key>patterns</key>
5497 <array>
5498 <dict>
5499 <key>name</key>
5500 <string>cast.expr.ts</string>
5501 <key>match</key>
5502 <string>\s*(&lt;)\s*(const)\s*(&gt;)</string>
5503 <key>captures</key>
5504 <dict>
5505 <key>1</key>
5506 <dict>
5507 <key>name</key>
5508 <string>meta.brace.angle.ts</string>
5509 </dict>
5510 <key>2</key>
5511 <dict>
5512 <key>name</key>
5513 <string>storage.modifier.ts</string>
5514 </dict>
5515 <key>3</key>
5516 <dict>
5517 <key>name</key>
5518 <string>meta.brace.angle.ts</string>
5519 </dict>
5520 </dict>
5521 </dict>
5522 <dict>
5523 <key>name</key>
5524 <string>cast.expr.ts</string>
5525 <key>begin</key>
5526 <string>(?:(?&lt;!\+\+|--)(?&lt;=^return|[^\._$[:alnum:]]return|^throw|[^\._$[:alnum:]]throw|^yield|[^\._$[:alnum:]]yield|^await|[^\._$[:alnum:]]await|^default|[^\._$[:alnum:]]default|[=(,:&gt;*?\&amp;\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(&lt;)(?!&lt;?\=)(?!\s*$)</string>
5527 <key>beginCaptures</key>
5528 <dict>
5529 <key>1</key>
5530 <dict>
5531 <key>name</key>
5532 <string>meta.brace.angle.ts</string>
5533 </dict>
5534 </dict>
5535 <key>end</key>
5536 <string>(\&gt;)</string>
5537 <key>endCaptures</key>
5538 <dict>
5539 <key>1</key>
5540 <dict>
5541 <key>name</key>
5542 <string>meta.brace.angle.ts</string>
5543 </dict>
5544 </dict>
5545 <key>patterns</key>
5546 <array>
5547 <dict>
5548 <key>include</key>
5549 <string>#type</string>
5550 </dict>
5551 </array>
5552 </dict>
5553 <dict>
5554 <key>name</key>
5555 <string>cast.expr.ts</string>
5556 <key>begin</key>
5557 <string>(?:(?&lt;=^))\s*(&lt;)(?=[_$[:alpha:]][_$[:alnum:]]*\s*&gt;)</string>
5558 <key>beginCaptures</key>
5559 <dict>
5560 <key>1</key>
5561 <dict>
5562 <key>name</key>
5563 <string>meta.brace.angle.ts</string>
5564 </dict>
5565 </dict>
5566 <key>end</key>
5567 <string>(\&gt;)</string>
5568 <key>endCaptures</key>
5569 <dict>
5570 <key>1</key>
5571 <dict>
5572 <key>name</key>
5573 <string>meta.brace.angle.ts</string>
5574 </dict>
5575 </dict>
5576 <key>patterns</key>
5577 <array>
5578 <dict>
5579 <key>include</key>
5580 <string>#type</string>
5581 </dict>
5582 </array>
5583 </dict>
5584 </array>
5585 </dict>
5586 <key>expression-operators</key>
5587 <dict>
5588 <key>patterns</key>
5589 <array>
5590 <dict>
5591 <key>name</key>
5592 <string>keyword.control.flow.ts</string>
5593 <key>match</key>
5594 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5595 </dict>
5596 <dict>
5597 <key>begin</key>
5598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*)</string>
5599 <key>beginCaptures</key>
5600 <dict>
5601 <key>1</key>
5602 <dict>
5603 <key>name</key>
5604 <string>keyword.control.flow.ts</string>
5605 </dict>
5606 </dict>
5607 <key>end</key>
5608 <string>\*</string>
5609 <key>endCaptures</key>
5610 <dict>
5611 <key>0</key>
5612 <dict>
5613 <key>name</key>
5614 <string>keyword.generator.asterisk.ts</string>
5615 </dict>
5616 </dict>
5617 <key>patterns</key>
5618 <array>
5619 <dict>
5620 <key>include</key>
5621 <string>#comment</string>
5622 </dict>
5623 </array>
5624 </dict>
5625 <dict>
5626 <key>match</key>
5627 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))?</string>
5628 <key>captures</key>
5629 <dict>
5630 <key>1</key>
5631 <dict>
5632 <key>name</key>
5633 <string>keyword.control.flow.ts</string>
5634 </dict>
5635 <key>2</key>
5636 <dict>
5637 <key>name</key>
5638 <string>keyword.generator.asterisk.ts</string>
5639 </dict>
5640 </dict>
5641 </dict>
5642 <dict>
5643 <key>name</key>
5644 <string>keyword.operator.expression.delete.ts</string>
5645 <key>match</key>
5646 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5647 </dict>
5648 <dict>
5649 <key>name</key>
5650 <string>keyword.operator.expression.in.ts</string>
5651 <key>match</key>
5652 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5653 </dict>
5654 <dict>
5655 <key>name</key>
5656 <string>keyword.operator.expression.of.ts</string>
5657 <key>match</key>
5658 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5659 </dict>
5660 <dict>
5661 <key>name</key>
5662 <string>keyword.operator.expression.instanceof.ts</string>
5663 <key>match</key>
5664 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5665 </dict>
5666 <dict>
5667 <key>name</key>
5668 <string>keyword.operator.new.ts</string>
5669 <key>match</key>
5670 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5671 </dict>
5672 <dict>
5673 <key>include</key>
5674 <string>#typeof-operator</string>
5675 </dict>
5676 <dict>
5677 <key>name</key>
5678 <string>keyword.operator.expression.void.ts</string>
5679 <key>match</key>
5680 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5681 </dict>
5682 <dict>
5683 <key>match</key>
5684 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*($|[;,:})\]]))</string>
5685 <key>captures</key>
5686 <dict>
5687 <key>1</key>
5688 <dict>
5689 <key>name</key>
5690 <string>keyword.control.as.ts</string>
5691 </dict>
5692 <key>2</key>
5693 <dict>
5694 <key>name</key>
5695 <string>storage.modifier.ts</string>
5696 </dict>
5697 </dict>
5698 </dict>
5699 <dict>
5700 <key>begin</key>
5701 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
5702 <key>beginCaptures</key>
5703 <dict>
5704 <key>1</key>
5705 <dict>
5706 <key>name</key>
5707 <string>keyword.control.as.ts</string>
5708 </dict>
5709 <key>2</key>
5710 <dict>
5711 <key>name</key>
5712 <string>keyword.control.satisfies.ts</string>
5713 </dict>
5714 </dict>
5715 <key>end</key>
5716 <string>(?=^|[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisfies)\s+)|(\s+\&lt;))</string>
5717 <key>patterns</key>
5718 <array>
5719 <dict>
5720 <key>include</key>
5721 <string>#type</string>
5722 </dict>
5723 </array>
5724 </dict>
5725 <dict>
5726 <key>name</key>
5727 <string>keyword.operator.spread.ts</string>
5728 <key>match</key>
5729 <string>\.\.\.</string>
5730 </dict>
5731 <dict>
5732 <key>name</key>
5733 <string>keyword.operator.assignment.compound.ts</string>
5734 <key>match</key>
5735 <string>\*=|(?&lt;!\()/=|%=|\+=|\-=</string>
5736 </dict>
5737 <dict>
5738 <key>name</key>
5739 <string>keyword.operator.assignment.compound.bitwise.ts</string>
5740 <key>match</key>
5741 <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|\|=</string>
5742 </dict>
5743 <dict>
5744 <key>name</key>
5745 <string>keyword.operator.bitwise.shift.ts</string>
5746 <key>match</key>
5747 <string>&lt;&lt;|&gt;&gt;&gt;|&gt;&gt;</string>
5748 </dict>
5749 <dict>
5750 <key>name</key>
5751 <string>keyword.operator.comparison.ts</string>
5752 <key>match</key>
5753 <string>===|!==|==|!=</string>
5754 </dict>
5755 <dict>
5756 <key>name</key>
5757 <string>keyword.operator.relational.ts</string>
5758 <key>match</key>
5759 <string>&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;</string>
5760 </dict>
5761 <dict>
5762 <key>match</key>
5763 <string>(?&lt;=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))</string>
5764 <key>captures</key>
5765 <dict>
5766 <key>1</key>
5767 <dict>
5768 <key>name</key>
5769 <string>keyword.operator.logical.ts</string>
5770 </dict>
5771 <key>2</key>
5772 <dict>
5773 <key>name</key>
5774 <string>keyword.operator.assignment.compound.ts</string>
5775 </dict>
5776 <key>3</key>
5777 <dict>
5778 <key>name</key>
5779 <string>keyword.operator.arithmetic.ts</string>
5780 </dict>
5781 </dict>
5782 </dict>
5783 <dict>
5784 <key>name</key>
5785 <string>keyword.operator.logical.ts</string>
5786 <key>match</key>
5787 <string>\!|&amp;&amp;|\|\||\?\?</string>
5788 </dict>
5789 <dict>
5790 <key>name</key>
5791 <string>keyword.operator.bitwise.ts</string>
5792 <key>match</key>
5793 <string>\&amp;|~|\^|\|</string>
5794 </dict>
5795 <dict>
5796 <key>name</key>
5797 <string>keyword.operator.assignment.ts</string>
5798 <key>match</key>
5799 <string>\=</string>
5800 </dict>
5801 <dict>
5802 <key>name</key>
5803 <string>keyword.operator.decrement.ts</string>
5804 <key>match</key>
5805 <string>--</string>
5806 </dict>
5807 <dict>
5808 <key>name</key>
5809 <string>keyword.operator.increment.ts</string>
5810 <key>match</key>
5811 <string>\+\+</string>
5812 </dict>
5813 <dict>
5814 <key>name</key>
5815 <string>keyword.operator.arithmetic.ts</string>
5816 <key>match</key>
5817 <string>%|\*|/|-|\+</string>
5818 </dict>
5819 <dict>
5820 <key>begin</key>
5821 <string>(?&lt;=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))</string>
5822 <key>end</key>
5823 <string>(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))</string>
5824 <key>endCaptures</key>
5825 <dict>
5826 <key>1</key>
5827 <dict>
5828 <key>name</key>
5829 <string>keyword.operator.assignment.compound.ts</string>
5830 </dict>
5831 <key>2</key>
5832 <dict>
5833 <key>name</key>
5834 <string>keyword.operator.arithmetic.ts</string>
5835 </dict>
5836 </dict>
5837 <key>patterns</key>
5838 <array>
5839 <dict>
5840 <key>include</key>
5841 <string>#comment</string>
5842 </dict>
5843 </array>
5844 </dict>
5845 <dict>
5846 <key>match</key>
5847 <string>(?&lt;=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))</string>
5848 <key>captures</key>
5849 <dict>
5850 <key>1</key>
5851 <dict>
5852 <key>name</key>
5853 <string>keyword.operator.assignment.compound.ts</string>
5854 </dict>
5855 <key>2</key>
5856 <dict>
5857 <key>name</key>
5858 <string>keyword.operator.arithmetic.ts</string>
5859 </dict>
5860 </dict>
5861 </dict>
5862 </array>
5863 </dict>
5864 <key>typeof-operator</key>
5865 <dict>
5866 <key>begin</key>
5867 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5868 <key>beginCaptures</key>
5869 <dict>
5870 <key>0</key>
5871 <dict>
5872 <key>name</key>
5873 <string>keyword.operator.expression.typeof.ts</string>
5874 </dict>
5875 </dict>
5876 <key>end</key>
5877 <string>(?=[,);}\]=&gt;:&amp;|{\?]|(extends\s+)|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
5878 <key>patterns</key>
5879 <array>
5880 <dict>
5881 <key>include</key>
5882 <string>#type-arguments</string>
5883 </dict>
5884 <dict>
5885 <key>include</key>
5886 <string>#expression</string>
5887 </dict>
5888 </array>
5889 </dict>
5890 <key>literal</key>
5891 <dict>
5892 <key>patterns</key>
5893 <array>
5894 <dict>
5895 <key>include</key>
5896 <string>#numeric-literal</string>
5897 </dict>
5898 <dict>
5899 <key>include</key>
5900 <string>#boolean-literal</string>
5901 </dict>
5902 <dict>
5903 <key>include</key>
5904 <string>#null-literal</string>
5905 </dict>
5906 <dict>
5907 <key>include</key>
5908 <string>#undefined-literal</string>
5909 </dict>
5910 <dict>
5911 <key>include</key>
5912 <string>#numericConstant-literal</string>
5913 </dict>
5914 <dict>
5915 <key>include</key>
5916 <string>#array-literal</string>
5917 </dict>
5918 <dict>
5919 <key>include</key>
5920 <string>#this-literal</string>
5921 </dict>
5922 <dict>
5923 <key>include</key>
5924 <string>#super-literal</string>
5925 </dict>
5926 </array>
5927 </dict>
5928 <key>array-literal</key>
5929 <dict>
5930 <key>name</key>
5931 <string>meta.array.literal.ts</string>
5932 <key>begin</key>
5933 <string>\s*(\[)</string>
5934 <key>beginCaptures</key>
5935 <dict>
5936 <key>1</key>
5937 <dict>
5938 <key>name</key>
5939 <string>meta.brace.square.ts</string>
5940 </dict>
5941 </dict>
5942 <key>end</key>
5943 <string>\]</string>
5944 <key>endCaptures</key>
5945 <dict>
5946 <key>0</key>
5947 <dict>
5948 <key>name</key>
5949 <string>meta.brace.square.ts</string>
5950 </dict>
5951 </dict>
5952 <key>patterns</key>
5953 <array>
5954 <dict>
5955 <key>include</key>
5956 <string>#expression</string>
5957 </dict>
5958 <dict>
5959 <key>include</key>
5960 <string>#punctuation-comma</string>
5961 </dict>
5962 </array>
5963 </dict>
5964 <key>numeric-literal</key>
5965 <dict>
5966 <key>patterns</key>
5967 <array>
5968 <dict>
5969 <key>name</key>
5970 <string>constant.numeric.hex.ts</string>
5971 <key>match</key>
5972 <string>\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$)</string>
5973 <key>captures</key>
5974 <dict>
5975 <key>1</key>
5976 <dict>
5977 <key>name</key>
5978 <string>storage.type.numeric.bigint.ts</string>
5979 </dict>
5980 </dict>
5981 </dict>
5982 <dict>
5983 <key>name</key>
5984 <string>constant.numeric.binary.ts</string>
5985 <key>match</key>
5986 <string>\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$)</string>
5987 <key>captures</key>
5988 <dict>
5989 <key>1</key>
5990 <dict>
5991 <key>name</key>
5992 <string>storage.type.numeric.bigint.ts</string>
5993 </dict>
5994 </dict>
5995 </dict>
5996 <dict>
5997 <key>name</key>
5998 <string>constant.numeric.octal.ts</string>
5999 <key>match</key>
6000 <string>\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$)</string>
6001 <key>captures</key>
6002 <dict>
6003 <key>1</key>
6004 <dict>
6005 <key>name</key>
6006 <string>storage.type.numeric.bigint.ts</string>
6007 </dict>
6008 </dict>
6009 </dict>
6010 <dict>
6011 <key>match</key>
6012 <string>(?x)
6013(?&lt;!\$)(?:
6014 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
6015 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
6016 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
6017 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
6018 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
6019 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
6020 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
6021 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
6022)(?!\$)</string>
6023 <key>captures</key>
6024 <dict>
6025 <key>0</key>
6026 <dict>
6027 <key>name</key>
6028 <string>constant.numeric.decimal.ts</string>
6029 </dict>
6030 <key>1</key>
6031 <dict>
6032 <key>name</key>
6033 <string>meta.delimiter.decimal.period.ts</string>
6034 </dict>
6035 <key>2</key>
6036 <dict>
6037 <key>name</key>
6038 <string>storage.type.numeric.bigint.ts</string>
6039 </dict>
6040 <key>3</key>
6041 <dict>
6042 <key>name</key>
6043 <string>meta.delimiter.decimal.period.ts</string>
6044 </dict>
6045 <key>4</key>
6046 <dict>
6047 <key>name</key>
6048 <string>storage.type.numeric.bigint.ts</string>
6049 </dict>
6050 <key>5</key>
6051 <dict>
6052 <key>name</key>
6053 <string>meta.delimiter.decimal.period.ts</string>
6054 </dict>
6055 <key>6</key>
6056 <dict>
6057 <key>name</key>
6058 <string>storage.type.numeric.bigint.ts</string>
6059 </dict>
6060 <key>7</key>
6061 <dict>
6062 <key>name</key>
6063 <string>storage.type.numeric.bigint.ts</string>
6064 </dict>
6065 <key>8</key>
6066 <dict>
6067 <key>name</key>
6068 <string>meta.delimiter.decimal.period.ts</string>
6069 </dict>
6070 <key>9</key>
6071 <dict>
6072 <key>name</key>
6073 <string>storage.type.numeric.bigint.ts</string>
6074 </dict>
6075 <key>10</key>
6076 <dict>
6077 <key>name</key>
6078 <string>meta.delimiter.decimal.period.ts</string>
6079 </dict>
6080 <key>11</key>
6081 <dict>
6082 <key>name</key>
6083 <string>storage.type.numeric.bigint.ts</string>
6084 </dict>
6085 <key>12</key>
6086 <dict>
6087 <key>name</key>
6088 <string>meta.delimiter.decimal.period.ts</string>
6089 </dict>
6090 <key>13</key>
6091 <dict>
6092 <key>name</key>
6093 <string>storage.type.numeric.bigint.ts</string>
6094 </dict>
6095 <key>14</key>
6096 <dict>
6097 <key>name</key>
6098 <string>storage.type.numeric.bigint.ts</string>
6099 </dict>
6100 </dict>
6101 </dict>
6102 </array>
6103 </dict>
6104 <key>boolean-literal</key>
6105 <dict>
6106 <key>patterns</key>
6107 <array>
6108 <dict>
6109 <key>name</key>
6110 <string>constant.language.boolean.true.ts</string>
6111 <key>match</key>
6112 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6113 </dict>
6114 <dict>
6115 <key>name</key>
6116 <string>constant.language.boolean.false.ts</string>
6117 <key>match</key>
6118 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6119 </dict>
6120 </array>
6121 </dict>
6122 <key>null-literal</key>
6123 <dict>
6124 <key>name</key>
6125 <string>constant.language.null.ts</string>
6126 <key>match</key>
6127 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6128 </dict>
6129 <key>this-literal</key>
6130 <dict>
6131 <key>name</key>
6132 <string>variable.language.this.ts</string>
6133 <key>match</key>
6134 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))this\b(?!\$)</string>
6135 </dict>
6136 <key>super-literal</key>
6137 <dict>
6138 <key>name</key>
6139 <string>variable.language.super.ts</string>
6140 <key>match</key>
6141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))super\b(?!\$)</string>
6142 </dict>
6143 <key>undefined-literal</key>
6144 <dict>
6145 <key>name</key>
6146 <string>constant.language.undefined.ts</string>
6147 <key>match</key>
6148 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6149 </dict>
6150 <key>numericConstant-literal</key>
6151 <dict>
6152 <key>patterns</key>
6153 <array>
6154 <dict>
6155 <key>name</key>
6156 <string>constant.language.nan.ts</string>
6157 <key>match</key>
6158 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6159 </dict>
6160 <dict>
6161 <key>name</key>
6162 <string>constant.language.infinity.ts</string>
6163 <key>match</key>
6164 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6165 </dict>
6166 </array>
6167 </dict>
6168 <key>support-objects</key>
6169 <dict>
6170 <key>patterns</key>
6171 <array>
6172 <dict>
6173 <key>name</key>
6174 <string>variable.language.arguments.ts</string>
6175 <key>match</key>
6176 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(arguments)\b(?!\$)</string>
6177 </dict>
6178 <dict>
6179 <key>name</key>
6180 <string>support.class.builtin.ts</string>
6181 <key>match</key>
6182 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array
6183 |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
6184 |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
6185 |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)</string>
6186 </dict>
6187 <dict>
6188 <key>name</key>
6189 <string>support.class.error.ts</string>
6190 <key>match</key>
6191 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$)</string>
6192 </dict>
6193 <dict>
6194 <key>name</key>
6195 <string>support.class.promise.ts</string>
6196 <key>match</key>
6197 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Promise)\b(?!\$)</string>
6198 </dict>
6199 <dict>
6200 <key>name</key>
6201 <string>support.function.ts</string>
6202 <key>match</key>
6203 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|
6204 isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\()</string>
6205 </dict>
6206 <dict>
6207 <key>match</key>
6208 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6209 (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
6210 expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
6211 round|sign|sin|sinh|sqrt|tan|tanh|trunc)
6212 |
6213 (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$)</string>
6214 <key>captures</key>
6215 <dict>
6216 <key>1</key>
6217 <dict>
6218 <key>name</key>
6219 <string>support.constant.math.ts</string>
6220 </dict>
6221 <key>2</key>
6222 <dict>
6223 <key>name</key>
6224 <string>punctuation.accessor.ts</string>
6225 </dict>
6226 <key>3</key>
6227 <dict>
6228 <key>name</key>
6229 <string>punctuation.accessor.optional.ts</string>
6230 </dict>
6231 <key>4</key>
6232 <dict>
6233 <key>name</key>
6234 <string>support.function.math.ts</string>
6235 </dict>
6236 <key>5</key>
6237 <dict>
6238 <key>name</key>
6239 <string>support.constant.property.math.ts</string>
6240 </dict>
6241 </dict>
6242 </dict>
6243 <dict>
6244 <key>match</key>
6245 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(
6246 assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log
6247 |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$)</string>
6248 <key>captures</key>
6249 <dict>
6250 <key>1</key>
6251 <dict>
6252 <key>name</key>
6253 <string>support.class.console.ts</string>
6254 </dict>
6255 <key>2</key>
6256 <dict>
6257 <key>name</key>
6258 <string>punctuation.accessor.ts</string>
6259 </dict>
6260 <key>3</key>
6261 <dict>
6262 <key>name</key>
6263 <string>punctuation.accessor.optional.ts</string>
6264 </dict>
6265 <key>4</key>
6266 <dict>
6267 <key>name</key>
6268 <string>support.function.console.ts</string>
6269 </dict>
6270 </dict>
6271 </dict>
6272 <dict>
6273 <key>match</key>
6274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$)</string>
6275 <key>captures</key>
6276 <dict>
6277 <key>1</key>
6278 <dict>
6279 <key>name</key>
6280 <string>support.constant.json.ts</string>
6281 </dict>
6282 <key>2</key>
6283 <dict>
6284 <key>name</key>
6285 <string>punctuation.accessor.ts</string>
6286 </dict>
6287 <key>3</key>
6288 <dict>
6289 <key>name</key>
6290 <string>punctuation.accessor.optional.ts</string>
6291 </dict>
6292 <key>4</key>
6293 <dict>
6294 <key>name</key>
6295 <string>support.function.json.ts</string>
6296 </dict>
6297 </dict>
6298 </dict>
6299 <dict>
6300 <key>match</key>
6301 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
6302 <key>captures</key>
6303 <dict>
6304 <key>1</key>
6305 <dict>
6306 <key>name</key>
6307 <string>keyword.control.import.ts</string>
6308 </dict>
6309 <key>2</key>
6310 <dict>
6311 <key>name</key>
6312 <string>punctuation.accessor.ts</string>
6313 </dict>
6314 <key>3</key>
6315 <dict>
6316 <key>name</key>
6317 <string>punctuation.accessor.optional.ts</string>
6318 </dict>
6319 <key>4</key>
6320 <dict>
6321 <key>name</key>
6322 <string>support.variable.property.importmeta.ts</string>
6323 </dict>
6324 </dict>
6325 </dict>
6326 <dict>
6327 <key>match</key>
6328 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
6329 <key>captures</key>
6330 <dict>
6331 <key>1</key>
6332 <dict>
6333 <key>name</key>
6334 <string>keyword.operator.new.ts</string>
6335 </dict>
6336 <key>2</key>
6337 <dict>
6338 <key>name</key>
6339 <string>punctuation.accessor.ts</string>
6340 </dict>
6341 <key>3</key>
6342 <dict>
6343 <key>name</key>
6344 <string>punctuation.accessor.optional.ts</string>
6345 </dict>
6346 <key>4</key>
6347 <dict>
6348 <key>name</key>
6349 <string>support.variable.property.target.ts</string>
6350 </dict>
6351 </dict>
6352 </dict>
6353 <dict>
6354 <key>match</key>
6355 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6356 (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\())
6357 |
6358 (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))</string>
6359 <key>captures</key>
6360 <dict>
6361 <key>1</key>
6362 <dict>
6363 <key>name</key>
6364 <string>punctuation.accessor.ts</string>
6365 </dict>
6366 <key>2</key>
6367 <dict>
6368 <key>name</key>
6369 <string>punctuation.accessor.optional.ts</string>
6370 </dict>
6371 <key>3</key>
6372 <dict>
6373 <key>name</key>
6374 <string>support.variable.property.ts</string>
6375 </dict>
6376 <key>4</key>
6377 <dict>
6378 <key>name</key>
6379 <string>support.constant.ts</string>
6380 </dict>
6381 </dict>
6382 </dict>
6383 <dict>
6384 <key>match</key>
6385 <string>(?x) (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.)) \b (?:
6386 (document|event|navigator|performance|screen|window)
6387 |
6388 (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener
6389 |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule
6390 |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration
6391 |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern
6392 |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent
6393 |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException
6394 |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer
6395 |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry
6396 |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent
6397 |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential
6398 |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync
6399 |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement
6400 |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement
6401 |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement
6402 |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement
6403 |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement
6404 |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement
6405 |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement
6406 |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement
6407 |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement
6408 |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement
6409 |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement
6410 |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase
6411 |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction
6412 |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities
6413 |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess
6414 |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent
6415 |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream
6416 |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent
6417 |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID
6418 |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification
6419 |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential
6420 |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark
6421 |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList
6422 |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent
6423 |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList
6424 |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager
6425 |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource
6426 |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement
6427 |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength
6428 |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio
6429 |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement
6430 |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement
6431 |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement
6432 |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength
6433 |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement
6434 |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio
6435 |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList
6436 |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement
6437 |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement
6438 |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState
6439 |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet
6440 |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable
6441 |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer
6442 |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat
6443 |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES
6444 |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope
6445 |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult
6446 |XSLTProcessor))\b(?!\$)</string>
6447 <key>captures</key>
6448 <dict>
6449 <key>1</key>
6450 <dict>
6451 <key>name</key>
6452 <string>support.variable.dom.ts</string>
6453 </dict>
6454 <key>2</key>
6455 <dict>
6456 <key>name</key>
6457 <string>support.class.dom.ts</string>
6458 </dict>
6459 </dict>
6460 </dict>
6461 <dict>
6462 <key>match</key>
6463 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6464 (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE
6465 |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR
6466 |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR
6467 |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)
6468 |
6469 (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName
6470 |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop
6471 |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor
6472 |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption
6473 |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear
6474 |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete
6475 |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset
6476 |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight
6477 |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds
6478 |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize
6479 |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host
6480 |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth
6481 |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext
6482 |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom
6483 |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple
6484 |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName
6485 |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight
6486 |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer
6487 |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling
6488 |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText
6489 |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts
6490 |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove
6491 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
6492 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
6493 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
6494 |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\()</string>
6495 <key>captures</key>
6496 <dict>
6497 <key>1</key>
6498 <dict>
6499 <key>name</key>
6500 <string>punctuation.accessor.ts</string>
6501 </dict>
6502 <key>2</key>
6503 <dict>
6504 <key>name</key>
6505 <string>punctuation.accessor.optional.ts</string>
6506 </dict>
6507 <key>3</key>
6508 <dict>
6509 <key>name</key>
6510 <string>support.constant.dom.ts</string>
6511 </dict>
6512 <key>4</key>
6513 <dict>
6514 <key>name</key>
6515 <string>support.variable.property.dom.ts</string>
6516 </dict>
6517 </dict>
6518 </dict>
6519 <dict>
6520 <key>name</key>
6521 <string>support.class.node.ts</string>
6522 <key>match</key>
6523 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream
6524 |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$)</string>
6525 </dict>
6526 <dict>
6527 <key>match</key>
6528 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?:
6529 (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)
6530 |
6531 (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)
6532))?\b(?!\$)</string>
6533 <key>captures</key>
6534 <dict>
6535 <key>1</key>
6536 <dict>
6537 <key>name</key>
6538 <string>support.variable.object.process.ts</string>
6539 </dict>
6540 <key>2</key>
6541 <dict>
6542 <key>name</key>
6543 <string>punctuation.accessor.ts</string>
6544 </dict>
6545 <key>3</key>
6546 <dict>
6547 <key>name</key>
6548 <string>punctuation.accessor.optional.ts</string>
6549 </dict>
6550 <key>4</key>
6551 <dict>
6552 <key>name</key>
6553 <string>support.variable.property.process.ts</string>
6554 </dict>
6555 <key>5</key>
6556 <dict>
6557 <key>name</key>
6558 <string>support.function.process.ts</string>
6559 </dict>
6560 </dict>
6561 </dict>
6562 <dict>
6563 <key>match</key>
6564 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$)</string>
6565 <key>captures</key>
6566 <dict>
6567 <key>1</key>
6568 <dict>
6569 <key>name</key>
6570 <string>support.type.object.module.ts</string>
6571 </dict>
6572 <key>2</key>
6573 <dict>
6574 <key>name</key>
6575 <string>support.type.object.module.ts</string>
6576 </dict>
6577 <key>3</key>
6578 <dict>
6579 <key>name</key>
6580 <string>punctuation.accessor.ts</string>
6581 </dict>
6582 <key>4</key>
6583 <dict>
6584 <key>name</key>
6585 <string>punctuation.accessor.optional.ts</string>
6586 </dict>
6587 <key>5</key>
6588 <dict>
6589 <key>name</key>
6590 <string>support.type.object.module.ts</string>
6591 </dict>
6592 </dict>
6593 </dict>
6594 <dict>
6595 <key>name</key>
6596 <string>support.variable.object.node.ts</string>
6597 <key>match</key>
6598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$)</string>
6599 </dict>
6600 <dict>
6601 <key>match</key>
6602 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s*
6603(?:
6604 (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|
6605 Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|
6606 Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|
6607 Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|
6608 Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|
6609 Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|
6610 Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|
6611 Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)
6612 ) |
6613 (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
6614 scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|
6615 sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|
6616 Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|
6617 Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|
6618 savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
6619 contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
6620 createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
6621 test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
6622 untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|
6623 print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
6624 fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
6625 forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
6626 abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
6627 releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|
6628 Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|
6629 Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|
6630 moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back
6631 ) |
6632 (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
6633 appendChild|appendData|before|blur|canPlayType|captureStream|
6634 caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
6635 cloneContents|cloneNode|cloneRange|close|closest|collapse|
6636 compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
6637 convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
6638 createAttributeNS|createCaption|createCDATASection|createComment|
6639 createContextualFragment|createDocument|createDocumentFragment|
6640 createDocumentType|createElement|createElementNS|createEntityReference|
6641 createEvent|createExpression|createHTMLDocument|createNodeIterator|
6642 createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
6643 createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
6644 deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
6645 deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
6646 enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
6647 exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
6648 getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
6649 getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
6650 getClientRects|getContext|getDestinationInsertionPoints|getElementById|
6651 getElementsByClassName|getElementsByName|getElementsByTagName|
6652 getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
6653 getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
6654 hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
6655 insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
6656 insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
6657 isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
6658 lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
6659 moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
6660 parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
6661 previousSibling|probablySupportsContext|queryCommandEnabled|
6662 queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
6663 querySelector|querySelectorAll|registerContentHandler|registerElement|
6664 registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
6665 removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
6666 removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
6667 requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
6668 scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
6669 setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
6670 setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
6671 setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
6672 slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
6673 submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
6674 toDataURL|toggle|toString|values|write|writeln
6675 ) |
6676 (all|catch|finally|race|reject|resolve|then
6677 )
6678)(?=\s*\()</string>
6679 <key>captures</key>
6680 <dict>
6681 <key>1</key>
6682 <dict>
6683 <key>name</key>
6684 <string>punctuation.accessor.ts</string>
6685 </dict>
6686 <key>2</key>
6687 <dict>
6688 <key>name</key>
6689 <string>punctuation.accessor.optional.ts</string>
6690 </dict>
6691 <key>3</key>
6692 <dict>
6693 <key>name</key>
6694 <string>support.function.event-handler.ts</string>
6695 </dict>
6696 <key>4</key>
6697 <dict>
6698 <key>name</key>
6699 <string>support.function.ts</string>
6700 </dict>
6701 <key>5</key>
6702 <dict>
6703 <key>name</key>
6704 <string>support.function.dom.ts</string>
6705 </dict>
6706 <key>6</key>
6707 <dict>
6708 <key>name</key>
6709 <string>support.function.promise.ts</string>
6710 </dict>
6711 </dict>
6712 </dict>
6713 </array>
6714 </dict>
6715 <key>identifiers</key>
6716 <dict>
6717 <key>patterns</key>
6718 <array>
6719 <dict>
6720 <key>include</key>
6721 <string>#object-identifiers</string>
6722 </dict>
6723 <dict>
6724 <key>match</key>
6725 <string>(?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
6726 ((async\s+)?(
6727 (function\s*[(&lt;*]) |
6728 (function\s+) |
6729 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
6730 )) |
6731 ((async\s*)?(
6732 ((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
6733 # sure shot arrow functions even if =&gt; is on new line
6734(
6735 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
6736 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
6737 (
6738 ([)]\s*:) | # ():
6739 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
6740 )
6741) |
6742
6743# arrow function possible to detect only with =&gt; on same line
6744(
6745 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
6746 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
6747 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
6748 \s*=&gt; # arrow operator
6749)
6750 ))
6751))</string>
6752 <key>captures</key>
6753 <dict>
6754 <key>1</key>
6755 <dict>
6756 <key>name</key>
6757 <string>punctuation.accessor.ts</string>
6758 </dict>
6759 <key>2</key>
6760 <dict>
6761 <key>name</key>
6762 <string>punctuation.accessor.optional.ts</string>
6763 </dict>
6764 <key>3</key>
6765 <dict>
6766 <key>name</key>
6767 <string>entity.name.function.ts</string>
6768 </dict>
6769 </dict>
6770 </dict>
6771 <dict>
6772 <key>match</key>
6773 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6774 <key>captures</key>
6775 <dict>
6776 <key>1</key>
6777 <dict>
6778 <key>name</key>
6779 <string>punctuation.accessor.ts</string>
6780 </dict>
6781 <key>2</key>
6782 <dict>
6783 <key>name</key>
6784 <string>punctuation.accessor.optional.ts</string>
6785 </dict>
6786 <key>3</key>
6787 <dict>
6788 <key>name</key>
6789 <string>variable.other.constant.property.ts</string>
6790 </dict>
6791 </dict>
6792 </dict>
6793 <dict>
6794 <key>match</key>
6795 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6796 <key>captures</key>
6797 <dict>
6798 <key>1</key>
6799 <dict>
6800 <key>name</key>
6801 <string>punctuation.accessor.ts</string>
6802 </dict>
6803 <key>2</key>
6804 <dict>
6805 <key>name</key>
6806 <string>punctuation.accessor.optional.ts</string>
6807 </dict>
6808 <key>3</key>
6809 <dict>
6810 <key>name</key>
6811 <string>variable.other.property.ts</string>
6812 </dict>
6813 </dict>
6814 </dict>
6815 <dict>
6816 <key>name</key>
6817 <string>variable.other.constant.ts</string>
6818 <key>match</key>
6819 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6820 </dict>
6821 <dict>
6822 <key>name</key>
6823 <string>variable.other.readwrite.ts</string>
6824 <key>match</key>
6825 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
6826 </dict>
6827 </array>
6828 </dict>
6829 <key>object-identifiers</key>
6830 <dict>
6831 <key>patterns</key>
6832 <array>
6833 <dict>
6834 <key>name</key>
6835 <string>support.class.ts</string>
6836 <key>match</key>
6837 <string>([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$))</string>
6838 </dict>
6839 <dict>
6840 <key>match</key>
6841 <string>(?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6842 (\#?[[:upper:]][_$[:digit:][:upper:]]*) |
6843 (\#?[_$[:alpha:]][_$[:alnum:]]*)
6844)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6845 <key>captures</key>
6846 <dict>
6847 <key>1</key>
6848 <dict>
6849 <key>name</key>
6850 <string>punctuation.accessor.ts</string>
6851 </dict>
6852 <key>2</key>
6853 <dict>
6854 <key>name</key>
6855 <string>punctuation.accessor.optional.ts</string>
6856 </dict>
6857 <key>3</key>
6858 <dict>
6859 <key>name</key>
6860 <string>variable.other.constant.object.property.ts</string>
6861 </dict>
6862 <key>4</key>
6863 <dict>
6864 <key>name</key>
6865 <string>variable.other.object.property.ts</string>
6866 </dict>
6867 </dict>
6868 </dict>
6869 <dict>
6870 <key>match</key>
6871 <string>(?x)(?:
6872 ([[:upper:]][_$[:digit:][:upper:]]*) |
6873 ([_$[:alpha:]][_$[:alnum:]]*)
6874)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6875 <key>captures</key>
6876 <dict>
6877 <key>1</key>
6878 <dict>
6879 <key>name</key>
6880 <string>variable.other.constant.object.ts</string>
6881 </dict>
6882 <key>2</key>
6883 <dict>
6884 <key>name</key>
6885 <string>variable.other.object.ts</string>
6886 </dict>
6887 </dict>
6888 </dict>
6889 </array>
6890 </dict>
6891 <key>type-annotation</key>
6892 <dict>
6893 <key>patterns</key>
6894 <array>
6895 <dict>
6896 <key>name</key>
6897 <string>meta.type.annotation.ts</string>
6898 <key>begin</key>
6899 <string>(:)(?=\s*\S)</string>
6900 <key>beginCaptures</key>
6901 <dict>
6902 <key>1</key>
6903 <dict>
6904 <key>name</key>
6905 <string>keyword.operator.type.annotation.ts</string>
6906 </dict>
6907 </dict>
6908 <key>end</key>
6909 <string>(?&lt;![:|&amp;])(?!\s*[|&amp;]\s+)((?=^|[,);\}\]]|//)|(?==[^&gt;])|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6910 <key>patterns</key>
6911 <array>
6912 <dict>
6913 <key>include</key>
6914 <string>#type</string>
6915 </dict>
6916 </array>
6917 </dict>
6918 <dict>
6919 <key>name</key>
6920 <string>meta.type.annotation.ts</string>
6921 <key>begin</key>
6922 <string>(:)</string>
6923 <key>beginCaptures</key>
6924 <dict>
6925 <key>1</key>
6926 <dict>
6927 <key>name</key>
6928 <string>keyword.operator.type.annotation.ts</string>
6929 </dict>
6930 </dict>
6931 <key>end</key>
6932 <string>(?&lt;![:|&amp;])((?=[,);\}\]]|\/\/)|(?==[^&gt;])|(?=^\s*$)|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6933 <key>patterns</key>
6934 <array>
6935 <dict>
6936 <key>include</key>
6937 <string>#type</string>
6938 </dict>
6939 </array>
6940 </dict>
6941 </array>
6942 </dict>
6943 <key>parameter-type-annotation</key>
6944 <dict>
6945 <key>patterns</key>
6946 <array>
6947 <dict>
6948 <key>name</key>
6949 <string>meta.type.annotation.ts</string>
6950 <key>begin</key>
6951 <string>(:)</string>
6952 <key>beginCaptures</key>
6953 <dict>
6954 <key>1</key>
6955 <dict>
6956 <key>name</key>
6957 <string>keyword.operator.type.annotation.ts</string>
6958 </dict>
6959 </dict>
6960 <key>end</key>
6961 <string>(?=[,)])|(?==[^&gt;])</string>
6962 <key>patterns</key>
6963 <array>
6964 <dict>
6965 <key>include</key>
6966 <string>#type</string>
6967 </dict>
6968 </array>
6969 </dict>
6970 </array>
6971 </dict>
6972 <key>return-type</key>
6973 <dict>
6974 <key>patterns</key>
6975 <array>
6976 <dict>
6977 <key>name</key>
6978 <string>meta.return.type.ts</string>
6979 <key>begin</key>
6980 <string>(?&lt;=\))\s*(:)(?=\s*\S)</string>
6981 <key>beginCaptures</key>
6982 <dict>
6983 <key>1</key>
6984 <dict>
6985 <key>name</key>
6986 <string>keyword.operator.type.annotation.ts</string>
6987 </dict>
6988 </dict>
6989 <key>end</key>
6990 <string>(?&lt;![:|&amp;])(?=$|^|[{};,]|//)</string>
6991 <key>patterns</key>
6992 <array>
6993 <dict>
6994 <key>include</key>
6995 <string>#return-type-core</string>
6996 </dict>
6997 </array>
6998 </dict>
6999 <dict>
7000 <key>name</key>
7001 <string>meta.return.type.ts</string>
7002 <key>begin</key>
7003 <string>(?&lt;=\))\s*(:)</string>
7004 <key>beginCaptures</key>
7005 <dict>
7006 <key>1</key>
7007 <dict>
7008 <key>name</key>
7009 <string>keyword.operator.type.annotation.ts</string>
7010 </dict>
7011 </dict>
7012 <key>end</key>
7013 <string>(?&lt;![:|&amp;])((?=[{};,]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7014 <key>patterns</key>
7015 <array>
7016 <dict>
7017 <key>include</key>
7018 <string>#return-type-core</string>
7019 </dict>
7020 </array>
7021 </dict>
7022 </array>
7023 </dict>
7024 <key>return-type-core</key>
7025 <dict>
7026 <key>patterns</key>
7027 <array>
7028 <dict>
7029 <key>include</key>
7030 <string>#comment</string>
7031 </dict>
7032 <dict>
7033 <key>begin</key>
7034 <string>(?&lt;=[:|&amp;])(?=\s*\{)</string>
7035 <key>end</key>
7036 <string>(?&lt;=\})</string>
7037 <key>patterns</key>
7038 <array>
7039 <dict>
7040 <key>include</key>
7041 <string>#type-object</string>
7042 </dict>
7043 </array>
7044 </dict>
7045 <dict>
7046 <key>include</key>
7047 <string>#type-predicate-operator</string>
7048 </dict>
7049 <dict>
7050 <key>include</key>
7051 <string>#type</string>
7052 </dict>
7053 </array>
7054 </dict>
7055 <key>arrow-return-type</key>
7056 <dict>
7057 <key>name</key>
7058 <string>meta.return.type.arrow.ts</string>
7059 <key>begin</key>
7060 <string>(?&lt;=\))\s*(:)</string>
7061 <key>beginCaptures</key>
7062 <dict>
7063 <key>1</key>
7064 <dict>
7065 <key>name</key>
7066 <string>keyword.operator.type.annotation.ts</string>
7067 </dict>
7068 </dict>
7069 <key>end</key>
7070 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7071 <key>patterns</key>
7072 <array>
7073 <dict>
7074 <key>include</key>
7075 <string>#arrow-return-type-body</string>
7076 </dict>
7077 </array>
7078 </dict>
7079 <key>possibly-arrow-return-type</key>
7080 <dict>
7081 <key>begin</key>
7082 <string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
7083 <key>beginCaptures</key>
7084 <dict>
7085 <key>1</key>
7086 <dict>
7087 <key>name</key>
7088 <string>meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts</string>
7089 </dict>
7090 </dict>
7091 <key>end</key>
7092 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7093 <key>contentName</key>
7094 <string>meta.arrow.ts meta.return.type.arrow.ts</string>
7095 <key>patterns</key>
7096 <array>
7097 <dict>
7098 <key>include</key>
7099 <string>#arrow-return-type-body</string>
7100 </dict>
7101 </array>
7102 </dict>
7103 <key>arrow-return-type-body</key>
7104 <dict>
7105 <key>patterns</key>
7106 <array>
7107 <dict>
7108 <key>begin</key>
7109 <string>(?&lt;=[:])(?=\s*\{)</string>
7110 <key>end</key>
7111 <string>(?&lt;=\})</string>
7112 <key>patterns</key>
7113 <array>
7114 <dict>
7115 <key>include</key>
7116 <string>#type-object</string>
7117 </dict>
7118 </array>
7119 </dict>
7120 <dict>
7121 <key>include</key>
7122 <string>#type-predicate-operator</string>
7123 </dict>
7124 <dict>
7125 <key>include</key>
7126 <string>#type</string>
7127 </dict>
7128 </array>
7129 </dict>
7130 <key>type-parameters</key>
7131 <dict>
7132 <key>name</key>
7133 <string>meta.type.parameters.ts</string>
7134 <key>begin</key>
7135 <string>(&lt;)</string>
7136 <key>beginCaptures</key>
7137 <dict>
7138 <key>1</key>
7139 <dict>
7140 <key>name</key>
7141 <string>punctuation.definition.typeparameters.begin.ts</string>
7142 </dict>
7143 </dict>
7144 <key>end</key>
7145 <string>(&gt;)</string>
7146 <key>endCaptures</key>
7147 <dict>
7148 <key>1</key>
7149 <dict>
7150 <key>name</key>
7151 <string>punctuation.definition.typeparameters.end.ts</string>
7152 </dict>
7153 </dict>
7154 <key>patterns</key>
7155 <array>
7156 <dict>
7157 <key>include</key>
7158 <string>#comment</string>
7159 </dict>
7160 <dict>
7161 <key>name</key>
7162 <string>storage.modifier.ts</string>
7163 <key>match</key>
7164 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7165 </dict>
7166 <dict>
7167 <key>include</key>
7168 <string>#type</string>
7169 </dict>
7170 <dict>
7171 <key>include</key>
7172 <string>#punctuation-comma</string>
7173 </dict>
7174 <dict>
7175 <key>name</key>
7176 <string>keyword.operator.assignment.ts</string>
7177 <key>match</key>
7178 <string>(=)(?!&gt;)</string>
7179 </dict>
7180 </array>
7181 </dict>
7182 <key>type-arguments</key>
7183 <dict>
7184 <key>name</key>
7185 <string>meta.type.parameters.ts</string>
7186 <key>begin</key>
7187 <string>\&lt;</string>
7188 <key>beginCaptures</key>
7189 <dict>
7190 <key>0</key>
7191 <dict>
7192 <key>name</key>
7193 <string>punctuation.definition.typeparameters.begin.ts</string>
7194 </dict>
7195 </dict>
7196 <key>end</key>
7197 <string>\&gt;</string>
7198 <key>endCaptures</key>
7199 <dict>
7200 <key>0</key>
7201 <dict>
7202 <key>name</key>
7203 <string>punctuation.definition.typeparameters.end.ts</string>
7204 </dict>
7205 </dict>
7206 <key>patterns</key>
7207 <array>
7208 <dict>
7209 <key>include</key>
7210 <string>#type-arguments-body</string>
7211 </dict>
7212 </array>
7213 </dict>
7214 <key>type-arguments-body</key>
7215 <dict>
7216 <key>patterns</key>
7217 <array>
7218 <dict>
7219 <key>match</key>
7220 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7221 <key>captures</key>
7222 <dict>
7223 <key>0</key>
7224 <dict>
7225 <key>name</key>
7226 <string>keyword.operator.type.ts</string>
7227 </dict>
7228 </dict>
7229 </dict>
7230 <dict>
7231 <key>include</key>
7232 <string>#type</string>
7233 </dict>
7234 <dict>
7235 <key>include</key>
7236 <string>#punctuation-comma</string>
7237 </dict>
7238 </array>
7239 </dict>
7240 <key>type</key>
7241 <dict>
7242 <key>patterns</key>
7243 <array>
7244 <dict>
7245 <key>include</key>
7246 <string>#comment</string>
7247 </dict>
7248 <dict>
7249 <key>include</key>
7250 <string>#type-string</string>
7251 </dict>
7252 <dict>
7253 <key>include</key>
7254 <string>#numeric-literal</string>
7255 </dict>
7256 <dict>
7257 <key>include</key>
7258 <string>#type-primitive</string>
7259 </dict>
7260 <dict>
7261 <key>include</key>
7262 <string>#type-builtin-literals</string>
7263 </dict>
7264 <dict>
7265 <key>include</key>
7266 <string>#type-parameters</string>
7267 </dict>
7268 <dict>
7269 <key>include</key>
7270 <string>#type-tuple</string>
7271 </dict>
7272 <dict>
7273 <key>include</key>
7274 <string>#type-object</string>
7275 </dict>
7276 <dict>
7277 <key>include</key>
7278 <string>#type-operators</string>
7279 </dict>
7280 <dict>
7281 <key>include</key>
7282 <string>#type-conditional</string>
7283 </dict>
7284 <dict>
7285 <key>include</key>
7286 <string>#type-fn-type-parameters</string>
7287 </dict>
7288 <dict>
7289 <key>include</key>
7290 <string>#type-paren-or-function-parameters</string>
7291 </dict>
7292 <dict>
7293 <key>include</key>
7294 <string>#type-function-return-type</string>
7295 </dict>
7296 <dict>
7297 <key>match</key>
7298 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
7299 <key>captures</key>
7300 <dict>
7301 <key>1</key>
7302 <dict>
7303 <key>name</key>
7304 <string>storage.modifier.ts</string>
7305 </dict>
7306 </dict>
7307 </dict>
7308 <dict>
7309 <key>include</key>
7310 <string>#type-name</string>
7311 </dict>
7312 </array>
7313 </dict>
7314 <key>type-primitive</key>
7315 <dict>
7316 <key>name</key>
7317 <string>support.type.primitive.ts</string>
7318 <key>match</key>
7319 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7320 </dict>
7321 <key>type-builtin-literals</key>
7322 <dict>
7323 <key>name</key>
7324 <string>support.type.builtin.ts</string>
7325 <key>match</key>
7326 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7327 </dict>
7328 <key>type-tuple</key>
7329 <dict>
7330 <key>name</key>
7331 <string>meta.type.tuple.ts</string>
7332 <key>begin</key>
7333 <string>\[</string>
7334 <key>beginCaptures</key>
7335 <dict>
7336 <key>0</key>
7337 <dict>
7338 <key>name</key>
7339 <string>meta.brace.square.ts</string>
7340 </dict>
7341 </dict>
7342 <key>end</key>
7343 <string>\]</string>
7344 <key>endCaptures</key>
7345 <dict>
7346 <key>0</key>
7347 <dict>
7348 <key>name</key>
7349 <string>meta.brace.square.ts</string>
7350 </dict>
7351 </dict>
7352 <key>patterns</key>
7353 <array>
7354 <dict>
7355 <key>name</key>
7356 <string>keyword.operator.rest.ts</string>
7357 <key>match</key>
7358 <string>\.\.\.</string>
7359 </dict>
7360 <dict>
7361 <key>match</key>
7362 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)</string>
7363 <key>captures</key>
7364 <dict>
7365 <key>1</key>
7366 <dict>
7367 <key>name</key>
7368 <string>entity.name.label.ts</string>
7369 </dict>
7370 <key>2</key>
7371 <dict>
7372 <key>name</key>
7373 <string>keyword.operator.optional.ts</string>
7374 </dict>
7375 <key>3</key>
7376 <dict>
7377 <key>name</key>
7378 <string>punctuation.separator.label.ts</string>
7379 </dict>
7380 </dict>
7381 </dict>
7382 <dict>
7383 <key>include</key>
7384 <string>#type</string>
7385 </dict>
7386 <dict>
7387 <key>include</key>
7388 <string>#punctuation-comma</string>
7389 </dict>
7390 </array>
7391 </dict>
7392 <key>type-object</key>
7393 <dict>
7394 <key>name</key>
7395 <string>meta.object.type.ts</string>
7396 <key>begin</key>
7397 <string>\{</string>
7398 <key>beginCaptures</key>
7399 <dict>
7400 <key>0</key>
7401 <dict>
7402 <key>name</key>
7403 <string>punctuation.definition.block.ts</string>
7404 </dict>
7405 </dict>
7406 <key>end</key>
7407 <string>\}</string>
7408 <key>endCaptures</key>
7409 <dict>
7410 <key>0</key>
7411 <dict>
7412 <key>name</key>
7413 <string>punctuation.definition.block.ts</string>
7414 </dict>
7415 </dict>
7416 <key>patterns</key>
7417 <array>
7418 <dict>
7419 <key>include</key>
7420 <string>#comment</string>
7421 </dict>
7422 <dict>
7423 <key>include</key>
7424 <string>#method-declaration</string>
7425 </dict>
7426 <dict>
7427 <key>include</key>
7428 <string>#indexer-declaration</string>
7429 </dict>
7430 <dict>
7431 <key>include</key>
7432 <string>#indexer-mapped-type-declaration</string>
7433 </dict>
7434 <dict>
7435 <key>include</key>
7436 <string>#field-declaration</string>
7437 </dict>
7438 <dict>
7439 <key>include</key>
7440 <string>#type-annotation</string>
7441 </dict>
7442 <dict>
7443 <key>begin</key>
7444 <string>\.\.\.</string>
7445 <key>beginCaptures</key>
7446 <dict>
7447 <key>0</key>
7448 <dict>
7449 <key>name</key>
7450 <string>keyword.operator.spread.ts</string>
7451 </dict>
7452 </dict>
7453 <key>end</key>
7454 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
7455 <key>patterns</key>
7456 <array>
7457 <dict>
7458 <key>include</key>
7459 <string>#type</string>
7460 </dict>
7461 </array>
7462 </dict>
7463 <dict>
7464 <key>include</key>
7465 <string>#punctuation-comma</string>
7466 </dict>
7467 <dict>
7468 <key>include</key>
7469 <string>#punctuation-semicolon</string>
7470 </dict>
7471 <dict>
7472 <key>include</key>
7473 <string>#type</string>
7474 </dict>
7475 </array>
7476 </dict>
7477 <key>type-conditional</key>
7478 <dict>
7479 <key>patterns</key>
7480 <array>
7481 <dict>
7482 <key>begin</key>
7483 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
7484 <key>beginCaptures</key>
7485 <dict>
7486 <key>1</key>
7487 <dict>
7488 <key>name</key>
7489 <string>storage.modifier.ts</string>
7490 </dict>
7491 </dict>
7492 <key>end</key>
7493 <string>(?&lt;=:)</string>
7494 <key>patterns</key>
7495 <array>
7496 <dict>
7497 <key>begin</key>
7498 <string>\?</string>
7499 <key>beginCaptures</key>
7500 <dict>
7501 <key>0</key>
7502 <dict>
7503 <key>name</key>
7504 <string>keyword.operator.ternary.ts</string>
7505 </dict>
7506 </dict>
7507 <key>end</key>
7508 <string>:</string>
7509 <key>endCaptures</key>
7510 <dict>
7511 <key>0</key>
7512 <dict>
7513 <key>name</key>
7514 <string>keyword.operator.ternary.ts</string>
7515 </dict>
7516 </dict>
7517 <key>patterns</key>
7518 <array>
7519 <dict>
7520 <key>include</key>
7521 <string>#type</string>
7522 </dict>
7523 </array>
7524 </dict>
7525 <dict>
7526 <key>include</key>
7527 <string>#type</string>
7528 </dict>
7529 </array>
7530 </dict>
7531 </array>
7532 </dict>
7533 <key>type-paren-or-function-parameters</key>
7534 <dict>
7535 <key>name</key>
7536 <string>meta.type.paren.cover.ts</string>
7537 <key>begin</key>
7538 <string>\(</string>
7539 <key>beginCaptures</key>
7540 <dict>
7541 <key>0</key>
7542 <dict>
7543 <key>name</key>
7544 <string>meta.brace.round.ts</string>
7545 </dict>
7546 </dict>
7547 <key>end</key>
7548 <string>\)</string>
7549 <key>endCaptures</key>
7550 <dict>
7551 <key>0</key>
7552 <dict>
7553 <key>name</key>
7554 <string>meta.brace.round.ts</string>
7555 </dict>
7556 </dict>
7557 <key>patterns</key>
7558 <array>
7559 <dict>
7560 <key>match</key>
7561 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
7562 (&lt;) |
7563 ([(]\s*(
7564 ([)]) |
7565 (\.\.\.) |
7566 ([_$[:alnum:]]+\s*(
7567 ([:,?=])|
7568 ([)]\s*=&gt;)
7569 ))
7570 ))
7571)) |
7572(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
7573(:\s*((&lt;\s*$)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))</string>
7574 <key>captures</key>
7575 <dict>
7576 <key>1</key>
7577 <dict>
7578 <key>name</key>
7579 <string>storage.modifier.ts</string>
7580 </dict>
7581 <key>2</key>
7582 <dict>
7583 <key>name</key>
7584 <string>keyword.operator.rest.ts</string>
7585 </dict>
7586 <key>3</key>
7587 <dict>
7588 <key>name</key>
7589 <string>entity.name.function.ts variable.language.this.ts</string>
7590 </dict>
7591 <key>4</key>
7592 <dict>
7593 <key>name</key>
7594 <string>entity.name.function.ts</string>
7595 </dict>
7596 <key>5</key>
7597 <dict>
7598 <key>name</key>
7599 <string>keyword.operator.optional.ts</string>
7600 </dict>
7601 </dict>
7602 </dict>
7603 <dict>
7604 <key>match</key>
7605 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:)</string>
7606 <key>captures</key>
7607 <dict>
7608 <key>1</key>
7609 <dict>
7610 <key>name</key>
7611 <string>storage.modifier.ts</string>
7612 </dict>
7613 <key>2</key>
7614 <dict>
7615 <key>name</key>
7616 <string>keyword.operator.rest.ts</string>
7617 </dict>
7618 <key>3</key>
7619 <dict>
7620 <key>name</key>
7621 <string>variable.parameter.ts variable.language.this.ts</string>
7622 </dict>
7623 <key>4</key>
7624 <dict>
7625 <key>name</key>
7626 <string>variable.parameter.ts</string>
7627 </dict>
7628 <key>5</key>
7629 <dict>
7630 <key>name</key>
7631 <string>keyword.operator.optional.ts</string>
7632 </dict>
7633 </dict>
7634 </dict>
7635 <dict>
7636 <key>include</key>
7637 <string>#type-annotation</string>
7638 </dict>
7639 <dict>
7640 <key>name</key>
7641 <string>punctuation.separator.parameter.ts</string>
7642 <key>match</key>
7643 <string>,</string>
7644 </dict>
7645 <dict>
7646 <key>include</key>
7647 <string>#type</string>
7648 </dict>
7649 </array>
7650 </dict>
7651 <key>type-fn-type-parameters</key>
7652 <dict>
7653 <key>patterns</key>
7654 <array>
7655 <dict>
7656 <key>begin</key>
7657 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
7658 <key>beginCaptures</key>
7659 <dict>
7660 <key>1</key>
7661 <dict>
7662 <key>name</key>
7663 <string>meta.type.constructor.ts storage.modifier.ts</string>
7664 </dict>
7665 <key>2</key>
7666 <dict>
7667 <key>name</key>
7668 <string>meta.type.constructor.ts keyword.control.new.ts</string>
7669 </dict>
7670 </dict>
7671 <key>end</key>
7672 <string>(?&lt;=&gt;)</string>
7673 <key>patterns</key>
7674 <array>
7675 <dict>
7676 <key>include</key>
7677 <string>#comment</string>
7678 </dict>
7679 <dict>
7680 <key>include</key>
7681 <string>#type-parameters</string>
7682 </dict>
7683 </array>
7684 </dict>
7685 <dict>
7686 <key>name</key>
7687 <string>meta.type.constructor.ts</string>
7688 <key>begin</key>
7689 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
7690 <key>beginCaptures</key>
7691 <dict>
7692 <key>1</key>
7693 <dict>
7694 <key>name</key>
7695 <string>storage.modifier.ts</string>
7696 </dict>
7697 <key>2</key>
7698 <dict>
7699 <key>name</key>
7700 <string>keyword.control.new.ts</string>
7701 </dict>
7702 </dict>
7703 <key>end</key>
7704 <string>(?&lt;=\))</string>
7705 <key>patterns</key>
7706 <array>
7707 <dict>
7708 <key>include</key>
7709 <string>#function-parameters</string>
7710 </dict>
7711 </array>
7712 </dict>
7713 <dict>
7714 <key>name</key>
7715 <string>meta.type.function.ts</string>
7716 <key>begin</key>
7717 <string>(?x)(
7718 (?=
7719 [(]\s*(
7720 ([)]) |
7721 (\.\.\.) |
7722 ([_$[:alnum:]]+\s*(
7723 ([:,?=])|
7724 ([)]\s*=&gt;)
7725 ))
7726 )
7727 )
7728)</string>
7729 <key>end</key>
7730 <string>(?&lt;=\))</string>
7731 <key>patterns</key>
7732 <array>
7733 <dict>
7734 <key>include</key>
7735 <string>#function-parameters</string>
7736 </dict>
7737 </array>
7738 </dict>
7739 </array>
7740 </dict>
7741 <key>type-function-return-type</key>
7742 <dict>
7743 <key>patterns</key>
7744 <array>
7745 <dict>
7746 <key>name</key>
7747 <string>meta.type.function.return.ts</string>
7748 <key>begin</key>
7749 <string>(=&gt;)(?=\s*\S)</string>
7750 <key>beginCaptures</key>
7751 <dict>
7752 <key>1</key>
7753 <dict>
7754 <key>name</key>
7755 <string>storage.type.function.arrow.ts</string>
7756 </dict>
7757 </dict>
7758 <key>end</key>
7759 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])(?=[,\]\)\{\}=;&gt;:\?]|//|$)</string>
7760 <key>patterns</key>
7761 <array>
7762 <dict>
7763 <key>include</key>
7764 <string>#type-function-return-type-core</string>
7765 </dict>
7766 </array>
7767 </dict>
7768 <dict>
7769 <key>name</key>
7770 <string>meta.type.function.return.ts</string>
7771 <key>begin</key>
7772 <string>=&gt;</string>
7773 <key>beginCaptures</key>
7774 <dict>
7775 <key>0</key>
7776 <dict>
7777 <key>name</key>
7778 <string>storage.type.function.arrow.ts</string>
7779 </dict>
7780 </dict>
7781 <key>end</key>
7782 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])((?=[,\]\)\{\}=;:\?&gt;]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7783 <key>patterns</key>
7784 <array>
7785 <dict>
7786 <key>include</key>
7787 <string>#type-function-return-type-core</string>
7788 </dict>
7789 </array>
7790 </dict>
7791 </array>
7792 </dict>
7793 <key>type-function-return-type-core</key>
7794 <dict>
7795 <key>patterns</key>
7796 <array>
7797 <dict>
7798 <key>include</key>
7799 <string>#comment</string>
7800 </dict>
7801 <dict>
7802 <key>begin</key>
7803 <string>(?&lt;==&gt;)(?=\s*\{)</string>
7804 <key>end</key>
7805 <string>(?&lt;=\})</string>
7806 <key>patterns</key>
7807 <array>
7808 <dict>
7809 <key>include</key>
7810 <string>#type-object</string>
7811 </dict>
7812 </array>
7813 </dict>
7814 <dict>
7815 <key>include</key>
7816 <string>#type-predicate-operator</string>
7817 </dict>
7818 <dict>
7819 <key>include</key>
7820 <string>#type</string>
7821 </dict>
7822 </array>
7823 </dict>
7824 <key>type-operators</key>
7825 <dict>
7826 <key>patterns</key>
7827 <array>
7828 <dict>
7829 <key>include</key>
7830 <string>#typeof-operator</string>
7831 </dict>
7832 <dict>
7833 <key>include</key>
7834 <string>#type-infer</string>
7835 </dict>
7836 <dict>
7837 <key>begin</key>
7838 <string>([&amp;|])(?=\s*\{)</string>
7839 <key>beginCaptures</key>
7840 <dict>
7841 <key>0</key>
7842 <dict>
7843 <key>name</key>
7844 <string>keyword.operator.type.ts</string>
7845 </dict>
7846 </dict>
7847 <key>end</key>
7848 <string>(?&lt;=\})</string>
7849 <key>patterns</key>
7850 <array>
7851 <dict>
7852 <key>include</key>
7853 <string>#type-object</string>
7854 </dict>
7855 </array>
7856 </dict>
7857 <dict>
7858 <key>begin</key>
7859 <string>[&amp;|]</string>
7860 <key>beginCaptures</key>
7861 <dict>
7862 <key>0</key>
7863 <dict>
7864 <key>name</key>
7865 <string>keyword.operator.type.ts</string>
7866 </dict>
7867 </dict>
7868 <key>end</key>
7869 <string>(?=\S)</string>
7870 </dict>
7871 <dict>
7872 <key>name</key>
7873 <string>keyword.operator.expression.keyof.ts</string>
7874 <key>match</key>
7875 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7876 </dict>
7877 <dict>
7878 <key>name</key>
7879 <string>keyword.operator.ternary.ts</string>
7880 <key>match</key>
7881 <string>(\?|\:)</string>
7882 </dict>
7883 <dict>
7884 <key>name</key>
7885 <string>keyword.operator.expression.import.ts</string>
7886 <key>match</key>
7887 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*\()</string>
7888 </dict>
7889 </array>
7890 </dict>
7891 <key>type-infer</key>
7892 <dict>
7893 <key>patterns</key>
7894 <array>
7895 <dict>
7896 <key>match</key>
7897 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))?</string>
7898 <key>name</key>
7899 <string>meta.type.infer.ts</string>
7900 <key>captures</key>
7901 <dict>
7902 <key>1</key>
7903 <dict>
7904 <key>name</key>
7905 <string>keyword.operator.expression.infer.ts</string>
7906 </dict>
7907 <key>2</key>
7908 <dict>
7909 <key>name</key>
7910 <string>entity.name.type.ts</string>
7911 </dict>
7912 <key>3</key>
7913 <dict>
7914 <key>name</key>
7915 <string>keyword.operator.expression.extends.ts</string>
7916 </dict>
7917 </dict>
7918 </dict>
7919 </array>
7920 </dict>
7921 <key>type-predicate-operator</key>
7922 <dict>
7923 <key>patterns</key>
7924 <array>
7925 <dict>
7926 <key>match</key>
7927 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7928 <key>captures</key>
7929 <dict>
7930 <key>1</key>
7931 <dict>
7932 <key>name</key>
7933 <string>keyword.operator.type.asserts.ts</string>
7934 </dict>
7935 <key>2</key>
7936 <dict>
7937 <key>name</key>
7938 <string>variable.parameter.ts variable.language.this.ts</string>
7939 </dict>
7940 <key>3</key>
7941 <dict>
7942 <key>name</key>
7943 <string>variable.parameter.ts</string>
7944 </dict>
7945 <key>4</key>
7946 <dict>
7947 <key>name</key>
7948 <string>keyword.operator.expression.is.ts</string>
7949 </dict>
7950 </dict>
7951 </dict>
7952 <dict>
7953 <key>match</key>
7954 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7955 <key>captures</key>
7956 <dict>
7957 <key>1</key>
7958 <dict>
7959 <key>name</key>
7960 <string>keyword.operator.type.asserts.ts</string>
7961 </dict>
7962 <key>2</key>
7963 <dict>
7964 <key>name</key>
7965 <string>variable.parameter.ts variable.language.this.ts</string>
7966 </dict>
7967 <key>3</key>
7968 <dict>
7969 <key>name</key>
7970 <string>variable.parameter.ts</string>
7971 </dict>
7972 </dict>
7973 </dict>
7974 <dict>
7975 <key>name</key>
7976 <string>keyword.operator.type.asserts.ts</string>
7977 <key>match</key>
7978 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7979 </dict>
7980 <dict>
7981 <key>name</key>
7982 <string>keyword.operator.expression.is.ts</string>
7983 <key>match</key>
7984 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7985 </dict>
7986 </array>
7987 </dict>
7988 <key>type-name</key>
7989 <dict>
7990 <key>patterns</key>
7991 <array>
7992 <dict>
7993 <key>begin</key>
7994 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(&lt;)</string>
7995 <key>captures</key>
7996 <dict>
7997 <key>1</key>
7998 <dict>
7999 <key>name</key>
8000 <string>entity.name.type.module.ts</string>
8001 </dict>
8002 <key>2</key>
8003 <dict>
8004 <key>name</key>
8005 <string>punctuation.accessor.ts</string>
8006 </dict>
8007 <key>3</key>
8008 <dict>
8009 <key>name</key>
8010 <string>punctuation.accessor.optional.ts</string>
8011 </dict>
8012 <key>4</key>
8013 <dict>
8014 <key>name</key>
8015 <string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
8016 </dict>
8017 </dict>
8018 <key>end</key>
8019 <string>(&gt;)</string>
8020 <key>endCaptures</key>
8021 <dict>
8022 <key>1</key>
8023 <dict>
8024 <key>name</key>
8025 <string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
8026 </dict>
8027 </dict>
8028 <key>contentName</key>
8029 <string>meta.type.parameters.ts</string>
8030 <key>patterns</key>
8031 <array>
8032 <dict>
8033 <key>include</key>
8034 <string>#type-arguments-body</string>
8035 </dict>
8036 </array>
8037 </dict>
8038 <dict>
8039 <key>begin</key>
8040 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)</string>
8041 <key>beginCaptures</key>
8042 <dict>
8043 <key>1</key>
8044 <dict>
8045 <key>name</key>
8046 <string>entity.name.type.ts</string>
8047 </dict>
8048 <key>2</key>
8049 <dict>
8050 <key>name</key>
8051 <string>meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts</string>
8052 </dict>
8053 </dict>
8054 <key>end</key>
8055 <string>(&gt;)</string>
8056 <key>endCaptures</key>
8057 <dict>
8058 <key>1</key>
8059 <dict>
8060 <key>name</key>
8061 <string>meta.type.parameters.ts punctuation.definition.typeparameters.end.ts</string>
8062 </dict>
8063 </dict>
8064 <key>contentName</key>
8065 <string>meta.type.parameters.ts</string>
8066 <key>patterns</key>
8067 <array>
8068 <dict>
8069 <key>include</key>
8070 <string>#type-arguments-body</string>
8071 </dict>
8072 </array>
8073 </dict>
8074 <dict>
8075 <key>match</key>
8076 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8077 <key>captures</key>
8078 <dict>
8079 <key>1</key>
8080 <dict>
8081 <key>name</key>
8082 <string>entity.name.type.module.ts</string>
8083 </dict>
8084 <key>2</key>
8085 <dict>
8086 <key>name</key>
8087 <string>punctuation.accessor.ts</string>
8088 </dict>
8089 <key>3</key>
8090 <dict>
8091 <key>name</key>
8092 <string>punctuation.accessor.optional.ts</string>
8093 </dict>
8094 </dict>
8095 </dict>
8096 <dict>
8097 <key>name</key>
8098 <string>entity.name.type.ts</string>
8099 <key>match</key>
8100 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
8101 </dict>
8102 </array>
8103 </dict>
8104 <key>punctuation-comma</key>
8105 <dict>
8106 <key>name</key>
8107 <string>punctuation.separator.comma.ts</string>
8108 <key>match</key>
8109 <string>,</string>
8110 </dict>
8111 <key>punctuation-semicolon</key>
8112 <dict>
8113 <key>name</key>
8114 <string>punctuation.terminator.statement.ts</string>
8115 <key>match</key>
8116 <string>;</string>
8117 </dict>
8118 <key>punctuation-accessor</key>
8119 <dict>
8120 <key>match</key>
8121 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8122 <key>captures</key>
8123 <dict>
8124 <key>1</key>
8125 <dict>
8126 <key>name</key>
8127 <string>punctuation.accessor.ts</string>
8128 </dict>
8129 <key>2</key>
8130 <dict>
8131 <key>name</key>
8132 <string>punctuation.accessor.optional.ts</string>
8133 </dict>
8134 </dict>
8135 </dict>
8136 <key>string</key>
8137 <dict>
8138 <key>patterns</key>
8139 <array>
8140 <dict>
8141 <key>include</key>
8142 <string>#qstring-single</string>
8143 </dict>
8144 <dict>
8145 <key>include</key>
8146 <string>#qstring-double</string>
8147 </dict>
8148 <dict>
8149 <key>include</key>
8150 <string>#template</string>
8151 </dict>
8152 </array>
8153 </dict>
8154 <key>qstring-double</key>
8155 <dict>
8156 <key>name</key>
8157 <string>string.quoted.double.ts</string>
8158 <key>begin</key>
8159 <string>"</string>
8160 <key>beginCaptures</key>
8161 <dict>
8162 <key>0</key>
8163 <dict>
8164 <key>name</key>
8165 <string>punctuation.definition.string.begin.ts</string>
8166 </dict>
8167 </dict>
8168 <key>end</key>
8169 <string>(")|((?:[^\\\n])$)</string>
8170 <key>endCaptures</key>
8171 <dict>
8172 <key>1</key>
8173 <dict>
8174 <key>name</key>
8175 <string>punctuation.definition.string.end.ts</string>
8176 </dict>
8177 <key>2</key>
8178 <dict>
8179 <key>name</key>
8180 <string>invalid.illegal.newline.ts</string>
8181 </dict>
8182 </dict>
8183 <key>patterns</key>
8184 <array>
8185 <dict>
8186 <key>include</key>
8187 <string>#string-character-escape</string>
8188 </dict>
8189 </array>
8190 </dict>
8191 <key>qstring-single</key>
8192 <dict>
8193 <key>name</key>
8194 <string>string.quoted.single.ts</string>
8195 <key>begin</key>
8196 <string>'</string>
8197 <key>beginCaptures</key>
8198 <dict>
8199 <key>0</key>
8200 <dict>
8201 <key>name</key>
8202 <string>punctuation.definition.string.begin.ts</string>
8203 </dict>
8204 </dict>
8205 <key>end</key>
8206 <string>(\')|((?:[^\\\n])$)</string>
8207 <key>endCaptures</key>
8208 <dict>
8209 <key>1</key>
8210 <dict>
8211 <key>name</key>
8212 <string>punctuation.definition.string.end.ts</string>
8213 </dict>
8214 <key>2</key>
8215 <dict>
8216 <key>name</key>
8217 <string>invalid.illegal.newline.ts</string>
8218 </dict>
8219 </dict>
8220 <key>patterns</key>
8221 <array>
8222 <dict>
8223 <key>include</key>
8224 <string>#string-character-escape</string>
8225 </dict>
8226 </array>
8227 </dict>
8228 <key>string-character-escape</key>
8229 <dict>
8230 <key>name</key>
8231 <string>constant.character.escape.ts</string>
8232 <key>match</key>
8233 <string>\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>
8234 </dict>
8235 <key>template</key>
8236 <dict>
8237 <key>patterns</key>
8238 <array>
8239 <dict>
8240 <key>include</key>
8241 <string>#template-call</string>
8242 </dict>
8243 <dict>
8244 <key>contentName</key>
8245 <string>string.template.ts</string>
8246 <key>begin</key>
8247 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8248 <key>beginCaptures</key>
8249 <dict>
8250 <key>1</key>
8251 <dict>
8252 <key>name</key>
8253 <string>entity.name.function.tagged-template.ts</string>
8254 </dict>
8255 <key>2</key>
8256 <dict>
8257 <key>name</key>
8258 <string>string.template.ts punctuation.definition.string.template.begin.ts</string>
8259 </dict>
8260 </dict>
8261 <key>end</key>
8262 <string>`</string>
8263 <key>endCaptures</key>
8264 <dict>
8265 <key>0</key>
8266 <dict>
8267 <key>name</key>
8268 <string>string.template.ts punctuation.definition.string.template.end.ts</string>
8269 </dict>
8270 </dict>
8271 <key>patterns</key>
8272 <array>
8273 <dict>
8274 <key>include</key>
8275 <string>#template-substitution-element</string>
8276 </dict>
8277 <dict>
8278 <key>include</key>
8279 <string>#string-character-escape</string>
8280 </dict>
8281 </array>
8282 </dict>
8283 </array>
8284 </dict>
8285 <key>template-call</key>
8286 <dict>
8287 <key>patterns</key>
8288 <array>
8289 <dict>
8290 <key>begin</key>
8291 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8292 <key>end</key>
8293 <string>(?=`)</string>
8294 <key>patterns</key>
8295 <array>
8296 <dict>
8297 <key>begin</key>
8298 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
8299 <key>end</key>
8300 <string>(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8301 <key>patterns</key>
8302 <array>
8303 <dict>
8304 <key>include</key>
8305 <string>#support-function-call-identifiers</string>
8306 </dict>
8307 <dict>
8308 <key>name</key>
8309 <string>entity.name.function.tagged-template.ts</string>
8310 <key>match</key>
8311 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
8312 </dict>
8313 </array>
8314 </dict>
8315 <dict>
8316 <key>include</key>
8317 <string>#type-arguments</string>
8318 </dict>
8319 </array>
8320 </dict>
8321 <dict>
8322 <key>begin</key>
8323 <string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
8324 <key>beginCaptures</key>
8325 <dict>
8326 <key>1</key>
8327 <dict>
8328 <key>name</key>
8329 <string>entity.name.function.tagged-template.ts</string>
8330 </dict>
8331 </dict>
8332 <key>end</key>
8333 <string>(?=`)</string>
8334 <key>patterns</key>
8335 <array>
8336 <dict>
8337 <key>include</key>
8338 <string>#type-arguments</string>
8339 </dict>
8340 </array>
8341 </dict>
8342 </array>
8343 </dict>
8344 <key>template-substitution-element</key>
8345 <dict>
8346 <key>name</key>
8347 <string>meta.template.expression.ts</string>
8348 <key>begin</key>
8349 <string>\$\{</string>
8350 <key>beginCaptures</key>
8351 <dict>
8352 <key>0</key>
8353 <dict>
8354 <key>name</key>
8355 <string>punctuation.definition.template-expression.begin.ts</string>
8356 </dict>
8357 </dict>
8358 <key>end</key>
8359 <string>\}</string>
8360 <key>endCaptures</key>
8361 <dict>
8362 <key>0</key>
8363 <dict>
8364 <key>name</key>
8365 <string>punctuation.definition.template-expression.end.ts</string>
8366 </dict>
8367 </dict>
8368 <key>patterns</key>
8369 <array>
8370 <dict>
8371 <key>include</key>
8372 <string>#expression</string>
8373 </dict>
8374 </array>
8375 <key>contentName</key>
8376 <string>meta.embedded.line.ts</string>
8377 </dict>
8378 <key>type-string</key>
8379 <dict>
8380 <key>patterns</key>
8381 <array>
8382 <dict>
8383 <key>include</key>
8384 <string>#qstring-single</string>
8385 </dict>
8386 <dict>
8387 <key>include</key>
8388 <string>#qstring-double</string>
8389 </dict>
8390 <dict>
8391 <key>include</key>
8392 <string>#template-type</string>
8393 </dict>
8394 </array>
8395 </dict>
8396 <key>template-type</key>
8397 <dict>
8398 <key>patterns</key>
8399 <array>
8400 <dict>
8401 <key>include</key>
8402 <string>#template-call</string>
8403 </dict>
8404 <dict>
8405 <key>contentName</key>
8406 <string>string.template.ts</string>
8407 <key>begin</key>
8408 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8409 <key>beginCaptures</key>
8410 <dict>
8411 <key>1</key>
8412 <dict>
8413 <key>name</key>
8414 <string>entity.name.function.tagged-template.ts</string>
8415 </dict>
8416 <key>2</key>
8417 <dict>
8418 <key>name</key>
8419 <string>string.template.ts punctuation.definition.string.template.begin.ts</string>
8420 </dict>
8421 </dict>
8422 <key>end</key>
8423 <string>`</string>
8424 <key>endCaptures</key>
8425 <dict>
8426 <key>0</key>
8427 <dict>
8428 <key>name</key>
8429 <string>string.template.ts punctuation.definition.string.template.end.ts</string>
8430 </dict>
8431 </dict>
8432 <key>patterns</key>
8433 <array>
8434 <dict>
8435 <key>include</key>
8436 <string>#template-type-substitution-element</string>
8437 </dict>
8438 <dict>
8439 <key>include</key>
8440 <string>#string-character-escape</string>
8441 </dict>
8442 </array>
8443 </dict>
8444 </array>
8445 </dict>
8446 <key>template-type-substitution-element</key>
8447 <dict>
8448 <key>name</key>
8449 <string>meta.template.expression.ts</string>
8450 <key>begin</key>
8451 <string>\$\{</string>
8452 <key>beginCaptures</key>
8453 <dict>
8454 <key>0</key>
8455 <dict>
8456 <key>name</key>
8457 <string>punctuation.definition.template-expression.begin.ts</string>
8458 </dict>
8459 </dict>
8460 <key>end</key>
8461 <string>\}</string>
8462 <key>endCaptures</key>
8463 <dict>
8464 <key>0</key>
8465 <dict>
8466 <key>name</key>
8467 <string>punctuation.definition.template-expression.end.ts</string>
8468 </dict>
8469 </dict>
8470 <key>patterns</key>
8471 <array>
8472 <dict>
8473 <key>include</key>
8474 <string>#type</string>
8475 </dict>
8476 </array>
8477 <key>contentName</key>
8478 <string>meta.embedded.line.ts</string>
8479 </dict>
8480 <key>regex</key>
8481 <dict>
8482 <key>patterns</key>
8483 <array>
8484 <dict>
8485 <key>name</key>
8486 <string>string.regexp.ts</string>
8487 <key>begin</key>
8488 <string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8489 <key>beginCaptures</key>
8490 <dict>
8491 <key>1</key>
8492 <dict>
8493 <key>name</key>
8494 <string>punctuation.definition.string.begin.ts</string>
8495 </dict>
8496 </dict>
8497 <key>end</key>
8498 <string>(/)([dgimsuvy]*)</string>
8499 <key>endCaptures</key>
8500 <dict>
8501 <key>1</key>
8502 <dict>
8503 <key>name</key>
8504 <string>punctuation.definition.string.end.ts</string>
8505 </dict>
8506 <key>2</key>
8507 <dict>
8508 <key>name</key>
8509 <string>keyword.other.ts</string>
8510 </dict>
8511 </dict>
8512 <key>patterns</key>
8513 <array>
8514 <dict>
8515 <key>include</key>
8516 <string>#regexp</string>
8517 </dict>
8518 </array>
8519 </dict>
8520 <dict>
8521 <key>name</key>
8522 <string>string.regexp.ts</string>
8523 <key>begin</key>
8524 <string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8525 <key>beginCaptures</key>
8526 <dict>
8527 <key>0</key>
8528 <dict>
8529 <key>name</key>
8530 <string>punctuation.definition.string.begin.ts</string>
8531 </dict>
8532 </dict>
8533 <key>end</key>
8534 <string>(/)([dgimsuvy]*)</string>
8535 <key>endCaptures</key>
8536 <dict>
8537 <key>1</key>
8538 <dict>
8539 <key>name</key>
8540 <string>punctuation.definition.string.end.ts</string>
8541 </dict>
8542 <key>2</key>
8543 <dict>
8544 <key>name</key>
8545 <string>keyword.other.ts</string>
8546 </dict>
8547 </dict>
8548 <key>patterns</key>
8549 <array>
8550 <dict>
8551 <key>include</key>
8552 <string>#regexp</string>
8553 </dict>
8554 </array>
8555 </dict>
8556 </array>
8557 </dict>
8558 <key>regexp</key>
8559 <dict>
8560 <key>patterns</key>
8561 <array>
8562 <dict>
8563 <key>name</key>
8564 <string>keyword.control.anchor.regexp</string>
8565 <key>match</key>
8566 <string>\\[bB]|\^|\$</string>
8567 </dict>
8568 <dict>
8569 <key>match</key>
8570 <string>\\[1-9]\d*|\\k&lt;([a-zA-Z_$][\w$]*)&gt;</string>
8571 <key>captures</key>
8572 <dict>
8573 <key>0</key>
8574 <dict>
8575 <key>name</key>
8576 <string>keyword.other.back-reference.regexp</string>
8577 </dict>
8578 <key>1</key>
8579 <dict>
8580 <key>name</key>
8581 <string>variable.other.regexp</string>
8582 </dict>
8583 </dict>
8584 </dict>
8585 <dict>
8586 <key>name</key>
8587 <string>keyword.operator.quantifier.regexp</string>
8588 <key>match</key>
8589 <string>[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??</string>
8590 </dict>
8591 <dict>
8592 <key>name</key>
8593 <string>keyword.operator.or.regexp</string>
8594 <key>match</key>
8595 <string>\|</string>
8596 </dict>
8597 <dict>
8598 <key>name</key>
8599 <string>meta.group.assertion.regexp</string>
8600 <key>begin</key>
8601 <string>(\()((\?=)|(\?!)|(\?&lt;=)|(\?&lt;!))</string>
8602 <key>beginCaptures</key>
8603 <dict>
8604 <key>1</key>
8605 <dict>
8606 <key>name</key>
8607 <string>punctuation.definition.group.regexp</string>
8608 </dict>
8609 <key>2</key>
8610 <dict>
8611 <key>name</key>
8612 <string>punctuation.definition.group.assertion.regexp</string>
8613 </dict>
8614 <key>3</key>
8615 <dict>
8616 <key>name</key>
8617 <string>meta.assertion.look-ahead.regexp</string>
8618 </dict>
8619 <key>4</key>
8620 <dict>
8621 <key>name</key>
8622 <string>meta.assertion.negative-look-ahead.regexp</string>
8623 </dict>
8624 <key>5</key>
8625 <dict>
8626 <key>name</key>
8627 <string>meta.assertion.look-behind.regexp</string>
8628 </dict>
8629 <key>6</key>
8630 <dict>
8631 <key>name</key>
8632 <string>meta.assertion.negative-look-behind.regexp</string>
8633 </dict>
8634 </dict>
8635 <key>end</key>
8636 <string>(\))</string>
8637 <key>endCaptures</key>
8638 <dict>
8639 <key>1</key>
8640 <dict>
8641 <key>name</key>
8642 <string>punctuation.definition.group.regexp</string>
8643 </dict>
8644 </dict>
8645 <key>patterns</key>
8646 <array>
8647 <dict>
8648 <key>include</key>
8649 <string>#regexp</string>
8650 </dict>
8651 </array>
8652 </dict>
8653 <dict>
8654 <key>name</key>
8655 <string>meta.group.regexp</string>
8656 <key>begin</key>
8657 <string>\((?:(\?:)|(?:\?&lt;([a-zA-Z_$][\w$]*)&gt;))?</string>
8658 <key>beginCaptures</key>
8659 <dict>
8660 <key>0</key>
8661 <dict>
8662 <key>name</key>
8663 <string>punctuation.definition.group.regexp</string>
8664 </dict>
8665 <key>1</key>
8666 <dict>
8667 <key>name</key>
8668 <string>punctuation.definition.group.no-capture.regexp</string>
8669 </dict>
8670 <key>2</key>
8671 <dict>
8672 <key>name</key>
8673 <string>variable.other.regexp</string>
8674 </dict>
8675 </dict>
8676 <key>end</key>
8677 <string>\)</string>
8678 <key>endCaptures</key>
8679 <dict>
8680 <key>0</key>
8681 <dict>
8682 <key>name</key>
8683 <string>punctuation.definition.group.regexp</string>
8684 </dict>
8685 </dict>
8686 <key>patterns</key>
8687 <array>
8688 <dict>
8689 <key>include</key>
8690 <string>#regexp</string>
8691 </dict>
8692 </array>
8693 </dict>
8694 <dict>
8695 <key>name</key>
8696 <string>constant.other.character-class.set.regexp</string>
8697 <key>begin</key>
8698 <string>(\[)(\^)?</string>
8699 <key>beginCaptures</key>
8700 <dict>
8701 <key>1</key>
8702 <dict>
8703 <key>name</key>
8704 <string>punctuation.definition.character-class.regexp</string>
8705 </dict>
8706 <key>2</key>
8707 <dict>
8708 <key>name</key>
8709 <string>keyword.operator.negation.regexp</string>
8710 </dict>
8711 </dict>
8712 <key>end</key>
8713 <string>(\])</string>
8714 <key>endCaptures</key>
8715 <dict>
8716 <key>1</key>
8717 <dict>
8718 <key>name</key>
8719 <string>punctuation.definition.character-class.regexp</string>
8720 </dict>
8721 </dict>
8722 <key>patterns</key>
8723 <array>
8724 <dict>
8725 <key>name</key>
8726 <string>constant.other.character-class.range.regexp</string>
8727 <key>match</key>
8728 <string>(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))</string>
8729 <key>captures</key>
8730 <dict>
8731 <key>1</key>
8732 <dict>
8733 <key>name</key>
8734 <string>constant.character.numeric.regexp</string>
8735 </dict>
8736 <key>2</key>
8737 <dict>
8738 <key>name</key>
8739 <string>constant.character.control.regexp</string>
8740 </dict>
8741 <key>3</key>
8742 <dict>
8743 <key>name</key>
8744 <string>constant.character.escape.backslash.regexp</string>
8745 </dict>
8746 <key>4</key>
8747 <dict>
8748 <key>name</key>
8749 <string>constant.character.numeric.regexp</string>
8750 </dict>
8751 <key>5</key>
8752 <dict>
8753 <key>name</key>
8754 <string>constant.character.control.regexp</string>
8755 </dict>
8756 <key>6</key>
8757 <dict>
8758 <key>name</key>
8759 <string>constant.character.escape.backslash.regexp</string>
8760 </dict>
8761 </dict>
8762 </dict>
8763 <dict>
8764 <key>include</key>
8765 <string>#regex-character-class</string>
8766 </dict>
8767 </array>
8768 </dict>
8769 <dict>
8770 <key>include</key>
8771 <string>#regex-character-class</string>
8772 </dict>
8773 </array>
8774 </dict>
8775 <key>regex-character-class</key>
8776 <dict>
8777 <key>patterns</key>
8778 <array>
8779 <dict>
8780 <key>name</key>
8781 <string>constant.other.character-class.regexp</string>
8782 <key>match</key>
8783 <string>\\[wWsSdDtrnvf]|\.</string>
8784 </dict>
8785 <dict>
8786 <key>name</key>
8787 <string>constant.character.numeric.regexp</string>
8788 <key>match</key>
8789 <string>\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})</string>
8790 </dict>
8791 <dict>
8792 <key>name</key>
8793 <string>constant.character.control.regexp</string>
8794 <key>match</key>
8795 <string>\\c[A-Z]</string>
8796 </dict>
8797 <dict>
8798 <key>name</key>
8799 <string>constant.character.escape.backslash.regexp</string>
8800 <key>match</key>
8801 <string>\\.</string>
8802 </dict>
8803 </array>
8804 </dict>
8805 <key>comment</key>
8806 <dict>
8807 <key>patterns</key>
8808 <array>
8809 <dict>
8810 <key>name</key>
8811 <string>comment.block.documentation.ts</string>
8812 <key>begin</key>
8813 <string>/\*\*(?!/)</string>
8814 <key>beginCaptures</key>
8815 <dict>
8816 <key>0</key>
8817 <dict>
8818 <key>name</key>
8819 <string>punctuation.definition.comment.ts</string>
8820 </dict>
8821 </dict>
8822 <key>end</key>
8823 <string>\*/</string>
8824 <key>endCaptures</key>
8825 <dict>
8826 <key>0</key>
8827 <dict>
8828 <key>name</key>
8829 <string>punctuation.definition.comment.ts</string>
8830 </dict>
8831 </dict>
8832 <key>patterns</key>
8833 <array>
8834 <dict>
8835 <key>include</key>
8836 <string>#docblock</string>
8837 </dict>
8838 </array>
8839 </dict>
8840 <dict>
8841 <key>name</key>
8842 <string>comment.block.ts</string>
8843 <key>begin</key>
8844 <string>(/\*)(?:\s*((@)internal)(?=\s|(\*/)))?</string>
8845 <key>beginCaptures</key>
8846 <dict>
8847 <key>1</key>
8848 <dict>
8849 <key>name</key>
8850 <string>punctuation.definition.comment.ts</string>
8851 </dict>
8852 <key>2</key>
8853 <dict>
8854 <key>name</key>
8855 <string>storage.type.internaldeclaration.ts</string>
8856 </dict>
8857 <key>3</key>
8858 <dict>
8859 <key>name</key>
8860 <string>punctuation.decorator.internaldeclaration.ts</string>
8861 </dict>
8862 </dict>
8863 <key>end</key>
8864 <string>\*/</string>
8865 <key>endCaptures</key>
8866 <dict>
8867 <key>0</key>
8868 <dict>
8869 <key>name</key>
8870 <string>punctuation.definition.comment.ts</string>
8871 </dict>
8872 </dict>
8873 </dict>
8874 <dict>
8875 <key>begin</key>
8876 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8877 <key>beginCaptures</key>
8878 <dict>
8879 <key>1</key>
8880 <dict>
8881 <key>name</key>
8882 <string>punctuation.whitespace.comment.leading.ts</string>
8883 </dict>
8884 <key>2</key>
8885 <dict>
8886 <key>name</key>
8887 <string>comment.line.double-slash.ts</string>
8888 </dict>
8889 <key>3</key>
8890 <dict>
8891 <key>name</key>
8892 <string>punctuation.definition.comment.ts</string>
8893 </dict>
8894 <key>4</key>
8895 <dict>
8896 <key>name</key>
8897 <string>storage.type.internaldeclaration.ts</string>
8898 </dict>
8899 <key>5</key>
8900 <dict>
8901 <key>name</key>
8902 <string>punctuation.decorator.internaldeclaration.ts</string>
8903 </dict>
8904 </dict>
8905 <key>end</key>
8906 <string>(?=$)</string>
8907 <key>contentName</key>
8908 <string>comment.line.double-slash.ts</string>
8909 </dict>
8910 </array>
8911 </dict>
8912 <key>single-line-comment-consuming-line-ending</key>
8913 <dict>
8914 <key>begin</key>
8915 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8916 <key>beginCaptures</key>
8917 <dict>
8918 <key>1</key>
8919 <dict>
8920 <key>name</key>
8921 <string>punctuation.whitespace.comment.leading.ts</string>
8922 </dict>
8923 <key>2</key>
8924 <dict>
8925 <key>name</key>
8926 <string>comment.line.double-slash.ts</string>
8927 </dict>
8928 <key>3</key>
8929 <dict>
8930 <key>name</key>
8931 <string>punctuation.definition.comment.ts</string>
8932 </dict>
8933 <key>4</key>
8934 <dict>
8935 <key>name</key>
8936 <string>storage.type.internaldeclaration.ts</string>
8937 </dict>
8938 <key>5</key>
8939 <dict>
8940 <key>name</key>
8941 <string>punctuation.decorator.internaldeclaration.ts</string>
8942 </dict>
8943 </dict>
8944 <key>end</key>
8945 <string>(?=^)</string>
8946 <key>contentName</key>
8947 <string>comment.line.double-slash.ts</string>
8948 </dict>
8949 <key>directives</key>
8950 <dict>
8951 <key>name</key>
8952 <string>comment.line.triple-slash.directive.ts</string>
8953 <key>begin</key>
8954 <string>^(///)\s*(?=&lt;(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/&gt;\s*$)</string>
8955 <key>beginCaptures</key>
8956 <dict>
8957 <key>1</key>
8958 <dict>
8959 <key>name</key>
8960 <string>punctuation.definition.comment.ts</string>
8961 </dict>
8962 </dict>
8963 <key>end</key>
8964 <string>(?=$)</string>
8965 <key>patterns</key>
8966 <array>
8967 <dict>
8968 <key>name</key>
8969 <string>meta.tag.ts</string>
8970 <key>begin</key>
8971 <string>(&lt;)(reference|amd-dependency|amd-module)</string>
8972 <key>beginCaptures</key>
8973 <dict>
8974 <key>1</key>
8975 <dict>
8976 <key>name</key>
8977 <string>punctuation.definition.tag.directive.ts</string>
8978 </dict>
8979 <key>2</key>
8980 <dict>
8981 <key>name</key>
8982 <string>entity.name.tag.directive.ts</string>
8983 </dict>
8984 </dict>
8985 <key>end</key>
8986 <string>/&gt;</string>
8987 <key>endCaptures</key>
8988 <dict>
8989 <key>0</key>
8990 <dict>
8991 <key>name</key>
8992 <string>punctuation.definition.tag.directive.ts</string>
8993 </dict>
8994 </dict>
8995 <key>patterns</key>
8996 <array>
8997 <dict>
8998 <key>name</key>
8999 <string>entity.other.attribute-name.directive.ts</string>
9000 <key>match</key>
9001 <string>path|types|no-default-lib|lib|name|resolution-mode</string>
9002 </dict>
9003 <dict>
9004 <key>name</key>
9005 <string>keyword.operator.assignment.ts</string>
9006 <key>match</key>
9007 <string>=</string>
9008 </dict>
9009 <dict>
9010 <key>include</key>
9011 <string>#string</string>
9012 </dict>
9013 </array>
9014 </dict>
9015 </array>
9016 </dict>
9017 <key>docblock</key>
9018 <dict>
9019 <key>patterns</key>
9020 <array>
9021 <dict>
9022 <key>match</key>
9023 <string>(?x)
9024((@)(?:access|api))
9025\s+
9026(private|protected|public)
9027\b</string>
9028 <key>captures</key>
9029 <dict>
9030 <key>1</key>
9031 <dict>
9032 <key>name</key>
9033 <string>storage.type.class.jsdoc</string>
9034 </dict>
9035 <key>2</key>
9036 <dict>
9037 <key>name</key>
9038 <string>punctuation.definition.block.tag.jsdoc</string>
9039 </dict>
9040 <key>3</key>
9041 <dict>
9042 <key>name</key>
9043 <string>constant.language.access-type.jsdoc</string>
9044 </dict>
9045 </dict>
9046 </dict>
9047 <dict>
9048 <key>match</key>
9049 <string>(?x)
9050((@)author)
9051\s+
9052(
9053 [^@\s&lt;&gt;*/]
9054 (?:[^@&lt;&gt;*/]|\*[^/])*
9055)
9056(?:
9057 \s*
9058 (&lt;)
9059 ([^&gt;\s]+)
9060 (&gt;)
9061)?</string>
9062 <key>captures</key>
9063 <dict>
9064 <key>1</key>
9065 <dict>
9066 <key>name</key>
9067 <string>storage.type.class.jsdoc</string>
9068 </dict>
9069 <key>2</key>
9070 <dict>
9071 <key>name</key>
9072 <string>punctuation.definition.block.tag.jsdoc</string>
9073 </dict>
9074 <key>3</key>
9075 <dict>
9076 <key>name</key>
9077 <string>entity.name.type.instance.jsdoc</string>
9078 </dict>
9079 <key>4</key>
9080 <dict>
9081 <key>name</key>
9082 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9083 </dict>
9084 <key>5</key>
9085 <dict>
9086 <key>name</key>
9087 <string>constant.other.email.link.underline.jsdoc</string>
9088 </dict>
9089 <key>6</key>
9090 <dict>
9091 <key>name</key>
9092 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9093 </dict>
9094 </dict>
9095 </dict>
9096 <dict>
9097 <key>match</key>
9098 <string>(?x)
9099((@)borrows) \s+
9100((?:[^@\s*/]|\*[^/])+) # &lt;that namepath&gt;
9101\s+ (as) \s+ # as
9102((?:[^@\s*/]|\*[^/])+) # &lt;this namepath&gt;</string>
9103 <key>captures</key>
9104 <dict>
9105 <key>1</key>
9106 <dict>
9107 <key>name</key>
9108 <string>storage.type.class.jsdoc</string>
9109 </dict>
9110 <key>2</key>
9111 <dict>
9112 <key>name</key>
9113 <string>punctuation.definition.block.tag.jsdoc</string>
9114 </dict>
9115 <key>3</key>
9116 <dict>
9117 <key>name</key>
9118 <string>entity.name.type.instance.jsdoc</string>
9119 </dict>
9120 <key>4</key>
9121 <dict>
9122 <key>name</key>
9123 <string>keyword.operator.control.jsdoc</string>
9124 </dict>
9125 <key>5</key>
9126 <dict>
9127 <key>name</key>
9128 <string>entity.name.type.instance.jsdoc</string>
9129 </dict>
9130 </dict>
9131 </dict>
9132 <dict>
9133 <key>name</key>
9134 <string>meta.example.jsdoc</string>
9135 <key>begin</key>
9136 <string>((@)example)\s+</string>
9137 <key>end</key>
9138 <string>(?=@|\*/)</string>
9139 <key>beginCaptures</key>
9140 <dict>
9141 <key>1</key>
9142 <dict>
9143 <key>name</key>
9144 <string>storage.type.class.jsdoc</string>
9145 </dict>
9146 <key>2</key>
9147 <dict>
9148 <key>name</key>
9149 <string>punctuation.definition.block.tag.jsdoc</string>
9150 </dict>
9151 </dict>
9152 <key>patterns</key>
9153 <array>
9154 <dict>
9155 <key>match</key>
9156 <string>^\s\*\s+</string>
9157 </dict>
9158 <dict>
9159 <key>contentName</key>
9160 <string>constant.other.description.jsdoc</string>
9161 <key>begin</key>
9162 <string>\G(&lt;)caption(&gt;)</string>
9163 <key>beginCaptures</key>
9164 <dict>
9165 <key>0</key>
9166 <dict>
9167 <key>name</key>
9168 <string>entity.name.tag.inline.jsdoc</string>
9169 </dict>
9170 <key>1</key>
9171 <dict>
9172 <key>name</key>
9173 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9174 </dict>
9175 <key>2</key>
9176 <dict>
9177 <key>name</key>
9178 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9179 </dict>
9180 </dict>
9181 <key>end</key>
9182 <string>(&lt;/)caption(&gt;)|(?=\*/)</string>
9183 <key>endCaptures</key>
9184 <dict>
9185 <key>0</key>
9186 <dict>
9187 <key>name</key>
9188 <string>entity.name.tag.inline.jsdoc</string>
9189 </dict>
9190 <key>1</key>
9191 <dict>
9192 <key>name</key>
9193 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9194 </dict>
9195 <key>2</key>
9196 <dict>
9197 <key>name</key>
9198 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9199 </dict>
9200 </dict>
9201 </dict>
9202 <dict>
9203 <key>match</key>
9204 <string>[^\s@*](?:[^*]|\*[^/])*</string>
9205 <key>captures</key>
9206 <dict>
9207 <key>0</key>
9208 <dict>
9209 <key>name</key>
9210 <string>source.embedded.ts</string>
9211 </dict>
9212 </dict>
9213 </dict>
9214 </array>
9215 </dict>
9216 <dict>
9217 <key>match</key>
9218 <string>(?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b</string>
9219 <key>captures</key>
9220 <dict>
9221 <key>1</key>
9222 <dict>
9223 <key>name</key>
9224 <string>storage.type.class.jsdoc</string>
9225 </dict>
9226 <key>2</key>
9227 <dict>
9228 <key>name</key>
9229 <string>punctuation.definition.block.tag.jsdoc</string>
9230 </dict>
9231 <key>3</key>
9232 <dict>
9233 <key>name</key>
9234 <string>constant.language.symbol-type.jsdoc</string>
9235 </dict>
9236 </dict>
9237 </dict>
9238 <dict>
9239 <key>match</key>
9240 <string>(?x)
9241((@)see)
9242\s+
9243(?:
9244 # URL
9245 (
9246 (?=https?://)
9247 (?:[^\s*]|\*[^/])+
9248 )
9249 |
9250 # JSDoc namepath
9251 (
9252 (?!
9253 # Avoid matching bare URIs (also acceptable as links)
9254 https?://
9255 |
9256 # Avoid matching {@inline tags}; we match those below
9257 (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag}
9258 {@(?:link|linkcode|linkplain|tutorial)\b
9259 )
9260 # Matched namepath
9261 (?:[^@\s*/]|\*[^/])+
9262 )
9263)</string>
9264 <key>captures</key>
9265 <dict>
9266 <key>1</key>
9267 <dict>
9268 <key>name</key>
9269 <string>storage.type.class.jsdoc</string>
9270 </dict>
9271 <key>2</key>
9272 <dict>
9273 <key>name</key>
9274 <string>punctuation.definition.block.tag.jsdoc</string>
9275 </dict>
9276 <key>3</key>
9277 <dict>
9278 <key>name</key>
9279 <string>variable.other.link.underline.jsdoc</string>
9280 </dict>
9281 <key>4</key>
9282 <dict>
9283 <key>name</key>
9284 <string>entity.name.type.instance.jsdoc</string>
9285 </dict>
9286 </dict>
9287 </dict>
9288 <dict>
9289 <key>match</key>
9290 <string>(?x)
9291((@)template)
9292\s+
9293# One or more valid identifiers
9294(
9295 [A-Za-z_$] # First character: non-numeric word character
9296 [\w$.\[\]]* # Rest of identifier
9297 (?: # Possible list of additional identifiers
9298 \s* , \s*
9299 [A-Za-z_$]
9300 [\w$.\[\]]*
9301 )*
9302)</string>
9303 <key>captures</key>
9304 <dict>
9305 <key>1</key>
9306 <dict>
9307 <key>name</key>
9308 <string>storage.type.class.jsdoc</string>
9309 </dict>
9310 <key>2</key>
9311 <dict>
9312 <key>name</key>
9313 <string>punctuation.definition.block.tag.jsdoc</string>
9314 </dict>
9315 <key>3</key>
9316 <dict>
9317 <key>name</key>
9318 <string>variable.other.jsdoc</string>
9319 </dict>
9320 </dict>
9321 </dict>
9322 <dict>
9323 <key>begin</key>
9324 <string>(?x)((@)template)\s+(?={)</string>
9325 <key>beginCaptures</key>
9326 <dict>
9327 <key>1</key>
9328 <dict>
9329 <key>name</key>
9330 <string>storage.type.class.jsdoc</string>
9331 </dict>
9332 <key>2</key>
9333 <dict>
9334 <key>name</key>
9335 <string>punctuation.definition.block.tag.jsdoc</string>
9336 </dict>
9337 </dict>
9338 <key>end</key>
9339 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9340 <key>patterns</key>
9341 <array>
9342 <dict>
9343 <key>include</key>
9344 <string>#jsdoctype</string>
9345 </dict>
9346 <dict>
9347 <key>name</key>
9348 <string>variable.other.jsdoc</string>
9349 <key>match</key>
9350 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9351 </dict>
9352 </array>
9353 </dict>
9354 <dict>
9355 <key>match</key>
9356 <string>(?x)
9357(
9358 (@)
9359 (?:arg|argument|const|constant|member|namespace|param|var)
9360)
9361\s+
9362(
9363 [A-Za-z_$]
9364 [\w$.\[\]]*
9365)</string>
9366 <key>captures</key>
9367 <dict>
9368 <key>1</key>
9369 <dict>
9370 <key>name</key>
9371 <string>storage.type.class.jsdoc</string>
9372 </dict>
9373 <key>2</key>
9374 <dict>
9375 <key>name</key>
9376 <string>punctuation.definition.block.tag.jsdoc</string>
9377 </dict>
9378 <key>3</key>
9379 <dict>
9380 <key>name</key>
9381 <string>variable.other.jsdoc</string>
9382 </dict>
9383 </dict>
9384 </dict>
9385 <dict>
9386 <key>begin</key>
9387 <string>((@)typedef)\s+(?={)</string>
9388 <key>beginCaptures</key>
9389 <dict>
9390 <key>1</key>
9391 <dict>
9392 <key>name</key>
9393 <string>storage.type.class.jsdoc</string>
9394 </dict>
9395 <key>2</key>
9396 <dict>
9397 <key>name</key>
9398 <string>punctuation.definition.block.tag.jsdoc</string>
9399 </dict>
9400 </dict>
9401 <key>end</key>
9402 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9403 <key>patterns</key>
9404 <array>
9405 <dict>
9406 <key>include</key>
9407 <string>#jsdoctype</string>
9408 </dict>
9409 <dict>
9410 <key>name</key>
9411 <string>entity.name.type.instance.jsdoc</string>
9412 <key>match</key>
9413 <string>(?:[^@\s*/]|\*[^/])+</string>
9414 </dict>
9415 </array>
9416 </dict>
9417 <dict>
9418 <key>begin</key>
9419 <string>((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)</string>
9420 <key>beginCaptures</key>
9421 <dict>
9422 <key>1</key>
9423 <dict>
9424 <key>name</key>
9425 <string>storage.type.class.jsdoc</string>
9426 </dict>
9427 <key>2</key>
9428 <dict>
9429 <key>name</key>
9430 <string>punctuation.definition.block.tag.jsdoc</string>
9431 </dict>
9432 </dict>
9433 <key>end</key>
9434 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9435 <key>patterns</key>
9436 <array>
9437 <dict>
9438 <key>include</key>
9439 <string>#jsdoctype</string>
9440 </dict>
9441 <dict>
9442 <key>name</key>
9443 <string>variable.other.jsdoc</string>
9444 <key>match</key>
9445 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9446 </dict>
9447 <dict>
9448 <key>name</key>
9449 <string>variable.other.jsdoc</string>
9450 <key>match</key>
9451 <string>(?x)
9452(\[)\s*
9453[\w$]+
9454(?:
9455 (?:\[\])? # Foo[ ].bar properties within an array
9456 \. # Foo.Bar namespaced parameter
9457 [\w$]+
9458)*
9459(?:
9460 \s*
9461 (=) # [foo=bar] Default parameter value
9462 \s*
9463 (
9464 # The inner regexes are to stop the match early at */ and to not stop at escaped quotes
9465 (?&gt;
9466 "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted
9467 '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted
9468 \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal
9469 (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else
9470 )*
9471 )
9472)?
9473\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/))</string>
9474 <key>captures</key>
9475 <dict>
9476 <key>1</key>
9477 <dict>
9478 <key>name</key>
9479 <string>punctuation.definition.optional-value.begin.bracket.square.jsdoc</string>
9480 </dict>
9481 <key>2</key>
9482 <dict>
9483 <key>name</key>
9484 <string>keyword.operator.assignment.jsdoc</string>
9485 </dict>
9486 <key>3</key>
9487 <dict>
9488 <key>name</key>
9489 <string>source.embedded.ts</string>
9490 </dict>
9491 <key>4</key>
9492 <dict>
9493 <key>name</key>
9494 <string>punctuation.definition.optional-value.end.bracket.square.jsdoc</string>
9495 </dict>
9496 <key>5</key>
9497 <dict>
9498 <key>name</key>
9499 <string>invalid.illegal.syntax.jsdoc</string>
9500 </dict>
9501 </dict>
9502 </dict>
9503 </array>
9504 </dict>
9505 <dict>
9506 <key>begin</key>
9507 <string>(?x)
9508(
9509 (@)
9510 (?:define|enum|exception|export|extends|lends|implements|modifies
9511 |namespace|private|protected|returns?|satisfies|suppress|this|throws|type
9512 |yields?)
9513)
9514\s+(?={)</string>
9515 <key>beginCaptures</key>
9516 <dict>
9517 <key>1</key>
9518 <dict>
9519 <key>name</key>
9520 <string>storage.type.class.jsdoc</string>
9521 </dict>
9522 <key>2</key>
9523 <dict>
9524 <key>name</key>
9525 <string>punctuation.definition.block.tag.jsdoc</string>
9526 </dict>
9527 </dict>
9528 <key>end</key>
9529 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9530 <key>patterns</key>
9531 <array>
9532 <dict>
9533 <key>include</key>
9534 <string>#jsdoctype</string>
9535 </dict>
9536 </array>
9537 </dict>
9538 <dict>
9539 <key>match</key>
9540 <string>(?x)
9541(
9542 (@)
9543 (?:alias|augments|callback|constructs|emits|event|fires|exports?
9544 |extends|external|function|func|host|lends|listens|interface|memberof!?
9545 |method|module|mixes|mixin|name|requires|see|this|typedef|uses)
9546)
9547\s+
9548(
9549 (?:
9550 [^{}@\s*] | \*[^/]
9551 )+
9552)</string>
9553 <key>captures</key>
9554 <dict>
9555 <key>1</key>
9556 <dict>
9557 <key>name</key>
9558 <string>storage.type.class.jsdoc</string>
9559 </dict>
9560 <key>2</key>
9561 <dict>
9562 <key>name</key>
9563 <string>punctuation.definition.block.tag.jsdoc</string>
9564 </dict>
9565 <key>3</key>
9566 <dict>
9567 <key>name</key>
9568 <string>entity.name.type.instance.jsdoc</string>
9569 </dict>
9570 </dict>
9571 </dict>
9572 <dict>
9573 <key>contentName</key>
9574 <string>variable.other.jsdoc</string>
9575 <key>begin</key>
9576 <string>((@)(?:default(?:value)?|license|version))\s+(([''"]))</string>
9577 <key>beginCaptures</key>
9578 <dict>
9579 <key>1</key>
9580 <dict>
9581 <key>name</key>
9582 <string>storage.type.class.jsdoc</string>
9583 </dict>
9584 <key>2</key>
9585 <dict>
9586 <key>name</key>
9587 <string>punctuation.definition.block.tag.jsdoc</string>
9588 </dict>
9589 <key>3</key>
9590 <dict>
9591 <key>name</key>
9592 <string>variable.other.jsdoc</string>
9593 </dict>
9594 <key>4</key>
9595 <dict>
9596 <key>name</key>
9597 <string>punctuation.definition.string.begin.jsdoc</string>
9598 </dict>
9599 </dict>
9600 <key>end</key>
9601 <string>(\3)|(?=$|\*/)</string>
9602 <key>endCaptures</key>
9603 <dict>
9604 <key>0</key>
9605 <dict>
9606 <key>name</key>
9607 <string>variable.other.jsdoc</string>
9608 </dict>
9609 <key>1</key>
9610 <dict>
9611 <key>name</key>
9612 <string>punctuation.definition.string.end.jsdoc</string>
9613 </dict>
9614 </dict>
9615 </dict>
9616 <dict>
9617 <key>match</key>
9618 <string>((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)</string>
9619 <key>captures</key>
9620 <dict>
9621 <key>1</key>
9622 <dict>
9623 <key>name</key>
9624 <string>storage.type.class.jsdoc</string>
9625 </dict>
9626 <key>2</key>
9627 <dict>
9628 <key>name</key>
9629 <string>punctuation.definition.block.tag.jsdoc</string>
9630 </dict>
9631 <key>3</key>
9632 <dict>
9633 <key>name</key>
9634 <string>variable.other.jsdoc</string>
9635 </dict>
9636 </dict>
9637 </dict>
9638 <dict>
9639 <key>name</key>
9640 <string>storage.type.class.jsdoc</string>
9641 <key>match</key>
9642 <string>(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b</string>
9643 <key>captures</key>
9644 <dict>
9645 <key>1</key>
9646 <dict>
9647 <key>name</key>
9648 <string>punctuation.definition.block.tag.jsdoc</string>
9649 </dict>
9650 </dict>
9651 </dict>
9652 <dict>
9653 <key>include</key>
9654 <string>#inline-tags</string>
9655 </dict>
9656 <dict>
9657 <key>match</key>
9658 <string>((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)</string>
9659 <key>captures</key>
9660 <dict>
9661 <key>1</key>
9662 <dict>
9663 <key>name</key>
9664 <string>storage.type.class.jsdoc</string>
9665 </dict>
9666 <key>2</key>
9667 <dict>
9668 <key>name</key>
9669 <string>punctuation.definition.block.tag.jsdoc</string>
9670 </dict>
9671 </dict>
9672 </dict>
9673 </array>
9674 </dict>
9675 <key>brackets</key>
9676 <dict>
9677 <key>patterns</key>
9678 <array>
9679 <dict>
9680 <key>begin</key>
9681 <string>{</string>
9682 <key>end</key>
9683 <string>}|(?=\*/)</string>
9684 <key>patterns</key>
9685 <array>
9686 <dict>
9687 <key>include</key>
9688 <string>#brackets</string>
9689 </dict>
9690 </array>
9691 </dict>
9692 <dict>
9693 <key>begin</key>
9694 <string>\[</string>
9695 <key>end</key>
9696 <string>\]|(?=\*/)</string>
9697 <key>patterns</key>
9698 <array>
9699 <dict>
9700 <key>include</key>
9701 <string>#brackets</string>
9702 </dict>
9703 </array>
9704 </dict>
9705 </array>
9706 </dict>
9707 <key>inline-tags</key>
9708 <dict>
9709 <key>patterns</key>
9710 <array>
9711 <dict>
9712 <key>name</key>
9713 <string>constant.other.description.jsdoc</string>
9714 <key>match</key>
9715 <string>(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))</string>
9716 <key>captures</key>
9717 <dict>
9718 <key>1</key>
9719 <dict>
9720 <key>name</key>
9721 <string>punctuation.definition.bracket.square.begin.jsdoc</string>
9722 </dict>
9723 <key>2</key>
9724 <dict>
9725 <key>name</key>
9726 <string>punctuation.definition.bracket.square.end.jsdoc</string>
9727 </dict>
9728 </dict>
9729 </dict>
9730 <dict>
9731 <key>name</key>
9732 <string>entity.name.type.instance.jsdoc</string>
9733 <key>begin</key>
9734 <string>({)((@)(?:link(?:code|plain)?|tutorial))\s*</string>
9735 <key>beginCaptures</key>
9736 <dict>
9737 <key>1</key>
9738 <dict>
9739 <key>name</key>
9740 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9741 </dict>
9742 <key>2</key>
9743 <dict>
9744 <key>name</key>
9745 <string>storage.type.class.jsdoc</string>
9746 </dict>
9747 <key>3</key>
9748 <dict>
9749 <key>name</key>
9750 <string>punctuation.definition.inline.tag.jsdoc</string>
9751 </dict>
9752 </dict>
9753 <key>end</key>
9754 <string>}|(?=\*/)</string>
9755 <key>endCaptures</key>
9756 <dict>
9757 <key>0</key>
9758 <dict>
9759 <key>name</key>
9760 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9761 </dict>
9762 </dict>
9763 <key>patterns</key>
9764 <array>
9765 <dict>
9766 <key>match</key>
9767 <string>\G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)?</string>
9768 <key>captures</key>
9769 <dict>
9770 <key>1</key>
9771 <dict>
9772 <key>name</key>
9773 <string>variable.other.link.underline.jsdoc</string>
9774 </dict>
9775 <key>2</key>
9776 <dict>
9777 <key>name</key>
9778 <string>punctuation.separator.pipe.jsdoc</string>
9779 </dict>
9780 </dict>
9781 </dict>
9782 <dict>
9783 <key>match</key>
9784 <string>\G((?:[^{}@\s|*]|\*[^/])+)(\|)?</string>
9785 <key>captures</key>
9786 <dict>
9787 <key>1</key>
9788 <dict>
9789 <key>name</key>
9790 <string>variable.other.description.jsdoc</string>
9791 </dict>
9792 <key>2</key>
9793 <dict>
9794 <key>name</key>
9795 <string>punctuation.separator.pipe.jsdoc</string>
9796 </dict>
9797 </dict>
9798 </dict>
9799 </array>
9800 </dict>
9801 </array>
9802 </dict>
9803 <key>jsdoctype</key>
9804 <dict>
9805 <key>patterns</key>
9806 <array>
9807 <dict>
9808 <key>name</key>
9809 <string>invalid.illegal.type.jsdoc</string>
9810 <key>match</key>
9811 <string>\G{(?:[^}*]|\*[^/}])+$</string>
9812 </dict>
9813 <dict>
9814 <key>contentName</key>
9815 <string>entity.name.type.instance.jsdoc</string>
9816 <key>begin</key>
9817 <string>\G({)</string>
9818 <key>beginCaptures</key>
9819 <dict>
9820 <key>0</key>
9821 <dict>
9822 <key>name</key>
9823 <string>entity.name.type.instance.jsdoc</string>
9824 </dict>
9825 <key>1</key>
9826 <dict>
9827 <key>name</key>
9828 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9829 </dict>
9830 </dict>
9831 <key>end</key>
9832 <string>((}))\s*|(?=\*/)</string>
9833 <key>endCaptures</key>
9834 <dict>
9835 <key>1</key>
9836 <dict>
9837 <key>name</key>
9838 <string>entity.name.type.instance.jsdoc</string>
9839 </dict>
9840 <key>2</key>
9841 <dict>
9842 <key>name</key>
9843 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9844 </dict>
9845 </dict>
9846 <key>patterns</key>
9847 <array>
9848 <dict>
9849 <key>include</key>
9850 <string>#brackets</string>
9851 </dict>
9852 </array>
9853 </dict>
9854 </array>
9855 </dict>
9856 </dict>
9857 </dict>
9858</plist>
src/file-viewer/highlight-grammar/jsx.plist created+10281
...@@ -0,0 +1,10281 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4 <dict>
5 <key>name</key>
6 <string>JavaScriptReact</string>
7 <key>scopeName</key>
8 <string>source.jsx</string>
9 <key>fileTypes</key>
10 <array>
11 <string>tsx</string>
12 </array>
13 <key>uuid</key>
14 <string>805375ec-d614-41f5-8993-5843fe63ea82</string>
15 <key>patterns</key>
16 <array>
17 <dict>
18 <key>include</key>
19 <string>#directives</string>
20 </dict>
21 <dict>
22 <key>include</key>
23 <string>#statements</string>
24 </dict>
25 <dict>
26 <key>include</key>
27 <string>#shebang</string>
28 </dict>
29 </array>
30 <key>repository</key>
31 <dict>
32 <key>shebang</key>
33 <dict>
34 <key>name</key>
35 <string>comment.line.shebang.tsx</string>
36 <key>match</key>
37 <string>\A(#!).*(?=$)</string>
38 <key>captures</key>
39 <dict>
40 <key>1</key>
41 <dict>
42 <key>name</key>
43 <string>punctuation.definition.comment.tsx</string>
44 </dict>
45 </dict>
46 </dict>
47 <key>statements</key>
48 <dict>
49 <key>patterns</key>
50 <array>
51 <dict>
52 <key>include</key>
53 <string>#declaration</string>
54 </dict>
55 <dict>
56 <key>include</key>
57 <string>#control-statement</string>
58 </dict>
59 <dict>
60 <key>include</key>
61 <string>#after-operator-block-as-object-literal</string>
62 </dict>
63 <dict>
64 <key>include</key>
65 <string>#decl-block</string>
66 </dict>
67 <dict>
68 <key>include</key>
69 <string>#label</string>
70 </dict>
71 <dict>
72 <key>include</key>
73 <string>#expression</string>
74 </dict>
75 <dict>
76 <key>include</key>
77 <string>#punctuation-semicolon</string>
78 </dict>
79 <dict>
80 <key>include</key>
81 <string>#string</string>
82 </dict>
83 <dict>
84 <key>include</key>
85 <string>#comment</string>
86 </dict>
87 </array>
88 </dict>
89 <key>declaration</key>
90 <dict>
91 <key>patterns</key>
92 <array>
93 <dict>
94 <key>include</key>
95 <string>#decorator</string>
96 </dict>
97 <dict>
98 <key>include</key>
99 <string>#var-expr</string>
100 </dict>
101 <dict>
102 <key>include</key>
103 <string>#function-declaration</string>
104 </dict>
105 <dict>
106 <key>include</key>
107 <string>#class-declaration</string>
108 </dict>
109 <dict>
110 <key>include</key>
111 <string>#interface-declaration</string>
112 </dict>
113 <dict>
114 <key>include</key>
115 <string>#enum-declaration</string>
116 </dict>
117 <dict>
118 <key>include</key>
119 <string>#namespace-declaration</string>
120 </dict>
121 <dict>
122 <key>include</key>
123 <string>#type-alias-declaration</string>
124 </dict>
125 <dict>
126 <key>include</key>
127 <string>#import-equals-declaration</string>
128 </dict>
129 <dict>
130 <key>include</key>
131 <string>#import-declaration</string>
132 </dict>
133 <dict>
134 <key>include</key>
135 <string>#export-declaration</string>
136 </dict>
137 <dict>
138 <key>name</key>
139 <string>storage.modifier.tsx</string>
140 <key>match</key>
141 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
142 </dict>
143 </array>
144 </dict>
145 <key>control-statement</key>
146 <dict>
147 <key>patterns</key>
148 <array>
149 <dict>
150 <key>include</key>
151 <string>#switch-statement</string>
152 </dict>
153 <dict>
154 <key>include</key>
155 <string>#for-loop</string>
156 </dict>
157 <dict>
158 <key>name</key>
159 <string>keyword.control.trycatch.tsx</string>
160 <key>match</key>
161 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
162 </dict>
163 <dict>
164 <key>match</key>
165 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
166 <key>captures</key>
167 <dict>
168 <key>1</key>
169 <dict>
170 <key>name</key>
171 <string>keyword.control.loop.tsx</string>
172 </dict>
173 <key>2</key>
174 <dict>
175 <key>name</key>
176 <string>entity.name.label.tsx</string>
177 </dict>
178 </dict>
179 </dict>
180 <dict>
181 <key>name</key>
182 <string>keyword.control.loop.tsx</string>
183 <key>match</key>
184 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
185 </dict>
186 <dict>
187 <key>begin</key>
188 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
189 <key>beginCaptures</key>
190 <dict>
191 <key>0</key>
192 <dict>
193 <key>name</key>
194 <string>keyword.control.flow.tsx</string>
195 </dict>
196 </dict>
197 <key>end</key>
198 <string>(?=[;}]|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
199 <key>patterns</key>
200 <array>
201 <dict>
202 <key>include</key>
203 <string>#expression</string>
204 </dict>
205 </array>
206 </dict>
207 <dict>
208 <key>name</key>
209 <string>keyword.control.switch.tsx</string>
210 <key>match</key>
211 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
212 </dict>
213 <dict>
214 <key>include</key>
215 <string>#if-statement</string>
216 </dict>
217 <dict>
218 <key>name</key>
219 <string>keyword.control.conditional.tsx</string>
220 <key>match</key>
221 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
222 </dict>
223 <dict>
224 <key>name</key>
225 <string>keyword.control.with.tsx</string>
226 <key>match</key>
227 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
228 </dict>
229 <dict>
230 <key>name</key>
231 <string>keyword.control.tsx</string>
232 <key>match</key>
233 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
234 </dict>
235 <dict>
236 <key>name</key>
237 <string>keyword.other.debugger.tsx</string>
238 <key>match</key>
239 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
240 </dict>
241 </array>
242 </dict>
243 <key>label</key>
244 <dict>
245 <key>patterns</key>
246 <array>
247 <dict>
248 <key>begin</key>
249 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{)</string>
250 <key>beginCaptures</key>
251 <dict>
252 <key>1</key>
253 <dict>
254 <key>name</key>
255 <string>entity.name.label.tsx</string>
256 </dict>
257 <key>2</key>
258 <dict>
259 <key>name</key>
260 <string>punctuation.separator.label.tsx</string>
261 </dict>
262 </dict>
263 <key>end</key>
264 <string>(?&lt;=\})</string>
265 <key>patterns</key>
266 <array>
267 <dict>
268 <key>include</key>
269 <string>#decl-block</string>
270 </dict>
271 </array>
272 </dict>
273 <dict>
274 <key>match</key>
275 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
276 <key>captures</key>
277 <dict>
278 <key>1</key>
279 <dict>
280 <key>name</key>
281 <string>entity.name.label.tsx</string>
282 </dict>
283 <key>2</key>
284 <dict>
285 <key>name</key>
286 <string>punctuation.separator.label.tsx</string>
287 </dict>
288 </dict>
289 </dict>
290 </array>
291 </dict>
292 <key>expression</key>
293 <dict>
294 <key>patterns</key>
295 <array>
296 <dict>
297 <key>include</key>
298 <string>#expressionWithoutIdentifiers</string>
299 </dict>
300 <dict>
301 <key>include</key>
302 <string>#identifiers</string>
303 </dict>
304 <dict>
305 <key>include</key>
306 <string>#expressionPunctuations</string>
307 </dict>
308 </array>
309 </dict>
310 <key>expressionWithoutIdentifiers</key>
311 <dict>
312 <key>patterns</key>
313 <array>
314 <dict>
315 <key>include</key>
316 <string>#jsx</string>
317 </dict>
318 <dict>
319 <key>include</key>
320 <string>#string</string>
321 </dict>
322 <dict>
323 <key>include</key>
324 <string>#regex</string>
325 </dict>
326 <dict>
327 <key>include</key>
328 <string>#comment</string>
329 </dict>
330 <dict>
331 <key>include</key>
332 <string>#function-expression</string>
333 </dict>
334 <dict>
335 <key>include</key>
336 <string>#class-expression</string>
337 </dict>
338 <dict>
339 <key>include</key>
340 <string>#arrow-function</string>
341 </dict>
342 <dict>
343 <key>include</key>
344 <string>#paren-expression-possibly-arrow</string>
345 </dict>
346 <dict>
347 <key>include</key>
348 <string>#cast</string>
349 </dict>
350 <dict>
351 <key>include</key>
352 <string>#ternary-expression</string>
353 </dict>
354 <dict>
355 <key>include</key>
356 <string>#new-expr</string>
357 </dict>
358 <dict>
359 <key>include</key>
360 <string>#instanceof-expr</string>
361 </dict>
362 <dict>
363 <key>include</key>
364 <string>#object-literal</string>
365 </dict>
366 <dict>
367 <key>include</key>
368 <string>#expression-operators</string>
369 </dict>
370 <dict>
371 <key>include</key>
372 <string>#function-call</string>
373 </dict>
374 <dict>
375 <key>include</key>
376 <string>#literal</string>
377 </dict>
378 <dict>
379 <key>include</key>
380 <string>#support-objects</string>
381 </dict>
382 <dict>
383 <key>include</key>
384 <string>#paren-expression</string>
385 </dict>
386 </array>
387 </dict>
388 <key>expressionPunctuations</key>
389 <dict>
390 <key>patterns</key>
391 <array>
392 <dict>
393 <key>include</key>
394 <string>#punctuation-comma</string>
395 </dict>
396 <dict>
397 <key>include</key>
398 <string>#punctuation-accessor</string>
399 </dict>
400 </array>
401 </dict>
402 <key>decorator</key>
403 <dict>
404 <key>name</key>
405 <string>meta.decorator.tsx</string>
406 <key>begin</key>
407 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))\@</string>
408 <key>beginCaptures</key>
409 <dict>
410 <key>0</key>
411 <dict>
412 <key>name</key>
413 <string>punctuation.decorator.tsx</string>
414 </dict>
415 </dict>
416 <key>end</key>
417 <string>(?=\s)</string>
418 <key>patterns</key>
419 <array>
420 <dict>
421 <key>include</key>
422 <string>#expression</string>
423 </dict>
424 </array>
425 </dict>
426 <key>var-expr</key>
427 <dict>
428 <key>patterns</key>
429 <array>
430 <dict>
431 <key>name</key>
432 <string>meta.var.expr.tsx</string>
433 <key>begin</key>
434 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
435 <key>end</key>
436 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$)))</string>
437 <key>patterns</key>
438 <array>
439 <dict>
440 <key>begin</key>
441 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
442 <key>beginCaptures</key>
443 <dict>
444 <key>1</key>
445 <dict>
446 <key>name</key>
447 <string>keyword.control.export.tsx</string>
448 </dict>
449 <key>2</key>
450 <dict>
451 <key>name</key>
452 <string>storage.modifier.tsx</string>
453 </dict>
454 <key>3</key>
455 <dict>
456 <key>name</key>
457 <string>storage.type.tsx</string>
458 </dict>
459 </dict>
460 <key>end</key>
461 <string>(?=\S)</string>
462 </dict>
463 <dict>
464 <key>include</key>
465 <string>#destructuring-variable</string>
466 </dict>
467 <dict>
468 <key>include</key>
469 <string>#var-single-variable</string>
470 </dict>
471 <dict>
472 <key>include</key>
473 <string>#variable-initializer</string>
474 </dict>
475 <dict>
476 <key>include</key>
477 <string>#comment</string>
478 </dict>
479 <dict>
480 <key>begin</key>
481 <string>(,)\s*(?=$|\/\/)</string>
482 <key>beginCaptures</key>
483 <dict>
484 <key>1</key>
485 <dict>
486 <key>name</key>
487 <string>punctuation.separator.comma.tsx</string>
488 </dict>
489 </dict>
490 <key>end</key>
491 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
492 <key>patterns</key>
493 <array>
494 <dict>
495 <key>include</key>
496 <string>#single-line-comment-consuming-line-ending</string>
497 </dict>
498 <dict>
499 <key>include</key>
500 <string>#comment</string>
501 </dict>
502 <dict>
503 <key>include</key>
504 <string>#destructuring-variable</string>
505 </dict>
506 <dict>
507 <key>include</key>
508 <string>#var-single-variable</string>
509 </dict>
510 <dict>
511 <key>include</key>
512 <string>#punctuation-comma</string>
513 </dict>
514 </array>
515 </dict>
516 <dict>
517 <key>include</key>
518 <string>#punctuation-comma</string>
519 </dict>
520 </array>
521 </dict>
522 <dict>
523 <key>name</key>
524 <string>meta.var.expr.tsx</string>
525 <key>begin</key>
526 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
527 <key>beginCaptures</key>
528 <dict>
529 <key>1</key>
530 <dict>
531 <key>name</key>
532 <string>keyword.control.export.tsx</string>
533 </dict>
534 <key>2</key>
535 <dict>
536 <key>name</key>
537 <string>storage.modifier.tsx</string>
538 </dict>
539 <key>3</key>
540 <dict>
541 <key>name</key>
542 <string>storage.type.tsx</string>
543 </dict>
544 </dict>
545 <key>end</key>
546 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^const|[^\._$[:alnum:]]const)(?=\s*$)))</string>
547 <key>patterns</key>
548 <array>
549 <dict>
550 <key>begin</key>
551 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
552 <key>beginCaptures</key>
553 <dict>
554 <key>1</key>
555 <dict>
556 <key>name</key>
557 <string>keyword.control.export.tsx</string>
558 </dict>
559 <key>2</key>
560 <dict>
561 <key>name</key>
562 <string>storage.modifier.tsx</string>
563 </dict>
564 <key>3</key>
565 <dict>
566 <key>name</key>
567 <string>storage.type.tsx</string>
568 </dict>
569 </dict>
570 <key>end</key>
571 <string>(?=\S)</string>
572 </dict>
573 <dict>
574 <key>include</key>
575 <string>#destructuring-const</string>
576 </dict>
577 <dict>
578 <key>include</key>
579 <string>#var-single-const</string>
580 </dict>
581 <dict>
582 <key>include</key>
583 <string>#variable-initializer</string>
584 </dict>
585 <dict>
586 <key>include</key>
587 <string>#comment</string>
588 </dict>
589 <dict>
590 <key>begin</key>
591 <string>(,)\s*(?=$|\/\/)</string>
592 <key>beginCaptures</key>
593 <dict>
594 <key>1</key>
595 <dict>
596 <key>name</key>
597 <string>punctuation.separator.comma.tsx</string>
598 </dict>
599 </dict>
600 <key>end</key>
601 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
602 <key>patterns</key>
603 <array>
604 <dict>
605 <key>include</key>
606 <string>#single-line-comment-consuming-line-ending</string>
607 </dict>
608 <dict>
609 <key>include</key>
610 <string>#comment</string>
611 </dict>
612 <dict>
613 <key>include</key>
614 <string>#destructuring-const</string>
615 </dict>
616 <dict>
617 <key>include</key>
618 <string>#var-single-const</string>
619 </dict>
620 <dict>
621 <key>include</key>
622 <string>#punctuation-comma</string>
623 </dict>
624 </array>
625 </dict>
626 <dict>
627 <key>include</key>
628 <string>#punctuation-comma</string>
629 </dict>
630 </array>
631 </dict>
632 <dict>
633 <key>name</key>
634 <string>meta.var.expr.tsx</string>
635 <key>begin</key>
636 <string>(?=(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))</string>
637 <key>beginCaptures</key>
638 <dict>
639 <key>1</key>
640 <dict>
641 <key>name</key>
642 <string>keyword.control.export.tsx</string>
643 </dict>
644 <key>2</key>
645 <dict>
646 <key>name</key>
647 <string>storage.modifier.tsx</string>
648 </dict>
649 <key>3</key>
650 <dict>
651 <key>name</key>
652 <string>storage.type.tsx</string>
653 </dict>
654 </dict>
655 <key>end</key>
656 <string>(?!(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|((?&lt;!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$)))</string>
657 <key>patterns</key>
658 <array>
659 <dict>
660 <key>begin</key>
661 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b((?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
662 <key>beginCaptures</key>
663 <dict>
664 <key>1</key>
665 <dict>
666 <key>name</key>
667 <string>keyword.control.export.tsx</string>
668 </dict>
669 <key>2</key>
670 <dict>
671 <key>name</key>
672 <string>storage.modifier.tsx</string>
673 </dict>
674 <key>3</key>
675 <dict>
676 <key>name</key>
677 <string>storage.type.tsx</string>
678 </dict>
679 </dict>
680 <key>end</key>
681 <string>(?=\S)</string>
682 </dict>
683 <dict>
684 <key>include</key>
685 <string>#var-single-const</string>
686 </dict>
687 <dict>
688 <key>include</key>
689 <string>#variable-initializer</string>
690 </dict>
691 <dict>
692 <key>include</key>
693 <string>#comment</string>
694 </dict>
695 <dict>
696 <key>begin</key>
697 <string>(,)\s*((?!\S)|(?=\/\/))</string>
698 <key>beginCaptures</key>
699 <dict>
700 <key>1</key>
701 <dict>
702 <key>name</key>
703 <string>punctuation.separator.comma.tsx</string>
704 </dict>
705 </dict>
706 <key>end</key>
707 <string>(?&lt;!,)(((?==|;|}|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|^\s*$))|((?&lt;=\S)(?=\s*$)))</string>
708 <key>patterns</key>
709 <array>
710 <dict>
711 <key>include</key>
712 <string>#single-line-comment-consuming-line-ending</string>
713 </dict>
714 <dict>
715 <key>include</key>
716 <string>#comment</string>
717 </dict>
718 <dict>
719 <key>include</key>
720 <string>#var-single-const</string>
721 </dict>
722 <dict>
723 <key>include</key>
724 <string>#punctuation-comma</string>
725 </dict>
726 </array>
727 </dict>
728 <dict>
729 <key>include</key>
730 <string>#punctuation-comma</string>
731 </dict>
732 </array>
733 </dict>
734 </array>
735 </dict>
736 <key>var-single-variable</key>
737 <dict>
738 <key>patterns</key>
739 <array>
740 <dict>
741 <key>name</key>
742 <string>meta.var-single-variable.expr.tsx</string>
743 <key>begin</key>
744 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s*
745# function assignment |
746(=\s*(
747 ((async\s+)?(
748 (function\s*[(&lt;*]) |
749 (function\s+) |
750 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
751 )) |
752 ((async\s*)?(
753 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
754 # sure shot arrow functions even if =&gt; is on new line
755(
756 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
757 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
758 (
759 ([)]\s*:) | # ():
760 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
761 )
762) |
763(
764 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
765) |
766# arrow function possible to detect only with =&gt; on same line
767(
768 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
769 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
770 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
771 \s*=&gt; # arrow operator
772)
773 ))
774)) |
775# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
776(:\s*(
777 (&lt;) |
778 ([(]\s*(
779 ([)]) |
780 (\.\.\.) |
781 ([_$[:alnum:]]+\s*(
782 ([:,?=])|
783 ([)]\s*=&gt;)
784 ))
785 ))
786)) |
787(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
788(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
789(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
790 ((async\s+)?(
791 (function\s*[(&lt;*]) |
792 (function\s+) |
793 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
794 )) |
795 ((async\s*)?(
796 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
797 # sure shot arrow functions even if =&gt; is on new line
798(
799 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
800 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
801 (
802 ([)]\s*:) | # ():
803 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
804 )
805) |
806(
807 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
808) |
809# arrow function possible to detect only with =&gt; on same line
810(
811 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
812 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
813 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
814 \s*=&gt; # arrow operator
815)
816 ))
817)))</string>
818 <key>beginCaptures</key>
819 <dict>
820 <key>1</key>
821 <dict>
822 <key>name</key>
823 <string>meta.definition.variable.tsx entity.name.function.tsx</string>
824 </dict>
825 <key>2</key>
826 <dict>
827 <key>name</key>
828 <string>keyword.operator.definiteassignment.tsx</string>
829 </dict>
830 </dict>
831 <key>end</key>
832 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
833 <key>patterns</key>
834 <array>
835 <dict>
836 <key>include</key>
837 <string>#var-single-variable-type-annotation</string>
838 </dict>
839 </array>
840 </dict>
841 <dict>
842 <key>name</key>
843 <string>meta.var-single-variable.expr.tsx</string>
844 <key>begin</key>
845 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)?</string>
846 <key>beginCaptures</key>
847 <dict>
848 <key>1</key>
849 <dict>
850 <key>name</key>
851 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
852 </dict>
853 <key>2</key>
854 <dict>
855 <key>name</key>
856 <string>keyword.operator.definiteassignment.tsx</string>
857 </dict>
858 </dict>
859 <key>end</key>
860 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
861 <key>patterns</key>
862 <array>
863 <dict>
864 <key>include</key>
865 <string>#var-single-variable-type-annotation</string>
866 </dict>
867 </array>
868 </dict>
869 <dict>
870 <key>name</key>
871 <string>meta.var-single-variable.expr.tsx</string>
872 <key>begin</key>
873 <string>([_$[:alpha:]][_$[:alnum:]]*)(\!)?</string>
874 <key>beginCaptures</key>
875 <dict>
876 <key>1</key>
877 <dict>
878 <key>name</key>
879 <string>meta.definition.variable.tsx variable.other.readwrite.tsx</string>
880 </dict>
881 <key>2</key>
882 <dict>
883 <key>name</key>
884 <string>keyword.operator.definiteassignment.tsx</string>
885 </dict>
886 </dict>
887 <key>end</key>
888 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
889 <key>patterns</key>
890 <array>
891 <dict>
892 <key>include</key>
893 <string>#var-single-variable-type-annotation</string>
894 </dict>
895 </array>
896 </dict>
897 </array>
898 </dict>
899 <key>var-single-const</key>
900 <dict>
901 <key>patterns</key>
902 <array>
903 <dict>
904 <key>name</key>
905 <string>meta.var-single-variable.expr.tsx</string>
906 <key>begin</key>
907 <string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
908# function assignment |
909(=\s*(
910 ((async\s+)?(
911 (function\s*[(&lt;*]) |
912 (function\s+) |
913 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
914 )) |
915 ((async\s*)?(
916 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
917 # sure shot arrow functions even if =&gt; is on new line
918(
919 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
920 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
921 (
922 ([)]\s*:) | # ():
923 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
924 )
925) |
926(
927 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
928) |
929# arrow function possible to detect only with =&gt; on same line
930(
931 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
932 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
933 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
934 \s*=&gt; # arrow operator
935)
936 ))
937)) |
938# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
939(:\s*(
940 (&lt;) |
941 ([(]\s*(
942 ([)]) |
943 (\.\.\.) |
944 ([_$[:alnum:]]+\s*(
945 ([:,?=])|
946 ([)]\s*=&gt;)
947 ))
948 ))
949)) |
950(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
951(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
952(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
953 ((async\s+)?(
954 (function\s*[(&lt;*]) |
955 (function\s+) |
956 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
957 )) |
958 ((async\s*)?(
959 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
960 # sure shot arrow functions even if =&gt; is on new line
961(
962 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
963 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
964 (
965 ([)]\s*:) | # ():
966 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
967 )
968) |
969(
970 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
971) |
972# arrow function possible to detect only with =&gt; on same line
973(
974 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
975 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
976 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
977 \s*=&gt; # arrow operator
978)
979 ))
980)))</string>
981 <key>beginCaptures</key>
982 <dict>
983 <key>1</key>
984 <dict>
985 <key>name</key>
986 <string>meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx</string>
987 </dict>
988 </dict>
989 <key>end</key>
990 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
991 <key>patterns</key>
992 <array>
993 <dict>
994 <key>include</key>
995 <string>#var-single-variable-type-annotation</string>
996 </dict>
997 </array>
998 </dict>
999 <dict>
1000 <key>name</key>
1001 <string>meta.var-single-variable.expr.tsx</string>
1002 <key>begin</key>
1003 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1004 <key>beginCaptures</key>
1005 <dict>
1006 <key>1</key>
1007 <dict>
1008 <key>name</key>
1009 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
1010 </dict>
1011 </dict>
1012 <key>end</key>
1013 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+)|(;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
1014 <key>patterns</key>
1015 <array>
1016 <dict>
1017 <key>include</key>
1018 <string>#var-single-variable-type-annotation</string>
1019 </dict>
1020 </array>
1021 </dict>
1022 </array>
1023 </dict>
1024 <key>var-single-variable-type-annotation</key>
1025 <dict>
1026 <key>patterns</key>
1027 <array>
1028 <dict>
1029 <key>include</key>
1030 <string>#type-annotation</string>
1031 </dict>
1032 <dict>
1033 <key>include</key>
1034 <string>#string</string>
1035 </dict>
1036 <dict>
1037 <key>include</key>
1038 <string>#comment</string>
1039 </dict>
1040 </array>
1041 </dict>
1042 <key>destructuring-variable</key>
1043 <dict>
1044 <key>patterns</key>
1045 <array>
1046 <dict>
1047 <key>name</key>
1048 <string>meta.object-binding-pattern-variable.tsx</string>
1049 <key>begin</key>
1050 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1051 <key>end</key>
1052 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1053 <key>patterns</key>
1054 <array>
1055 <dict>
1056 <key>include</key>
1057 <string>#object-binding-pattern</string>
1058 </dict>
1059 <dict>
1060 <key>include</key>
1061 <string>#type-annotation</string>
1062 </dict>
1063 <dict>
1064 <key>include</key>
1065 <string>#comment</string>
1066 </dict>
1067 </array>
1068 </dict>
1069 <dict>
1070 <key>name</key>
1071 <string>meta.array-binding-pattern-variable.tsx</string>
1072 <key>begin</key>
1073 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1074 <key>end</key>
1075 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1076 <key>patterns</key>
1077 <array>
1078 <dict>
1079 <key>include</key>
1080 <string>#array-binding-pattern</string>
1081 </dict>
1082 <dict>
1083 <key>include</key>
1084 <string>#type-annotation</string>
1085 </dict>
1086 <dict>
1087 <key>include</key>
1088 <string>#comment</string>
1089 </dict>
1090 </array>
1091 </dict>
1092 </array>
1093 </dict>
1094 <key>destructuring-const</key>
1095 <dict>
1096 <key>patterns</key>
1097 <array>
1098 <dict>
1099 <key>name</key>
1100 <string>meta.object-binding-pattern-variable.tsx</string>
1101 <key>begin</key>
1102 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{)</string>
1103 <key>end</key>
1104 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1105 <key>patterns</key>
1106 <array>
1107 <dict>
1108 <key>include</key>
1109 <string>#object-binding-pattern-const</string>
1110 </dict>
1111 <dict>
1112 <key>include</key>
1113 <string>#type-annotation</string>
1114 </dict>
1115 <dict>
1116 <key>include</key>
1117 <string>#comment</string>
1118 </dict>
1119 </array>
1120 </dict>
1121 <dict>
1122 <key>name</key>
1123 <string>meta.array-binding-pattern-variable.tsx</string>
1124 <key>begin</key>
1125 <string>(?&lt;!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[)</string>
1126 <key>end</key>
1127 <string>(?=$|^|[;,=}]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
1128 <key>patterns</key>
1129 <array>
1130 <dict>
1131 <key>include</key>
1132 <string>#array-binding-pattern-const</string>
1133 </dict>
1134 <dict>
1135 <key>include</key>
1136 <string>#type-annotation</string>
1137 </dict>
1138 <dict>
1139 <key>include</key>
1140 <string>#comment</string>
1141 </dict>
1142 </array>
1143 </dict>
1144 </array>
1145 </dict>
1146 <key>object-binding-element</key>
1147 <dict>
1148 <key>patterns</key>
1149 <array>
1150 <dict>
1151 <key>include</key>
1152 <string>#comment</string>
1153 </dict>
1154 <dict>
1155 <key>begin</key>
1156 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1157 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1158 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1159 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1160 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1161 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1162 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1163 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1164 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1165)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1166 <key>end</key>
1167 <string>(?=,|\})</string>
1168 <key>patterns</key>
1169 <array>
1170 <dict>
1171 <key>include</key>
1172 <string>#object-binding-element-propertyName</string>
1173 </dict>
1174 <dict>
1175 <key>include</key>
1176 <string>#binding-element</string>
1177 </dict>
1178 </array>
1179 </dict>
1180 <dict>
1181 <key>include</key>
1182 <string>#object-binding-pattern</string>
1183 </dict>
1184 <dict>
1185 <key>include</key>
1186 <string>#destructuring-variable-rest</string>
1187 </dict>
1188 <dict>
1189 <key>include</key>
1190 <string>#variable-initializer</string>
1191 </dict>
1192 <dict>
1193 <key>include</key>
1194 <string>#punctuation-comma</string>
1195 </dict>
1196 </array>
1197 </dict>
1198 <key>object-binding-element-const</key>
1199 <dict>
1200 <key>patterns</key>
1201 <array>
1202 <dict>
1203 <key>include</key>
1204 <string>#comment</string>
1205 </dict>
1206 <dict>
1207 <key>begin</key>
1208 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1209 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1210 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1211 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1212 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1213 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1214 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1215 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1216 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1217)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1218 <key>end</key>
1219 <string>(?=,|\})</string>
1220 <key>patterns</key>
1221 <array>
1222 <dict>
1223 <key>include</key>
1224 <string>#object-binding-element-propertyName</string>
1225 </dict>
1226 <dict>
1227 <key>include</key>
1228 <string>#binding-element-const</string>
1229 </dict>
1230 </array>
1231 </dict>
1232 <dict>
1233 <key>include</key>
1234 <string>#object-binding-pattern-const</string>
1235 </dict>
1236 <dict>
1237 <key>include</key>
1238 <string>#destructuring-variable-rest-const</string>
1239 </dict>
1240 <dict>
1241 <key>include</key>
1242 <string>#variable-initializer</string>
1243 </dict>
1244 <dict>
1245 <key>include</key>
1246 <string>#punctuation-comma</string>
1247 </dict>
1248 </array>
1249 </dict>
1250 <key>object-binding-element-propertyName</key>
1251 <dict>
1252 <key>begin</key>
1253 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1254 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1255 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1256 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1257 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1258 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1259 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1260 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1261 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1262)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1263 <key>end</key>
1264 <string>(:)</string>
1265 <key>endCaptures</key>
1266 <dict>
1267 <key>0</key>
1268 <dict>
1269 <key>name</key>
1270 <string>punctuation.destructuring.tsx</string>
1271 </dict>
1272 </dict>
1273 <key>patterns</key>
1274 <array>
1275 <dict>
1276 <key>include</key>
1277 <string>#string</string>
1278 </dict>
1279 <dict>
1280 <key>include</key>
1281 <string>#array-literal</string>
1282 </dict>
1283 <dict>
1284 <key>include</key>
1285 <string>#numeric-literal</string>
1286 </dict>
1287 <dict>
1288 <key>name</key>
1289 <string>variable.object.property.tsx</string>
1290 <key>match</key>
1291 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
1292 </dict>
1293 </array>
1294 </dict>
1295 <key>binding-element</key>
1296 <dict>
1297 <key>patterns</key>
1298 <array>
1299 <dict>
1300 <key>include</key>
1301 <string>#comment</string>
1302 </dict>
1303 <dict>
1304 <key>include</key>
1305 <string>#string</string>
1306 </dict>
1307 <dict>
1308 <key>include</key>
1309 <string>#numeric-literal</string>
1310 </dict>
1311 <dict>
1312 <key>include</key>
1313 <string>#regex</string>
1314 </dict>
1315 <dict>
1316 <key>include</key>
1317 <string>#object-binding-pattern</string>
1318 </dict>
1319 <dict>
1320 <key>include</key>
1321 <string>#array-binding-pattern</string>
1322 </dict>
1323 <dict>
1324 <key>include</key>
1325 <string>#destructuring-variable-rest</string>
1326 </dict>
1327 <dict>
1328 <key>include</key>
1329 <string>#variable-initializer</string>
1330 </dict>
1331 </array>
1332 </dict>
1333 <key>binding-element-const</key>
1334 <dict>
1335 <key>patterns</key>
1336 <array>
1337 <dict>
1338 <key>include</key>
1339 <string>#comment</string>
1340 </dict>
1341 <dict>
1342 <key>include</key>
1343 <string>#string</string>
1344 </dict>
1345 <dict>
1346 <key>include</key>
1347 <string>#numeric-literal</string>
1348 </dict>
1349 <dict>
1350 <key>include</key>
1351 <string>#regex</string>
1352 </dict>
1353 <dict>
1354 <key>include</key>
1355 <string>#object-binding-pattern-const</string>
1356 </dict>
1357 <dict>
1358 <key>include</key>
1359 <string>#array-binding-pattern-const</string>
1360 </dict>
1361 <dict>
1362 <key>include</key>
1363 <string>#destructuring-variable-rest-const</string>
1364 </dict>
1365 <dict>
1366 <key>include</key>
1367 <string>#variable-initializer</string>
1368 </dict>
1369 </array>
1370 </dict>
1371 <key>destructuring-variable-rest</key>
1372 <dict>
1373 <key>match</key>
1374 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1375 <key>captures</key>
1376 <dict>
1377 <key>1</key>
1378 <dict>
1379 <key>name</key>
1380 <string>keyword.operator.rest.tsx</string>
1381 </dict>
1382 <key>2</key>
1383 <dict>
1384 <key>name</key>
1385 <string>meta.definition.variable.tsx variable.other.readwrite.tsx</string>
1386 </dict>
1387 </dict>
1388 </dict>
1389 <key>destructuring-variable-rest-const</key>
1390 <dict>
1391 <key>match</key>
1392 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1393 <key>captures</key>
1394 <dict>
1395 <key>1</key>
1396 <dict>
1397 <key>name</key>
1398 <string>keyword.operator.rest.tsx</string>
1399 </dict>
1400 <key>2</key>
1401 <dict>
1402 <key>name</key>
1403 <string>meta.definition.variable.tsx variable.other.constant.tsx</string>
1404 </dict>
1405 </dict>
1406 </dict>
1407 <key>object-binding-pattern</key>
1408 <dict>
1409 <key>begin</key>
1410 <string>(?:(\.\.\.)\s*)?(\{)</string>
1411 <key>beginCaptures</key>
1412 <dict>
1413 <key>1</key>
1414 <dict>
1415 <key>name</key>
1416 <string>keyword.operator.rest.tsx</string>
1417 </dict>
1418 <key>2</key>
1419 <dict>
1420 <key>name</key>
1421 <string>punctuation.definition.binding-pattern.object.tsx</string>
1422 </dict>
1423 </dict>
1424 <key>end</key>
1425 <string>\}</string>
1426 <key>endCaptures</key>
1427 <dict>
1428 <key>0</key>
1429 <dict>
1430 <key>name</key>
1431 <string>punctuation.definition.binding-pattern.object.tsx</string>
1432 </dict>
1433 </dict>
1434 <key>patterns</key>
1435 <array>
1436 <dict>
1437 <key>include</key>
1438 <string>#object-binding-element</string>
1439 </dict>
1440 </array>
1441 </dict>
1442 <key>object-binding-pattern-const</key>
1443 <dict>
1444 <key>begin</key>
1445 <string>(?:(\.\.\.)\s*)?(\{)</string>
1446 <key>beginCaptures</key>
1447 <dict>
1448 <key>1</key>
1449 <dict>
1450 <key>name</key>
1451 <string>keyword.operator.rest.tsx</string>
1452 </dict>
1453 <key>2</key>
1454 <dict>
1455 <key>name</key>
1456 <string>punctuation.definition.binding-pattern.object.tsx</string>
1457 </dict>
1458 </dict>
1459 <key>end</key>
1460 <string>\}</string>
1461 <key>endCaptures</key>
1462 <dict>
1463 <key>0</key>
1464 <dict>
1465 <key>name</key>
1466 <string>punctuation.definition.binding-pattern.object.tsx</string>
1467 </dict>
1468 </dict>
1469 <key>patterns</key>
1470 <array>
1471 <dict>
1472 <key>include</key>
1473 <string>#object-binding-element-const</string>
1474 </dict>
1475 </array>
1476 </dict>
1477 <key>array-binding-pattern</key>
1478 <dict>
1479 <key>begin</key>
1480 <string>(?:(\.\.\.)\s*)?(\[)</string>
1481 <key>beginCaptures</key>
1482 <dict>
1483 <key>1</key>
1484 <dict>
1485 <key>name</key>
1486 <string>keyword.operator.rest.tsx</string>
1487 </dict>
1488 <key>2</key>
1489 <dict>
1490 <key>name</key>
1491 <string>punctuation.definition.binding-pattern.array.tsx</string>
1492 </dict>
1493 </dict>
1494 <key>end</key>
1495 <string>\]</string>
1496 <key>endCaptures</key>
1497 <dict>
1498 <key>0</key>
1499 <dict>
1500 <key>name</key>
1501 <string>punctuation.definition.binding-pattern.array.tsx</string>
1502 </dict>
1503 </dict>
1504 <key>patterns</key>
1505 <array>
1506 <dict>
1507 <key>include</key>
1508 <string>#binding-element</string>
1509 </dict>
1510 <dict>
1511 <key>include</key>
1512 <string>#punctuation-comma</string>
1513 </dict>
1514 </array>
1515 </dict>
1516 <key>array-binding-pattern-const</key>
1517 <dict>
1518 <key>begin</key>
1519 <string>(?:(\.\.\.)\s*)?(\[)</string>
1520 <key>beginCaptures</key>
1521 <dict>
1522 <key>1</key>
1523 <dict>
1524 <key>name</key>
1525 <string>keyword.operator.rest.tsx</string>
1526 </dict>
1527 <key>2</key>
1528 <dict>
1529 <key>name</key>
1530 <string>punctuation.definition.binding-pattern.array.tsx</string>
1531 </dict>
1532 </dict>
1533 <key>end</key>
1534 <string>\]</string>
1535 <key>endCaptures</key>
1536 <dict>
1537 <key>0</key>
1538 <dict>
1539 <key>name</key>
1540 <string>punctuation.definition.binding-pattern.array.tsx</string>
1541 </dict>
1542 </dict>
1543 <key>patterns</key>
1544 <array>
1545 <dict>
1546 <key>include</key>
1547 <string>#binding-element-const</string>
1548 </dict>
1549 <dict>
1550 <key>include</key>
1551 <string>#punctuation-comma</string>
1552 </dict>
1553 </array>
1554 </dict>
1555 <key>parameter-name</key>
1556 <dict>
1557 <key>patterns</key>
1558 <array>
1559 <dict>
1560 <key>match</key>
1561 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
1562 <key>captures</key>
1563 <dict>
1564 <key>1</key>
1565 <dict>
1566 <key>name</key>
1567 <string>storage.modifier.tsx</string>
1568 </dict>
1569 </dict>
1570 </dict>
1571 <dict>
1572 <key>match</key>
1573 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
1574# function assignment |
1575(=\s*(
1576 ((async\s+)?(
1577 (function\s*[(&lt;*]) |
1578 (function\s+) |
1579 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1580 )) |
1581 ((async\s*)?(
1582 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1583 # sure shot arrow functions even if =&gt; is on new line
1584(
1585 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1586 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1587 (
1588 ([)]\s*:) | # ():
1589 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1590 )
1591) |
1592(
1593 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1594) |
1595# arrow function possible to detect only with =&gt; on same line
1596(
1597 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1598 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1599 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1600 \s*=&gt; # arrow operator
1601)
1602 ))
1603)) |
1604# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
1605(:\s*(
1606 (&lt;) |
1607 ([(]\s*(
1608 ([)]) |
1609 (\.\.\.) |
1610 ([_$[:alnum:]]+\s*(
1611 ([:,?=])|
1612 ([)]\s*=&gt;)
1613 ))
1614 ))
1615)) |
1616(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
1617(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
1618(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1619 ((async\s+)?(
1620 (function\s*[(&lt;*]) |
1621 (function\s+) |
1622 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1623 )) |
1624 ((async\s*)?(
1625 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
1626 # sure shot arrow functions even if =&gt; is on new line
1627(
1628 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
1629 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
1630 (
1631 ([)]\s*:) | # ():
1632 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1633 )
1634) |
1635(
1636 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1637) |
1638# arrow function possible to detect only with =&gt; on same line
1639(
1640 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
1641 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
1642 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
1643 \s*=&gt; # arrow operator
1644)
1645 ))
1646)))</string>
1647 <key>captures</key>
1648 <dict>
1649 <key>1</key>
1650 <dict>
1651 <key>name</key>
1652 <string>storage.modifier.tsx</string>
1653 </dict>
1654 <key>2</key>
1655 <dict>
1656 <key>name</key>
1657 <string>keyword.operator.rest.tsx</string>
1658 </dict>
1659 <key>3</key>
1660 <dict>
1661 <key>name</key>
1662 <string>entity.name.function.tsx variable.language.this.tsx</string>
1663 </dict>
1664 <key>4</key>
1665 <dict>
1666 <key>name</key>
1667 <string>entity.name.function.tsx</string>
1668 </dict>
1669 <key>5</key>
1670 <dict>
1671 <key>name</key>
1672 <string>keyword.operator.optional.tsx</string>
1673 </dict>
1674 </dict>
1675 </dict>
1676 <dict>
1677 <key>match</key>
1678 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)</string>
1679 <key>captures</key>
1680 <dict>
1681 <key>1</key>
1682 <dict>
1683 <key>name</key>
1684 <string>storage.modifier.tsx</string>
1685 </dict>
1686 <key>2</key>
1687 <dict>
1688 <key>name</key>
1689 <string>keyword.operator.rest.tsx</string>
1690 </dict>
1691 <key>3</key>
1692 <dict>
1693 <key>name</key>
1694 <string>variable.parameter.tsx variable.language.this.tsx</string>
1695 </dict>
1696 <key>4</key>
1697 <dict>
1698 <key>name</key>
1699 <string>variable.parameter.tsx</string>
1700 </dict>
1701 <key>5</key>
1702 <dict>
1703 <key>name</key>
1704 <string>keyword.operator.optional.tsx</string>
1705 </dict>
1706 </dict>
1707 </dict>
1708 </array>
1709 </dict>
1710 <key>destructuring-parameter</key>
1711 <dict>
1712 <key>patterns</key>
1713 <array>
1714 <dict>
1715 <key>name</key>
1716 <string>meta.parameter.object-binding-pattern.tsx</string>
1717 <key>begin</key>
1718 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\{)</string>
1719 <key>beginCaptures</key>
1720 <dict>
1721 <key>1</key>
1722 <dict>
1723 <key>name</key>
1724 <string>keyword.operator.rest.tsx</string>
1725 </dict>
1726 <key>2</key>
1727 <dict>
1728 <key>name</key>
1729 <string>punctuation.definition.binding-pattern.object.tsx</string>
1730 </dict>
1731 </dict>
1732 <key>end</key>
1733 <string>\}</string>
1734 <key>endCaptures</key>
1735 <dict>
1736 <key>0</key>
1737 <dict>
1738 <key>name</key>
1739 <string>punctuation.definition.binding-pattern.object.tsx</string>
1740 </dict>
1741 </dict>
1742 <key>patterns</key>
1743 <array>
1744 <dict>
1745 <key>include</key>
1746 <string>#parameter-object-binding-element</string>
1747 </dict>
1748 </array>
1749 </dict>
1750 <dict>
1751 <key>name</key>
1752 <string>meta.paramter.array-binding-pattern.tsx</string>
1753 <key>begin</key>
1754 <string>(?&lt;!=|:)\s*(?:(\.\.\.)\s*)?(\[)</string>
1755 <key>beginCaptures</key>
1756 <dict>
1757 <key>1</key>
1758 <dict>
1759 <key>name</key>
1760 <string>keyword.operator.rest.tsx</string>
1761 </dict>
1762 <key>2</key>
1763 <dict>
1764 <key>name</key>
1765 <string>punctuation.definition.binding-pattern.array.tsx</string>
1766 </dict>
1767 </dict>
1768 <key>end</key>
1769 <string>\]</string>
1770 <key>endCaptures</key>
1771 <dict>
1772 <key>0</key>
1773 <dict>
1774 <key>name</key>
1775 <string>punctuation.definition.binding-pattern.array.tsx</string>
1776 </dict>
1777 </dict>
1778 <key>patterns</key>
1779 <array>
1780 <dict>
1781 <key>include</key>
1782 <string>#parameter-binding-element</string>
1783 </dict>
1784 <dict>
1785 <key>include</key>
1786 <string>#punctuation-comma</string>
1787 </dict>
1788 </array>
1789 </dict>
1790 </array>
1791 </dict>
1792 <key>parameter-object-binding-element</key>
1793 <dict>
1794 <key>patterns</key>
1795 <array>
1796 <dict>
1797 <key>include</key>
1798 <string>#comment</string>
1799 </dict>
1800 <dict>
1801 <key>begin</key>
1802 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1803 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1804 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1805 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1806 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1807 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1808 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1809 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1810 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1811)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:))</string>
1812 <key>end</key>
1813 <string>(?=,|\})</string>
1814 <key>patterns</key>
1815 <array>
1816 <dict>
1817 <key>include</key>
1818 <string>#object-binding-element-propertyName</string>
1819 </dict>
1820 <dict>
1821 <key>include</key>
1822 <string>#parameter-binding-element</string>
1823 </dict>
1824 <dict>
1825 <key>include</key>
1826 <string>#paren-expression</string>
1827 </dict>
1828 </array>
1829 </dict>
1830 <dict>
1831 <key>include</key>
1832 <string>#parameter-object-binding-pattern</string>
1833 </dict>
1834 <dict>
1835 <key>include</key>
1836 <string>#destructuring-parameter-rest</string>
1837 </dict>
1838 <dict>
1839 <key>include</key>
1840 <string>#variable-initializer</string>
1841 </dict>
1842 <dict>
1843 <key>include</key>
1844 <string>#punctuation-comma</string>
1845 </dict>
1846 </array>
1847 </dict>
1848 <key>parameter-binding-element</key>
1849 <dict>
1850 <key>patterns</key>
1851 <array>
1852 <dict>
1853 <key>include</key>
1854 <string>#comment</string>
1855 </dict>
1856 <dict>
1857 <key>include</key>
1858 <string>#string</string>
1859 </dict>
1860 <dict>
1861 <key>include</key>
1862 <string>#numeric-literal</string>
1863 </dict>
1864 <dict>
1865 <key>include</key>
1866 <string>#regex</string>
1867 </dict>
1868 <dict>
1869 <key>include</key>
1870 <string>#parameter-object-binding-pattern</string>
1871 </dict>
1872 <dict>
1873 <key>include</key>
1874 <string>#parameter-array-binding-pattern</string>
1875 </dict>
1876 <dict>
1877 <key>include</key>
1878 <string>#destructuring-parameter-rest</string>
1879 </dict>
1880 <dict>
1881 <key>include</key>
1882 <string>#variable-initializer</string>
1883 </dict>
1884 </array>
1885 </dict>
1886 <key>destructuring-parameter-rest</key>
1887 <dict>
1888 <key>match</key>
1889 <string>(?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)</string>
1890 <key>captures</key>
1891 <dict>
1892 <key>1</key>
1893 <dict>
1894 <key>name</key>
1895 <string>keyword.operator.rest.tsx</string>
1896 </dict>
1897 <key>2</key>
1898 <dict>
1899 <key>name</key>
1900 <string>variable.parameter.tsx</string>
1901 </dict>
1902 </dict>
1903 </dict>
1904 <key>parameter-object-binding-pattern</key>
1905 <dict>
1906 <key>begin</key>
1907 <string>(?:(\.\.\.)\s*)?(\{)</string>
1908 <key>beginCaptures</key>
1909 <dict>
1910 <key>1</key>
1911 <dict>
1912 <key>name</key>
1913 <string>keyword.operator.rest.tsx</string>
1914 </dict>
1915 <key>2</key>
1916 <dict>
1917 <key>name</key>
1918 <string>punctuation.definition.binding-pattern.object.tsx</string>
1919 </dict>
1920 </dict>
1921 <key>end</key>
1922 <string>\}</string>
1923 <key>endCaptures</key>
1924 <dict>
1925 <key>0</key>
1926 <dict>
1927 <key>name</key>
1928 <string>punctuation.definition.binding-pattern.object.tsx</string>
1929 </dict>
1930 </dict>
1931 <key>patterns</key>
1932 <array>
1933 <dict>
1934 <key>include</key>
1935 <string>#parameter-object-binding-element</string>
1936 </dict>
1937 </array>
1938 </dict>
1939 <key>parameter-array-binding-pattern</key>
1940 <dict>
1941 <key>begin</key>
1942 <string>(?:(\.\.\.)\s*)?(\[)</string>
1943 <key>beginCaptures</key>
1944 <dict>
1945 <key>1</key>
1946 <dict>
1947 <key>name</key>
1948 <string>keyword.operator.rest.tsx</string>
1949 </dict>
1950 <key>2</key>
1951 <dict>
1952 <key>name</key>
1953 <string>punctuation.definition.binding-pattern.array.tsx</string>
1954 </dict>
1955 </dict>
1956 <key>end</key>
1957 <string>\]</string>
1958 <key>endCaptures</key>
1959 <dict>
1960 <key>0</key>
1961 <dict>
1962 <key>name</key>
1963 <string>punctuation.definition.binding-pattern.array.tsx</string>
1964 </dict>
1965 </dict>
1966 <key>patterns</key>
1967 <array>
1968 <dict>
1969 <key>include</key>
1970 <string>#parameter-binding-element</string>
1971 </dict>
1972 <dict>
1973 <key>include</key>
1974 <string>#punctuation-comma</string>
1975 </dict>
1976 </array>
1977 </dict>
1978 <key>field-declaration</key>
1979 <dict>
1980 <key>name</key>
1981 <string>meta.field.declaration.tsx</string>
1982 <key>begin</key>
1983 <string>(?x)(?&lt;!\()(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s+)?(?=\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
1984 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
1985 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
1986 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
1987 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
1988 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
1989 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
1990 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
1991 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
1992)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$))</string>
1993 <key>beginCaptures</key>
1994 <dict>
1995 <key>1</key>
1996 <dict>
1997 <key>name</key>
1998 <string>storage.modifier.tsx</string>
1999 </dict>
2000 </dict>
2001 <key>end</key>
2002 <string>(?x)(?=\}|;|,|$|(^(?!\s*((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2003 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2004 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2005 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2006 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2007 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2008 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2009 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2010 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2011)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?&lt;=\})</string>
2012 <key>patterns</key>
2013 <array>
2014 <dict>
2015 <key>include</key>
2016 <string>#variable-initializer</string>
2017 </dict>
2018 <dict>
2019 <key>include</key>
2020 <string>#type-annotation</string>
2021 </dict>
2022 <dict>
2023 <key>include</key>
2024 <string>#string</string>
2025 </dict>
2026 <dict>
2027 <key>include</key>
2028 <string>#array-literal</string>
2029 </dict>
2030 <dict>
2031 <key>include</key>
2032 <string>#numeric-literal</string>
2033 </dict>
2034 <dict>
2035 <key>include</key>
2036 <string>#comment</string>
2037 </dict>
2038 <dict>
2039 <key>match</key>
2040 <string>(?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s*
2041# function assignment |
2042(=\s*(
2043 ((async\s+)?(
2044 (function\s*[(&lt;*]) |
2045 (function\s+) |
2046 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2047 )) |
2048 ((async\s*)?(
2049 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2050 # sure shot arrow functions even if =&gt; is on new line
2051(
2052 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2053 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2054 (
2055 ([)]\s*:) | # ():
2056 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2057 )
2058) |
2059(
2060 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2061) |
2062# arrow function possible to detect only with =&gt; on same line
2063(
2064 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2065 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2066 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2067 \s*=&gt; # arrow operator
2068)
2069 ))
2070)) |
2071# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
2072(:\s*(
2073 (&lt;) |
2074 ([(]\s*(
2075 ([)]) |
2076 (\.\.\.) |
2077 ([_$[:alnum:]]+\s*(
2078 ([:,?=])|
2079 ([)]\s*=&gt;)
2080 ))
2081 ))
2082)) |
2083(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
2084(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
2085(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
2086 ((async\s+)?(
2087 (function\s*[(&lt;*]) |
2088 (function\s+) |
2089 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2090 )) |
2091 ((async\s*)?(
2092 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
2093 # sure shot arrow functions even if =&gt; is on new line
2094(
2095 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2096 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2097 (
2098 ([)]\s*:) | # ():
2099 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2100 )
2101) |
2102(
2103 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2104) |
2105# arrow function possible to detect only with =&gt; on same line
2106(
2107 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2108 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2109 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2110 \s*=&gt; # arrow operator
2111)
2112 ))
2113)))</string>
2114 <key>captures</key>
2115 <dict>
2116 <key>1</key>
2117 <dict>
2118 <key>name</key>
2119 <string>meta.definition.property.tsx entity.name.function.tsx</string>
2120 </dict>
2121 <key>2</key>
2122 <dict>
2123 <key>name</key>
2124 <string>keyword.operator.optional.tsx</string>
2125 </dict>
2126 <key>3</key>
2127 <dict>
2128 <key>name</key>
2129 <string>keyword.operator.definiteassignment.tsx</string>
2130 </dict>
2131 </dict>
2132 </dict>
2133 <dict>
2134 <key>name</key>
2135 <string>meta.definition.property.tsx variable.object.property.tsx</string>
2136 <key>match</key>
2137 <string>\#?[_$[:alpha:]][_$[:alnum:]]*</string>
2138 </dict>
2139 <dict>
2140 <key>name</key>
2141 <string>keyword.operator.optional.tsx</string>
2142 <key>match</key>
2143 <string>\?</string>
2144 </dict>
2145 <dict>
2146 <key>name</key>
2147 <string>keyword.operator.definiteassignment.tsx</string>
2148 <key>match</key>
2149 <string>\!</string>
2150 </dict>
2151 </array>
2152 </dict>
2153 <key>variable-initializer</key>
2154 <dict>
2155 <key>patterns</key>
2156 <array>
2157 <dict>
2158 <key>begin</key>
2159 <string>(?&lt;!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=&gt;\s*$)</string>
2160 <key>beginCaptures</key>
2161 <dict>
2162 <key>1</key>
2163 <dict>
2164 <key>name</key>
2165 <string>keyword.operator.assignment.tsx</string>
2166 </dict>
2167 </dict>
2168 <key>end</key>
2169 <string>(?=$|^|[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))</string>
2170 <key>patterns</key>
2171 <array>
2172 <dict>
2173 <key>include</key>
2174 <string>#expression</string>
2175 </dict>
2176 </array>
2177 </dict>
2178 <dict>
2179 <key>begin</key>
2180 <string>(?&lt;!=|!)(=)(?!=)</string>
2181 <key>beginCaptures</key>
2182 <dict>
2183 <key>1</key>
2184 <dict>
2185 <key>name</key>
2186 <string>keyword.operator.assignment.tsx</string>
2187 </dict>
2188 </dict>
2189 <key>end</key>
2190 <string>(?=[,);}\]]|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(of|in)\s+))|(?=^\s*$)|(?&lt;![\|\&amp;\+\-\*\/])(?&lt;=\S)(?&lt;!=)(?=\s*$)</string>
2191 <key>patterns</key>
2192 <array>
2193 <dict>
2194 <key>include</key>
2195 <string>#expression</string>
2196 </dict>
2197 </array>
2198 </dict>
2199 </array>
2200 </dict>
2201 <key>function-declaration</key>
2202 <dict>
2203 <key>name</key>
2204 <string>meta.function.tsx</string>
2205 <key>begin</key>
2206 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2207 <key>beginCaptures</key>
2208 <dict>
2209 <key>1</key>
2210 <dict>
2211 <key>name</key>
2212 <string>keyword.control.export.tsx</string>
2213 </dict>
2214 <key>2</key>
2215 <dict>
2216 <key>name</key>
2217 <string>storage.modifier.tsx</string>
2218 </dict>
2219 <key>3</key>
2220 <dict>
2221 <key>name</key>
2222 <string>storage.modifier.async.tsx</string>
2223 </dict>
2224 <key>4</key>
2225 <dict>
2226 <key>name</key>
2227 <string>storage.type.function.tsx</string>
2228 </dict>
2229 <key>5</key>
2230 <dict>
2231 <key>name</key>
2232 <string>keyword.generator.asterisk.tsx</string>
2233 </dict>
2234 <key>6</key>
2235 <dict>
2236 <key>name</key>
2237 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2238 </dict>
2239 </dict>
2240 <key>end</key>
2241 <string>(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))|(?&lt;=\})</string>
2242 <key>patterns</key>
2243 <array>
2244 <dict>
2245 <key>include</key>
2246 <string>#function-name</string>
2247 </dict>
2248 <dict>
2249 <key>include</key>
2250 <string>#function-body</string>
2251 </dict>
2252 </array>
2253 </dict>
2254 <key>function-expression</key>
2255 <dict>
2256 <key>name</key>
2257 <string>meta.function.expression.tsx</string>
2258 <key>begin</key>
2259 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?&lt;=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s*</string>
2260 <key>beginCaptures</key>
2261 <dict>
2262 <key>1</key>
2263 <dict>
2264 <key>name</key>
2265 <string>storage.modifier.async.tsx</string>
2266 </dict>
2267 <key>2</key>
2268 <dict>
2269 <key>name</key>
2270 <string>storage.type.function.tsx</string>
2271 </dict>
2272 <key>3</key>
2273 <dict>
2274 <key>name</key>
2275 <string>keyword.generator.asterisk.tsx</string>
2276 </dict>
2277 <key>4</key>
2278 <dict>
2279 <key>name</key>
2280 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2281 </dict>
2282 </dict>
2283 <key>end</key>
2284 <string>(?=;)|(?&lt;=\})</string>
2285 <key>patterns</key>
2286 <array>
2287 <dict>
2288 <key>include</key>
2289 <string>#function-name</string>
2290 </dict>
2291 <dict>
2292 <key>include</key>
2293 <string>#single-line-comment-consuming-line-ending</string>
2294 </dict>
2295 <dict>
2296 <key>include</key>
2297 <string>#function-body</string>
2298 </dict>
2299 </array>
2300 </dict>
2301 <key>function-name</key>
2302 <dict>
2303 <key>name</key>
2304 <string>meta.definition.function.tsx entity.name.function.tsx</string>
2305 <key>match</key>
2306 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2307 </dict>
2308 <key>function-body</key>
2309 <dict>
2310 <key>patterns</key>
2311 <array>
2312 <dict>
2313 <key>include</key>
2314 <string>#comment</string>
2315 </dict>
2316 <dict>
2317 <key>include</key>
2318 <string>#type-parameters</string>
2319 </dict>
2320 <dict>
2321 <key>include</key>
2322 <string>#function-parameters</string>
2323 </dict>
2324 <dict>
2325 <key>include</key>
2326 <string>#return-type</string>
2327 </dict>
2328 <dict>
2329 <key>include</key>
2330 <string>#type-function-return-type</string>
2331 </dict>
2332 <dict>
2333 <key>include</key>
2334 <string>#decl-block</string>
2335 </dict>
2336 <dict>
2337 <key>name</key>
2338 <string>keyword.generator.asterisk.tsx</string>
2339 <key>match</key>
2340 <string>\*</string>
2341 </dict>
2342 </array>
2343 </dict>
2344 <key>method-declaration</key>
2345 <dict>
2346 <key>patterns</key>
2347 <array>
2348 <dict>
2349 <key>name</key>
2350 <string>meta.method.declaration.tsx</string>
2351 <key>begin</key>
2352 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
2353 <key>beginCaptures</key>
2354 <dict>
2355 <key>1</key>
2356 <dict>
2357 <key>name</key>
2358 <string>storage.modifier.tsx</string>
2359 </dict>
2360 <key>2</key>
2361 <dict>
2362 <key>name</key>
2363 <string>storage.modifier.tsx</string>
2364 </dict>
2365 <key>3</key>
2366 <dict>
2367 <key>name</key>
2368 <string>storage.modifier.tsx</string>
2369 </dict>
2370 <key>4</key>
2371 <dict>
2372 <key>name</key>
2373 <string>storage.modifier.async.tsx</string>
2374 </dict>
2375 <key>5</key>
2376 <dict>
2377 <key>name</key>
2378 <string>storage.type.tsx</string>
2379 </dict>
2380 </dict>
2381 <key>end</key>
2382 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2383 <key>patterns</key>
2384 <array>
2385 <dict>
2386 <key>include</key>
2387 <string>#method-declaration-name</string>
2388 </dict>
2389 <dict>
2390 <key>include</key>
2391 <string>#function-body</string>
2392 </dict>
2393 </array>
2394 </dict>
2395 <dict>
2396 <key>name</key>
2397 <string>meta.method.declaration.tsx</string>
2398 <key>begin</key>
2399 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2400 <key>beginCaptures</key>
2401 <dict>
2402 <key>1</key>
2403 <dict>
2404 <key>name</key>
2405 <string>storage.modifier.tsx</string>
2406 </dict>
2407 <key>2</key>
2408 <dict>
2409 <key>name</key>
2410 <string>storage.modifier.tsx</string>
2411 </dict>
2412 <key>3</key>
2413 <dict>
2414 <key>name</key>
2415 <string>storage.modifier.tsx</string>
2416 </dict>
2417 <key>4</key>
2418 <dict>
2419 <key>name</key>
2420 <string>storage.modifier.async.tsx</string>
2421 </dict>
2422 <key>5</key>
2423 <dict>
2424 <key>name</key>
2425 <string>keyword.operator.new.tsx</string>
2426 </dict>
2427 <key>6</key>
2428 <dict>
2429 <key>name</key>
2430 <string>keyword.generator.asterisk.tsx</string>
2431 </dict>
2432 </dict>
2433 <key>end</key>
2434 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2435 <key>patterns</key>
2436 <array>
2437 <dict>
2438 <key>include</key>
2439 <string>#method-declaration-name</string>
2440 </dict>
2441 <dict>
2442 <key>include</key>
2443 <string>#function-body</string>
2444 </dict>
2445 </array>
2446 </dict>
2447 <dict>
2448 <key>name</key>
2449 <string>meta.method.declaration.tsx</string>
2450 <key>begin</key>
2451 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2452 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2453 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2454 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2455 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2456 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2457 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2458 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2459 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2460)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2461 <key>beginCaptures</key>
2462 <dict>
2463 <key>1</key>
2464 <dict>
2465 <key>name</key>
2466 <string>storage.modifier.tsx</string>
2467 </dict>
2468 <key>2</key>
2469 <dict>
2470 <key>name</key>
2471 <string>storage.modifier.tsx</string>
2472 </dict>
2473 <key>3</key>
2474 <dict>
2475 <key>name</key>
2476 <string>storage.modifier.tsx</string>
2477 </dict>
2478 <key>4</key>
2479 <dict>
2480 <key>name</key>
2481 <string>storage.modifier.async.tsx</string>
2482 </dict>
2483 <key>5</key>
2484 <dict>
2485 <key>name</key>
2486 <string>storage.type.property.tsx</string>
2487 </dict>
2488 <key>6</key>
2489 <dict>
2490 <key>name</key>
2491 <string>keyword.generator.asterisk.tsx</string>
2492 </dict>
2493 </dict>
2494 <key>end</key>
2495 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
2496 <key>patterns</key>
2497 <array>
2498 <dict>
2499 <key>include</key>
2500 <string>#method-declaration-name</string>
2501 </dict>
2502 <dict>
2503 <key>include</key>
2504 <string>#function-body</string>
2505 </dict>
2506 </array>
2507 </dict>
2508 </array>
2509 </dict>
2510 <key>object-literal-method-declaration</key>
2511 <dict>
2512 <key>name</key>
2513 <string>meta.method.declaration.tsx</string>
2514 <key>begin</key>
2515 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2516 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2517 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2518 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2519 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2520 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2521 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2522 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2523 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2524)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2525 <key>beginCaptures</key>
2526 <dict>
2527 <key>1</key>
2528 <dict>
2529 <key>name</key>
2530 <string>storage.modifier.async.tsx</string>
2531 </dict>
2532 <key>2</key>
2533 <dict>
2534 <key>name</key>
2535 <string>storage.type.property.tsx</string>
2536 </dict>
2537 <key>3</key>
2538 <dict>
2539 <key>name</key>
2540 <string>keyword.generator.asterisk.tsx</string>
2541 </dict>
2542 </dict>
2543 <key>end</key>
2544 <string>(?=\}|;|,)|(?&lt;=\})</string>
2545 <key>patterns</key>
2546 <array>
2547 <dict>
2548 <key>include</key>
2549 <string>#method-declaration-name</string>
2550 </dict>
2551 <dict>
2552 <key>include</key>
2553 <string>#function-body</string>
2554 </dict>
2555 <dict>
2556 <key>begin</key>
2557 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2558 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2559 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2560 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2561 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2562 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2563 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2564 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2565 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2566)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?[\(])</string>
2567 <key>beginCaptures</key>
2568 <dict>
2569 <key>1</key>
2570 <dict>
2571 <key>name</key>
2572 <string>storage.modifier.async.tsx</string>
2573 </dict>
2574 <key>2</key>
2575 <dict>
2576 <key>name</key>
2577 <string>storage.type.property.tsx</string>
2578 </dict>
2579 <key>3</key>
2580 <dict>
2581 <key>name</key>
2582 <string>keyword.generator.asterisk.tsx</string>
2583 </dict>
2584 </dict>
2585 <key>end</key>
2586 <string>(?=\(|\&lt;)</string>
2587 <key>patterns</key>
2588 <array>
2589 <dict>
2590 <key>include</key>
2591 <string>#method-declaration-name</string>
2592 </dict>
2593 </array>
2594 </dict>
2595 </array>
2596 </dict>
2597 <key>method-declaration-name</key>
2598 <dict>
2599 <key>begin</key>
2600 <string>(?x)(?=((\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
2601 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
2602 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
2603 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
2604 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
2605 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
2606 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
2607 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
2608 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
2609)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\&lt;])</string>
2610 <key>end</key>
2611 <string>(?=\(|\&lt;)</string>
2612 <key>patterns</key>
2613 <array>
2614 <dict>
2615 <key>include</key>
2616 <string>#string</string>
2617 </dict>
2618 <dict>
2619 <key>include</key>
2620 <string>#array-literal</string>
2621 </dict>
2622 <dict>
2623 <key>include</key>
2624 <string>#numeric-literal</string>
2625 </dict>
2626 <dict>
2627 <key>name</key>
2628 <string>meta.definition.method.tsx entity.name.function.tsx</string>
2629 <key>match</key>
2630 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
2631 </dict>
2632 <dict>
2633 <key>name</key>
2634 <string>keyword.operator.optional.tsx</string>
2635 <key>match</key>
2636 <string>\?</string>
2637 </dict>
2638 </array>
2639 </dict>
2640 <key>arrow-function</key>
2641 <dict>
2642 <key>patterns</key>
2643 <array>
2644 <dict>
2645 <key>name</key>
2646 <string>meta.arrow.tsx</string>
2647 <key>match</key>
2648 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
2649 <key>captures</key>
2650 <dict>
2651 <key>1</key>
2652 <dict>
2653 <key>name</key>
2654 <string>storage.modifier.async.tsx</string>
2655 </dict>
2656 <key>2</key>
2657 <dict>
2658 <key>name</key>
2659 <string>variable.parameter.tsx</string>
2660 </dict>
2661 </dict>
2662 </dict>
2663 <dict>
2664 <key>name</key>
2665 <string>meta.arrow.tsx</string>
2666 <key>begin</key>
2667 <string>(?x) (?:
2668 (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)
2669)? ((?&lt;![})!\]])\s*
2670 (?=
2671 # sure shot arrow functions even if =&gt; is on new line
2672(
2673 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
2674 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
2675 (
2676 ([)]\s*:) | # ():
2677 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
2678 )
2679) |
2680(
2681 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
2682) |
2683# arrow function possible to detect only with =&gt; on same line
2684(
2685 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
2686 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
2687 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
2688 \s*=&gt; # arrow operator
2689)
2690 )
2691)</string>
2692 <key>beginCaptures</key>
2693 <dict>
2694 <key>1</key>
2695 <dict>
2696 <key>name</key>
2697 <string>storage.modifier.async.tsx</string>
2698 </dict>
2699 </dict>
2700 <key>end</key>
2701 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
2702 <key>patterns</key>
2703 <array>
2704 <dict>
2705 <key>include</key>
2706 <string>#comment</string>
2707 </dict>
2708 <dict>
2709 <key>include</key>
2710 <string>#type-parameters</string>
2711 </dict>
2712 <dict>
2713 <key>include</key>
2714 <string>#function-parameters</string>
2715 </dict>
2716 <dict>
2717 <key>include</key>
2718 <string>#arrow-return-type</string>
2719 </dict>
2720 <dict>
2721 <key>include</key>
2722 <string>#possibly-arrow-return-type</string>
2723 </dict>
2724 </array>
2725 </dict>
2726 <dict>
2727 <key>name</key>
2728 <string>meta.arrow.tsx</string>
2729 <key>begin</key>
2730 <string>=&gt;</string>
2731 <key>beginCaptures</key>
2732 <dict>
2733 <key>0</key>
2734 <dict>
2735 <key>name</key>
2736 <string>storage.type.function.arrow.tsx</string>
2737 </dict>
2738 </dict>
2739 <key>end</key>
2740 <string>((?&lt;=\}|\S)(?&lt;!=&gt;)|((?!\{)(?=\S)))(?!\/[\/\*])</string>
2741 <key>patterns</key>
2742 <array>
2743 <dict>
2744 <key>include</key>
2745 <string>#single-line-comment-consuming-line-ending</string>
2746 </dict>
2747 <dict>
2748 <key>include</key>
2749 <string>#decl-block</string>
2750 </dict>
2751 <dict>
2752 <key>include</key>
2753 <string>#expression</string>
2754 </dict>
2755 </array>
2756 </dict>
2757 </array>
2758 </dict>
2759 <key>indexer-declaration</key>
2760 <dict>
2761 <key>name</key>
2762 <string>meta.indexer.declaration.tsx</string>
2763 <key>begin</key>
2764 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:)</string>
2765 <key>beginCaptures</key>
2766 <dict>
2767 <key>1</key>
2768 <dict>
2769 <key>name</key>
2770 <string>storage.modifier.tsx</string>
2771 </dict>
2772 <key>2</key>
2773 <dict>
2774 <key>name</key>
2775 <string>meta.brace.square.tsx</string>
2776 </dict>
2777 <key>3</key>
2778 <dict>
2779 <key>name</key>
2780 <string>variable.parameter.tsx</string>
2781 </dict>
2782 </dict>
2783 <key>end</key>
2784 <string>(\])\s*(\?\s*)?|$</string>
2785 <key>endCaptures</key>
2786 <dict>
2787 <key>1</key>
2788 <dict>
2789 <key>name</key>
2790 <string>meta.brace.square.tsx</string>
2791 </dict>
2792 <key>2</key>
2793 <dict>
2794 <key>name</key>
2795 <string>keyword.operator.optional.tsx</string>
2796 </dict>
2797 </dict>
2798 <key>patterns</key>
2799 <array>
2800 <dict>
2801 <key>include</key>
2802 <string>#type-annotation</string>
2803 </dict>
2804 </array>
2805 </dict>
2806 <key>indexer-mapped-type-declaration</key>
2807 <dict>
2808 <key>name</key>
2809 <string>meta.indexer.mappedtype.declaration.tsx</string>
2810 <key>begin</key>
2811 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+</string>
2812 <key>beginCaptures</key>
2813 <dict>
2814 <key>1</key>
2815 <dict>
2816 <key>name</key>
2817 <string>keyword.operator.type.modifier.tsx</string>
2818 </dict>
2819 <key>2</key>
2820 <dict>
2821 <key>name</key>
2822 <string>storage.modifier.tsx</string>
2823 </dict>
2824 <key>3</key>
2825 <dict>
2826 <key>name</key>
2827 <string>meta.brace.square.tsx</string>
2828 </dict>
2829 <key>4</key>
2830 <dict>
2831 <key>name</key>
2832 <string>entity.name.type.tsx</string>
2833 </dict>
2834 <key>5</key>
2835 <dict>
2836 <key>name</key>
2837 <string>keyword.operator.expression.in.tsx</string>
2838 </dict>
2839 </dict>
2840 <key>end</key>
2841 <string>(\])([+-])?\s*(\?\s*)?|$</string>
2842 <key>endCaptures</key>
2843 <dict>
2844 <key>1</key>
2845 <dict>
2846 <key>name</key>
2847 <string>meta.brace.square.tsx</string>
2848 </dict>
2849 <key>2</key>
2850 <dict>
2851 <key>name</key>
2852 <string>keyword.operator.type.modifier.tsx</string>
2853 </dict>
2854 <key>3</key>
2855 <dict>
2856 <key>name</key>
2857 <string>keyword.operator.optional.tsx</string>
2858 </dict>
2859 </dict>
2860 <key>patterns</key>
2861 <array>
2862 <dict>
2863 <key>match</key>
2864 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+</string>
2865 <key>captures</key>
2866 <dict>
2867 <key>1</key>
2868 <dict>
2869 <key>name</key>
2870 <string>keyword.control.as.tsx</string>
2871 </dict>
2872 </dict>
2873 </dict>
2874 <dict>
2875 <key>include</key>
2876 <string>#type</string>
2877 </dict>
2878 </array>
2879 </dict>
2880 <key>function-parameters</key>
2881 <dict>
2882 <key>name</key>
2883 <string>meta.parameters.tsx</string>
2884 <key>begin</key>
2885 <string>\(</string>
2886 <key>beginCaptures</key>
2887 <dict>
2888 <key>0</key>
2889 <dict>
2890 <key>name</key>
2891 <string>punctuation.definition.parameters.begin.tsx</string>
2892 </dict>
2893 </dict>
2894 <key>end</key>
2895 <string>\)</string>
2896 <key>endCaptures</key>
2897 <dict>
2898 <key>0</key>
2899 <dict>
2900 <key>name</key>
2901 <string>punctuation.definition.parameters.end.tsx</string>
2902 </dict>
2903 </dict>
2904 <key>patterns</key>
2905 <array>
2906 <dict>
2907 <key>include</key>
2908 <string>#function-parameters-body</string>
2909 </dict>
2910 </array>
2911 </dict>
2912 <key>function-parameters-body</key>
2913 <dict>
2914 <key>patterns</key>
2915 <array>
2916 <dict>
2917 <key>include</key>
2918 <string>#comment</string>
2919 </dict>
2920 <dict>
2921 <key>include</key>
2922 <string>#string</string>
2923 </dict>
2924 <dict>
2925 <key>include</key>
2926 <string>#decorator</string>
2927 </dict>
2928 <dict>
2929 <key>include</key>
2930 <string>#destructuring-parameter</string>
2931 </dict>
2932 <dict>
2933 <key>include</key>
2934 <string>#parameter-name</string>
2935 </dict>
2936 <dict>
2937 <key>include</key>
2938 <string>#parameter-type-annotation</string>
2939 </dict>
2940 <dict>
2941 <key>include</key>
2942 <string>#variable-initializer</string>
2943 </dict>
2944 <dict>
2945 <key>name</key>
2946 <string>punctuation.separator.parameter.tsx</string>
2947 <key>match</key>
2948 <string>,</string>
2949 </dict>
2950 </array>
2951 </dict>
2952 <key>class-declaration</key>
2953 <dict>
2954 <key>name</key>
2955 <string>meta.class.tsx</string>
2956 <key>begin</key>
2957 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])</string>
2958 <key>beginCaptures</key>
2959 <dict>
2960 <key>1</key>
2961 <dict>
2962 <key>name</key>
2963 <string>keyword.control.export.tsx</string>
2964 </dict>
2965 <key>2</key>
2966 <dict>
2967 <key>name</key>
2968 <string>storage.modifier.tsx</string>
2969 </dict>
2970 <key>3</key>
2971 <dict>
2972 <key>name</key>
2973 <string>storage.modifier.tsx</string>
2974 </dict>
2975 <key>4</key>
2976 <dict>
2977 <key>name</key>
2978 <string>storage.type.class.tsx</string>
2979 </dict>
2980 </dict>
2981 <key>end</key>
2982 <string>(?&lt;=\})</string>
2983 <key>patterns</key>
2984 <array>
2985 <dict>
2986 <key>include</key>
2987 <string>#class-declaration-or-expression-patterns</string>
2988 </dict>
2989 </array>
2990 </dict>
2991 <key>class-expression</key>
2992 <dict>
2993 <key>name</key>
2994 <string>meta.class.tsx</string>
2995 <key>begin</key>
2996 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[&lt;{]|\/[\/*])</string>
2997 <key>beginCaptures</key>
2998 <dict>
2999 <key>1</key>
3000 <dict>
3001 <key>name</key>
3002 <string>storage.modifier.tsx</string>
3003 </dict>
3004 <key>2</key>
3005 <dict>
3006 <key>name</key>
3007 <string>storage.type.class.tsx</string>
3008 </dict>
3009 </dict>
3010 <key>end</key>
3011 <string>(?&lt;=\})</string>
3012 <key>patterns</key>
3013 <array>
3014 <dict>
3015 <key>include</key>
3016 <string>#class-declaration-or-expression-patterns</string>
3017 </dict>
3018 </array>
3019 </dict>
3020 <key>class-declaration-or-expression-patterns</key>
3021 <dict>
3022 <key>patterns</key>
3023 <array>
3024 <dict>
3025 <key>include</key>
3026 <string>#comment</string>
3027 </dict>
3028 <dict>
3029 <key>include</key>
3030 <string>#class-or-interface-heritage</string>
3031 </dict>
3032 <dict>
3033 <key>match</key>
3034 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3035 <key>captures</key>
3036 <dict>
3037 <key>0</key>
3038 <dict>
3039 <key>name</key>
3040 <string>entity.name.type.class.tsx</string>
3041 </dict>
3042 </dict>
3043 </dict>
3044 <dict>
3045 <key>include</key>
3046 <string>#type-parameters</string>
3047 </dict>
3048 <dict>
3049 <key>include</key>
3050 <string>#class-or-interface-body</string>
3051 </dict>
3052 </array>
3053 </dict>
3054 <key>interface-declaration</key>
3055 <dict>
3056 <key>name</key>
3057 <string>meta.interface.tsx</string>
3058 <key>begin</key>
3059 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])</string>
3060 <key>beginCaptures</key>
3061 <dict>
3062 <key>1</key>
3063 <dict>
3064 <key>name</key>
3065 <string>keyword.control.export.tsx</string>
3066 </dict>
3067 <key>2</key>
3068 <dict>
3069 <key>name</key>
3070 <string>storage.modifier.tsx</string>
3071 </dict>
3072 <key>3</key>
3073 <dict>
3074 <key>name</key>
3075 <string>storage.modifier.tsx</string>
3076 </dict>
3077 <key>4</key>
3078 <dict>
3079 <key>name</key>
3080 <string>storage.type.interface.tsx</string>
3081 </dict>
3082 </dict>
3083 <key>end</key>
3084 <string>(?&lt;=\})</string>
3085 <key>patterns</key>
3086 <array>
3087 <dict>
3088 <key>include</key>
3089 <string>#comment</string>
3090 </dict>
3091 <dict>
3092 <key>include</key>
3093 <string>#class-or-interface-heritage</string>
3094 </dict>
3095 <dict>
3096 <key>match</key>
3097 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
3098 <key>captures</key>
3099 <dict>
3100 <key>0</key>
3101 <dict>
3102 <key>name</key>
3103 <string>entity.name.type.interface.tsx</string>
3104 </dict>
3105 </dict>
3106 </dict>
3107 <dict>
3108 <key>include</key>
3109 <string>#type-parameters</string>
3110 </dict>
3111 <dict>
3112 <key>include</key>
3113 <string>#class-or-interface-body</string>
3114 </dict>
3115 </array>
3116 </dict>
3117 <key>class-or-interface-heritage</key>
3118 <dict>
3119 <key>begin</key>
3120 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3121 <key>beginCaptures</key>
3122 <dict>
3123 <key>1</key>
3124 <dict>
3125 <key>name</key>
3126 <string>storage.modifier.tsx</string>
3127 </dict>
3128 </dict>
3129 <key>end</key>
3130 <string>(?=\{)</string>
3131 <key>patterns</key>
3132 <array>
3133 <dict>
3134 <key>include</key>
3135 <string>#comment</string>
3136 </dict>
3137 <dict>
3138 <key>include</key>
3139 <string>#class-or-interface-heritage</string>
3140 </dict>
3141 <dict>
3142 <key>include</key>
3143 <string>#type-parameters</string>
3144 </dict>
3145 <dict>
3146 <key>include</key>
3147 <string>#expressionWithoutIdentifiers</string>
3148 </dict>
3149 <dict>
3150 <key>match</key>
3151 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*)</string>
3152 <key>captures</key>
3153 <dict>
3154 <key>1</key>
3155 <dict>
3156 <key>name</key>
3157 <string>entity.name.type.module.tsx</string>
3158 </dict>
3159 <key>2</key>
3160 <dict>
3161 <key>name</key>
3162 <string>punctuation.accessor.tsx</string>
3163 </dict>
3164 <key>3</key>
3165 <dict>
3166 <key>name</key>
3167 <string>punctuation.accessor.optional.tsx</string>
3168 </dict>
3169 </dict>
3170 </dict>
3171 <dict>
3172 <key>match</key>
3173 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3174 <key>captures</key>
3175 <dict>
3176 <key>1</key>
3177 <dict>
3178 <key>name</key>
3179 <string>entity.other.inherited-class.tsx</string>
3180 </dict>
3181 </dict>
3182 </dict>
3183 <dict>
3184 <key>include</key>
3185 <string>#expressionPunctuations</string>
3186 </dict>
3187 </array>
3188 </dict>
3189 <key>class-or-interface-body</key>
3190 <dict>
3191 <key>begin</key>
3192 <string>\{</string>
3193 <key>beginCaptures</key>
3194 <dict>
3195 <key>0</key>
3196 <dict>
3197 <key>name</key>
3198 <string>punctuation.definition.block.tsx</string>
3199 </dict>
3200 </dict>
3201 <key>end</key>
3202 <string>\}</string>
3203 <key>endCaptures</key>
3204 <dict>
3205 <key>0</key>
3206 <dict>
3207 <key>name</key>
3208 <string>punctuation.definition.block.tsx</string>
3209 </dict>
3210 </dict>
3211 <key>patterns</key>
3212 <array>
3213 <dict>
3214 <key>include</key>
3215 <string>#comment</string>
3216 </dict>
3217 <dict>
3218 <key>include</key>
3219 <string>#decorator</string>
3220 </dict>
3221 <dict>
3222 <key>begin</key>
3223 <string>(?&lt;=:)\s*</string>
3224 <key>end</key>
3225 <string>(?=\s|[;),}\]:\-\+]|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3226 <key>patterns</key>
3227 <array>
3228 <dict>
3229 <key>include</key>
3230 <string>#expression</string>
3231 </dict>
3232 </array>
3233 </dict>
3234 <dict>
3235 <key>include</key>
3236 <string>#method-declaration</string>
3237 </dict>
3238 <dict>
3239 <key>include</key>
3240 <string>#indexer-declaration</string>
3241 </dict>
3242 <dict>
3243 <key>include</key>
3244 <string>#field-declaration</string>
3245 </dict>
3246 <dict>
3247 <key>include</key>
3248 <string>#string</string>
3249 </dict>
3250 <dict>
3251 <key>include</key>
3252 <string>#type-annotation</string>
3253 </dict>
3254 <dict>
3255 <key>include</key>
3256 <string>#variable-initializer</string>
3257 </dict>
3258 <dict>
3259 <key>include</key>
3260 <string>#access-modifier</string>
3261 </dict>
3262 <dict>
3263 <key>include</key>
3264 <string>#property-accessor</string>
3265 </dict>
3266 <dict>
3267 <key>include</key>
3268 <string>#async-modifier</string>
3269 </dict>
3270 <dict>
3271 <key>include</key>
3272 <string>#after-operator-block-as-object-literal</string>
3273 </dict>
3274 <dict>
3275 <key>include</key>
3276 <string>#decl-block</string>
3277 </dict>
3278 <dict>
3279 <key>include</key>
3280 <string>#expression</string>
3281 </dict>
3282 <dict>
3283 <key>include</key>
3284 <string>#punctuation-comma</string>
3285 </dict>
3286 <dict>
3287 <key>include</key>
3288 <string>#punctuation-semicolon</string>
3289 </dict>
3290 </array>
3291 </dict>
3292 <key>access-modifier</key>
3293 <dict>
3294 <key>name</key>
3295 <string>storage.modifier.tsx</string>
3296 <key>match</key>
3297 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3298 </dict>
3299 <key>property-accessor</key>
3300 <dict>
3301 <key>name</key>
3302 <string>storage.type.property.tsx</string>
3303 <key>match</key>
3304 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3305 </dict>
3306 <key>async-modifier</key>
3307 <dict>
3308 <key>name</key>
3309 <string>storage.modifier.async.tsx</string>
3310 <key>match</key>
3311 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3312 </dict>
3313 <key>enum-declaration</key>
3314 <dict>
3315 <key>name</key>
3316 <string>meta.enum.declaration.tsx</string>
3317 <key>begin</key>
3318 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3319 <key>beginCaptures</key>
3320 <dict>
3321 <key>1</key>
3322 <dict>
3323 <key>name</key>
3324 <string>keyword.control.export.tsx</string>
3325 </dict>
3326 <key>2</key>
3327 <dict>
3328 <key>name</key>
3329 <string>storage.modifier.tsx</string>
3330 </dict>
3331 <key>3</key>
3332 <dict>
3333 <key>name</key>
3334 <string>storage.modifier.tsx</string>
3335 </dict>
3336 <key>4</key>
3337 <dict>
3338 <key>name</key>
3339 <string>storage.type.enum.tsx</string>
3340 </dict>
3341 <key>5</key>
3342 <dict>
3343 <key>name</key>
3344 <string>entity.name.type.enum.tsx</string>
3345 </dict>
3346 </dict>
3347 <key>end</key>
3348 <string>(?&lt;=\})</string>
3349 <key>patterns</key>
3350 <array>
3351 <dict>
3352 <key>include</key>
3353 <string>#comment</string>
3354 </dict>
3355 <dict>
3356 <key>begin</key>
3357 <string>\{</string>
3358 <key>beginCaptures</key>
3359 <dict>
3360 <key>0</key>
3361 <dict>
3362 <key>name</key>
3363 <string>punctuation.definition.block.tsx</string>
3364 </dict>
3365 </dict>
3366 <key>end</key>
3367 <string>\}</string>
3368 <key>endCaptures</key>
3369 <dict>
3370 <key>0</key>
3371 <dict>
3372 <key>name</key>
3373 <string>punctuation.definition.block.tsx</string>
3374 </dict>
3375 </dict>
3376 <key>patterns</key>
3377 <array>
3378 <dict>
3379 <key>include</key>
3380 <string>#comment</string>
3381 </dict>
3382 <dict>
3383 <key>begin</key>
3384 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3385 <key>beginCaptures</key>
3386 <dict>
3387 <key>0</key>
3388 <dict>
3389 <key>name</key>
3390 <string>variable.other.enummember.tsx</string>
3391 </dict>
3392 </dict>
3393 <key>end</key>
3394 <string>(?=,|\}|$)</string>
3395 <key>patterns</key>
3396 <array>
3397 <dict>
3398 <key>include</key>
3399 <string>#comment</string>
3400 </dict>
3401 <dict>
3402 <key>include</key>
3403 <string>#variable-initializer</string>
3404 </dict>
3405 </array>
3406 </dict>
3407 <dict>
3408 <key>begin</key>
3409 <string>(?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\])))</string>
3410 <key>end</key>
3411 <string>(?=,|\}|$)</string>
3412 <key>patterns</key>
3413 <array>
3414 <dict>
3415 <key>include</key>
3416 <string>#string</string>
3417 </dict>
3418 <dict>
3419 <key>include</key>
3420 <string>#array-literal</string>
3421 </dict>
3422 <dict>
3423 <key>include</key>
3424 <string>#comment</string>
3425 </dict>
3426 <dict>
3427 <key>include</key>
3428 <string>#variable-initializer</string>
3429 </dict>
3430 </array>
3431 </dict>
3432 <dict>
3433 <key>include</key>
3434 <string>#punctuation-comma</string>
3435 </dict>
3436 </array>
3437 </dict>
3438 </array>
3439 </dict>
3440 <key>namespace-declaration</key>
3441 <dict>
3442 <key>name</key>
3443 <string>meta.namespace.declaration.tsx</string>
3444 <key>begin</key>
3445 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))</string>
3446 <key>beginCaptures</key>
3447 <dict>
3448 <key>1</key>
3449 <dict>
3450 <key>name</key>
3451 <string>keyword.control.export.tsx</string>
3452 </dict>
3453 <key>2</key>
3454 <dict>
3455 <key>name</key>
3456 <string>storage.modifier.tsx</string>
3457 </dict>
3458 <key>3</key>
3459 <dict>
3460 <key>name</key>
3461 <string>storage.type.namespace.tsx</string>
3462 </dict>
3463 </dict>
3464 <key>end</key>
3465 <string>(?&lt;=\})|(?=;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3466 <key>patterns</key>
3467 <array>
3468 <dict>
3469 <key>include</key>
3470 <string>#comment</string>
3471 </dict>
3472 <dict>
3473 <key>include</key>
3474 <string>#string</string>
3475 </dict>
3476 <dict>
3477 <key>name</key>
3478 <string>entity.name.type.module.tsx</string>
3479 <key>match</key>
3480 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3481 </dict>
3482 <dict>
3483 <key>include</key>
3484 <string>#punctuation-accessor</string>
3485 </dict>
3486 <dict>
3487 <key>include</key>
3488 <string>#decl-block</string>
3489 </dict>
3490 </array>
3491 </dict>
3492 <key>type-alias-declaration</key>
3493 <dict>
3494 <key>name</key>
3495 <string>meta.type.declaration.tsx</string>
3496 <key>begin</key>
3497 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s*</string>
3498 <key>beginCaptures</key>
3499 <dict>
3500 <key>1</key>
3501 <dict>
3502 <key>name</key>
3503 <string>keyword.control.export.tsx</string>
3504 </dict>
3505 <key>2</key>
3506 <dict>
3507 <key>name</key>
3508 <string>storage.modifier.tsx</string>
3509 </dict>
3510 <key>3</key>
3511 <dict>
3512 <key>name</key>
3513 <string>storage.type.type.tsx</string>
3514 </dict>
3515 <key>4</key>
3516 <dict>
3517 <key>name</key>
3518 <string>entity.name.type.alias.tsx</string>
3519 </dict>
3520 </dict>
3521 <key>end</key>
3522 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3523 <key>patterns</key>
3524 <array>
3525 <dict>
3526 <key>include</key>
3527 <string>#comment</string>
3528 </dict>
3529 <dict>
3530 <key>include</key>
3531 <string>#type-parameters</string>
3532 </dict>
3533 <dict>
3534 <key>begin</key>
3535 <string>(=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3536 <key>beginCaptures</key>
3537 <dict>
3538 <key>1</key>
3539 <dict>
3540 <key>name</key>
3541 <string>keyword.operator.assignment.tsx</string>
3542 </dict>
3543 <key>2</key>
3544 <dict>
3545 <key>name</key>
3546 <string>keyword.control.intrinsic.tsx</string>
3547 </dict>
3548 </dict>
3549 <key>end</key>
3550 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3551 <key>patterns</key>
3552 <array>
3553 <dict>
3554 <key>include</key>
3555 <string>#type</string>
3556 </dict>
3557 </array>
3558 </dict>
3559 <dict>
3560 <key>begin</key>
3561 <string>(=)\s*</string>
3562 <key>beginCaptures</key>
3563 <dict>
3564 <key>1</key>
3565 <dict>
3566 <key>name</key>
3567 <string>keyword.operator.assignment.tsx</string>
3568 </dict>
3569 </dict>
3570 <key>end</key>
3571 <string>(?=\}|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3572 <key>patterns</key>
3573 <array>
3574 <dict>
3575 <key>include</key>
3576 <string>#type</string>
3577 </dict>
3578 </array>
3579 </dict>
3580 </array>
3581 </dict>
3582 <key>import-equals-declaration</key>
3583 <dict>
3584 <key>patterns</key>
3585 <array>
3586 <dict>
3587 <key>name</key>
3588 <string>meta.import-equals.external.tsx</string>
3589 <key>begin</key>
3590 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\()</string>
3591 <key>beginCaptures</key>
3592 <dict>
3593 <key>1</key>
3594 <dict>
3595 <key>name</key>
3596 <string>keyword.control.export.tsx</string>
3597 </dict>
3598 <key>2</key>
3599 <dict>
3600 <key>name</key>
3601 <string>storage.modifier.tsx</string>
3602 </dict>
3603 <key>3</key>
3604 <dict>
3605 <key>name</key>
3606 <string>keyword.control.import.tsx</string>
3607 </dict>
3608 <key>4</key>
3609 <dict>
3610 <key>name</key>
3611 <string>keyword.control.type.tsx</string>
3612 </dict>
3613 <key>5</key>
3614 <dict>
3615 <key>name</key>
3616 <string>variable.other.readwrite.alias.tsx</string>
3617 </dict>
3618 <key>6</key>
3619 <dict>
3620 <key>name</key>
3621 <string>keyword.operator.assignment.tsx</string>
3622 </dict>
3623 <key>7</key>
3624 <dict>
3625 <key>name</key>
3626 <string>keyword.control.require.tsx</string>
3627 </dict>
3628 <key>8</key>
3629 <dict>
3630 <key>name</key>
3631 <string>meta.brace.round.tsx</string>
3632 </dict>
3633 </dict>
3634 <key>end</key>
3635 <string>\)</string>
3636 <key>endCaptures</key>
3637 <dict>
3638 <key>0</key>
3639 <dict>
3640 <key>name</key>
3641 <string>meta.brace.round.tsx</string>
3642 </dict>
3643 </dict>
3644 <key>patterns</key>
3645 <array>
3646 <dict>
3647 <key>include</key>
3648 <string>#comment</string>
3649 </dict>
3650 <dict>
3651 <key>include</key>
3652 <string>#string</string>
3653 </dict>
3654 </array>
3655 </dict>
3656 <dict>
3657 <key>name</key>
3658 <string>meta.import-equals.internal.tsx</string>
3659 <key>begin</key>
3660 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b)</string>
3661 <key>beginCaptures</key>
3662 <dict>
3663 <key>1</key>
3664 <dict>
3665 <key>name</key>
3666 <string>keyword.control.export.tsx</string>
3667 </dict>
3668 <key>2</key>
3669 <dict>
3670 <key>name</key>
3671 <string>storage.modifier.tsx</string>
3672 </dict>
3673 <key>3</key>
3674 <dict>
3675 <key>name</key>
3676 <string>keyword.control.import.tsx</string>
3677 </dict>
3678 <key>4</key>
3679 <dict>
3680 <key>name</key>
3681 <string>keyword.control.type.tsx</string>
3682 </dict>
3683 <key>5</key>
3684 <dict>
3685 <key>name</key>
3686 <string>variable.other.readwrite.alias.tsx</string>
3687 </dict>
3688 <key>6</key>
3689 <dict>
3690 <key>name</key>
3691 <string>keyword.operator.assignment.tsx</string>
3692 </dict>
3693 </dict>
3694 <key>end</key>
3695 <string>(?=;|$|^)</string>
3696 <key>patterns</key>
3697 <array>
3698 <dict>
3699 <key>include</key>
3700 <string>#single-line-comment-consuming-line-ending</string>
3701 </dict>
3702 <dict>
3703 <key>include</key>
3704 <string>#comment</string>
3705 </dict>
3706 <dict>
3707 <key>match</key>
3708 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
3709 <key>captures</key>
3710 <dict>
3711 <key>1</key>
3712 <dict>
3713 <key>name</key>
3714 <string>entity.name.type.module.tsx</string>
3715 </dict>
3716 <key>2</key>
3717 <dict>
3718 <key>name</key>
3719 <string>punctuation.accessor.tsx</string>
3720 </dict>
3721 <key>3</key>
3722 <dict>
3723 <key>name</key>
3724 <string>punctuation.accessor.optional.tsx</string>
3725 </dict>
3726 </dict>
3727 </dict>
3728 <dict>
3729 <key>name</key>
3730 <string>variable.other.readwrite.tsx</string>
3731 <key>match</key>
3732 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
3733 </dict>
3734 </array>
3735 </dict>
3736 </array>
3737 </dict>
3738 <key>import-declaration</key>
3739 <dict>
3740 <key>name</key>
3741 <string>meta.import.tsx</string>
3742 <key>begin</key>
3743 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3744 <key>beginCaptures</key>
3745 <dict>
3746 <key>1</key>
3747 <dict>
3748 <key>name</key>
3749 <string>keyword.control.export.tsx</string>
3750 </dict>
3751 <key>2</key>
3752 <dict>
3753 <key>name</key>
3754 <string>storage.modifier.tsx</string>
3755 </dict>
3756 <key>3</key>
3757 <dict>
3758 <key>name</key>
3759 <string>keyword.control.import.tsx</string>
3760 </dict>
3761 <key>4</key>
3762 <dict>
3763 <key>name</key>
3764 <string>keyword.control.type.tsx</string>
3765 </dict>
3766 </dict>
3767 <key>end</key>
3768 <string>(?&lt;!^import|[^\._$[:alnum:]]import)(?=;|$|^)</string>
3769 <key>patterns</key>
3770 <array>
3771 <dict>
3772 <key>include</key>
3773 <string>#single-line-comment-consuming-line-ending</string>
3774 </dict>
3775 <dict>
3776 <key>include</key>
3777 <string>#comment</string>
3778 </dict>
3779 <dict>
3780 <key>include</key>
3781 <string>#string</string>
3782 </dict>
3783 <dict>
3784 <key>begin</key>
3785 <string>(?&lt;=^import|[^\._$[:alnum:]]import)(?!\s*["'])</string>
3786 <key>end</key>
3787 <string>\bfrom\b</string>
3788 <key>endCaptures</key>
3789 <dict>
3790 <key>0</key>
3791 <dict>
3792 <key>name</key>
3793 <string>keyword.control.from.tsx</string>
3794 </dict>
3795 </dict>
3796 <key>patterns</key>
3797 <array>
3798 <dict>
3799 <key>include</key>
3800 <string>#import-export-declaration</string>
3801 </dict>
3802 </array>
3803 </dict>
3804 <dict>
3805 <key>include</key>
3806 <string>#import-export-declaration</string>
3807 </dict>
3808 </array>
3809 </dict>
3810 <key>export-declaration</key>
3811 <dict>
3812 <key>patterns</key>
3813 <array>
3814 <dict>
3815 <key>match</key>
3816 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*)</string>
3817 <key>captures</key>
3818 <dict>
3819 <key>1</key>
3820 <dict>
3821 <key>name</key>
3822 <string>keyword.control.export.tsx</string>
3823 </dict>
3824 <key>2</key>
3825 <dict>
3826 <key>name</key>
3827 <string>keyword.control.as.tsx</string>
3828 </dict>
3829 <key>3</key>
3830 <dict>
3831 <key>name</key>
3832 <string>storage.type.namespace.tsx</string>
3833 </dict>
3834 <key>4</key>
3835 <dict>
3836 <key>name</key>
3837 <string>entity.name.type.module.tsx</string>
3838 </dict>
3839 </dict>
3840 </dict>
3841 <dict>
3842 <key>name</key>
3843 <string>meta.export.default.tsx</string>
3844 <key>begin</key>
3845 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+)))</string>
3846 <key>beginCaptures</key>
3847 <dict>
3848 <key>1</key>
3849 <dict>
3850 <key>name</key>
3851 <string>keyword.control.export.tsx</string>
3852 </dict>
3853 <key>2</key>
3854 <dict>
3855 <key>name</key>
3856 <string>keyword.control.type.tsx</string>
3857 </dict>
3858 <key>3</key>
3859 <dict>
3860 <key>name</key>
3861 <string>keyword.operator.assignment.tsx</string>
3862 </dict>
3863 <key>4</key>
3864 <dict>
3865 <key>name</key>
3866 <string>keyword.control.default.tsx</string>
3867 </dict>
3868 </dict>
3869 <key>end</key>
3870 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3871 <key>patterns</key>
3872 <array>
3873 <dict>
3874 <key>include</key>
3875 <string>#interface-declaration</string>
3876 </dict>
3877 <dict>
3878 <key>include</key>
3879 <string>#expression</string>
3880 </dict>
3881 </array>
3882 </dict>
3883 <dict>
3884 <key>name</key>
3885 <string>meta.export.tsx</string>
3886 <key>begin</key>
3887 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(export)(?:\s+(type))?\b(?!(\$)|(\s*:))((?=\s*[\{*])|((?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s|,))(?!\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b)))</string>
3888 <key>beginCaptures</key>
3889 <dict>
3890 <key>1</key>
3891 <dict>
3892 <key>name</key>
3893 <string>keyword.control.export.tsx</string>
3894 </dict>
3895 <key>2</key>
3896 <dict>
3897 <key>name</key>
3898 <string>keyword.control.type.tsx</string>
3899 </dict>
3900 </dict>
3901 <key>end</key>
3902 <string>(?=$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
3903 <key>patterns</key>
3904 <array>
3905 <dict>
3906 <key>include</key>
3907 <string>#import-export-declaration</string>
3908 </dict>
3909 </array>
3910 </dict>
3911 </array>
3912 </dict>
3913 <key>import-export-declaration</key>
3914 <dict>
3915 <key>patterns</key>
3916 <array>
3917 <dict>
3918 <key>include</key>
3919 <string>#comment</string>
3920 </dict>
3921 <dict>
3922 <key>include</key>
3923 <string>#string</string>
3924 </dict>
3925 <dict>
3926 <key>include</key>
3927 <string>#import-export-block</string>
3928 </dict>
3929 <dict>
3930 <key>name</key>
3931 <string>keyword.control.from.tsx</string>
3932 <key>match</key>
3933 <string>\bfrom\b</string>
3934 </dict>
3935 <dict>
3936 <key>include</key>
3937 <string>#import-export-assert-clause</string>
3938 </dict>
3939 <dict>
3940 <key>include</key>
3941 <string>#import-export-clause</string>
3942 </dict>
3943 </array>
3944 </dict>
3945 <key>import-export-assert-clause</key>
3946 <dict>
3947 <key>begin</key>
3948 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(with)|(assert))\s*(\{)</string>
3949 <key>beginCaptures</key>
3950 <dict>
3951 <key>1</key>
3952 <dict>
3953 <key>name</key>
3954 <string>keyword.control.with.tsx</string>
3955 </dict>
3956 <key>2</key>
3957 <dict>
3958 <key>name</key>
3959 <string>keyword.control.assert.tsx</string>
3960 </dict>
3961 <key>3</key>
3962 <dict>
3963 <key>name</key>
3964 <string>punctuation.definition.block.tsx</string>
3965 </dict>
3966 </dict>
3967 <key>end</key>
3968 <string>\}</string>
3969 <key>endCaptures</key>
3970 <dict>
3971 <key>0</key>
3972 <dict>
3973 <key>name</key>
3974 <string>punctuation.definition.block.tsx</string>
3975 </dict>
3976 </dict>
3977 <key>patterns</key>
3978 <array>
3979 <dict>
3980 <key>include</key>
3981 <string>#comment</string>
3982 </dict>
3983 <dict>
3984 <key>include</key>
3985 <string>#string</string>
3986 </dict>
3987 <dict>
3988 <key>name</key>
3989 <string>meta.object-literal.key.tsx</string>
3990 <key>match</key>
3991 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
3992 </dict>
3993 <dict>
3994 <key>name</key>
3995 <string>punctuation.separator.key-value.tsx</string>
3996 <key>match</key>
3997 <string>:</string>
3998 </dict>
3999 </array>
4000 </dict>
4001 <key>import-export-block</key>
4002 <dict>
4003 <key>name</key>
4004 <string>meta.block.tsx</string>
4005 <key>begin</key>
4006 <string>\{</string>
4007 <key>beginCaptures</key>
4008 <dict>
4009 <key>0</key>
4010 <dict>
4011 <key>name</key>
4012 <string>punctuation.definition.block.tsx</string>
4013 </dict>
4014 </dict>
4015 <key>end</key>
4016 <string>\}</string>
4017 <key>endCaptures</key>
4018 <dict>
4019 <key>0</key>
4020 <dict>
4021 <key>name</key>
4022 <string>punctuation.definition.block.tsx</string>
4023 </dict>
4024 </dict>
4025 <key>patterns</key>
4026 <array>
4027 <dict>
4028 <key>include</key>
4029 <string>#import-export-clause</string>
4030 </dict>
4031 </array>
4032 </dict>
4033 <key>import-export-clause</key>
4034 <dict>
4035 <key>patterns</key>
4036 <array>
4037 <dict>
4038 <key>include</key>
4039 <string>#comment</string>
4040 </dict>
4041 <dict>
4042 <key>match</key>
4043 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4044 <key>captures</key>
4045 <dict>
4046 <key>1</key>
4047 <dict>
4048 <key>name</key>
4049 <string>keyword.control.type.tsx</string>
4050 </dict>
4051 <key>2</key>
4052 <dict>
4053 <key>name</key>
4054 <string>keyword.control.default.tsx</string>
4055 </dict>
4056 <key>3</key>
4057 <dict>
4058 <key>name</key>
4059 <string>constant.language.import-export-all.tsx</string>
4060 </dict>
4061 <key>4</key>
4062 <dict>
4063 <key>name</key>
4064 <string>variable.other.readwrite.tsx</string>
4065 </dict>
4066 <key>5</key>
4067 <dict>
4068 <key>name</key>
4069 <string>string.quoted.alias.tsx</string>
4070 </dict>
4071 <key>12</key>
4072 <dict>
4073 <key>name</key>
4074 <string>keyword.control.as.tsx</string>
4075 </dict>
4076 <key>13</key>
4077 <dict>
4078 <key>name</key>
4079 <string>keyword.control.default.tsx</string>
4080 </dict>
4081 <key>14</key>
4082 <dict>
4083 <key>name</key>
4084 <string>variable.other.readwrite.alias.tsx</string>
4085 </dict>
4086 <key>15</key>
4087 <dict>
4088 <key>name</key>
4089 <string>string.quoted.alias.tsx</string>
4090 </dict>
4091 </dict>
4092 </dict>
4093 <dict>
4094 <key>include</key>
4095 <string>#punctuation-comma</string>
4096 </dict>
4097 <dict>
4098 <key>name</key>
4099 <string>constant.language.import-export-all.tsx</string>
4100 <key>match</key>
4101 <string>\*</string>
4102 </dict>
4103 <dict>
4104 <key>name</key>
4105 <string>keyword.control.default.tsx</string>
4106 <key>match</key>
4107 <string>\b(default)\b</string>
4108 </dict>
4109 <dict>
4110 <key>match</key>
4111 <string>(?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))</string>
4112 <key>captures</key>
4113 <dict>
4114 <key>1</key>
4115 <dict>
4116 <key>name</key>
4117 <string>keyword.control.type.tsx</string>
4118 </dict>
4119 <key>2</key>
4120 <dict>
4121 <key>name</key>
4122 <string>variable.other.readwrite.alias.tsx</string>
4123 </dict>
4124 <key>3</key>
4125 <dict>
4126 <key>name</key>
4127 <string>string.quoted.alias.tsx</string>
4128 </dict>
4129 </dict>
4130 </dict>
4131 </array>
4132 </dict>
4133 <key>switch-statement</key>
4134 <dict>
4135 <key>name</key>
4136 <string>switch-statement.expr.tsx</string>
4137 <key>begin</key>
4138 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bswitch\s*\()</string>
4139 <key>end</key>
4140 <string>\}</string>
4141 <key>endCaptures</key>
4142 <dict>
4143 <key>0</key>
4144 <dict>
4145 <key>name</key>
4146 <string>punctuation.definition.block.tsx</string>
4147 </dict>
4148 </dict>
4149 <key>patterns</key>
4150 <array>
4151 <dict>
4152 <key>include</key>
4153 <string>#comment</string>
4154 </dict>
4155 <dict>
4156 <key>name</key>
4157 <string>switch-expression.expr.tsx</string>
4158 <key>begin</key>
4159 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(switch)\s*(\()</string>
4160 <key>beginCaptures</key>
4161 <dict>
4162 <key>1</key>
4163 <dict>
4164 <key>name</key>
4165 <string>keyword.control.switch.tsx</string>
4166 </dict>
4167 <key>2</key>
4168 <dict>
4169 <key>name</key>
4170 <string>meta.brace.round.tsx</string>
4171 </dict>
4172 </dict>
4173 <key>end</key>
4174 <string>\)</string>
4175 <key>endCaptures</key>
4176 <dict>
4177 <key>0</key>
4178 <dict>
4179 <key>name</key>
4180 <string>meta.brace.round.tsx</string>
4181 </dict>
4182 </dict>
4183 <key>patterns</key>
4184 <array>
4185 <dict>
4186 <key>include</key>
4187 <string>#expression</string>
4188 </dict>
4189 </array>
4190 </dict>
4191 <dict>
4192 <key>name</key>
4193 <string>switch-block.expr.tsx</string>
4194 <key>begin</key>
4195 <string>\{</string>
4196 <key>beginCaptures</key>
4197 <dict>
4198 <key>0</key>
4199 <dict>
4200 <key>name</key>
4201 <string>punctuation.definition.block.tsx</string>
4202 </dict>
4203 </dict>
4204 <key>end</key>
4205 <string>(?=\})</string>
4206 <key>patterns</key>
4207 <array>
4208 <dict>
4209 <key>name</key>
4210 <string>case-clause.expr.tsx</string>
4211 <key>begin</key>
4212 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
4213 <key>beginCaptures</key>
4214 <dict>
4215 <key>1</key>
4216 <dict>
4217 <key>name</key>
4218 <string>keyword.control.switch.tsx</string>
4219 </dict>
4220 </dict>
4221 <key>end</key>
4222 <string>(?=:)</string>
4223 <key>patterns</key>
4224 <array>
4225 <dict>
4226 <key>include</key>
4227 <string>#expression</string>
4228 </dict>
4229 </array>
4230 </dict>
4231 <dict>
4232 <key>begin</key>
4233 <string>(:)\s*(\{)</string>
4234 <key>beginCaptures</key>
4235 <dict>
4236 <key>1</key>
4237 <dict>
4238 <key>name</key>
4239 <string>case-clause.expr.tsx punctuation.definition.section.case-statement.tsx</string>
4240 </dict>
4241 <key>2</key>
4242 <dict>
4243 <key>name</key>
4244 <string>meta.block.tsx punctuation.definition.block.tsx</string>
4245 </dict>
4246 </dict>
4247 <key>end</key>
4248 <string>\}</string>
4249 <key>endCaptures</key>
4250 <dict>
4251 <key>0</key>
4252 <dict>
4253 <key>name</key>
4254 <string>meta.block.tsx punctuation.definition.block.tsx</string>
4255 </dict>
4256 </dict>
4257 <key>contentName</key>
4258 <string>meta.block.tsx</string>
4259 <key>patterns</key>
4260 <array>
4261 <dict>
4262 <key>include</key>
4263 <string>#statements</string>
4264 </dict>
4265 </array>
4266 </dict>
4267 <dict>
4268 <key>match</key>
4269 <string>(:)</string>
4270 <key>captures</key>
4271 <dict>
4272 <key>0</key>
4273 <dict>
4274 <key>name</key>
4275 <string>case-clause.expr.tsx punctuation.definition.section.case-statement.tsx</string>
4276 </dict>
4277 </dict>
4278 </dict>
4279 <dict>
4280 <key>include</key>
4281 <string>#statements</string>
4282 </dict>
4283 </array>
4284 </dict>
4285 </array>
4286 </dict>
4287 <key>for-loop</key>
4288 <dict>
4289 <key>begin</key>
4290 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\())</string>
4291 <key>beginCaptures</key>
4292 <dict>
4293 <key>0</key>
4294 <dict>
4295 <key>name</key>
4296 <string>keyword.control.loop.tsx</string>
4297 </dict>
4298 </dict>
4299 <key>end</key>
4300 <string>(?&lt;=\))</string>
4301 <key>patterns</key>
4302 <array>
4303 <dict>
4304 <key>include</key>
4305 <string>#comment</string>
4306 </dict>
4307 <dict>
4308 <key>name</key>
4309 <string>keyword.control.loop.tsx</string>
4310 <key>match</key>
4311 <string>await</string>
4312 </dict>
4313 <dict>
4314 <key>begin</key>
4315 <string>\(</string>
4316 <key>beginCaptures</key>
4317 <dict>
4318 <key>0</key>
4319 <dict>
4320 <key>name</key>
4321 <string>meta.brace.round.tsx</string>
4322 </dict>
4323 </dict>
4324 <key>end</key>
4325 <string>\)</string>
4326 <key>endCaptures</key>
4327 <dict>
4328 <key>0</key>
4329 <dict>
4330 <key>name</key>
4331 <string>meta.brace.round.tsx</string>
4332 </dict>
4333 </dict>
4334 <key>patterns</key>
4335 <array>
4336 <dict>
4337 <key>include</key>
4338 <string>#var-expr</string>
4339 </dict>
4340 <dict>
4341 <key>include</key>
4342 <string>#expression</string>
4343 </dict>
4344 <dict>
4345 <key>include</key>
4346 <string>#punctuation-semicolon</string>
4347 </dict>
4348 </array>
4349 </dict>
4350 </array>
4351 </dict>
4352 <key>if-statement</key>
4353 <dict>
4354 <key>patterns</key>
4355 <array>
4356 <dict>
4357 <key>begin</key>
4358 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{))</string>
4359 <key>end</key>
4360 <string>(?=;|$|\})</string>
4361 <key>patterns</key>
4362 <array>
4363 <dict>
4364 <key>include</key>
4365 <string>#comment</string>
4366 </dict>
4367 <dict>
4368 <key>begin</key>
4369 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(if)\s*(\()</string>
4370 <key>beginCaptures</key>
4371 <dict>
4372 <key>1</key>
4373 <dict>
4374 <key>name</key>
4375 <string>keyword.control.conditional.tsx</string>
4376 </dict>
4377 <key>2</key>
4378 <dict>
4379 <key>name</key>
4380 <string>meta.brace.round.tsx</string>
4381 </dict>
4382 </dict>
4383 <key>end</key>
4384 <string>\)</string>
4385 <key>endCaptures</key>
4386 <dict>
4387 <key>0</key>
4388 <dict>
4389 <key>name</key>
4390 <string>meta.brace.round.tsx</string>
4391 </dict>
4392 </dict>
4393 <key>patterns</key>
4394 <array>
4395 <dict>
4396 <key>include</key>
4397 <string>#expression</string>
4398 </dict>
4399 </array>
4400 </dict>
4401 <dict>
4402 <key>name</key>
4403 <string>string.regexp.tsx</string>
4404 <key>begin</key>
4405 <string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4406 <key>beginCaptures</key>
4407 <dict>
4408 <key>0</key>
4409 <dict>
4410 <key>name</key>
4411 <string>punctuation.definition.string.begin.tsx</string>
4412 </dict>
4413 </dict>
4414 <key>end</key>
4415 <string>(/)([dgimsuvy]*)</string>
4416 <key>endCaptures</key>
4417 <dict>
4418 <key>1</key>
4419 <dict>
4420 <key>name</key>
4421 <string>punctuation.definition.string.end.tsx</string>
4422 </dict>
4423 <key>2</key>
4424 <dict>
4425 <key>name</key>
4426 <string>keyword.other.tsx</string>
4427 </dict>
4428 </dict>
4429 <key>patterns</key>
4430 <array>
4431 <dict>
4432 <key>include</key>
4433 <string>#regexp</string>
4434 </dict>
4435 </array>
4436 </dict>
4437 <dict>
4438 <key>include</key>
4439 <string>#statements</string>
4440 </dict>
4441 </array>
4442 </dict>
4443 </array>
4444 </dict>
4445 <key>decl-block</key>
4446 <dict>
4447 <key>name</key>
4448 <string>meta.block.tsx</string>
4449 <key>begin</key>
4450 <string>\{</string>
4451 <key>beginCaptures</key>
4452 <dict>
4453 <key>0</key>
4454 <dict>
4455 <key>name</key>
4456 <string>punctuation.definition.block.tsx</string>
4457 </dict>
4458 </dict>
4459 <key>end</key>
4460 <string>\}</string>
4461 <key>endCaptures</key>
4462 <dict>
4463 <key>0</key>
4464 <dict>
4465 <key>name</key>
4466 <string>punctuation.definition.block.tsx</string>
4467 </dict>
4468 </dict>
4469 <key>patterns</key>
4470 <array>
4471 <dict>
4472 <key>include</key>
4473 <string>#statements</string>
4474 </dict>
4475 </array>
4476 </dict>
4477 <key>after-operator-block-as-object-literal</key>
4478 <dict>
4479 <key>name</key>
4480 <string>meta.objectliteral.tsx</string>
4481 <key>begin</key>
4482 <string>(?&lt;!\+\+|--)(?&lt;=[:=(,\[?+!&gt;]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
4483 <key>beginCaptures</key>
4484 <dict>
4485 <key>1</key>
4486 <dict>
4487 <key>name</key>
4488 <string>punctuation.definition.block.tsx</string>
4489 </dict>
4490 </dict>
4491 <key>end</key>
4492 <string>\}</string>
4493 <key>endCaptures</key>
4494 <dict>
4495 <key>0</key>
4496 <dict>
4497 <key>name</key>
4498 <string>punctuation.definition.block.tsx</string>
4499 </dict>
4500 </dict>
4501 <key>patterns</key>
4502 <array>
4503 <dict>
4504 <key>include</key>
4505 <string>#object-member</string>
4506 </dict>
4507 </array>
4508 </dict>
4509 <key>object-literal</key>
4510 <dict>
4511 <key>name</key>
4512 <string>meta.objectliteral.tsx</string>
4513 <key>begin</key>
4514 <string>\{</string>
4515 <key>beginCaptures</key>
4516 <dict>
4517 <key>0</key>
4518 <dict>
4519 <key>name</key>
4520 <string>punctuation.definition.block.tsx</string>
4521 </dict>
4522 </dict>
4523 <key>end</key>
4524 <string>\}</string>
4525 <key>endCaptures</key>
4526 <dict>
4527 <key>0</key>
4528 <dict>
4529 <key>name</key>
4530 <string>punctuation.definition.block.tsx</string>
4531 </dict>
4532 </dict>
4533 <key>patterns</key>
4534 <array>
4535 <dict>
4536 <key>include</key>
4537 <string>#object-member</string>
4538 </dict>
4539 </array>
4540 </dict>
4541 <key>object-member</key>
4542 <dict>
4543 <key>patterns</key>
4544 <array>
4545 <dict>
4546 <key>include</key>
4547 <string>#comment</string>
4548 </dict>
4549 <dict>
4550 <key>include</key>
4551 <string>#object-literal-method-declaration</string>
4552 </dict>
4553 <dict>
4554 <key>name</key>
4555 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4556 <key>begin</key>
4557 <string>(?=\[)</string>
4558 <key>end</key>
4559 <string>(?=:)|((?&lt;=[\]])(?=\s*[\(\&lt;]))</string>
4560 <key>patterns</key>
4561 <array>
4562 <dict>
4563 <key>include</key>
4564 <string>#comment</string>
4565 </dict>
4566 <dict>
4567 <key>include</key>
4568 <string>#array-literal</string>
4569 </dict>
4570 </array>
4571 </dict>
4572 <dict>
4573 <key>name</key>
4574 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4575 <key>begin</key>
4576 <string>(?=[\'\"\`])</string>
4577 <key>end</key>
4578 <string>(?=:)|((?&lt;=[\'\"\`])(?=((\s*[\(\&lt;,}])|(\s+(as|satisifies)\s+))))</string>
4579 <key>patterns</key>
4580 <array>
4581 <dict>
4582 <key>include</key>
4583 <string>#comment</string>
4584 </dict>
4585 <dict>
4586 <key>include</key>
4587 <string>#string</string>
4588 </dict>
4589 </array>
4590 </dict>
4591 <dict>
4592 <key>name</key>
4593 <string>meta.object.member.tsx meta.object-literal.key.tsx</string>
4594 <key>begin</key>
4595 <string>(?x)(?=(\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?&lt;!\$)(?:
4596 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
4597 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
4598 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
4599 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
4600 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
4601 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
4602 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
4603 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
4604)(?!\$)))</string>
4605 <key>end</key>
4606 <string>(?=:)|(?=\s*([\(\&lt;,}])|(\s+as|satisifies\s+))</string>
4607 <key>patterns</key>
4608 <array>
4609 <dict>
4610 <key>include</key>
4611 <string>#comment</string>
4612 </dict>
4613 <dict>
4614 <key>include</key>
4615 <string>#numeric-literal</string>
4616 </dict>
4617 </array>
4618 </dict>
4619 <dict>
4620 <key>name</key>
4621 <string>meta.method.declaration.tsx</string>
4622 <key>begin</key>
4623 <string>(?&lt;=[\]\'\"\`])(?=\s*[\(\&lt;])</string>
4624 <key>end</key>
4625 <string>(?=\}|;|,)|(?&lt;=\})</string>
4626 <key>patterns</key>
4627 <array>
4628 <dict>
4629 <key>include</key>
4630 <string>#function-body</string>
4631 </dict>
4632 </array>
4633 </dict>
4634 <dict>
4635 <key>name</key>
4636 <string>meta.object.member.tsx</string>
4637 <key>match</key>
4638 <string>(?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4639 <key>captures</key>
4640 <dict>
4641 <key>0</key>
4642 <dict>
4643 <key>name</key>
4644 <string>meta.object-literal.key.tsx</string>
4645 </dict>
4646 <key>1</key>
4647 <dict>
4648 <key>name</key>
4649 <string>constant.numeric.decimal.tsx</string>
4650 </dict>
4651 </dict>
4652 </dict>
4653 <dict>
4654 <key>name</key>
4655 <string>meta.object.member.tsx</string>
4656 <key>match</key>
4657 <string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*(
4658 ((async\s+)?(
4659 (function\s*[(&lt;*]) |
4660 (function\s+) |
4661 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
4662 )) |
4663 ((async\s*)?(
4664 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
4665 # sure shot arrow functions even if =&gt; is on new line
4666(
4667 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
4668 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
4669 (
4670 ([)]\s*:) | # ():
4671 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
4672 )
4673) |
4674(
4675 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
4676) |
4677# arrow function possible to detect only with =&gt; on same line
4678(
4679 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
4680 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
4681 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
4682 \s*=&gt; # arrow operator
4683)
4684 ))
4685)))</string>
4686 <key>captures</key>
4687 <dict>
4688 <key>0</key>
4689 <dict>
4690 <key>name</key>
4691 <string>meta.object-literal.key.tsx</string>
4692 </dict>
4693 <key>1</key>
4694 <dict>
4695 <key>name</key>
4696 <string>entity.name.function.tsx</string>
4697 </dict>
4698 </dict>
4699 </dict>
4700 <dict>
4701 <key>name</key>
4702 <string>meta.object.member.tsx</string>
4703 <key>match</key>
4704 <string>(?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:)</string>
4705 <key>captures</key>
4706 <dict>
4707 <key>0</key>
4708 <dict>
4709 <key>name</key>
4710 <string>meta.object-literal.key.tsx</string>
4711 </dict>
4712 </dict>
4713 </dict>
4714 <dict>
4715 <key>name</key>
4716 <string>meta.object.member.tsx</string>
4717 <key>begin</key>
4718 <string>\.\.\.</string>
4719 <key>beginCaptures</key>
4720 <dict>
4721 <key>0</key>
4722 <dict>
4723 <key>name</key>
4724 <string>keyword.operator.spread.tsx</string>
4725 </dict>
4726 </dict>
4727 <key>end</key>
4728 <string>(?=,|\})</string>
4729 <key>patterns</key>
4730 <array>
4731 <dict>
4732 <key>include</key>
4733 <string>#expression</string>
4734 </dict>
4735 </array>
4736 </dict>
4737 <dict>
4738 <key>name</key>
4739 <string>meta.object.member.tsx</string>
4740 <key>match</key>
4741 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*)</string>
4742 <key>captures</key>
4743 <dict>
4744 <key>1</key>
4745 <dict>
4746 <key>name</key>
4747 <string>variable.other.readwrite.tsx</string>
4748 </dict>
4749 </dict>
4750 </dict>
4751 <dict>
4752 <key>name</key>
4753 <string>meta.object.member.tsx</string>
4754 <key>match</key>
4755 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*([,}]|$))</string>
4756 <key>captures</key>
4757 <dict>
4758 <key>1</key>
4759 <dict>
4760 <key>name</key>
4761 <string>keyword.control.as.tsx</string>
4762 </dict>
4763 <key>2</key>
4764 <dict>
4765 <key>name</key>
4766 <string>storage.modifier.tsx</string>
4767 </dict>
4768 </dict>
4769 </dict>
4770 <dict>
4771 <key>name</key>
4772 <string>meta.object.member.tsx</string>
4773 <key>begin</key>
4774 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
4775 <key>beginCaptures</key>
4776 <dict>
4777 <key>1</key>
4778 <dict>
4779 <key>name</key>
4780 <string>keyword.control.as.tsx</string>
4781 </dict>
4782 <key>2</key>
4783 <dict>
4784 <key>name</key>
4785 <string>keyword.control.satisfies.tsx</string>
4786 </dict>
4787 </dict>
4788 <key>end</key>
4789 <string>(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|^|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisifies)\s+))</string>
4790 <key>patterns</key>
4791 <array>
4792 <dict>
4793 <key>include</key>
4794 <string>#type</string>
4795 </dict>
4796 </array>
4797 </dict>
4798 <dict>
4799 <key>name</key>
4800 <string>meta.object.member.tsx</string>
4801 <key>begin</key>
4802 <string>(?=[_$[:alpha:]][_$[:alnum:]]*\s*=)</string>
4803 <key>end</key>
4804 <string>(?=,|\}|$|\/\/|\/\*)</string>
4805 <key>patterns</key>
4806 <array>
4807 <dict>
4808 <key>include</key>
4809 <string>#expression</string>
4810 </dict>
4811 </array>
4812 </dict>
4813 <dict>
4814 <key>name</key>
4815 <string>meta.object.member.tsx</string>
4816 <key>begin</key>
4817 <string>:</string>
4818 <key>beginCaptures</key>
4819 <dict>
4820 <key>0</key>
4821 <dict>
4822 <key>name</key>
4823 <string>meta.object-literal.key.tsx punctuation.separator.key-value.tsx</string>
4824 </dict>
4825 </dict>
4826 <key>end</key>
4827 <string>(?=,|\})</string>
4828 <key>patterns</key>
4829 <array>
4830 <dict>
4831 <key>begin</key>
4832 <string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4833 <key>beginCaptures</key>
4834 <dict>
4835 <key>1</key>
4836 <dict>
4837 <key>name</key>
4838 <string>storage.modifier.async.tsx</string>
4839 </dict>
4840 </dict>
4841 <key>end</key>
4842 <string>(?&lt;=\))</string>
4843 <key>patterns</key>
4844 <array>
4845 <dict>
4846 <key>include</key>
4847 <string>#type-parameters</string>
4848 </dict>
4849 <dict>
4850 <key>begin</key>
4851 <string>\(</string>
4852 <key>beginCaptures</key>
4853 <dict>
4854 <key>0</key>
4855 <dict>
4856 <key>name</key>
4857 <string>meta.brace.round.tsx</string>
4858 </dict>
4859 </dict>
4860 <key>end</key>
4861 <string>\)</string>
4862 <key>endCaptures</key>
4863 <dict>
4864 <key>0</key>
4865 <dict>
4866 <key>name</key>
4867 <string>meta.brace.round.tsx</string>
4868 </dict>
4869 </dict>
4870 <key>patterns</key>
4871 <array>
4872 <dict>
4873 <key>include</key>
4874 <string>#expression-inside-possibly-arrow-parens</string>
4875 </dict>
4876 </array>
4877 </dict>
4878 </array>
4879 </dict>
4880 <dict>
4881 <key>begin</key>
4882 <string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4883 <key>beginCaptures</key>
4884 <dict>
4885 <key>1</key>
4886 <dict>
4887 <key>name</key>
4888 <string>storage.modifier.async.tsx</string>
4889 </dict>
4890 <key>2</key>
4891 <dict>
4892 <key>name</key>
4893 <string>meta.brace.round.tsx</string>
4894 </dict>
4895 </dict>
4896 <key>end</key>
4897 <string>\)</string>
4898 <key>endCaptures</key>
4899 <dict>
4900 <key>0</key>
4901 <dict>
4902 <key>name</key>
4903 <string>meta.brace.round.tsx</string>
4904 </dict>
4905 </dict>
4906 <key>patterns</key>
4907 <array>
4908 <dict>
4909 <key>include</key>
4910 <string>#expression-inside-possibly-arrow-parens</string>
4911 </dict>
4912 </array>
4913 </dict>
4914 <dict>
4915 <key>begin</key>
4916 <string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4917 <key>beginCaptures</key>
4918 <dict>
4919 <key>1</key>
4920 <dict>
4921 <key>name</key>
4922 <string>storage.modifier.async.tsx</string>
4923 </dict>
4924 </dict>
4925 <key>end</key>
4926 <string>(?&lt;=\&gt;)</string>
4927 <key>patterns</key>
4928 <array>
4929 <dict>
4930 <key>include</key>
4931 <string>#type-parameters</string>
4932 </dict>
4933 </array>
4934 </dict>
4935 <dict>
4936 <key>begin</key>
4937 <string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4938 <key>beginCaptures</key>
4939 <dict>
4940 <key>1</key>
4941 <dict>
4942 <key>name</key>
4943 <string>meta.brace.round.tsx</string>
4944 </dict>
4945 </dict>
4946 <key>end</key>
4947 <string>\)</string>
4948 <key>endCaptures</key>
4949 <dict>
4950 <key>0</key>
4951 <dict>
4952 <key>name</key>
4953 <string>meta.brace.round.tsx</string>
4954 </dict>
4955 </dict>
4956 <key>patterns</key>
4957 <array>
4958 <dict>
4959 <key>include</key>
4960 <string>#expression-inside-possibly-arrow-parens</string>
4961 </dict>
4962 </array>
4963 </dict>
4964 <dict>
4965 <key>include</key>
4966 <string>#possibly-arrow-return-type</string>
4967 </dict>
4968 <dict>
4969 <key>include</key>
4970 <string>#expression</string>
4971 </dict>
4972 </array>
4973 </dict>
4974 <dict>
4975 <key>include</key>
4976 <string>#punctuation-comma</string>
4977 </dict>
4978 <dict>
4979 <key>include</key>
4980 <string>#decl-block</string>
4981 </dict>
4982 </array>
4983 </dict>
4984 <key>ternary-expression</key>
4985 <dict>
4986 <key>begin</key>
4987 <string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
4988 <key>beginCaptures</key>
4989 <dict>
4990 <key>1</key>
4991 <dict>
4992 <key>name</key>
4993 <string>keyword.operator.ternary.tsx</string>
4994 </dict>
4995 </dict>
4996 <key>end</key>
4997 <string>\s*(:)</string>
4998 <key>endCaptures</key>
4999 <dict>
5000 <key>1</key>
5001 <dict>
5002 <key>name</key>
5003 <string>keyword.operator.ternary.tsx</string>
5004 </dict>
5005 </dict>
5006 <key>patterns</key>
5007 <array>
5008 <dict>
5009 <key>include</key>
5010 <string>#expression</string>
5011 </dict>
5012 </array>
5013 </dict>
5014 <key>function-call</key>
5015 <dict>
5016 <key>patterns</key>
5017 <array>
5018 <dict>
5019 <key>begin</key>
5020 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5021 <key>end</key>
5022 <string>(?&lt;=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5023 <key>patterns</key>
5024 <array>
5025 <dict>
5026 <key>name</key>
5027 <string>meta.function-call.tsx</string>
5028 <key>begin</key>
5029 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5030 <key>end</key>
5031 <string>(?=\s*(?:(\?\.\s*)|(\!))?((&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?\())</string>
5032 <key>patterns</key>
5033 <array>
5034 <dict>
5035 <key>include</key>
5036 <string>#function-call-target</string>
5037 </dict>
5038 </array>
5039 </dict>
5040 <dict>
5041 <key>include</key>
5042 <string>#comment</string>
5043 </dict>
5044 <dict>
5045 <key>include</key>
5046 <string>#function-call-optionals</string>
5047 </dict>
5048 <dict>
5049 <key>include</key>
5050 <string>#type-arguments</string>
5051 </dict>
5052 <dict>
5053 <key>include</key>
5054 <string>#paren-expression</string>
5055 </dict>
5056 </array>
5057 </dict>
5058 <dict>
5059 <key>begin</key>
5060 <string>(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5061 <key>end</key>
5062 <string>(?&lt;=\&gt;)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?&lt;=[\)]))(&lt;\s*[\{\[\(]\s*$))</string>
5063 <key>patterns</key>
5064 <array>
5065 <dict>
5066 <key>name</key>
5067 <string>meta.function-call.tsx</string>
5068 <key>begin</key>
5069 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))</string>
5070 <key>end</key>
5071 <string>(?=(&lt;\s*[\{\[\(]\s*$))</string>
5072 <key>patterns</key>
5073 <array>
5074 <dict>
5075 <key>include</key>
5076 <string>#function-call-target</string>
5077 </dict>
5078 </array>
5079 </dict>
5080 <dict>
5081 <key>include</key>
5082 <string>#comment</string>
5083 </dict>
5084 <dict>
5085 <key>include</key>
5086 <string>#function-call-optionals</string>
5087 </dict>
5088 <dict>
5089 <key>include</key>
5090 <string>#type-arguments</string>
5091 </dict>
5092 </array>
5093 </dict>
5094 </array>
5095 </dict>
5096 <key>function-call-target</key>
5097 <dict>
5098 <key>patterns</key>
5099 <array>
5100 <dict>
5101 <key>include</key>
5102 <string>#support-function-call-identifiers</string>
5103 </dict>
5104 <dict>
5105 <key>name</key>
5106 <string>entity.name.function.tsx</string>
5107 <key>match</key>
5108 <string>(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
5109 </dict>
5110 </array>
5111 </dict>
5112 <key>function-call-optionals</key>
5113 <dict>
5114 <key>patterns</key>
5115 <array>
5116 <dict>
5117 <key>name</key>
5118 <string>meta.function-call.tsx punctuation.accessor.optional.tsx</string>
5119 <key>match</key>
5120 <string>\?\.</string>
5121 </dict>
5122 <dict>
5123 <key>name</key>
5124 <string>meta.function-call.tsx keyword.operator.definiteassignment.tsx</string>
5125 <key>match</key>
5126 <string>\!</string>
5127 </dict>
5128 </array>
5129 </dict>
5130 <key>support-function-call-identifiers</key>
5131 <dict>
5132 <key>patterns</key>
5133 <array>
5134 <dict>
5135 <key>include</key>
5136 <string>#literal</string>
5137 </dict>
5138 <dict>
5139 <key>include</key>
5140 <string>#support-objects</string>
5141 </dict>
5142 <dict>
5143 <key>include</key>
5144 <string>#object-identifiers</string>
5145 </dict>
5146 <dict>
5147 <key>include</key>
5148 <string>#punctuation-accessor</string>
5149 </dict>
5150 <dict>
5151 <key>name</key>
5152 <string>keyword.operator.expression.import.tsx</string>
5153 <key>match</key>
5154 <string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*[\(]\s*[\"\'\`]))</string>
5155 </dict>
5156 </array>
5157 </dict>
5158 <key>new-expr</key>
5159 <dict>
5160 <key>name</key>
5161 <string>new.expr.tsx</string>
5162 <key>begin</key>
5163 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5164 <key>beginCaptures</key>
5165 <dict>
5166 <key>1</key>
5167 <dict>
5168 <key>name</key>
5169 <string>keyword.operator.new.tsx</string>
5170 </dict>
5171 </dict>
5172 <key>end</key>
5173 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5174 <key>patterns</key>
5175 <array>
5176 <dict>
5177 <key>include</key>
5178 <string>#expression</string>
5179 </dict>
5180 </array>
5181 </dict>
5182 <key>instanceof-expr</key>
5183 <dict>
5184 <key>begin</key>
5185 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5186 <key>beginCaptures</key>
5187 <dict>
5188 <key>1</key>
5189 <dict>
5190 <key>name</key>
5191 <string>keyword.operator.expression.instanceof.tsx</string>
5192 </dict>
5193 </dict>
5194 <key>end</key>
5195 <string>(?&lt;=\))|(?=[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|(===|!==|==|!=)|(([\&amp;\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
5196 <key>patterns</key>
5197 <array>
5198 <dict>
5199 <key>include</key>
5200 <string>#type</string>
5201 </dict>
5202 </array>
5203 </dict>
5204 <key>paren-expression-possibly-arrow</key>
5205 <dict>
5206 <key>patterns</key>
5207 <array>
5208 <dict>
5209 <key>begin</key>
5210 <string>(?&lt;=[(=,])\s*(async)?(?=\s*((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
5211 <key>beginCaptures</key>
5212 <dict>
5213 <key>1</key>
5214 <dict>
5215 <key>name</key>
5216 <string>storage.modifier.async.tsx</string>
5217 </dict>
5218 </dict>
5219 <key>end</key>
5220 <string>(?&lt;=\))</string>
5221 <key>patterns</key>
5222 <array>
5223 <dict>
5224 <key>include</key>
5225 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5226 </dict>
5227 </array>
5228 </dict>
5229 <dict>
5230 <key>begin</key>
5231 <string>(?&lt;=[(=,]|=&gt;|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*))?\()|(&lt;)|((&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)))\s*$)</string>
5232 <key>beginCaptures</key>
5233 <dict>
5234 <key>1</key>
5235 <dict>
5236 <key>name</key>
5237 <string>storage.modifier.async.tsx</string>
5238 </dict>
5239 </dict>
5240 <key>end</key>
5241 <string>(?&lt;=\))</string>
5242 <key>patterns</key>
5243 <array>
5244 <dict>
5245 <key>include</key>
5246 <string>#paren-expression-possibly-arrow-with-typeparameters</string>
5247 </dict>
5248 </array>
5249 </dict>
5250 <dict>
5251 <key>include</key>
5252 <string>#possibly-arrow-return-type</string>
5253 </dict>
5254 </array>
5255 </dict>
5256 <key>paren-expression-possibly-arrow-with-typeparameters</key>
5257 <dict>
5258 <key>patterns</key>
5259 <array>
5260 <dict>
5261 <key>include</key>
5262 <string>#type-parameters</string>
5263 </dict>
5264 <dict>
5265 <key>begin</key>
5266 <string>\(</string>
5267 <key>beginCaptures</key>
5268 <dict>
5269 <key>0</key>
5270 <dict>
5271 <key>name</key>
5272 <string>meta.brace.round.tsx</string>
5273 </dict>
5274 </dict>
5275 <key>end</key>
5276 <string>\)</string>
5277 <key>endCaptures</key>
5278 <dict>
5279 <key>0</key>
5280 <dict>
5281 <key>name</key>
5282 <string>meta.brace.round.tsx</string>
5283 </dict>
5284 </dict>
5285 <key>patterns</key>
5286 <array>
5287 <dict>
5288 <key>include</key>
5289 <string>#expression-inside-possibly-arrow-parens</string>
5290 </dict>
5291 </array>
5292 </dict>
5293 </array>
5294 </dict>
5295 <key>expression-inside-possibly-arrow-parens</key>
5296 <dict>
5297 <key>patterns</key>
5298 <array>
5299 <dict>
5300 <key>include</key>
5301 <string>#expressionWithoutIdentifiers</string>
5302 </dict>
5303 <dict>
5304 <key>include</key>
5305 <string>#comment</string>
5306 </dict>
5307 <dict>
5308 <key>include</key>
5309 <string>#string</string>
5310 </dict>
5311 <dict>
5312 <key>include</key>
5313 <string>#decorator</string>
5314 </dict>
5315 <dict>
5316 <key>include</key>
5317 <string>#destructuring-parameter</string>
5318 </dict>
5319 <dict>
5320 <key>match</key>
5321 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+)</string>
5322 <key>captures</key>
5323 <dict>
5324 <key>1</key>
5325 <dict>
5326 <key>name</key>
5327 <string>storage.modifier.tsx</string>
5328 </dict>
5329 </dict>
5330 </dict>
5331 <dict>
5332 <key>match</key>
5333 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*
5334# function assignment |
5335(=\s*(
5336 ((async\s+)?(
5337 (function\s*[(&lt;*]) |
5338 (function\s+) |
5339 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5340 )) |
5341 ((async\s*)?(
5342 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5343 # sure shot arrow functions even if =&gt; is on new line
5344(
5345 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5346 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5347 (
5348 ([)]\s*:) | # ():
5349 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5350 )
5351) |
5352(
5353 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
5354) |
5355# arrow function possible to detect only with =&gt; on same line
5356(
5357 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5358 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5359 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5360 \s*=&gt; # arrow operator
5361)
5362 ))
5363)) |
5364# typeannotation is fn type: &lt; | () | (... | (param: | (param, | (param? | (param= | (param) =&gt;
5365(:\s*(
5366 (&lt;) |
5367 ([(]\s*(
5368 ([)]) |
5369 (\.\.\.) |
5370 ([_$[:alnum:]]+\s*(
5371 ([:,?=])|
5372 ([)]\s*=&gt;)
5373 ))
5374 ))
5375)) |
5376(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
5377(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) |
5378(:\s*(=&gt;|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
5379 ((async\s+)?(
5380 (function\s*[(&lt;*]) |
5381 (function\s+) |
5382 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
5383 )) |
5384 ((async\s*)?(
5385 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
5386 # sure shot arrow functions even if =&gt; is on new line
5387(
5388 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
5389 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
5390 (
5391 ([)]\s*:) | # ():
5392 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
5393 )
5394) |
5395(
5396 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
5397) |
5398# arrow function possible to detect only with =&gt; on same line
5399(
5400 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
5401 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
5402 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
5403 \s*=&gt; # arrow operator
5404)
5405 ))
5406)))</string>
5407 <key>captures</key>
5408 <dict>
5409 <key>1</key>
5410 <dict>
5411 <key>name</key>
5412 <string>storage.modifier.tsx</string>
5413 </dict>
5414 <key>2</key>
5415 <dict>
5416 <key>name</key>
5417 <string>keyword.operator.rest.tsx</string>
5418 </dict>
5419 <key>3</key>
5420 <dict>
5421 <key>name</key>
5422 <string>entity.name.function.tsx variable.language.this.tsx</string>
5423 </dict>
5424 <key>4</key>
5425 <dict>
5426 <key>name</key>
5427 <string>entity.name.function.tsx</string>
5428 </dict>
5429 <key>5</key>
5430 <dict>
5431 <key>name</key>
5432 <string>keyword.operator.optional.tsx</string>
5433 </dict>
5434 </dict>
5435 </dict>
5436 <dict>
5437 <key>match</key>
5438 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$)</string>
5439 <key>captures</key>
5440 <dict>
5441 <key>1</key>
5442 <dict>
5443 <key>name</key>
5444 <string>storage.modifier.tsx</string>
5445 </dict>
5446 <key>2</key>
5447 <dict>
5448 <key>name</key>
5449 <string>keyword.operator.rest.tsx</string>
5450 </dict>
5451 <key>3</key>
5452 <dict>
5453 <key>name</key>
5454 <string>variable.parameter.tsx variable.language.this.tsx</string>
5455 </dict>
5456 <key>4</key>
5457 <dict>
5458 <key>name</key>
5459 <string>variable.parameter.tsx</string>
5460 </dict>
5461 <key>5</key>
5462 <dict>
5463 <key>name</key>
5464 <string>keyword.operator.optional.tsx</string>
5465 </dict>
5466 </dict>
5467 </dict>
5468 <dict>
5469 <key>include</key>
5470 <string>#type-annotation</string>
5471 </dict>
5472 <dict>
5473 <key>include</key>
5474 <string>#variable-initializer</string>
5475 </dict>
5476 <dict>
5477 <key>name</key>
5478 <string>punctuation.separator.parameter.tsx</string>
5479 <key>match</key>
5480 <string>,</string>
5481 </dict>
5482 <dict>
5483 <key>include</key>
5484 <string>#identifiers</string>
5485 </dict>
5486 <dict>
5487 <key>include</key>
5488 <string>#expressionPunctuations</string>
5489 </dict>
5490 </array>
5491 </dict>
5492 <key>paren-expression</key>
5493 <dict>
5494 <key>begin</key>
5495 <string>\(</string>
5496 <key>beginCaptures</key>
5497 <dict>
5498 <key>0</key>
5499 <dict>
5500 <key>name</key>
5501 <string>meta.brace.round.tsx</string>
5502 </dict>
5503 </dict>
5504 <key>end</key>
5505 <string>\)</string>
5506 <key>endCaptures</key>
5507 <dict>
5508 <key>0</key>
5509 <dict>
5510 <key>name</key>
5511 <string>meta.brace.round.tsx</string>
5512 </dict>
5513 </dict>
5514 <key>patterns</key>
5515 <array>
5516 <dict>
5517 <key>include</key>
5518 <string>#expression</string>
5519 </dict>
5520 </array>
5521 </dict>
5522 <key>cast</key>
5523 <dict>
5524 <key>patterns</key>
5525 <array>
5526 <dict>
5527 <key>include</key>
5528 <string>#jsx</string>
5529 </dict>
5530 </array>
5531 </dict>
5532 <key>expression-operators</key>
5533 <dict>
5534 <key>patterns</key>
5535 <array>
5536 <dict>
5537 <key>name</key>
5538 <string>keyword.control.flow.tsx</string>
5539 <key>match</key>
5540 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5541 </dict>
5542 <dict>
5543 <key>begin</key>
5544 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*)</string>
5545 <key>beginCaptures</key>
5546 <dict>
5547 <key>1</key>
5548 <dict>
5549 <key>name</key>
5550 <string>keyword.control.flow.tsx</string>
5551 </dict>
5552 </dict>
5553 <key>end</key>
5554 <string>\*</string>
5555 <key>endCaptures</key>
5556 <dict>
5557 <key>0</key>
5558 <dict>
5559 <key>name</key>
5560 <string>keyword.generator.asterisk.tsx</string>
5561 </dict>
5562 </dict>
5563 <key>patterns</key>
5564 <array>
5565 <dict>
5566 <key>include</key>
5567 <string>#comment</string>
5568 </dict>
5569 </array>
5570 </dict>
5571 <dict>
5572 <key>match</key>
5573 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))?</string>
5574 <key>captures</key>
5575 <dict>
5576 <key>1</key>
5577 <dict>
5578 <key>name</key>
5579 <string>keyword.control.flow.tsx</string>
5580 </dict>
5581 <key>2</key>
5582 <dict>
5583 <key>name</key>
5584 <string>keyword.generator.asterisk.tsx</string>
5585 </dict>
5586 </dict>
5587 </dict>
5588 <dict>
5589 <key>name</key>
5590 <string>keyword.operator.expression.delete.tsx</string>
5591 <key>match</key>
5592 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5593 </dict>
5594 <dict>
5595 <key>name</key>
5596 <string>keyword.operator.expression.in.tsx</string>
5597 <key>match</key>
5598 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5599 </dict>
5600 <dict>
5601 <key>name</key>
5602 <string>keyword.operator.expression.of.tsx</string>
5603 <key>match</key>
5604 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\()</string>
5605 </dict>
5606 <dict>
5607 <key>name</key>
5608 <string>keyword.operator.expression.instanceof.tsx</string>
5609 <key>match</key>
5610 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5611 </dict>
5612 <dict>
5613 <key>name</key>
5614 <string>keyword.operator.new.tsx</string>
5615 <key>match</key>
5616 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5617 </dict>
5618 <dict>
5619 <key>include</key>
5620 <string>#typeof-operator</string>
5621 </dict>
5622 <dict>
5623 <key>name</key>
5624 <string>keyword.operator.expression.void.tsx</string>
5625 <key>match</key>
5626 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5627 </dict>
5628 <dict>
5629 <key>match</key>
5630 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+(const)(?=\s*($|[;,:})\]]))</string>
5631 <key>captures</key>
5632 <dict>
5633 <key>1</key>
5634 <dict>
5635 <key>name</key>
5636 <string>keyword.control.as.tsx</string>
5637 </dict>
5638 <key>2</key>
5639 <dict>
5640 <key>name</key>
5641 <string>storage.modifier.tsx</string>
5642 </dict>
5643 </dict>
5644 </dict>
5645 <dict>
5646 <key>begin</key>
5647 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(as)|(satisfies))\s+</string>
5648 <key>beginCaptures</key>
5649 <dict>
5650 <key>1</key>
5651 <dict>
5652 <key>name</key>
5653 <string>keyword.control.as.tsx</string>
5654 </dict>
5655 <key>2</key>
5656 <dict>
5657 <key>name</key>
5658 <string>keyword.control.satisfies.tsx</string>
5659 </dict>
5660 </dict>
5661 <key>end</key>
5662 <string>(?=^|[;),}\]:?\-\+\&gt;]|\|\||\&amp;\&amp;|\!\=\=|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as|satisfies)\s+)|(\s+\&lt;))</string>
5663 <key>patterns</key>
5664 <array>
5665 <dict>
5666 <key>include</key>
5667 <string>#type</string>
5668 </dict>
5669 </array>
5670 </dict>
5671 <dict>
5672 <key>name</key>
5673 <string>keyword.operator.spread.tsx</string>
5674 <key>match</key>
5675 <string>\.\.\.</string>
5676 </dict>
5677 <dict>
5678 <key>name</key>
5679 <string>keyword.operator.assignment.compound.tsx</string>
5680 <key>match</key>
5681 <string>\*=|(?&lt;!\()/=|%=|\+=|\-=</string>
5682 </dict>
5683 <dict>
5684 <key>name</key>
5685 <string>keyword.operator.assignment.compound.bitwise.tsx</string>
5686 <key>match</key>
5687 <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;=|&gt;&gt;&gt;=|\|=</string>
5688 </dict>
5689 <dict>
5690 <key>name</key>
5691 <string>keyword.operator.bitwise.shift.tsx</string>
5692 <key>match</key>
5693 <string>&lt;&lt;|&gt;&gt;&gt;|&gt;&gt;</string>
5694 </dict>
5695 <dict>
5696 <key>name</key>
5697 <string>keyword.operator.comparison.tsx</string>
5698 <key>match</key>
5699 <string>===|!==|==|!=</string>
5700 </dict>
5701 <dict>
5702 <key>name</key>
5703 <string>keyword.operator.relational.tsx</string>
5704 <key>match</key>
5705 <string>&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;</string>
5706 </dict>
5707 <dict>
5708 <key>match</key>
5709 <string>(?&lt;=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*])))</string>
5710 <key>captures</key>
5711 <dict>
5712 <key>1</key>
5713 <dict>
5714 <key>name</key>
5715 <string>keyword.operator.logical.tsx</string>
5716 </dict>
5717 <key>2</key>
5718 <dict>
5719 <key>name</key>
5720 <string>keyword.operator.assignment.compound.tsx</string>
5721 </dict>
5722 <key>3</key>
5723 <dict>
5724 <key>name</key>
5725 <string>keyword.operator.arithmetic.tsx</string>
5726 </dict>
5727 </dict>
5728 </dict>
5729 <dict>
5730 <key>name</key>
5731 <string>keyword.operator.logical.tsx</string>
5732 <key>match</key>
5733 <string>\!|&amp;&amp;|\|\||\?\?</string>
5734 </dict>
5735 <dict>
5736 <key>name</key>
5737 <string>keyword.operator.bitwise.tsx</string>
5738 <key>match</key>
5739 <string>\&amp;|~|\^|\|</string>
5740 </dict>
5741 <dict>
5742 <key>name</key>
5743 <string>keyword.operator.assignment.tsx</string>
5744 <key>match</key>
5745 <string>\=</string>
5746 </dict>
5747 <dict>
5748 <key>name</key>
5749 <string>keyword.operator.decrement.tsx</string>
5750 <key>match</key>
5751 <string>--</string>
5752 </dict>
5753 <dict>
5754 <key>name</key>
5755 <string>keyword.operator.increment.tsx</string>
5756 <key>match</key>
5757 <string>\+\+</string>
5758 </dict>
5759 <dict>
5760 <key>name</key>
5761 <string>keyword.operator.arithmetic.tsx</string>
5762 <key>match</key>
5763 <string>%|\*|/|-|\+</string>
5764 </dict>
5765 <dict>
5766 <key>begin</key>
5767 <string>(?&lt;=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*]))))</string>
5768 <key>end</key>
5769 <string>(?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/)))</string>
5770 <key>endCaptures</key>
5771 <dict>
5772 <key>1</key>
5773 <dict>
5774 <key>name</key>
5775 <string>keyword.operator.assignment.compound.tsx</string>
5776 </dict>
5777 <key>2</key>
5778 <dict>
5779 <key>name</key>
5780 <string>keyword.operator.arithmetic.tsx</string>
5781 </dict>
5782 </dict>
5783 <key>patterns</key>
5784 <array>
5785 <dict>
5786 <key>include</key>
5787 <string>#comment</string>
5788 </dict>
5789 </array>
5790 </dict>
5791 <dict>
5792 <key>match</key>
5793 <string>(?&lt;=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*])))</string>
5794 <key>captures</key>
5795 <dict>
5796 <key>1</key>
5797 <dict>
5798 <key>name</key>
5799 <string>keyword.operator.assignment.compound.tsx</string>
5800 </dict>
5801 <key>2</key>
5802 <dict>
5803 <key>name</key>
5804 <string>keyword.operator.arithmetic.tsx</string>
5805 </dict>
5806 </dict>
5807 </dict>
5808 </array>
5809 </dict>
5810 <key>typeof-operator</key>
5811 <dict>
5812 <key>begin</key>
5813 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
5814 <key>beginCaptures</key>
5815 <dict>
5816 <key>0</key>
5817 <dict>
5818 <key>name</key>
5819 <string>keyword.operator.expression.typeof.tsx</string>
5820 </dict>
5821 </dict>
5822 <key>end</key>
5823 <string>(?=[,);}\]=&gt;:&amp;|{\?]|(extends\s+)|$|;|^\s*$|(?:^\s*(?:abstract|async|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|var|while)\b))</string>
5824 <key>patterns</key>
5825 <array>
5826 <dict>
5827 <key>include</key>
5828 <string>#type-arguments</string>
5829 </dict>
5830 <dict>
5831 <key>include</key>
5832 <string>#expression</string>
5833 </dict>
5834 </array>
5835 </dict>
5836 <key>literal</key>
5837 <dict>
5838 <key>patterns</key>
5839 <array>
5840 <dict>
5841 <key>include</key>
5842 <string>#numeric-literal</string>
5843 </dict>
5844 <dict>
5845 <key>include</key>
5846 <string>#boolean-literal</string>
5847 </dict>
5848 <dict>
5849 <key>include</key>
5850 <string>#null-literal</string>
5851 </dict>
5852 <dict>
5853 <key>include</key>
5854 <string>#undefined-literal</string>
5855 </dict>
5856 <dict>
5857 <key>include</key>
5858 <string>#numericConstant-literal</string>
5859 </dict>
5860 <dict>
5861 <key>include</key>
5862 <string>#array-literal</string>
5863 </dict>
5864 <dict>
5865 <key>include</key>
5866 <string>#this-literal</string>
5867 </dict>
5868 <dict>
5869 <key>include</key>
5870 <string>#super-literal</string>
5871 </dict>
5872 </array>
5873 </dict>
5874 <key>array-literal</key>
5875 <dict>
5876 <key>name</key>
5877 <string>meta.array.literal.tsx</string>
5878 <key>begin</key>
5879 <string>\s*(\[)</string>
5880 <key>beginCaptures</key>
5881 <dict>
5882 <key>1</key>
5883 <dict>
5884 <key>name</key>
5885 <string>meta.brace.square.tsx</string>
5886 </dict>
5887 </dict>
5888 <key>end</key>
5889 <string>\]</string>
5890 <key>endCaptures</key>
5891 <dict>
5892 <key>0</key>
5893 <dict>
5894 <key>name</key>
5895 <string>meta.brace.square.tsx</string>
5896 </dict>
5897 </dict>
5898 <key>patterns</key>
5899 <array>
5900 <dict>
5901 <key>include</key>
5902 <string>#expression</string>
5903 </dict>
5904 <dict>
5905 <key>include</key>
5906 <string>#punctuation-comma</string>
5907 </dict>
5908 </array>
5909 </dict>
5910 <key>numeric-literal</key>
5911 <dict>
5912 <key>patterns</key>
5913 <array>
5914 <dict>
5915 <key>name</key>
5916 <string>constant.numeric.hex.tsx</string>
5917 <key>match</key>
5918 <string>\b(?&lt;!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$)</string>
5919 <key>captures</key>
5920 <dict>
5921 <key>1</key>
5922 <dict>
5923 <key>name</key>
5924 <string>storage.type.numeric.bigint.tsx</string>
5925 </dict>
5926 </dict>
5927 </dict>
5928 <dict>
5929 <key>name</key>
5930 <string>constant.numeric.binary.tsx</string>
5931 <key>match</key>
5932 <string>\b(?&lt;!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$)</string>
5933 <key>captures</key>
5934 <dict>
5935 <key>1</key>
5936 <dict>
5937 <key>name</key>
5938 <string>storage.type.numeric.bigint.tsx</string>
5939 </dict>
5940 </dict>
5941 </dict>
5942 <dict>
5943 <key>name</key>
5944 <string>constant.numeric.octal.tsx</string>
5945 <key>match</key>
5946 <string>\b(?&lt;!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$)</string>
5947 <key>captures</key>
5948 <dict>
5949 <key>1</key>
5950 <dict>
5951 <key>name</key>
5952 <string>storage.type.numeric.bigint.tsx</string>
5953 </dict>
5954 </dict>
5955 </dict>
5956 <dict>
5957 <key>match</key>
5958 <string>(?x)
5959(?&lt;!\$)(?:
5960 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3
5961 (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3
5962 (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3
5963 (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3
5964 (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1
5965 (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1.
5966 (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1
5967 (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1
5968)(?!\$)</string>
5969 <key>captures</key>
5970 <dict>
5971 <key>0</key>
5972 <dict>
5973 <key>name</key>
5974 <string>constant.numeric.decimal.tsx</string>
5975 </dict>
5976 <key>1</key>
5977 <dict>
5978 <key>name</key>
5979 <string>meta.delimiter.decimal.period.tsx</string>
5980 </dict>
5981 <key>2</key>
5982 <dict>
5983 <key>name</key>
5984 <string>storage.type.numeric.bigint.tsx</string>
5985 </dict>
5986 <key>3</key>
5987 <dict>
5988 <key>name</key>
5989 <string>meta.delimiter.decimal.period.tsx</string>
5990 </dict>
5991 <key>4</key>
5992 <dict>
5993 <key>name</key>
5994 <string>storage.type.numeric.bigint.tsx</string>
5995 </dict>
5996 <key>5</key>
5997 <dict>
5998 <key>name</key>
5999 <string>meta.delimiter.decimal.period.tsx</string>
6000 </dict>
6001 <key>6</key>
6002 <dict>
6003 <key>name</key>
6004 <string>storage.type.numeric.bigint.tsx</string>
6005 </dict>
6006 <key>7</key>
6007 <dict>
6008 <key>name</key>
6009 <string>storage.type.numeric.bigint.tsx</string>
6010 </dict>
6011 <key>8</key>
6012 <dict>
6013 <key>name</key>
6014 <string>meta.delimiter.decimal.period.tsx</string>
6015 </dict>
6016 <key>9</key>
6017 <dict>
6018 <key>name</key>
6019 <string>storage.type.numeric.bigint.tsx</string>
6020 </dict>
6021 <key>10</key>
6022 <dict>
6023 <key>name</key>
6024 <string>meta.delimiter.decimal.period.tsx</string>
6025 </dict>
6026 <key>11</key>
6027 <dict>
6028 <key>name</key>
6029 <string>storage.type.numeric.bigint.tsx</string>
6030 </dict>
6031 <key>12</key>
6032 <dict>
6033 <key>name</key>
6034 <string>meta.delimiter.decimal.period.tsx</string>
6035 </dict>
6036 <key>13</key>
6037 <dict>
6038 <key>name</key>
6039 <string>storage.type.numeric.bigint.tsx</string>
6040 </dict>
6041 <key>14</key>
6042 <dict>
6043 <key>name</key>
6044 <string>storage.type.numeric.bigint.tsx</string>
6045 </dict>
6046 </dict>
6047 </dict>
6048 </array>
6049 </dict>
6050 <key>boolean-literal</key>
6051 <dict>
6052 <key>patterns</key>
6053 <array>
6054 <dict>
6055 <key>name</key>
6056 <string>constant.language.boolean.true.tsx</string>
6057 <key>match</key>
6058 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6059 </dict>
6060 <dict>
6061 <key>name</key>
6062 <string>constant.language.boolean.false.tsx</string>
6063 <key>match</key>
6064 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6065 </dict>
6066 </array>
6067 </dict>
6068 <key>null-literal</key>
6069 <dict>
6070 <key>name</key>
6071 <string>constant.language.null.tsx</string>
6072 <key>match</key>
6073 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6074 </dict>
6075 <key>this-literal</key>
6076 <dict>
6077 <key>name</key>
6078 <string>variable.language.this.tsx</string>
6079 <key>match</key>
6080 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))this\b(?!\$)</string>
6081 </dict>
6082 <key>super-literal</key>
6083 <dict>
6084 <key>name</key>
6085 <string>variable.language.super.tsx</string>
6086 <key>match</key>
6087 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))super\b(?!\$)</string>
6088 </dict>
6089 <key>undefined-literal</key>
6090 <dict>
6091 <key>name</key>
6092 <string>constant.language.undefined.tsx</string>
6093 <key>match</key>
6094 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6095 </dict>
6096 <key>numericConstant-literal</key>
6097 <dict>
6098 <key>patterns</key>
6099 <array>
6100 <dict>
6101 <key>name</key>
6102 <string>constant.language.nan.tsx</string>
6103 <key>match</key>
6104 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6105 </dict>
6106 <dict>
6107 <key>name</key>
6108 <string>constant.language.infinity.tsx</string>
6109 <key>match</key>
6110 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
6111 </dict>
6112 </array>
6113 </dict>
6114 <key>support-objects</key>
6115 <dict>
6116 <key>patterns</key>
6117 <array>
6118 <dict>
6119 <key>name</key>
6120 <string>variable.language.arguments.tsx</string>
6121 <key>match</key>
6122 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(arguments)\b(?!\$)</string>
6123 </dict>
6124 <dict>
6125 <key>name</key>
6126 <string>support.class.builtin.tsx</string>
6127 <key>match</key>
6128 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array
6129 |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy
6130 |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray
6131 |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$)</string>
6132 </dict>
6133 <dict>
6134 <key>name</key>
6135 <string>support.class.error.tsx</string>
6136 <key>match</key>
6137 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$)</string>
6138 </dict>
6139 <dict>
6140 <key>name</key>
6141 <string>support.class.promise.tsx</string>
6142 <key>match</key>
6143 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Promise)\b(?!\$)</string>
6144 </dict>
6145 <dict>
6146 <key>name</key>
6147 <string>support.function.tsx</string>
6148 <key>match</key>
6149 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|
6150 isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\()</string>
6151 </dict>
6152 <dict>
6153 <key>match</key>
6154 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6155 (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp|
6156 expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random|
6157 round|sign|sin|sinh|sqrt|tan|tanh|trunc)
6158 |
6159 (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$)</string>
6160 <key>captures</key>
6161 <dict>
6162 <key>1</key>
6163 <dict>
6164 <key>name</key>
6165 <string>support.constant.math.tsx</string>
6166 </dict>
6167 <key>2</key>
6168 <dict>
6169 <key>name</key>
6170 <string>punctuation.accessor.tsx</string>
6171 </dict>
6172 <key>3</key>
6173 <dict>
6174 <key>name</key>
6175 <string>punctuation.accessor.optional.tsx</string>
6176 </dict>
6177 <key>4</key>
6178 <dict>
6179 <key>name</key>
6180 <string>support.function.math.tsx</string>
6181 </dict>
6182 <key>5</key>
6183 <dict>
6184 <key>name</key>
6185 <string>support.constant.property.math.tsx</string>
6186 </dict>
6187 </dict>
6188 </dict>
6189 <dict>
6190 <key>match</key>
6191 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(
6192 assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log
6193 |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$)</string>
6194 <key>captures</key>
6195 <dict>
6196 <key>1</key>
6197 <dict>
6198 <key>name</key>
6199 <string>support.class.console.tsx</string>
6200 </dict>
6201 <key>2</key>
6202 <dict>
6203 <key>name</key>
6204 <string>punctuation.accessor.tsx</string>
6205 </dict>
6206 <key>3</key>
6207 <dict>
6208 <key>name</key>
6209 <string>punctuation.accessor.optional.tsx</string>
6210 </dict>
6211 <key>4</key>
6212 <dict>
6213 <key>name</key>
6214 <string>support.function.console.tsx</string>
6215 </dict>
6216 </dict>
6217 </dict>
6218 <dict>
6219 <key>match</key>
6220 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$)</string>
6221 <key>captures</key>
6222 <dict>
6223 <key>1</key>
6224 <dict>
6225 <key>name</key>
6226 <string>support.constant.json.tsx</string>
6227 </dict>
6228 <key>2</key>
6229 <dict>
6230 <key>name</key>
6231 <string>punctuation.accessor.tsx</string>
6232 </dict>
6233 <key>3</key>
6234 <dict>
6235 <key>name</key>
6236 <string>punctuation.accessor.optional.tsx</string>
6237 </dict>
6238 <key>4</key>
6239 <dict>
6240 <key>name</key>
6241 <string>support.function.json.tsx</string>
6242 </dict>
6243 </dict>
6244 </dict>
6245 <dict>
6246 <key>match</key>
6247 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$)</string>
6248 <key>captures</key>
6249 <dict>
6250 <key>1</key>
6251 <dict>
6252 <key>name</key>
6253 <string>keyword.control.import.tsx</string>
6254 </dict>
6255 <key>2</key>
6256 <dict>
6257 <key>name</key>
6258 <string>punctuation.accessor.tsx</string>
6259 </dict>
6260 <key>3</key>
6261 <dict>
6262 <key>name</key>
6263 <string>punctuation.accessor.optional.tsx</string>
6264 </dict>
6265 <key>4</key>
6266 <dict>
6267 <key>name</key>
6268 <string>support.variable.property.importmeta.tsx</string>
6269 </dict>
6270 </dict>
6271 </dict>
6272 <dict>
6273 <key>match</key>
6274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$)</string>
6275 <key>captures</key>
6276 <dict>
6277 <key>1</key>
6278 <dict>
6279 <key>name</key>
6280 <string>keyword.operator.new.tsx</string>
6281 </dict>
6282 <key>2</key>
6283 <dict>
6284 <key>name</key>
6285 <string>punctuation.accessor.tsx</string>
6286 </dict>
6287 <key>3</key>
6288 <dict>
6289 <key>name</key>
6290 <string>punctuation.accessor.optional.tsx</string>
6291 </dict>
6292 <key>4</key>
6293 <dict>
6294 <key>name</key>
6295 <string>support.variable.property.target.tsx</string>
6296 </dict>
6297 </dict>
6298 </dict>
6299 <dict>
6300 <key>match</key>
6301 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6302 (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\())
6303 |
6304 (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$)))</string>
6305 <key>captures</key>
6306 <dict>
6307 <key>1</key>
6308 <dict>
6309 <key>name</key>
6310 <string>punctuation.accessor.tsx</string>
6311 </dict>
6312 <key>2</key>
6313 <dict>
6314 <key>name</key>
6315 <string>punctuation.accessor.optional.tsx</string>
6316 </dict>
6317 <key>3</key>
6318 <dict>
6319 <key>name</key>
6320 <string>support.variable.property.tsx</string>
6321 </dict>
6322 <key>4</key>
6323 <dict>
6324 <key>name</key>
6325 <string>support.constant.tsx</string>
6326 </dict>
6327 </dict>
6328 </dict>
6329 <dict>
6330 <key>match</key>
6331 <string>(?x) (?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.)) \b (?:
6332 (document|event|navigator|performance|screen|window)
6333 |
6334 (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener
6335 |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule
6336 |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration
6337 |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern
6338 |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent
6339 |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException
6340 |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer
6341 |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry
6342 |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent
6343 |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential
6344 |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync
6345 |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement
6346 |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement
6347 |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement
6348 |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement
6349 |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement
6350 |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement
6351 |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement
6352 |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement
6353 |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement
6354 |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement
6355 |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement
6356 |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase
6357 |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction
6358 |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities
6359 |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess
6360 |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent
6361 |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream
6362 |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent
6363 |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID
6364 |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification
6365 |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential
6366 |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark
6367 |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList
6368 |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent
6369 |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList
6370 |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager
6371 |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource
6372 |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement
6373 |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength
6374 |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio
6375 |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement
6376 |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement
6377 |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement
6378 |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength
6379 |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement
6380 |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio
6381 |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList
6382 |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement
6383 |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement
6384 |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState
6385 |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet
6386 |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable
6387 |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer
6388 |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat
6389 |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES
6390 |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope
6391 |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult
6392 |XSLTProcessor))\b(?!\$)</string>
6393 <key>captures</key>
6394 <dict>
6395 <key>1</key>
6396 <dict>
6397 <key>name</key>
6398 <string>support.variable.dom.tsx</string>
6399 </dict>
6400 <key>2</key>
6401 <dict>
6402 <key>name</key>
6403 <string>support.class.dom.tsx</string>
6404 </dict>
6405 </dict>
6406 </dict>
6407 <dict>
6408 <key>match</key>
6409 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?:
6410 (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE
6411 |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR
6412 |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR
6413 |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)
6414 |
6415 (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName
6416 |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop
6417 |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor
6418 |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption
6419 |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear
6420 |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete
6421 |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset
6422 |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight
6423 |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds
6424 |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize
6425 |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host
6426 |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth
6427 |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext
6428 |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom
6429 |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple
6430 |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName
6431 |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight
6432 |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer
6433 |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling
6434 |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText
6435 |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts
6436 |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove
6437 |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary
6438 |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead
6439 |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile
6440 |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?\()</string>
6441 <key>captures</key>
6442 <dict>
6443 <key>1</key>
6444 <dict>
6445 <key>name</key>
6446 <string>punctuation.accessor.tsx</string>
6447 </dict>
6448 <key>2</key>
6449 <dict>
6450 <key>name</key>
6451 <string>punctuation.accessor.optional.tsx</string>
6452 </dict>
6453 <key>3</key>
6454 <dict>
6455 <key>name</key>
6456 <string>support.constant.dom.tsx</string>
6457 </dict>
6458 <key>4</key>
6459 <dict>
6460 <key>name</key>
6461 <string>support.variable.property.dom.tsx</string>
6462 </dict>
6463 </dict>
6464 </dict>
6465 <dict>
6466 <key>name</key>
6467 <string>support.class.node.tsx</string>
6468 <key>match</key>
6469 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream
6470 |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$)</string>
6471 </dict>
6472 <dict>
6473 <key>match</key>
6474 <string>(?x)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?:
6475 (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions)
6476 |
6477 (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime)
6478))?\b(?!\$)</string>
6479 <key>captures</key>
6480 <dict>
6481 <key>1</key>
6482 <dict>
6483 <key>name</key>
6484 <string>support.variable.object.process.tsx</string>
6485 </dict>
6486 <key>2</key>
6487 <dict>
6488 <key>name</key>
6489 <string>punctuation.accessor.tsx</string>
6490 </dict>
6491 <key>3</key>
6492 <dict>
6493 <key>name</key>
6494 <string>punctuation.accessor.optional.tsx</string>
6495 </dict>
6496 <key>4</key>
6497 <dict>
6498 <key>name</key>
6499 <string>support.variable.property.process.tsx</string>
6500 </dict>
6501 <key>5</key>
6502 <dict>
6503 <key>name</key>
6504 <string>support.function.process.tsx</string>
6505 </dict>
6506 </dict>
6507 </dict>
6508 <dict>
6509 <key>match</key>
6510 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$)</string>
6511 <key>captures</key>
6512 <dict>
6513 <key>1</key>
6514 <dict>
6515 <key>name</key>
6516 <string>support.type.object.module.tsx</string>
6517 </dict>
6518 <key>2</key>
6519 <dict>
6520 <key>name</key>
6521 <string>support.type.object.module.tsx</string>
6522 </dict>
6523 <key>3</key>
6524 <dict>
6525 <key>name</key>
6526 <string>punctuation.accessor.tsx</string>
6527 </dict>
6528 <key>4</key>
6529 <dict>
6530 <key>name</key>
6531 <string>punctuation.accessor.optional.tsx</string>
6532 </dict>
6533 <key>5</key>
6534 <dict>
6535 <key>name</key>
6536 <string>support.type.object.module.tsx</string>
6537 </dict>
6538 </dict>
6539 </dict>
6540 <dict>
6541 <key>name</key>
6542 <string>support.variable.object.node.tsx</string>
6543 <key>match</key>
6544 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$)</string>
6545 </dict>
6546 <dict>
6547 <key>match</key>
6548 <string>(?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s*
6549(?:
6550 (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset|
6551 Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove|
6552 Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)|
6553 Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help|
6554 Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate|
6555 Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover|
6556 Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error|
6557 Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort)
6558 ) |
6559 (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages|
6560 scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort|
6561 sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours|
6562 Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)|
6563 Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice|
6564 savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat|
6565 contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup|
6566 createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)|
6567 test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift|
6568 untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse|
6569 print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file|
6570 fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor|
6571 forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert|
6572 abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload|
6573 releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear|
6574 Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)|
6575 Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo|
6576 moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back
6577 ) |
6578 (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append|
6579 appendChild|appendData|before|blur|canPlayType|captureStream|
6580 caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click|
6581 cloneContents|cloneNode|cloneRange|close|closest|collapse|
6582 compareBoundaryPoints|compareDocumentPosition|comparePoint|contains|
6583 convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute|
6584 createAttributeNS|createCaption|createCDATASection|createComment|
6585 createContextualFragment|createDocument|createDocumentFragment|
6586 createDocumentType|createElement|createElementNS|createEntityReference|
6587 createEvent|createExpression|createHTMLDocument|createNodeIterator|
6588 createNSResolver|createProcessingInstruction|createRange|createShadowRoot|
6589 createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete|
6590 deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot|
6591 deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint|
6592 enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen|
6593 exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get|
6594 getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode|
6595 getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads|
6596 getClientRects|getContext|getDestinationInsertionPoints|getElementById|
6597 getElementsByClassName|getElementsByName|getElementsByTagName|
6598 getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate|
6599 getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes|
6600 hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement|
6601 insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData|
6602 insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode|
6603 isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI|
6604 lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild|
6605 moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open|
6606 parentNode|pause|play|postMessage|prepend|preventDefault|previousNode|
6607 previousSibling|probablySupportsContext|queryCommandEnabled|
6608 queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue|
6609 querySelector|querySelectorAll|registerContentHandler|registerElement|
6610 registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute|
6611 removeAttributeNode|removeAttributeNS|removeChild|removeEventListener|
6612 removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity|
6613 requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView|
6614 scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute|
6615 setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture|
6616 setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem|
6617 setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore|
6618 slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation|
6619 submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob|
6620 toDataURL|toggle|toString|values|write|writeln
6621 ) |
6622 (all|catch|finally|race|reject|resolve|then
6623 )
6624)(?=\s*\()</string>
6625 <key>captures</key>
6626 <dict>
6627 <key>1</key>
6628 <dict>
6629 <key>name</key>
6630 <string>punctuation.accessor.tsx</string>
6631 </dict>
6632 <key>2</key>
6633 <dict>
6634 <key>name</key>
6635 <string>punctuation.accessor.optional.tsx</string>
6636 </dict>
6637 <key>3</key>
6638 <dict>
6639 <key>name</key>
6640 <string>support.function.event-handler.tsx</string>
6641 </dict>
6642 <key>4</key>
6643 <dict>
6644 <key>name</key>
6645 <string>support.function.tsx</string>
6646 </dict>
6647 <key>5</key>
6648 <dict>
6649 <key>name</key>
6650 <string>support.function.dom.tsx</string>
6651 </dict>
6652 <key>6</key>
6653 <dict>
6654 <key>name</key>
6655 <string>support.function.promise.tsx</string>
6656 </dict>
6657 </dict>
6658 </dict>
6659 </array>
6660 </dict>
6661 <key>identifiers</key>
6662 <dict>
6663 <key>patterns</key>
6664 <array>
6665 <dict>
6666 <key>include</key>
6667 <string>#object-identifiers</string>
6668 </dict>
6669 <dict>
6670 <key>match</key>
6671 <string>(?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
6672 ((async\s+)?(
6673 (function\s*[(&lt;*]) |
6674 (function\s+) |
6675 ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
6676 )) |
6677 ((async\s*)?(
6678 ((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) |
6679 # sure shot arrow functions even if =&gt; is on new line
6680(
6681 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)?
6682 [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*
6683 (
6684 ([)]\s*:) | # ():
6685 ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
6686 )
6687) |
6688(
6689 [&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
6690) |
6691# arrow function possible to detect only with =&gt; on same line
6692(
6693 (&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*\&gt;)*&gt;\s*)? # typeparameters
6694 \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters
6695 (\s*:\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type
6696 \s*=&gt; # arrow operator
6697)
6698 ))
6699))</string>
6700 <key>captures</key>
6701 <dict>
6702 <key>1</key>
6703 <dict>
6704 <key>name</key>
6705 <string>punctuation.accessor.tsx</string>
6706 </dict>
6707 <key>2</key>
6708 <dict>
6709 <key>name</key>
6710 <string>punctuation.accessor.optional.tsx</string>
6711 </dict>
6712 <key>3</key>
6713 <dict>
6714 <key>name</key>
6715 <string>entity.name.function.tsx</string>
6716 </dict>
6717 </dict>
6718 </dict>
6719 <dict>
6720 <key>match</key>
6721 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6722 <key>captures</key>
6723 <dict>
6724 <key>1</key>
6725 <dict>
6726 <key>name</key>
6727 <string>punctuation.accessor.tsx</string>
6728 </dict>
6729 <key>2</key>
6730 <dict>
6731 <key>name</key>
6732 <string>punctuation.accessor.optional.tsx</string>
6733 </dict>
6734 <key>3</key>
6735 <dict>
6736 <key>name</key>
6737 <string>variable.other.constant.property.tsx</string>
6738 </dict>
6739 </dict>
6740 </dict>
6741 <dict>
6742 <key>match</key>
6743 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6744 <key>captures</key>
6745 <dict>
6746 <key>1</key>
6747 <dict>
6748 <key>name</key>
6749 <string>punctuation.accessor.tsx</string>
6750 </dict>
6751 <key>2</key>
6752 <dict>
6753 <key>name</key>
6754 <string>punctuation.accessor.optional.tsx</string>
6755 </dict>
6756 <key>3</key>
6757 <dict>
6758 <key>name</key>
6759 <string>variable.other.property.tsx</string>
6760 </dict>
6761 </dict>
6762 </dict>
6763 <dict>
6764 <key>name</key>
6765 <string>variable.other.constant.tsx</string>
6766 <key>match</key>
6767 <string>([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])</string>
6768 </dict>
6769 <dict>
6770 <key>name</key>
6771 <string>variable.other.readwrite.tsx</string>
6772 <key>match</key>
6773 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
6774 </dict>
6775 </array>
6776 </dict>
6777 <key>object-identifiers</key>
6778 <dict>
6779 <key>patterns</key>
6780 <array>
6781 <dict>
6782 <key>name</key>
6783 <string>support.class.tsx</string>
6784 <key>match</key>
6785 <string>([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$))</string>
6786 </dict>
6787 <dict>
6788 <key>match</key>
6789 <string>(?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?:
6790 (\#?[[:upper:]][_$[:digit:][:upper:]]*) |
6791 (\#?[_$[:alpha:]][_$[:alnum:]]*)
6792)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6793 <key>captures</key>
6794 <dict>
6795 <key>1</key>
6796 <dict>
6797 <key>name</key>
6798 <string>punctuation.accessor.tsx</string>
6799 </dict>
6800 <key>2</key>
6801 <dict>
6802 <key>name</key>
6803 <string>punctuation.accessor.optional.tsx</string>
6804 </dict>
6805 <key>3</key>
6806 <dict>
6807 <key>name</key>
6808 <string>variable.other.constant.object.property.tsx</string>
6809 </dict>
6810 <key>4</key>
6811 <dict>
6812 <key>name</key>
6813 <string>variable.other.object.property.tsx</string>
6814 </dict>
6815 </dict>
6816 </dict>
6817 <dict>
6818 <key>match</key>
6819 <string>(?x)(?:
6820 ([[:upper:]][_$[:digit:][:upper:]]*) |
6821 ([_$[:alpha:]][_$[:alnum:]]*)
6822)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)</string>
6823 <key>captures</key>
6824 <dict>
6825 <key>1</key>
6826 <dict>
6827 <key>name</key>
6828 <string>variable.other.constant.object.tsx</string>
6829 </dict>
6830 <key>2</key>
6831 <dict>
6832 <key>name</key>
6833 <string>variable.other.object.tsx</string>
6834 </dict>
6835 </dict>
6836 </dict>
6837 </array>
6838 </dict>
6839 <key>type-annotation</key>
6840 <dict>
6841 <key>patterns</key>
6842 <array>
6843 <dict>
6844 <key>name</key>
6845 <string>meta.type.annotation.tsx</string>
6846 <key>begin</key>
6847 <string>(:)(?=\s*\S)</string>
6848 <key>beginCaptures</key>
6849 <dict>
6850 <key>1</key>
6851 <dict>
6852 <key>name</key>
6853 <string>keyword.operator.type.annotation.tsx</string>
6854 </dict>
6855 </dict>
6856 <key>end</key>
6857 <string>(?&lt;![:|&amp;])(?!\s*[|&amp;]\s+)((?=^|[,);\}\]]|//)|(?==[^&gt;])|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6858 <key>patterns</key>
6859 <array>
6860 <dict>
6861 <key>include</key>
6862 <string>#type</string>
6863 </dict>
6864 </array>
6865 </dict>
6866 <dict>
6867 <key>name</key>
6868 <string>meta.type.annotation.tsx</string>
6869 <key>begin</key>
6870 <string>(:)</string>
6871 <key>beginCaptures</key>
6872 <dict>
6873 <key>1</key>
6874 <dict>
6875 <key>name</key>
6876 <string>keyword.operator.type.annotation.tsx</string>
6877 </dict>
6878 </dict>
6879 <key>end</key>
6880 <string>(?&lt;![:|&amp;])((?=[,);\}\]]|\/\/)|(?==[^&gt;])|(?=^\s*$)|((?&lt;=[\}&gt;\]\)]|[_$[:alpha:]])\s*(?=\{)))</string>
6881 <key>patterns</key>
6882 <array>
6883 <dict>
6884 <key>include</key>
6885 <string>#type</string>
6886 </dict>
6887 </array>
6888 </dict>
6889 </array>
6890 </dict>
6891 <key>parameter-type-annotation</key>
6892 <dict>
6893 <key>patterns</key>
6894 <array>
6895 <dict>
6896 <key>name</key>
6897 <string>meta.type.annotation.tsx</string>
6898 <key>begin</key>
6899 <string>(:)</string>
6900 <key>beginCaptures</key>
6901 <dict>
6902 <key>1</key>
6903 <dict>
6904 <key>name</key>
6905 <string>keyword.operator.type.annotation.tsx</string>
6906 </dict>
6907 </dict>
6908 <key>end</key>
6909 <string>(?=[,)])|(?==[^&gt;])</string>
6910 <key>patterns</key>
6911 <array>
6912 <dict>
6913 <key>include</key>
6914 <string>#type</string>
6915 </dict>
6916 </array>
6917 </dict>
6918 </array>
6919 </dict>
6920 <key>return-type</key>
6921 <dict>
6922 <key>patterns</key>
6923 <array>
6924 <dict>
6925 <key>name</key>
6926 <string>meta.return.type.tsx</string>
6927 <key>begin</key>
6928 <string>(?&lt;=\))\s*(:)(?=\s*\S)</string>
6929 <key>beginCaptures</key>
6930 <dict>
6931 <key>1</key>
6932 <dict>
6933 <key>name</key>
6934 <string>keyword.operator.type.annotation.tsx</string>
6935 </dict>
6936 </dict>
6937 <key>end</key>
6938 <string>(?&lt;![:|&amp;])(?=$|^|[{};,]|//)</string>
6939 <key>patterns</key>
6940 <array>
6941 <dict>
6942 <key>include</key>
6943 <string>#return-type-core</string>
6944 </dict>
6945 </array>
6946 </dict>
6947 <dict>
6948 <key>name</key>
6949 <string>meta.return.type.tsx</string>
6950 <key>begin</key>
6951 <string>(?&lt;=\))\s*(:)</string>
6952 <key>beginCaptures</key>
6953 <dict>
6954 <key>1</key>
6955 <dict>
6956 <key>name</key>
6957 <string>keyword.operator.type.annotation.tsx</string>
6958 </dict>
6959 </dict>
6960 <key>end</key>
6961 <string>(?&lt;![:|&amp;])((?=[{};,]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
6962 <key>patterns</key>
6963 <array>
6964 <dict>
6965 <key>include</key>
6966 <string>#return-type-core</string>
6967 </dict>
6968 </array>
6969 </dict>
6970 </array>
6971 </dict>
6972 <key>return-type-core</key>
6973 <dict>
6974 <key>patterns</key>
6975 <array>
6976 <dict>
6977 <key>include</key>
6978 <string>#comment</string>
6979 </dict>
6980 <dict>
6981 <key>begin</key>
6982 <string>(?&lt;=[:|&amp;])(?=\s*\{)</string>
6983 <key>end</key>
6984 <string>(?&lt;=\})</string>
6985 <key>patterns</key>
6986 <array>
6987 <dict>
6988 <key>include</key>
6989 <string>#type-object</string>
6990 </dict>
6991 </array>
6992 </dict>
6993 <dict>
6994 <key>include</key>
6995 <string>#type-predicate-operator</string>
6996 </dict>
6997 <dict>
6998 <key>include</key>
6999 <string>#type</string>
7000 </dict>
7001 </array>
7002 </dict>
7003 <key>arrow-return-type</key>
7004 <dict>
7005 <key>name</key>
7006 <string>meta.return.type.arrow.tsx</string>
7007 <key>begin</key>
7008 <string>(?&lt;=\))\s*(:)</string>
7009 <key>beginCaptures</key>
7010 <dict>
7011 <key>1</key>
7012 <dict>
7013 <key>name</key>
7014 <string>keyword.operator.type.annotation.tsx</string>
7015 </dict>
7016 </dict>
7017 <key>end</key>
7018 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7019 <key>patterns</key>
7020 <array>
7021 <dict>
7022 <key>include</key>
7023 <string>#arrow-return-type-body</string>
7024 </dict>
7025 </array>
7026 </dict>
7027 <key>possibly-arrow-return-type</key>
7028 <dict>
7029 <key>begin</key>
7030 <string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
7031 <key>beginCaptures</key>
7032 <dict>
7033 <key>1</key>
7034 <dict>
7035 <key>name</key>
7036 <string>meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx</string>
7037 </dict>
7038 </dict>
7039 <key>end</key>
7040 <string>(?==&gt;|\{|(^\s*(export|function|class|interface|let|var|(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)|(?:\bawait\s+(?:\busing(?=\s+(?!in\b|of\b(?!\s*(?:of\b|=)))[_$[:alpha:]])\b)\b)|const|import|enum|namespace|module|type|abstract|declare)\s+))</string>
7041 <key>contentName</key>
7042 <string>meta.arrow.tsx meta.return.type.arrow.tsx</string>
7043 <key>patterns</key>
7044 <array>
7045 <dict>
7046 <key>include</key>
7047 <string>#arrow-return-type-body</string>
7048 </dict>
7049 </array>
7050 </dict>
7051 <key>arrow-return-type-body</key>
7052 <dict>
7053 <key>patterns</key>
7054 <array>
7055 <dict>
7056 <key>begin</key>
7057 <string>(?&lt;=[:])(?=\s*\{)</string>
7058 <key>end</key>
7059 <string>(?&lt;=\})</string>
7060 <key>patterns</key>
7061 <array>
7062 <dict>
7063 <key>include</key>
7064 <string>#type-object</string>
7065 </dict>
7066 </array>
7067 </dict>
7068 <dict>
7069 <key>include</key>
7070 <string>#type-predicate-operator</string>
7071 </dict>
7072 <dict>
7073 <key>include</key>
7074 <string>#type</string>
7075 </dict>
7076 </array>
7077 </dict>
7078 <key>type-parameters</key>
7079 <dict>
7080 <key>name</key>
7081 <string>meta.type.parameters.tsx</string>
7082 <key>begin</key>
7083 <string>(&lt;)</string>
7084 <key>beginCaptures</key>
7085 <dict>
7086 <key>1</key>
7087 <dict>
7088 <key>name</key>
7089 <string>punctuation.definition.typeparameters.begin.tsx</string>
7090 </dict>
7091 </dict>
7092 <key>end</key>
7093 <string>(&gt;)</string>
7094 <key>endCaptures</key>
7095 <dict>
7096 <key>1</key>
7097 <dict>
7098 <key>name</key>
7099 <string>punctuation.definition.typeparameters.end.tsx</string>
7100 </dict>
7101 </dict>
7102 <key>patterns</key>
7103 <array>
7104 <dict>
7105 <key>include</key>
7106 <string>#comment</string>
7107 </dict>
7108 <dict>
7109 <key>name</key>
7110 <string>storage.modifier.tsx</string>
7111 <key>match</key>
7112 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7113 </dict>
7114 <dict>
7115 <key>include</key>
7116 <string>#type</string>
7117 </dict>
7118 <dict>
7119 <key>include</key>
7120 <string>#punctuation-comma</string>
7121 </dict>
7122 <dict>
7123 <key>name</key>
7124 <string>keyword.operator.assignment.tsx</string>
7125 <key>match</key>
7126 <string>(=)(?!&gt;)</string>
7127 </dict>
7128 </array>
7129 </dict>
7130 <key>type-arguments</key>
7131 <dict>
7132 <key>name</key>
7133 <string>meta.type.parameters.tsx</string>
7134 <key>begin</key>
7135 <string>\&lt;</string>
7136 <key>beginCaptures</key>
7137 <dict>
7138 <key>0</key>
7139 <dict>
7140 <key>name</key>
7141 <string>punctuation.definition.typeparameters.begin.tsx</string>
7142 </dict>
7143 </dict>
7144 <key>end</key>
7145 <string>\&gt;</string>
7146 <key>endCaptures</key>
7147 <dict>
7148 <key>0</key>
7149 <dict>
7150 <key>name</key>
7151 <string>punctuation.definition.typeparameters.end.tsx</string>
7152 </dict>
7153 </dict>
7154 <key>patterns</key>
7155 <array>
7156 <dict>
7157 <key>include</key>
7158 <string>#type-arguments-body</string>
7159 </dict>
7160 </array>
7161 </dict>
7162 <key>type-arguments-body</key>
7163 <dict>
7164 <key>patterns</key>
7165 <array>
7166 <dict>
7167 <key>match</key>
7168 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7169 <key>captures</key>
7170 <dict>
7171 <key>0</key>
7172 <dict>
7173 <key>name</key>
7174 <string>keyword.operator.type.tsx</string>
7175 </dict>
7176 </dict>
7177 </dict>
7178 <dict>
7179 <key>include</key>
7180 <string>#type</string>
7181 </dict>
7182 <dict>
7183 <key>include</key>
7184 <string>#punctuation-comma</string>
7185 </dict>
7186 </array>
7187 </dict>
7188 <key>type</key>
7189 <dict>
7190 <key>patterns</key>
7191 <array>
7192 <dict>
7193 <key>include</key>
7194 <string>#comment</string>
7195 </dict>
7196 <dict>
7197 <key>include</key>
7198 <string>#type-string</string>
7199 </dict>
7200 <dict>
7201 <key>include</key>
7202 <string>#numeric-literal</string>
7203 </dict>
7204 <dict>
7205 <key>include</key>
7206 <string>#type-primitive</string>
7207 </dict>
7208 <dict>
7209 <key>include</key>
7210 <string>#type-builtin-literals</string>
7211 </dict>
7212 <dict>
7213 <key>include</key>
7214 <string>#type-parameters</string>
7215 </dict>
7216 <dict>
7217 <key>include</key>
7218 <string>#type-tuple</string>
7219 </dict>
7220 <dict>
7221 <key>include</key>
7222 <string>#type-object</string>
7223 </dict>
7224 <dict>
7225 <key>include</key>
7226 <string>#type-operators</string>
7227 </dict>
7228 <dict>
7229 <key>include</key>
7230 <string>#type-conditional</string>
7231 </dict>
7232 <dict>
7233 <key>include</key>
7234 <string>#type-fn-type-parameters</string>
7235 </dict>
7236 <dict>
7237 <key>include</key>
7238 <string>#type-paren-or-function-parameters</string>
7239 </dict>
7240 <dict>
7241 <key>include</key>
7242 <string>#type-function-return-type</string>
7243 </dict>
7244 <dict>
7245 <key>match</key>
7246 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*</string>
7247 <key>captures</key>
7248 <dict>
7249 <key>1</key>
7250 <dict>
7251 <key>name</key>
7252 <string>storage.modifier.tsx</string>
7253 </dict>
7254 </dict>
7255 </dict>
7256 <dict>
7257 <key>include</key>
7258 <string>#type-name</string>
7259 </dict>
7260 </array>
7261 </dict>
7262 <key>type-primitive</key>
7263 <dict>
7264 <key>name</key>
7265 <string>support.type.primitive.tsx</string>
7266 <key>match</key>
7267 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7268 </dict>
7269 <key>type-builtin-literals</key>
7270 <dict>
7271 <key>name</key>
7272 <string>support.type.builtin.tsx</string>
7273 <key>match</key>
7274 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7275 </dict>
7276 <key>type-tuple</key>
7277 <dict>
7278 <key>name</key>
7279 <string>meta.type.tuple.tsx</string>
7280 <key>begin</key>
7281 <string>\[</string>
7282 <key>beginCaptures</key>
7283 <dict>
7284 <key>0</key>
7285 <dict>
7286 <key>name</key>
7287 <string>meta.brace.square.tsx</string>
7288 </dict>
7289 </dict>
7290 <key>end</key>
7291 <string>\]</string>
7292 <key>endCaptures</key>
7293 <dict>
7294 <key>0</key>
7295 <dict>
7296 <key>name</key>
7297 <string>meta.brace.square.tsx</string>
7298 </dict>
7299 </dict>
7300 <key>patterns</key>
7301 <array>
7302 <dict>
7303 <key>name</key>
7304 <string>keyword.operator.rest.tsx</string>
7305 <key>match</key>
7306 <string>\.\.\.</string>
7307 </dict>
7308 <dict>
7309 <key>match</key>
7310 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:)</string>
7311 <key>captures</key>
7312 <dict>
7313 <key>1</key>
7314 <dict>
7315 <key>name</key>
7316 <string>entity.name.label.tsx</string>
7317 </dict>
7318 <key>2</key>
7319 <dict>
7320 <key>name</key>
7321 <string>keyword.operator.optional.tsx</string>
7322 </dict>
7323 <key>3</key>
7324 <dict>
7325 <key>name</key>
7326 <string>punctuation.separator.label.tsx</string>
7327 </dict>
7328 </dict>
7329 </dict>
7330 <dict>
7331 <key>include</key>
7332 <string>#type</string>
7333 </dict>
7334 <dict>
7335 <key>include</key>
7336 <string>#punctuation-comma</string>
7337 </dict>
7338 </array>
7339 </dict>
7340 <key>type-object</key>
7341 <dict>
7342 <key>name</key>
7343 <string>meta.object.type.tsx</string>
7344 <key>begin</key>
7345 <string>\{</string>
7346 <key>beginCaptures</key>
7347 <dict>
7348 <key>0</key>
7349 <dict>
7350 <key>name</key>
7351 <string>punctuation.definition.block.tsx</string>
7352 </dict>
7353 </dict>
7354 <key>end</key>
7355 <string>\}</string>
7356 <key>endCaptures</key>
7357 <dict>
7358 <key>0</key>
7359 <dict>
7360 <key>name</key>
7361 <string>punctuation.definition.block.tsx</string>
7362 </dict>
7363 </dict>
7364 <key>patterns</key>
7365 <array>
7366 <dict>
7367 <key>include</key>
7368 <string>#comment</string>
7369 </dict>
7370 <dict>
7371 <key>include</key>
7372 <string>#method-declaration</string>
7373 </dict>
7374 <dict>
7375 <key>include</key>
7376 <string>#indexer-declaration</string>
7377 </dict>
7378 <dict>
7379 <key>include</key>
7380 <string>#indexer-mapped-type-declaration</string>
7381 </dict>
7382 <dict>
7383 <key>include</key>
7384 <string>#field-declaration</string>
7385 </dict>
7386 <dict>
7387 <key>include</key>
7388 <string>#type-annotation</string>
7389 </dict>
7390 <dict>
7391 <key>begin</key>
7392 <string>\.\.\.</string>
7393 <key>beginCaptures</key>
7394 <dict>
7395 <key>0</key>
7396 <dict>
7397 <key>name</key>
7398 <string>keyword.operator.spread.tsx</string>
7399 </dict>
7400 </dict>
7401 <key>end</key>
7402 <string>(?=\}|;|,|$)|(?&lt;=\})</string>
7403 <key>patterns</key>
7404 <array>
7405 <dict>
7406 <key>include</key>
7407 <string>#type</string>
7408 </dict>
7409 </array>
7410 </dict>
7411 <dict>
7412 <key>include</key>
7413 <string>#punctuation-comma</string>
7414 </dict>
7415 <dict>
7416 <key>include</key>
7417 <string>#punctuation-semicolon</string>
7418 </dict>
7419 <dict>
7420 <key>include</key>
7421 <string>#type</string>
7422 </dict>
7423 </array>
7424 </dict>
7425 <key>type-conditional</key>
7426 <dict>
7427 <key>patterns</key>
7428 <array>
7429 <dict>
7430 <key>begin</key>
7431 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
7432 <key>beginCaptures</key>
7433 <dict>
7434 <key>1</key>
7435 <dict>
7436 <key>name</key>
7437 <string>storage.modifier.tsx</string>
7438 </dict>
7439 </dict>
7440 <key>end</key>
7441 <string>(?&lt;=:)</string>
7442 <key>patterns</key>
7443 <array>
7444 <dict>
7445 <key>begin</key>
7446 <string>\?</string>
7447 <key>beginCaptures</key>
7448 <dict>
7449 <key>0</key>
7450 <dict>
7451 <key>name</key>
7452 <string>keyword.operator.ternary.tsx</string>
7453 </dict>
7454 </dict>
7455 <key>end</key>
7456 <string>:</string>
7457 <key>endCaptures</key>
7458 <dict>
7459 <key>0</key>
7460 <dict>
7461 <key>name</key>
7462 <string>keyword.operator.ternary.tsx</string>
7463 </dict>
7464 </dict>
7465 <key>patterns</key>
7466 <array>
7467 <dict>
7468 <key>include</key>
7469 <string>#type</string>
7470 </dict>
7471 </array>
7472 </dict>
7473 <dict>
7474 <key>include</key>
7475 <string>#type</string>
7476 </dict>
7477 </array>
7478 </dict>
7479 </array>
7480 </dict>
7481 <key>type-paren-or-function-parameters</key>
7482 <dict>
7483 <key>name</key>
7484 <string>meta.type.paren.cover.tsx</string>
7485 <key>begin</key>
7486 <string>\(</string>
7487 <key>beginCaptures</key>
7488 <dict>
7489 <key>0</key>
7490 <dict>
7491 <key>name</key>
7492 <string>meta.brace.round.tsx</string>
7493 </dict>
7494 </dict>
7495 <key>end</key>
7496 <string>\)</string>
7497 <key>endCaptures</key>
7498 <dict>
7499 <key>0</key>
7500 <dict>
7501 <key>name</key>
7502 <string>meta.brace.round.tsx</string>
7503 </dict>
7504 </dict>
7505 <key>patterns</key>
7506 <array>
7507 <dict>
7508 <key>match</key>
7509 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*(
7510 (&lt;) |
7511 ([(]\s*(
7512 ([)]) |
7513 (\.\.\.) |
7514 ([_$[:alnum:]]+\s*(
7515 ([:,?=])|
7516 ([)]\s*=&gt;)
7517 ))
7518 ))
7519)) |
7520(:\s*(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) |
7521(:\s*((&lt;\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))))</string>
7522 <key>captures</key>
7523 <dict>
7524 <key>1</key>
7525 <dict>
7526 <key>name</key>
7527 <string>storage.modifier.tsx</string>
7528 </dict>
7529 <key>2</key>
7530 <dict>
7531 <key>name</key>
7532 <string>keyword.operator.rest.tsx</string>
7533 </dict>
7534 <key>3</key>
7535 <dict>
7536 <key>name</key>
7537 <string>entity.name.function.tsx variable.language.this.tsx</string>
7538 </dict>
7539 <key>4</key>
7540 <dict>
7541 <key>name</key>
7542 <string>entity.name.function.tsx</string>
7543 </dict>
7544 <key>5</key>
7545 <dict>
7546 <key>name</key>
7547 <string>keyword.operator.optional.tsx</string>
7548 </dict>
7549 </dict>
7550 </dict>
7551 <dict>
7552 <key>match</key>
7553 <string>(?x)(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?&lt;!=|:)(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:)</string>
7554 <key>captures</key>
7555 <dict>
7556 <key>1</key>
7557 <dict>
7558 <key>name</key>
7559 <string>storage.modifier.tsx</string>
7560 </dict>
7561 <key>2</key>
7562 <dict>
7563 <key>name</key>
7564 <string>keyword.operator.rest.tsx</string>
7565 </dict>
7566 <key>3</key>
7567 <dict>
7568 <key>name</key>
7569 <string>variable.parameter.tsx variable.language.this.tsx</string>
7570 </dict>
7571 <key>4</key>
7572 <dict>
7573 <key>name</key>
7574 <string>variable.parameter.tsx</string>
7575 </dict>
7576 <key>5</key>
7577 <dict>
7578 <key>name</key>
7579 <string>keyword.operator.optional.tsx</string>
7580 </dict>
7581 </dict>
7582 </dict>
7583 <dict>
7584 <key>include</key>
7585 <string>#type-annotation</string>
7586 </dict>
7587 <dict>
7588 <key>name</key>
7589 <string>punctuation.separator.parameter.tsx</string>
7590 <key>match</key>
7591 <string>,</string>
7592 </dict>
7593 <dict>
7594 <key>include</key>
7595 <string>#type</string>
7596 </dict>
7597 </array>
7598 </dict>
7599 <key>type-fn-type-parameters</key>
7600 <dict>
7601 <key>patterns</key>
7602 <array>
7603 <dict>
7604 <key>begin</key>
7605 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b(?=\s*\&lt;)</string>
7606 <key>beginCaptures</key>
7607 <dict>
7608 <key>1</key>
7609 <dict>
7610 <key>name</key>
7611 <string>meta.type.constructor.tsx storage.modifier.tsx</string>
7612 </dict>
7613 <key>2</key>
7614 <dict>
7615 <key>name</key>
7616 <string>meta.type.constructor.tsx keyword.control.new.tsx</string>
7617 </dict>
7618 </dict>
7619 <key>end</key>
7620 <string>(?&lt;=&gt;)</string>
7621 <key>patterns</key>
7622 <array>
7623 <dict>
7624 <key>include</key>
7625 <string>#comment</string>
7626 </dict>
7627 <dict>
7628 <key>include</key>
7629 <string>#type-parameters</string>
7630 </dict>
7631 </array>
7632 </dict>
7633 <dict>
7634 <key>name</key>
7635 <string>meta.type.constructor.tsx</string>
7636 <key>begin</key>
7637 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(abstract)\s+)?(new)\b\s*(?=\()</string>
7638 <key>beginCaptures</key>
7639 <dict>
7640 <key>1</key>
7641 <dict>
7642 <key>name</key>
7643 <string>storage.modifier.tsx</string>
7644 </dict>
7645 <key>2</key>
7646 <dict>
7647 <key>name</key>
7648 <string>keyword.control.new.tsx</string>
7649 </dict>
7650 </dict>
7651 <key>end</key>
7652 <string>(?&lt;=\))</string>
7653 <key>patterns</key>
7654 <array>
7655 <dict>
7656 <key>include</key>
7657 <string>#function-parameters</string>
7658 </dict>
7659 </array>
7660 </dict>
7661 <dict>
7662 <key>name</key>
7663 <string>meta.type.function.tsx</string>
7664 <key>begin</key>
7665 <string>(?x)(
7666 (?=
7667 [(]\s*(
7668 ([)]) |
7669 (\.\.\.) |
7670 ([_$[:alnum:]]+\s*(
7671 ([:,?=])|
7672 ([)]\s*=&gt;)
7673 ))
7674 )
7675 )
7676)</string>
7677 <key>end</key>
7678 <string>(?&lt;=\))</string>
7679 <key>patterns</key>
7680 <array>
7681 <dict>
7682 <key>include</key>
7683 <string>#function-parameters</string>
7684 </dict>
7685 </array>
7686 </dict>
7687 </array>
7688 </dict>
7689 <key>type-function-return-type</key>
7690 <dict>
7691 <key>patterns</key>
7692 <array>
7693 <dict>
7694 <key>name</key>
7695 <string>meta.type.function.return.tsx</string>
7696 <key>begin</key>
7697 <string>(=&gt;)(?=\s*\S)</string>
7698 <key>beginCaptures</key>
7699 <dict>
7700 <key>1</key>
7701 <dict>
7702 <key>name</key>
7703 <string>storage.type.function.arrow.tsx</string>
7704 </dict>
7705 </dict>
7706 <key>end</key>
7707 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])(?=[,\]\)\{\}=;&gt;:\?]|//|$)</string>
7708 <key>patterns</key>
7709 <array>
7710 <dict>
7711 <key>include</key>
7712 <string>#type-function-return-type-core</string>
7713 </dict>
7714 </array>
7715 </dict>
7716 <dict>
7717 <key>name</key>
7718 <string>meta.type.function.return.tsx</string>
7719 <key>begin</key>
7720 <string>=&gt;</string>
7721 <key>beginCaptures</key>
7722 <dict>
7723 <key>0</key>
7724 <dict>
7725 <key>name</key>
7726 <string>storage.type.function.arrow.tsx</string>
7727 </dict>
7728 </dict>
7729 <key>end</key>
7730 <string>(?&lt;!=&gt;)(?&lt;![|&amp;])((?=[,\]\)\{\}=;:\?&gt;]|//|^\s*$)|((?&lt;=\S)(?=\s*$)))</string>
7731 <key>patterns</key>
7732 <array>
7733 <dict>
7734 <key>include</key>
7735 <string>#type-function-return-type-core</string>
7736 </dict>
7737 </array>
7738 </dict>
7739 </array>
7740 </dict>
7741 <key>type-function-return-type-core</key>
7742 <dict>
7743 <key>patterns</key>
7744 <array>
7745 <dict>
7746 <key>include</key>
7747 <string>#comment</string>
7748 </dict>
7749 <dict>
7750 <key>begin</key>
7751 <string>(?&lt;==&gt;)(?=\s*\{)</string>
7752 <key>end</key>
7753 <string>(?&lt;=\})</string>
7754 <key>patterns</key>
7755 <array>
7756 <dict>
7757 <key>include</key>
7758 <string>#type-object</string>
7759 </dict>
7760 </array>
7761 </dict>
7762 <dict>
7763 <key>include</key>
7764 <string>#type-predicate-operator</string>
7765 </dict>
7766 <dict>
7767 <key>include</key>
7768 <string>#type</string>
7769 </dict>
7770 </array>
7771 </dict>
7772 <key>type-operators</key>
7773 <dict>
7774 <key>patterns</key>
7775 <array>
7776 <dict>
7777 <key>include</key>
7778 <string>#typeof-operator</string>
7779 </dict>
7780 <dict>
7781 <key>include</key>
7782 <string>#type-infer</string>
7783 </dict>
7784 <dict>
7785 <key>begin</key>
7786 <string>([&amp;|])(?=\s*\{)</string>
7787 <key>beginCaptures</key>
7788 <dict>
7789 <key>0</key>
7790 <dict>
7791 <key>name</key>
7792 <string>keyword.operator.type.tsx</string>
7793 </dict>
7794 </dict>
7795 <key>end</key>
7796 <string>(?&lt;=\})</string>
7797 <key>patterns</key>
7798 <array>
7799 <dict>
7800 <key>include</key>
7801 <string>#type-object</string>
7802 </dict>
7803 </array>
7804 </dict>
7805 <dict>
7806 <key>begin</key>
7807 <string>[&amp;|]</string>
7808 <key>beginCaptures</key>
7809 <dict>
7810 <key>0</key>
7811 <dict>
7812 <key>name</key>
7813 <string>keyword.operator.type.tsx</string>
7814 </dict>
7815 </dict>
7816 <key>end</key>
7817 <string>(?=\S)</string>
7818 </dict>
7819 <dict>
7820 <key>name</key>
7821 <string>keyword.operator.expression.keyof.tsx</string>
7822 <key>match</key>
7823 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7824 </dict>
7825 <dict>
7826 <key>name</key>
7827 <string>keyword.operator.ternary.tsx</string>
7828 <key>match</key>
7829 <string>(\?|\:)</string>
7830 </dict>
7831 <dict>
7832 <key>name</key>
7833 <string>keyword.operator.expression.import.tsx</string>
7834 <key>match</key>
7835 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))import(?=\s*\()</string>
7836 </dict>
7837 </array>
7838 </dict>
7839 <key>type-infer</key>
7840 <dict>
7841 <key>patterns</key>
7842 <array>
7843 <dict>
7844 <key>match</key>
7845 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))?</string>
7846 <key>name</key>
7847 <string>meta.type.infer.tsx</string>
7848 <key>captures</key>
7849 <dict>
7850 <key>1</key>
7851 <dict>
7852 <key>name</key>
7853 <string>keyword.operator.expression.infer.tsx</string>
7854 </dict>
7855 <key>2</key>
7856 <dict>
7857 <key>name</key>
7858 <string>entity.name.type.tsx</string>
7859 </dict>
7860 <key>3</key>
7861 <dict>
7862 <key>name</key>
7863 <string>keyword.operator.expression.extends.tsx</string>
7864 </dict>
7865 </dict>
7866 </dict>
7867 </array>
7868 </dict>
7869 <key>type-predicate-operator</key>
7870 <dict>
7871 <key>patterns</key>
7872 <array>
7873 <dict>
7874 <key>match</key>
7875 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7876 <key>captures</key>
7877 <dict>
7878 <key>1</key>
7879 <dict>
7880 <key>name</key>
7881 <string>keyword.operator.type.asserts.tsx</string>
7882 </dict>
7883 <key>2</key>
7884 <dict>
7885 <key>name</key>
7886 <string>variable.parameter.tsx variable.language.this.tsx</string>
7887 </dict>
7888 <key>3</key>
7889 <dict>
7890 <key>name</key>
7891 <string>variable.parameter.tsx</string>
7892 </dict>
7893 <key>4</key>
7894 <dict>
7895 <key>name</key>
7896 <string>keyword.operator.expression.is.tsx</string>
7897 </dict>
7898 </dict>
7899 </dict>
7900 <dict>
7901 <key>match</key>
7902 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7903 <key>captures</key>
7904 <dict>
7905 <key>1</key>
7906 <dict>
7907 <key>name</key>
7908 <string>keyword.operator.type.asserts.tsx</string>
7909 </dict>
7910 <key>2</key>
7911 <dict>
7912 <key>name</key>
7913 <string>variable.parameter.tsx variable.language.this.tsx</string>
7914 </dict>
7915 <key>3</key>
7916 <dict>
7917 <key>name</key>
7918 <string>variable.parameter.tsx</string>
7919 </dict>
7920 </dict>
7921 </dict>
7922 <dict>
7923 <key>name</key>
7924 <string>keyword.operator.type.asserts.tsx</string>
7925 <key>match</key>
7926 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7927 </dict>
7928 <dict>
7929 <key>name</key>
7930 <string>keyword.operator.expression.is.tsx</string>
7931 <key>match</key>
7932 <string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
7933 </dict>
7934 </array>
7935 </dict>
7936 <key>type-name</key>
7937 <dict>
7938 <key>patterns</key>
7939 <array>
7940 <dict>
7941 <key>begin</key>
7942 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(&lt;)</string>
7943 <key>captures</key>
7944 <dict>
7945 <key>1</key>
7946 <dict>
7947 <key>name</key>
7948 <string>entity.name.type.module.tsx</string>
7949 </dict>
7950 <key>2</key>
7951 <dict>
7952 <key>name</key>
7953 <string>punctuation.accessor.tsx</string>
7954 </dict>
7955 <key>3</key>
7956 <dict>
7957 <key>name</key>
7958 <string>punctuation.accessor.optional.tsx</string>
7959 </dict>
7960 <key>4</key>
7961 <dict>
7962 <key>name</key>
7963 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx</string>
7964 </dict>
7965 </dict>
7966 <key>end</key>
7967 <string>(&gt;)</string>
7968 <key>endCaptures</key>
7969 <dict>
7970 <key>1</key>
7971 <dict>
7972 <key>name</key>
7973 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx</string>
7974 </dict>
7975 </dict>
7976 <key>contentName</key>
7977 <string>meta.type.parameters.tsx</string>
7978 <key>patterns</key>
7979 <array>
7980 <dict>
7981 <key>include</key>
7982 <string>#type-arguments-body</string>
7983 </dict>
7984 </array>
7985 </dict>
7986 <dict>
7987 <key>begin</key>
7988 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)</string>
7989 <key>beginCaptures</key>
7990 <dict>
7991 <key>1</key>
7992 <dict>
7993 <key>name</key>
7994 <string>entity.name.type.tsx</string>
7995 </dict>
7996 <key>2</key>
7997 <dict>
7998 <key>name</key>
7999 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx</string>
8000 </dict>
8001 </dict>
8002 <key>end</key>
8003 <string>(&gt;)</string>
8004 <key>endCaptures</key>
8005 <dict>
8006 <key>1</key>
8007 <dict>
8008 <key>name</key>
8009 <string>meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx</string>
8010 </dict>
8011 </dict>
8012 <key>contentName</key>
8013 <string>meta.type.parameters.tsx</string>
8014 <key>patterns</key>
8015 <array>
8016 <dict>
8017 <key>include</key>
8018 <string>#type-arguments-body</string>
8019 </dict>
8020 </array>
8021 </dict>
8022 <dict>
8023 <key>match</key>
8024 <string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8025 <key>captures</key>
8026 <dict>
8027 <key>1</key>
8028 <dict>
8029 <key>name</key>
8030 <string>entity.name.type.module.tsx</string>
8031 </dict>
8032 <key>2</key>
8033 <dict>
8034 <key>name</key>
8035 <string>punctuation.accessor.tsx</string>
8036 </dict>
8037 <key>3</key>
8038 <dict>
8039 <key>name</key>
8040 <string>punctuation.accessor.optional.tsx</string>
8041 </dict>
8042 </dict>
8043 </dict>
8044 <dict>
8045 <key>name</key>
8046 <string>entity.name.type.tsx</string>
8047 <key>match</key>
8048 <string>[_$[:alpha:]][_$[:alnum:]]*</string>
8049 </dict>
8050 </array>
8051 </dict>
8052 <key>punctuation-comma</key>
8053 <dict>
8054 <key>name</key>
8055 <string>punctuation.separator.comma.tsx</string>
8056 <key>match</key>
8057 <string>,</string>
8058 </dict>
8059 <key>punctuation-semicolon</key>
8060 <dict>
8061 <key>name</key>
8062 <string>punctuation.terminator.statement.tsx</string>
8063 <key>match</key>
8064 <string>;</string>
8065 </dict>
8066 <key>punctuation-accessor</key>
8067 <dict>
8068 <key>match</key>
8069 <string>(?:(\.)|(\?\.(?!\s*[[:digit:]])))</string>
8070 <key>captures</key>
8071 <dict>
8072 <key>1</key>
8073 <dict>
8074 <key>name</key>
8075 <string>punctuation.accessor.tsx</string>
8076 </dict>
8077 <key>2</key>
8078 <dict>
8079 <key>name</key>
8080 <string>punctuation.accessor.optional.tsx</string>
8081 </dict>
8082 </dict>
8083 </dict>
8084 <key>string</key>
8085 <dict>
8086 <key>patterns</key>
8087 <array>
8088 <dict>
8089 <key>include</key>
8090 <string>#qstring-single</string>
8091 </dict>
8092 <dict>
8093 <key>include</key>
8094 <string>#qstring-double</string>
8095 </dict>
8096 <dict>
8097 <key>include</key>
8098 <string>#template</string>
8099 </dict>
8100 </array>
8101 </dict>
8102 <key>qstring-double</key>
8103 <dict>
8104 <key>name</key>
8105 <string>string.quoted.double.tsx</string>
8106 <key>begin</key>
8107 <string>"</string>
8108 <key>beginCaptures</key>
8109 <dict>
8110 <key>0</key>
8111 <dict>
8112 <key>name</key>
8113 <string>punctuation.definition.string.begin.tsx</string>
8114 </dict>
8115 </dict>
8116 <key>end</key>
8117 <string>(")|((?:[^\\\n])$)</string>
8118 <key>endCaptures</key>
8119 <dict>
8120 <key>1</key>
8121 <dict>
8122 <key>name</key>
8123 <string>punctuation.definition.string.end.tsx</string>
8124 </dict>
8125 <key>2</key>
8126 <dict>
8127 <key>name</key>
8128 <string>invalid.illegal.newline.tsx</string>
8129 </dict>
8130 </dict>
8131 <key>patterns</key>
8132 <array>
8133 <dict>
8134 <key>include</key>
8135 <string>#string-character-escape</string>
8136 </dict>
8137 </array>
8138 </dict>
8139 <key>qstring-single</key>
8140 <dict>
8141 <key>name</key>
8142 <string>string.quoted.single.tsx</string>
8143 <key>begin</key>
8144 <string>'</string>
8145 <key>beginCaptures</key>
8146 <dict>
8147 <key>0</key>
8148 <dict>
8149 <key>name</key>
8150 <string>punctuation.definition.string.begin.tsx</string>
8151 </dict>
8152 </dict>
8153 <key>end</key>
8154 <string>(\')|((?:[^\\\n])$)</string>
8155 <key>endCaptures</key>
8156 <dict>
8157 <key>1</key>
8158 <dict>
8159 <key>name</key>
8160 <string>punctuation.definition.string.end.tsx</string>
8161 </dict>
8162 <key>2</key>
8163 <dict>
8164 <key>name</key>
8165 <string>invalid.illegal.newline.tsx</string>
8166 </dict>
8167 </dict>
8168 <key>patterns</key>
8169 <array>
8170 <dict>
8171 <key>include</key>
8172 <string>#string-character-escape</string>
8173 </dict>
8174 </array>
8175 </dict>
8176 <key>string-character-escape</key>
8177 <dict>
8178 <key>name</key>
8179 <string>constant.character.escape.tsx</string>
8180 <key>match</key>
8181 <string>\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>
8182 </dict>
8183 <key>template</key>
8184 <dict>
8185 <key>patterns</key>
8186 <array>
8187 <dict>
8188 <key>include</key>
8189 <string>#template-call</string>
8190 </dict>
8191 <dict>
8192 <key>contentName</key>
8193 <string>string.template.tsx</string>
8194 <key>begin</key>
8195 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8196 <key>beginCaptures</key>
8197 <dict>
8198 <key>1</key>
8199 <dict>
8200 <key>name</key>
8201 <string>entity.name.function.tagged-template.tsx</string>
8202 </dict>
8203 <key>2</key>
8204 <dict>
8205 <key>name</key>
8206 <string>string.template.tsx punctuation.definition.string.template.begin.tsx</string>
8207 </dict>
8208 </dict>
8209 <key>end</key>
8210 <string>`</string>
8211 <key>endCaptures</key>
8212 <dict>
8213 <key>0</key>
8214 <dict>
8215 <key>name</key>
8216 <string>string.template.tsx punctuation.definition.string.template.end.tsx</string>
8217 </dict>
8218 </dict>
8219 <key>patterns</key>
8220 <array>
8221 <dict>
8222 <key>include</key>
8223 <string>#template-substitution-element</string>
8224 </dict>
8225 <dict>
8226 <key>include</key>
8227 <string>#string-character-escape</string>
8228 </dict>
8229 </array>
8230 </dict>
8231 </array>
8232 </dict>
8233 <key>template-call</key>
8234 <dict>
8235 <key>patterns</key>
8236 <array>
8237 <dict>
8238 <key>begin</key>
8239 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8240 <key>end</key>
8241 <string>(?=`)</string>
8242 <key>patterns</key>
8243 <array>
8244 <dict>
8245 <key>begin</key>
8246 <string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
8247 <key>end</key>
8248 <string>(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)?`)</string>
8249 <key>patterns</key>
8250 <array>
8251 <dict>
8252 <key>include</key>
8253 <string>#support-function-call-identifiers</string>
8254 </dict>
8255 <dict>
8256 <key>name</key>
8257 <string>entity.name.function.tagged-template.tsx</string>
8258 <key>match</key>
8259 <string>([_$[:alpha:]][_$[:alnum:]]*)</string>
8260 </dict>
8261 </array>
8262 </dict>
8263 <dict>
8264 <key>include</key>
8265 <string>#type-arguments</string>
8266 </dict>
8267 </array>
8268 </dict>
8269 <dict>
8270 <key>begin</key>
8271 <string>([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))(([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;|\&lt;\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\&lt;\&gt;\,\.\[]|=&gt;|&amp;(?!&amp;)|\|(?!\|)))))([^&lt;&gt;\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?&lt;==)\&gt;)*(?&lt;!=)\&gt;))*(?&lt;!=)\&gt;)*(?&lt;!=)&gt;\s*)`)</string>
8272 <key>beginCaptures</key>
8273 <dict>
8274 <key>1</key>
8275 <dict>
8276 <key>name</key>
8277 <string>entity.name.function.tagged-template.tsx</string>
8278 </dict>
8279 </dict>
8280 <key>end</key>
8281 <string>(?=`)</string>
8282 <key>patterns</key>
8283 <array>
8284 <dict>
8285 <key>include</key>
8286 <string>#type-arguments</string>
8287 </dict>
8288 </array>
8289 </dict>
8290 </array>
8291 </dict>
8292 <key>template-substitution-element</key>
8293 <dict>
8294 <key>name</key>
8295 <string>meta.template.expression.tsx</string>
8296 <key>begin</key>
8297 <string>\$\{</string>
8298 <key>beginCaptures</key>
8299 <dict>
8300 <key>0</key>
8301 <dict>
8302 <key>name</key>
8303 <string>punctuation.definition.template-expression.begin.tsx</string>
8304 </dict>
8305 </dict>
8306 <key>end</key>
8307 <string>\}</string>
8308 <key>endCaptures</key>
8309 <dict>
8310 <key>0</key>
8311 <dict>
8312 <key>name</key>
8313 <string>punctuation.definition.template-expression.end.tsx</string>
8314 </dict>
8315 </dict>
8316 <key>patterns</key>
8317 <array>
8318 <dict>
8319 <key>include</key>
8320 <string>#expression</string>
8321 </dict>
8322 </array>
8323 <key>contentName</key>
8324 <string>meta.embedded.line.tsx</string>
8325 </dict>
8326 <key>type-string</key>
8327 <dict>
8328 <key>patterns</key>
8329 <array>
8330 <dict>
8331 <key>include</key>
8332 <string>#qstring-single</string>
8333 </dict>
8334 <dict>
8335 <key>include</key>
8336 <string>#qstring-double</string>
8337 </dict>
8338 <dict>
8339 <key>include</key>
8340 <string>#template-type</string>
8341 </dict>
8342 </array>
8343 </dict>
8344 <key>template-type</key>
8345 <dict>
8346 <key>patterns</key>
8347 <array>
8348 <dict>
8349 <key>include</key>
8350 <string>#template-call</string>
8351 </dict>
8352 <dict>
8353 <key>contentName</key>
8354 <string>string.template.tsx</string>
8355 <key>begin</key>
8356 <string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
8357 <key>beginCaptures</key>
8358 <dict>
8359 <key>1</key>
8360 <dict>
8361 <key>name</key>
8362 <string>entity.name.function.tagged-template.tsx</string>
8363 </dict>
8364 <key>2</key>
8365 <dict>
8366 <key>name</key>
8367 <string>string.template.tsx punctuation.definition.string.template.begin.tsx</string>
8368 </dict>
8369 </dict>
8370 <key>end</key>
8371 <string>`</string>
8372 <key>endCaptures</key>
8373 <dict>
8374 <key>0</key>
8375 <dict>
8376 <key>name</key>
8377 <string>string.template.tsx punctuation.definition.string.template.end.tsx</string>
8378 </dict>
8379 </dict>
8380 <key>patterns</key>
8381 <array>
8382 <dict>
8383 <key>include</key>
8384 <string>#template-type-substitution-element</string>
8385 </dict>
8386 <dict>
8387 <key>include</key>
8388 <string>#string-character-escape</string>
8389 </dict>
8390 </array>
8391 </dict>
8392 </array>
8393 </dict>
8394 <key>template-type-substitution-element</key>
8395 <dict>
8396 <key>name</key>
8397 <string>meta.template.expression.tsx</string>
8398 <key>begin</key>
8399 <string>\$\{</string>
8400 <key>beginCaptures</key>
8401 <dict>
8402 <key>0</key>
8403 <dict>
8404 <key>name</key>
8405 <string>punctuation.definition.template-expression.begin.tsx</string>
8406 </dict>
8407 </dict>
8408 <key>end</key>
8409 <string>\}</string>
8410 <key>endCaptures</key>
8411 <dict>
8412 <key>0</key>
8413 <dict>
8414 <key>name</key>
8415 <string>punctuation.definition.template-expression.end.tsx</string>
8416 </dict>
8417 </dict>
8418 <key>patterns</key>
8419 <array>
8420 <dict>
8421 <key>include</key>
8422 <string>#type</string>
8423 </dict>
8424 </array>
8425 <key>contentName</key>
8426 <string>meta.embedded.line.tsx</string>
8427 </dict>
8428 <key>regex</key>
8429 <dict>
8430 <key>patterns</key>
8431 <array>
8432 <dict>
8433 <key>name</key>
8434 <string>string.regexp.tsx</string>
8435 <key>begin</key>
8436 <string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8437 <key>beginCaptures</key>
8438 <dict>
8439 <key>1</key>
8440 <dict>
8441 <key>name</key>
8442 <string>punctuation.definition.string.begin.tsx</string>
8443 </dict>
8444 </dict>
8445 <key>end</key>
8446 <string>(/)([dgimsuvy]*)</string>
8447 <key>endCaptures</key>
8448 <dict>
8449 <key>1</key>
8450 <dict>
8451 <key>name</key>
8452 <string>punctuation.definition.string.end.tsx</string>
8453 </dict>
8454 <key>2</key>
8455 <dict>
8456 <key>name</key>
8457 <string>keyword.other.tsx</string>
8458 </dict>
8459 </dict>
8460 <key>patterns</key>
8461 <array>
8462 <dict>
8463 <key>include</key>
8464 <string>#regexp</string>
8465 </dict>
8466 </array>
8467 </dict>
8468 <dict>
8469 <key>name</key>
8470 <string>string.regexp.tsx</string>
8471 <key>begin</key>
8472 <string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8473 <key>beginCaptures</key>
8474 <dict>
8475 <key>0</key>
8476 <dict>
8477 <key>name</key>
8478 <string>punctuation.definition.string.begin.tsx</string>
8479 </dict>
8480 </dict>
8481 <key>end</key>
8482 <string>(/)([dgimsuvy]*)</string>
8483 <key>endCaptures</key>
8484 <dict>
8485 <key>1</key>
8486 <dict>
8487 <key>name</key>
8488 <string>punctuation.definition.string.end.tsx</string>
8489 </dict>
8490 <key>2</key>
8491 <dict>
8492 <key>name</key>
8493 <string>keyword.other.tsx</string>
8494 </dict>
8495 </dict>
8496 <key>patterns</key>
8497 <array>
8498 <dict>
8499 <key>include</key>
8500 <string>#regexp</string>
8501 </dict>
8502 </array>
8503 </dict>
8504 </array>
8505 </dict>
8506 <key>regexp</key>
8507 <dict>
8508 <key>patterns</key>
8509 <array>
8510 <dict>
8511 <key>name</key>
8512 <string>keyword.control.anchor.regexp</string>
8513 <key>match</key>
8514 <string>\\[bB]|\^|\$</string>
8515 </dict>
8516 <dict>
8517 <key>match</key>
8518 <string>\\[1-9]\d*|\\k&lt;([a-zA-Z_$][\w$]*)&gt;</string>
8519 <key>captures</key>
8520 <dict>
8521 <key>0</key>
8522 <dict>
8523 <key>name</key>
8524 <string>keyword.other.back-reference.regexp</string>
8525 </dict>
8526 <key>1</key>
8527 <dict>
8528 <key>name</key>
8529 <string>variable.other.regexp</string>
8530 </dict>
8531 </dict>
8532 </dict>
8533 <dict>
8534 <key>name</key>
8535 <string>keyword.operator.quantifier.regexp</string>
8536 <key>match</key>
8537 <string>[?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\??</string>
8538 </dict>
8539 <dict>
8540 <key>name</key>
8541 <string>keyword.operator.or.regexp</string>
8542 <key>match</key>
8543 <string>\|</string>
8544 </dict>
8545 <dict>
8546 <key>name</key>
8547 <string>meta.group.assertion.regexp</string>
8548 <key>begin</key>
8549 <string>(\()((\?=)|(\?!)|(\?&lt;=)|(\?&lt;!))</string>
8550 <key>beginCaptures</key>
8551 <dict>
8552 <key>1</key>
8553 <dict>
8554 <key>name</key>
8555 <string>punctuation.definition.group.regexp</string>
8556 </dict>
8557 <key>2</key>
8558 <dict>
8559 <key>name</key>
8560 <string>punctuation.definition.group.assertion.regexp</string>
8561 </dict>
8562 <key>3</key>
8563 <dict>
8564 <key>name</key>
8565 <string>meta.assertion.look-ahead.regexp</string>
8566 </dict>
8567 <key>4</key>
8568 <dict>
8569 <key>name</key>
8570 <string>meta.assertion.negative-look-ahead.regexp</string>
8571 </dict>
8572 <key>5</key>
8573 <dict>
8574 <key>name</key>
8575 <string>meta.assertion.look-behind.regexp</string>
8576 </dict>
8577 <key>6</key>
8578 <dict>
8579 <key>name</key>
8580 <string>meta.assertion.negative-look-behind.regexp</string>
8581 </dict>
8582 </dict>
8583 <key>end</key>
8584 <string>(\))</string>
8585 <key>endCaptures</key>
8586 <dict>
8587 <key>1</key>
8588 <dict>
8589 <key>name</key>
8590 <string>punctuation.definition.group.regexp</string>
8591 </dict>
8592 </dict>
8593 <key>patterns</key>
8594 <array>
8595 <dict>
8596 <key>include</key>
8597 <string>#regexp</string>
8598 </dict>
8599 </array>
8600 </dict>
8601 <dict>
8602 <key>name</key>
8603 <string>meta.group.regexp</string>
8604 <key>begin</key>
8605 <string>\((?:(\?:)|(?:\?&lt;([a-zA-Z_$][\w$]*)&gt;))?</string>
8606 <key>beginCaptures</key>
8607 <dict>
8608 <key>0</key>
8609 <dict>
8610 <key>name</key>
8611 <string>punctuation.definition.group.regexp</string>
8612 </dict>
8613 <key>1</key>
8614 <dict>
8615 <key>name</key>
8616 <string>punctuation.definition.group.no-capture.regexp</string>
8617 </dict>
8618 <key>2</key>
8619 <dict>
8620 <key>name</key>
8621 <string>variable.other.regexp</string>
8622 </dict>
8623 </dict>
8624 <key>end</key>
8625 <string>\)</string>
8626 <key>endCaptures</key>
8627 <dict>
8628 <key>0</key>
8629 <dict>
8630 <key>name</key>
8631 <string>punctuation.definition.group.regexp</string>
8632 </dict>
8633 </dict>
8634 <key>patterns</key>
8635 <array>
8636 <dict>
8637 <key>include</key>
8638 <string>#regexp</string>
8639 </dict>
8640 </array>
8641 </dict>
8642 <dict>
8643 <key>name</key>
8644 <string>constant.other.character-class.set.regexp</string>
8645 <key>begin</key>
8646 <string>(\[)(\^)?</string>
8647 <key>beginCaptures</key>
8648 <dict>
8649 <key>1</key>
8650 <dict>
8651 <key>name</key>
8652 <string>punctuation.definition.character-class.regexp</string>
8653 </dict>
8654 <key>2</key>
8655 <dict>
8656 <key>name</key>
8657 <string>keyword.operator.negation.regexp</string>
8658 </dict>
8659 </dict>
8660 <key>end</key>
8661 <string>(\])</string>
8662 <key>endCaptures</key>
8663 <dict>
8664 <key>1</key>
8665 <dict>
8666 <key>name</key>
8667 <string>punctuation.definition.character-class.regexp</string>
8668 </dict>
8669 </dict>
8670 <key>patterns</key>
8671 <array>
8672 <dict>
8673 <key>name</key>
8674 <string>constant.other.character-class.range.regexp</string>
8675 <key>match</key>
8676 <string>(?:.|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))\-(?:[^\]\\]|(\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\c[A-Z])|(\\.))</string>
8677 <key>captures</key>
8678 <dict>
8679 <key>1</key>
8680 <dict>
8681 <key>name</key>
8682 <string>constant.character.numeric.regexp</string>
8683 </dict>
8684 <key>2</key>
8685 <dict>
8686 <key>name</key>
8687 <string>constant.character.control.regexp</string>
8688 </dict>
8689 <key>3</key>
8690 <dict>
8691 <key>name</key>
8692 <string>constant.character.escape.backslash.regexp</string>
8693 </dict>
8694 <key>4</key>
8695 <dict>
8696 <key>name</key>
8697 <string>constant.character.numeric.regexp</string>
8698 </dict>
8699 <key>5</key>
8700 <dict>
8701 <key>name</key>
8702 <string>constant.character.control.regexp</string>
8703 </dict>
8704 <key>6</key>
8705 <dict>
8706 <key>name</key>
8707 <string>constant.character.escape.backslash.regexp</string>
8708 </dict>
8709 </dict>
8710 </dict>
8711 <dict>
8712 <key>include</key>
8713 <string>#regex-character-class</string>
8714 </dict>
8715 </array>
8716 </dict>
8717 <dict>
8718 <key>include</key>
8719 <string>#regex-character-class</string>
8720 </dict>
8721 </array>
8722 </dict>
8723 <key>regex-character-class</key>
8724 <dict>
8725 <key>patterns</key>
8726 <array>
8727 <dict>
8728 <key>name</key>
8729 <string>constant.other.character-class.regexp</string>
8730 <key>match</key>
8731 <string>\\[wWsSdDtrnvf]|\.</string>
8732 </dict>
8733 <dict>
8734 <key>name</key>
8735 <string>constant.character.numeric.regexp</string>
8736 <key>match</key>
8737 <string>\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})</string>
8738 </dict>
8739 <dict>
8740 <key>name</key>
8741 <string>constant.character.control.regexp</string>
8742 <key>match</key>
8743 <string>\\c[A-Z]</string>
8744 </dict>
8745 <dict>
8746 <key>name</key>
8747 <string>constant.character.escape.backslash.regexp</string>
8748 <key>match</key>
8749 <string>\\.</string>
8750 </dict>
8751 </array>
8752 </dict>
8753 <key>comment</key>
8754 <dict>
8755 <key>patterns</key>
8756 <array>
8757 <dict>
8758 <key>name</key>
8759 <string>comment.block.documentation.tsx</string>
8760 <key>begin</key>
8761 <string>/\*\*(?!/)</string>
8762 <key>beginCaptures</key>
8763 <dict>
8764 <key>0</key>
8765 <dict>
8766 <key>name</key>
8767 <string>punctuation.definition.comment.tsx</string>
8768 </dict>
8769 </dict>
8770 <key>end</key>
8771 <string>\*/</string>
8772 <key>endCaptures</key>
8773 <dict>
8774 <key>0</key>
8775 <dict>
8776 <key>name</key>
8777 <string>punctuation.definition.comment.tsx</string>
8778 </dict>
8779 </dict>
8780 <key>patterns</key>
8781 <array>
8782 <dict>
8783 <key>include</key>
8784 <string>#docblock</string>
8785 </dict>
8786 </array>
8787 </dict>
8788 <dict>
8789 <key>name</key>
8790 <string>comment.block.tsx</string>
8791 <key>begin</key>
8792 <string>(/\*)(?:\s*((@)internal)(?=\s|(\*/)))?</string>
8793 <key>beginCaptures</key>
8794 <dict>
8795 <key>1</key>
8796 <dict>
8797 <key>name</key>
8798 <string>punctuation.definition.comment.tsx</string>
8799 </dict>
8800 <key>2</key>
8801 <dict>
8802 <key>name</key>
8803 <string>storage.type.internaldeclaration.tsx</string>
8804 </dict>
8805 <key>3</key>
8806 <dict>
8807 <key>name</key>
8808 <string>punctuation.decorator.internaldeclaration.tsx</string>
8809 </dict>
8810 </dict>
8811 <key>end</key>
8812 <string>\*/</string>
8813 <key>endCaptures</key>
8814 <dict>
8815 <key>0</key>
8816 <dict>
8817 <key>name</key>
8818 <string>punctuation.definition.comment.tsx</string>
8819 </dict>
8820 </dict>
8821 </dict>
8822 <dict>
8823 <key>begin</key>
8824 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8825 <key>beginCaptures</key>
8826 <dict>
8827 <key>1</key>
8828 <dict>
8829 <key>name</key>
8830 <string>punctuation.whitespace.comment.leading.tsx</string>
8831 </dict>
8832 <key>2</key>
8833 <dict>
8834 <key>name</key>
8835 <string>comment.line.double-slash.tsx</string>
8836 </dict>
8837 <key>3</key>
8838 <dict>
8839 <key>name</key>
8840 <string>punctuation.definition.comment.tsx</string>
8841 </dict>
8842 <key>4</key>
8843 <dict>
8844 <key>name</key>
8845 <string>storage.type.internaldeclaration.tsx</string>
8846 </dict>
8847 <key>5</key>
8848 <dict>
8849 <key>name</key>
8850 <string>punctuation.decorator.internaldeclaration.tsx</string>
8851 </dict>
8852 </dict>
8853 <key>end</key>
8854 <string>(?=$)</string>
8855 <key>contentName</key>
8856 <string>comment.line.double-slash.tsx</string>
8857 </dict>
8858 </array>
8859 </dict>
8860 <key>single-line-comment-consuming-line-ending</key>
8861 <dict>
8862 <key>begin</key>
8863 <string>(^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?)</string>
8864 <key>beginCaptures</key>
8865 <dict>
8866 <key>1</key>
8867 <dict>
8868 <key>name</key>
8869 <string>punctuation.whitespace.comment.leading.tsx</string>
8870 </dict>
8871 <key>2</key>
8872 <dict>
8873 <key>name</key>
8874 <string>comment.line.double-slash.tsx</string>
8875 </dict>
8876 <key>3</key>
8877 <dict>
8878 <key>name</key>
8879 <string>punctuation.definition.comment.tsx</string>
8880 </dict>
8881 <key>4</key>
8882 <dict>
8883 <key>name</key>
8884 <string>storage.type.internaldeclaration.tsx</string>
8885 </dict>
8886 <key>5</key>
8887 <dict>
8888 <key>name</key>
8889 <string>punctuation.decorator.internaldeclaration.tsx</string>
8890 </dict>
8891 </dict>
8892 <key>end</key>
8893 <string>(?=^)</string>
8894 <key>contentName</key>
8895 <string>comment.line.double-slash.tsx</string>
8896 </dict>
8897 <key>directives</key>
8898 <dict>
8899 <key>name</key>
8900 <string>comment.line.triple-slash.directive.tsx</string>
8901 <key>begin</key>
8902 <string>^(///)\s*(?=&lt;(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/&gt;\s*$)</string>
8903 <key>beginCaptures</key>
8904 <dict>
8905 <key>1</key>
8906 <dict>
8907 <key>name</key>
8908 <string>punctuation.definition.comment.tsx</string>
8909 </dict>
8910 </dict>
8911 <key>end</key>
8912 <string>(?=$)</string>
8913 <key>patterns</key>
8914 <array>
8915 <dict>
8916 <key>name</key>
8917 <string>meta.tag.tsx</string>
8918 <key>begin</key>
8919 <string>(&lt;)(reference|amd-dependency|amd-module)</string>
8920 <key>beginCaptures</key>
8921 <dict>
8922 <key>1</key>
8923 <dict>
8924 <key>name</key>
8925 <string>punctuation.definition.tag.directive.tsx</string>
8926 </dict>
8927 <key>2</key>
8928 <dict>
8929 <key>name</key>
8930 <string>entity.name.tag.directive.tsx</string>
8931 </dict>
8932 </dict>
8933 <key>end</key>
8934 <string>/&gt;</string>
8935 <key>endCaptures</key>
8936 <dict>
8937 <key>0</key>
8938 <dict>
8939 <key>name</key>
8940 <string>punctuation.definition.tag.directive.tsx</string>
8941 </dict>
8942 </dict>
8943 <key>patterns</key>
8944 <array>
8945 <dict>
8946 <key>name</key>
8947 <string>entity.other.attribute-name.directive.tsx</string>
8948 <key>match</key>
8949 <string>path|types|no-default-lib|lib|name|resolution-mode</string>
8950 </dict>
8951 <dict>
8952 <key>name</key>
8953 <string>keyword.operator.assignment.tsx</string>
8954 <key>match</key>
8955 <string>=</string>
8956 </dict>
8957 <dict>
8958 <key>include</key>
8959 <string>#string</string>
8960 </dict>
8961 </array>
8962 </dict>
8963 </array>
8964 </dict>
8965 <key>docblock</key>
8966 <dict>
8967 <key>patterns</key>
8968 <array>
8969 <dict>
8970 <key>match</key>
8971 <string>(?x)
8972((@)(?:access|api))
8973\s+
8974(private|protected|public)
8975\b</string>
8976 <key>captures</key>
8977 <dict>
8978 <key>1</key>
8979 <dict>
8980 <key>name</key>
8981 <string>storage.type.class.jsdoc</string>
8982 </dict>
8983 <key>2</key>
8984 <dict>
8985 <key>name</key>
8986 <string>punctuation.definition.block.tag.jsdoc</string>
8987 </dict>
8988 <key>3</key>
8989 <dict>
8990 <key>name</key>
8991 <string>constant.language.access-type.jsdoc</string>
8992 </dict>
8993 </dict>
8994 </dict>
8995 <dict>
8996 <key>match</key>
8997 <string>(?x)
8998((@)author)
8999\s+
9000(
9001 [^@\s&lt;&gt;*/]
9002 (?:[^@&lt;&gt;*/]|\*[^/])*
9003)
9004(?:
9005 \s*
9006 (&lt;)
9007 ([^&gt;\s]+)
9008 (&gt;)
9009)?</string>
9010 <key>captures</key>
9011 <dict>
9012 <key>1</key>
9013 <dict>
9014 <key>name</key>
9015 <string>storage.type.class.jsdoc</string>
9016 </dict>
9017 <key>2</key>
9018 <dict>
9019 <key>name</key>
9020 <string>punctuation.definition.block.tag.jsdoc</string>
9021 </dict>
9022 <key>3</key>
9023 <dict>
9024 <key>name</key>
9025 <string>entity.name.type.instance.jsdoc</string>
9026 </dict>
9027 <key>4</key>
9028 <dict>
9029 <key>name</key>
9030 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9031 </dict>
9032 <key>5</key>
9033 <dict>
9034 <key>name</key>
9035 <string>constant.other.email.link.underline.jsdoc</string>
9036 </dict>
9037 <key>6</key>
9038 <dict>
9039 <key>name</key>
9040 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9041 </dict>
9042 </dict>
9043 </dict>
9044 <dict>
9045 <key>match</key>
9046 <string>(?x)
9047((@)borrows) \s+
9048((?:[^@\s*/]|\*[^/])+) # &lt;that namepath&gt;
9049\s+ (as) \s+ # as
9050((?:[^@\s*/]|\*[^/])+) # &lt;this namepath&gt;</string>
9051 <key>captures</key>
9052 <dict>
9053 <key>1</key>
9054 <dict>
9055 <key>name</key>
9056 <string>storage.type.class.jsdoc</string>
9057 </dict>
9058 <key>2</key>
9059 <dict>
9060 <key>name</key>
9061 <string>punctuation.definition.block.tag.jsdoc</string>
9062 </dict>
9063 <key>3</key>
9064 <dict>
9065 <key>name</key>
9066 <string>entity.name.type.instance.jsdoc</string>
9067 </dict>
9068 <key>4</key>
9069 <dict>
9070 <key>name</key>
9071 <string>keyword.operator.control.jsdoc</string>
9072 </dict>
9073 <key>5</key>
9074 <dict>
9075 <key>name</key>
9076 <string>entity.name.type.instance.jsdoc</string>
9077 </dict>
9078 </dict>
9079 </dict>
9080 <dict>
9081 <key>name</key>
9082 <string>meta.example.jsdoc</string>
9083 <key>begin</key>
9084 <string>((@)example)\s+</string>
9085 <key>end</key>
9086 <string>(?=@|\*/)</string>
9087 <key>beginCaptures</key>
9088 <dict>
9089 <key>1</key>
9090 <dict>
9091 <key>name</key>
9092 <string>storage.type.class.jsdoc</string>
9093 </dict>
9094 <key>2</key>
9095 <dict>
9096 <key>name</key>
9097 <string>punctuation.definition.block.tag.jsdoc</string>
9098 </dict>
9099 </dict>
9100 <key>patterns</key>
9101 <array>
9102 <dict>
9103 <key>match</key>
9104 <string>^\s\*\s+</string>
9105 </dict>
9106 <dict>
9107 <key>contentName</key>
9108 <string>constant.other.description.jsdoc</string>
9109 <key>begin</key>
9110 <string>\G(&lt;)caption(&gt;)</string>
9111 <key>beginCaptures</key>
9112 <dict>
9113 <key>0</key>
9114 <dict>
9115 <key>name</key>
9116 <string>entity.name.tag.inline.jsdoc</string>
9117 </dict>
9118 <key>1</key>
9119 <dict>
9120 <key>name</key>
9121 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9122 </dict>
9123 <key>2</key>
9124 <dict>
9125 <key>name</key>
9126 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9127 </dict>
9128 </dict>
9129 <key>end</key>
9130 <string>(&lt;/)caption(&gt;)|(?=\*/)</string>
9131 <key>endCaptures</key>
9132 <dict>
9133 <key>0</key>
9134 <dict>
9135 <key>name</key>
9136 <string>entity.name.tag.inline.jsdoc</string>
9137 </dict>
9138 <key>1</key>
9139 <dict>
9140 <key>name</key>
9141 <string>punctuation.definition.bracket.angle.begin.jsdoc</string>
9142 </dict>
9143 <key>2</key>
9144 <dict>
9145 <key>name</key>
9146 <string>punctuation.definition.bracket.angle.end.jsdoc</string>
9147 </dict>
9148 </dict>
9149 </dict>
9150 <dict>
9151 <key>match</key>
9152 <string>[^\s@*](?:[^*]|\*[^/])*</string>
9153 <key>captures</key>
9154 <dict>
9155 <key>0</key>
9156 <dict>
9157 <key>name</key>
9158 <string>source.embedded.tsx</string>
9159 </dict>
9160 </dict>
9161 </dict>
9162 </array>
9163 </dict>
9164 <dict>
9165 <key>match</key>
9166 <string>(?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b</string>
9167 <key>captures</key>
9168 <dict>
9169 <key>1</key>
9170 <dict>
9171 <key>name</key>
9172 <string>storage.type.class.jsdoc</string>
9173 </dict>
9174 <key>2</key>
9175 <dict>
9176 <key>name</key>
9177 <string>punctuation.definition.block.tag.jsdoc</string>
9178 </dict>
9179 <key>3</key>
9180 <dict>
9181 <key>name</key>
9182 <string>constant.language.symbol-type.jsdoc</string>
9183 </dict>
9184 </dict>
9185 </dict>
9186 <dict>
9187 <key>match</key>
9188 <string>(?x)
9189((@)see)
9190\s+
9191(?:
9192 # URL
9193 (
9194 (?=https?://)
9195 (?:[^\s*]|\*[^/])+
9196 )
9197 |
9198 # JSDoc namepath
9199 (
9200 (?!
9201 # Avoid matching bare URIs (also acceptable as links)
9202 https?://
9203 |
9204 # Avoid matching {@inline tags}; we match those below
9205 (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag}
9206 {@(?:link|linkcode|linkplain|tutorial)\b
9207 )
9208 # Matched namepath
9209 (?:[^@\s*/]|\*[^/])+
9210 )
9211)</string>
9212 <key>captures</key>
9213 <dict>
9214 <key>1</key>
9215 <dict>
9216 <key>name</key>
9217 <string>storage.type.class.jsdoc</string>
9218 </dict>
9219 <key>2</key>
9220 <dict>
9221 <key>name</key>
9222 <string>punctuation.definition.block.tag.jsdoc</string>
9223 </dict>
9224 <key>3</key>
9225 <dict>
9226 <key>name</key>
9227 <string>variable.other.link.underline.jsdoc</string>
9228 </dict>
9229 <key>4</key>
9230 <dict>
9231 <key>name</key>
9232 <string>entity.name.type.instance.jsdoc</string>
9233 </dict>
9234 </dict>
9235 </dict>
9236 <dict>
9237 <key>match</key>
9238 <string>(?x)
9239((@)template)
9240\s+
9241# One or more valid identifiers
9242(
9243 [A-Za-z_$] # First character: non-numeric word character
9244 [\w$.\[\]]* # Rest of identifier
9245 (?: # Possible list of additional identifiers
9246 \s* , \s*
9247 [A-Za-z_$]
9248 [\w$.\[\]]*
9249 )*
9250)</string>
9251 <key>captures</key>
9252 <dict>
9253 <key>1</key>
9254 <dict>
9255 <key>name</key>
9256 <string>storage.type.class.jsdoc</string>
9257 </dict>
9258 <key>2</key>
9259 <dict>
9260 <key>name</key>
9261 <string>punctuation.definition.block.tag.jsdoc</string>
9262 </dict>
9263 <key>3</key>
9264 <dict>
9265 <key>name</key>
9266 <string>variable.other.jsdoc</string>
9267 </dict>
9268 </dict>
9269 </dict>
9270 <dict>
9271 <key>begin</key>
9272 <string>(?x)((@)template)\s+(?={)</string>
9273 <key>beginCaptures</key>
9274 <dict>
9275 <key>1</key>
9276 <dict>
9277 <key>name</key>
9278 <string>storage.type.class.jsdoc</string>
9279 </dict>
9280 <key>2</key>
9281 <dict>
9282 <key>name</key>
9283 <string>punctuation.definition.block.tag.jsdoc</string>
9284 </dict>
9285 </dict>
9286 <key>end</key>
9287 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9288 <key>patterns</key>
9289 <array>
9290 <dict>
9291 <key>include</key>
9292 <string>#jsdoctype</string>
9293 </dict>
9294 <dict>
9295 <key>name</key>
9296 <string>variable.other.jsdoc</string>
9297 <key>match</key>
9298 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9299 </dict>
9300 </array>
9301 </dict>
9302 <dict>
9303 <key>match</key>
9304 <string>(?x)
9305(
9306 (@)
9307 (?:arg|argument|const|constant|member|namespace|param|var)
9308)
9309\s+
9310(
9311 [A-Za-z_$]
9312 [\w$.\[\]]*
9313)</string>
9314 <key>captures</key>
9315 <dict>
9316 <key>1</key>
9317 <dict>
9318 <key>name</key>
9319 <string>storage.type.class.jsdoc</string>
9320 </dict>
9321 <key>2</key>
9322 <dict>
9323 <key>name</key>
9324 <string>punctuation.definition.block.tag.jsdoc</string>
9325 </dict>
9326 <key>3</key>
9327 <dict>
9328 <key>name</key>
9329 <string>variable.other.jsdoc</string>
9330 </dict>
9331 </dict>
9332 </dict>
9333 <dict>
9334 <key>begin</key>
9335 <string>((@)typedef)\s+(?={)</string>
9336 <key>beginCaptures</key>
9337 <dict>
9338 <key>1</key>
9339 <dict>
9340 <key>name</key>
9341 <string>storage.type.class.jsdoc</string>
9342 </dict>
9343 <key>2</key>
9344 <dict>
9345 <key>name</key>
9346 <string>punctuation.definition.block.tag.jsdoc</string>
9347 </dict>
9348 </dict>
9349 <key>end</key>
9350 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9351 <key>patterns</key>
9352 <array>
9353 <dict>
9354 <key>include</key>
9355 <string>#jsdoctype</string>
9356 </dict>
9357 <dict>
9358 <key>name</key>
9359 <string>entity.name.type.instance.jsdoc</string>
9360 <key>match</key>
9361 <string>(?:[^@\s*/]|\*[^/])+</string>
9362 </dict>
9363 </array>
9364 </dict>
9365 <dict>
9366 <key>begin</key>
9367 <string>((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={)</string>
9368 <key>beginCaptures</key>
9369 <dict>
9370 <key>1</key>
9371 <dict>
9372 <key>name</key>
9373 <string>storage.type.class.jsdoc</string>
9374 </dict>
9375 <key>2</key>
9376 <dict>
9377 <key>name</key>
9378 <string>punctuation.definition.block.tag.jsdoc</string>
9379 </dict>
9380 </dict>
9381 <key>end</key>
9382 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9383 <key>patterns</key>
9384 <array>
9385 <dict>
9386 <key>include</key>
9387 <string>#jsdoctype</string>
9388 </dict>
9389 <dict>
9390 <key>name</key>
9391 <string>variable.other.jsdoc</string>
9392 <key>match</key>
9393 <string>([A-Za-z_$][\w$.\[\]]*)</string>
9394 </dict>
9395 <dict>
9396 <key>name</key>
9397 <string>variable.other.jsdoc</string>
9398 <key>match</key>
9399 <string>(?x)
9400(\[)\s*
9401[\w$]+
9402(?:
9403 (?:\[\])? # Foo[ ].bar properties within an array
9404 \. # Foo.Bar namespaced parameter
9405 [\w$]+
9406)*
9407(?:
9408 \s*
9409 (=) # [foo=bar] Default parameter value
9410 \s*
9411 (
9412 # The inner regexes are to stop the match early at */ and to not stop at escaped quotes
9413 (?&gt;
9414 "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted
9415 '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted
9416 \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal
9417 (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else
9418 )*
9419 )
9420)?
9421\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/))</string>
9422 <key>captures</key>
9423 <dict>
9424 <key>1</key>
9425 <dict>
9426 <key>name</key>
9427 <string>punctuation.definition.optional-value.begin.bracket.square.jsdoc</string>
9428 </dict>
9429 <key>2</key>
9430 <dict>
9431 <key>name</key>
9432 <string>keyword.operator.assignment.jsdoc</string>
9433 </dict>
9434 <key>3</key>
9435 <dict>
9436 <key>name</key>
9437 <string>source.embedded.tsx</string>
9438 </dict>
9439 <key>4</key>
9440 <dict>
9441 <key>name</key>
9442 <string>punctuation.definition.optional-value.end.bracket.square.jsdoc</string>
9443 </dict>
9444 <key>5</key>
9445 <dict>
9446 <key>name</key>
9447 <string>invalid.illegal.syntax.jsdoc</string>
9448 </dict>
9449 </dict>
9450 </dict>
9451 </array>
9452 </dict>
9453 <dict>
9454 <key>begin</key>
9455 <string>(?x)
9456(
9457 (@)
9458 (?:define|enum|exception|export|extends|lends|implements|modifies
9459 |namespace|private|protected|returns?|satisfies|suppress|this|throws|type
9460 |yields?)
9461)
9462\s+(?={)</string>
9463 <key>beginCaptures</key>
9464 <dict>
9465 <key>1</key>
9466 <dict>
9467 <key>name</key>
9468 <string>storage.type.class.jsdoc</string>
9469 </dict>
9470 <key>2</key>
9471 <dict>
9472 <key>name</key>
9473 <string>punctuation.definition.block.tag.jsdoc</string>
9474 </dict>
9475 </dict>
9476 <key>end</key>
9477 <string>(?=\s|\*/|[^{}\[\]A-Za-z_$])</string>
9478 <key>patterns</key>
9479 <array>
9480 <dict>
9481 <key>include</key>
9482 <string>#jsdoctype</string>
9483 </dict>
9484 </array>
9485 </dict>
9486 <dict>
9487 <key>match</key>
9488 <string>(?x)
9489(
9490 (@)
9491 (?:alias|augments|callback|constructs|emits|event|fires|exports?
9492 |extends|external|function|func|host|lends|listens|interface|memberof!?
9493 |method|module|mixes|mixin|name|requires|see|this|typedef|uses)
9494)
9495\s+
9496(
9497 (?:
9498 [^{}@\s*] | \*[^/]
9499 )+
9500)</string>
9501 <key>captures</key>
9502 <dict>
9503 <key>1</key>
9504 <dict>
9505 <key>name</key>
9506 <string>storage.type.class.jsdoc</string>
9507 </dict>
9508 <key>2</key>
9509 <dict>
9510 <key>name</key>
9511 <string>punctuation.definition.block.tag.jsdoc</string>
9512 </dict>
9513 <key>3</key>
9514 <dict>
9515 <key>name</key>
9516 <string>entity.name.type.instance.jsdoc</string>
9517 </dict>
9518 </dict>
9519 </dict>
9520 <dict>
9521 <key>contentName</key>
9522 <string>variable.other.jsdoc</string>
9523 <key>begin</key>
9524 <string>((@)(?:default(?:value)?|license|version))\s+(([''"]))</string>
9525 <key>beginCaptures</key>
9526 <dict>
9527 <key>1</key>
9528 <dict>
9529 <key>name</key>
9530 <string>storage.type.class.jsdoc</string>
9531 </dict>
9532 <key>2</key>
9533 <dict>
9534 <key>name</key>
9535 <string>punctuation.definition.block.tag.jsdoc</string>
9536 </dict>
9537 <key>3</key>
9538 <dict>
9539 <key>name</key>
9540 <string>variable.other.jsdoc</string>
9541 </dict>
9542 <key>4</key>
9543 <dict>
9544 <key>name</key>
9545 <string>punctuation.definition.string.begin.jsdoc</string>
9546 </dict>
9547 </dict>
9548 <key>end</key>
9549 <string>(\3)|(?=$|\*/)</string>
9550 <key>endCaptures</key>
9551 <dict>
9552 <key>0</key>
9553 <dict>
9554 <key>name</key>
9555 <string>variable.other.jsdoc</string>
9556 </dict>
9557 <key>1</key>
9558 <dict>
9559 <key>name</key>
9560 <string>punctuation.definition.string.end.jsdoc</string>
9561 </dict>
9562 </dict>
9563 </dict>
9564 <dict>
9565 <key>match</key>
9566 <string>((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+)</string>
9567 <key>captures</key>
9568 <dict>
9569 <key>1</key>
9570 <dict>
9571 <key>name</key>
9572 <string>storage.type.class.jsdoc</string>
9573 </dict>
9574 <key>2</key>
9575 <dict>
9576 <key>name</key>
9577 <string>punctuation.definition.block.tag.jsdoc</string>
9578 </dict>
9579 <key>3</key>
9580 <dict>
9581 <key>name</key>
9582 <string>variable.other.jsdoc</string>
9583 </dict>
9584 </dict>
9585 </dict>
9586 <dict>
9587 <key>name</key>
9588 <string>storage.type.class.jsdoc</string>
9589 <key>match</key>
9590 <string>(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \b</string>
9591 <key>captures</key>
9592 <dict>
9593 <key>1</key>
9594 <dict>
9595 <key>name</key>
9596 <string>punctuation.definition.block.tag.jsdoc</string>
9597 </dict>
9598 </dict>
9599 </dict>
9600 <dict>
9601 <key>include</key>
9602 <string>#inline-tags</string>
9603 </dict>
9604 <dict>
9605 <key>match</key>
9606 <string>((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+)</string>
9607 <key>captures</key>
9608 <dict>
9609 <key>1</key>
9610 <dict>
9611 <key>name</key>
9612 <string>storage.type.class.jsdoc</string>
9613 </dict>
9614 <key>2</key>
9615 <dict>
9616 <key>name</key>
9617 <string>punctuation.definition.block.tag.jsdoc</string>
9618 </dict>
9619 </dict>
9620 </dict>
9621 </array>
9622 </dict>
9623 <key>brackets</key>
9624 <dict>
9625 <key>patterns</key>
9626 <array>
9627 <dict>
9628 <key>begin</key>
9629 <string>{</string>
9630 <key>end</key>
9631 <string>}|(?=\*/)</string>
9632 <key>patterns</key>
9633 <array>
9634 <dict>
9635 <key>include</key>
9636 <string>#brackets</string>
9637 </dict>
9638 </array>
9639 </dict>
9640 <dict>
9641 <key>begin</key>
9642 <string>\[</string>
9643 <key>end</key>
9644 <string>\]|(?=\*/)</string>
9645 <key>patterns</key>
9646 <array>
9647 <dict>
9648 <key>include</key>
9649 <string>#brackets</string>
9650 </dict>
9651 </array>
9652 </dict>
9653 </array>
9654 </dict>
9655 <key>inline-tags</key>
9656 <dict>
9657 <key>patterns</key>
9658 <array>
9659 <dict>
9660 <key>name</key>
9661 <string>constant.other.description.jsdoc</string>
9662 <key>match</key>
9663 <string>(\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial))</string>
9664 <key>captures</key>
9665 <dict>
9666 <key>1</key>
9667 <dict>
9668 <key>name</key>
9669 <string>punctuation.definition.bracket.square.begin.jsdoc</string>
9670 </dict>
9671 <key>2</key>
9672 <dict>
9673 <key>name</key>
9674 <string>punctuation.definition.bracket.square.end.jsdoc</string>
9675 </dict>
9676 </dict>
9677 </dict>
9678 <dict>
9679 <key>name</key>
9680 <string>entity.name.type.instance.jsdoc</string>
9681 <key>begin</key>
9682 <string>({)((@)(?:link(?:code|plain)?|tutorial))\s*</string>
9683 <key>beginCaptures</key>
9684 <dict>
9685 <key>1</key>
9686 <dict>
9687 <key>name</key>
9688 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9689 </dict>
9690 <key>2</key>
9691 <dict>
9692 <key>name</key>
9693 <string>storage.type.class.jsdoc</string>
9694 </dict>
9695 <key>3</key>
9696 <dict>
9697 <key>name</key>
9698 <string>punctuation.definition.inline.tag.jsdoc</string>
9699 </dict>
9700 </dict>
9701 <key>end</key>
9702 <string>}|(?=\*/)</string>
9703 <key>endCaptures</key>
9704 <dict>
9705 <key>0</key>
9706 <dict>
9707 <key>name</key>
9708 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9709 </dict>
9710 </dict>
9711 <key>patterns</key>
9712 <array>
9713 <dict>
9714 <key>match</key>
9715 <string>\G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)?</string>
9716 <key>captures</key>
9717 <dict>
9718 <key>1</key>
9719 <dict>
9720 <key>name</key>
9721 <string>variable.other.link.underline.jsdoc</string>
9722 </dict>
9723 <key>2</key>
9724 <dict>
9725 <key>name</key>
9726 <string>punctuation.separator.pipe.jsdoc</string>
9727 </dict>
9728 </dict>
9729 </dict>
9730 <dict>
9731 <key>match</key>
9732 <string>\G((?:[^{}@\s|*]|\*[^/])+)(\|)?</string>
9733 <key>captures</key>
9734 <dict>
9735 <key>1</key>
9736 <dict>
9737 <key>name</key>
9738 <string>variable.other.description.jsdoc</string>
9739 </dict>
9740 <key>2</key>
9741 <dict>
9742 <key>name</key>
9743 <string>punctuation.separator.pipe.jsdoc</string>
9744 </dict>
9745 </dict>
9746 </dict>
9747 </array>
9748 </dict>
9749 </array>
9750 </dict>
9751 <key>jsdoctype</key>
9752 <dict>
9753 <key>patterns</key>
9754 <array>
9755 <dict>
9756 <key>name</key>
9757 <string>invalid.illegal.type.jsdoc</string>
9758 <key>match</key>
9759 <string>\G{(?:[^}*]|\*[^/}])+$</string>
9760 </dict>
9761 <dict>
9762 <key>contentName</key>
9763 <string>entity.name.type.instance.jsdoc</string>
9764 <key>begin</key>
9765 <string>\G({)</string>
9766 <key>beginCaptures</key>
9767 <dict>
9768 <key>0</key>
9769 <dict>
9770 <key>name</key>
9771 <string>entity.name.type.instance.jsdoc</string>
9772 </dict>
9773 <key>1</key>
9774 <dict>
9775 <key>name</key>
9776 <string>punctuation.definition.bracket.curly.begin.jsdoc</string>
9777 </dict>
9778 </dict>
9779 <key>end</key>
9780 <string>((}))\s*|(?=\*/)</string>
9781 <key>endCaptures</key>
9782 <dict>
9783 <key>1</key>
9784 <dict>
9785 <key>name</key>
9786 <string>entity.name.type.instance.jsdoc</string>
9787 </dict>
9788 <key>2</key>
9789 <dict>
9790 <key>name</key>
9791 <string>punctuation.definition.bracket.curly.end.jsdoc</string>
9792 </dict>
9793 </dict>
9794 <key>patterns</key>
9795 <array>
9796 <dict>
9797 <key>include</key>
9798 <string>#brackets</string>
9799 </dict>
9800 </array>
9801 </dict>
9802 </array>
9803 </dict>
9804 <key>jsx</key>
9805 <dict>
9806 <key>patterns</key>
9807 <array>
9808 <dict>
9809 <key>include</key>
9810 <string>#jsx-tag-without-attributes-in-expression</string>
9811 </dict>
9812 <dict>
9813 <key>include</key>
9814 <string>#jsx-tag-in-expression</string>
9815 </dict>
9816 </array>
9817 </dict>
9818 <key>jsx-tag-without-attributes-in-expression</key>
9819 <dict>
9820 <key>begin</key>
9821 <string>(?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9822 <key>end</key>
9823 <string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9824 <key>patterns</key>
9825 <array>
9826 <dict>
9827 <key>include</key>
9828 <string>#jsx-tag-without-attributes</string>
9829 </dict>
9830 </array>
9831 </dict>
9832 <key>jsx-tag-without-attributes</key>
9833 <dict>
9834 <key>name</key>
9835 <string>meta.tag.without-attributes.tsx</string>
9836 <key>begin</key>
9837 <string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
9838 <key>end</key>
9839 <string>(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;)</string>
9840 <key>beginCaptures</key>
9841 <dict>
9842 <key>1</key>
9843 <dict>
9844 <key>name</key>
9845 <string>punctuation.definition.tag.begin.tsx</string>
9846 </dict>
9847 <key>2</key>
9848 <dict>
9849 <key>name</key>
9850 <string>entity.name.tag.namespace.tsx</string>
9851 </dict>
9852 <key>3</key>
9853 <dict>
9854 <key>name</key>
9855 <string>punctuation.separator.namespace.tsx</string>
9856 </dict>
9857 <key>4</key>
9858 <dict>
9859 <key>name</key>
9860 <string>entity.name.tag.tsx</string>
9861 </dict>
9862 <key>5</key>
9863 <dict>
9864 <key>name</key>
9865 <string>support.class.component.tsx</string>
9866 </dict>
9867 <key>6</key>
9868 <dict>
9869 <key>name</key>
9870 <string>punctuation.definition.tag.end.tsx</string>
9871 </dict>
9872 </dict>
9873 <key>endCaptures</key>
9874 <dict>
9875 <key>1</key>
9876 <dict>
9877 <key>name</key>
9878 <string>punctuation.definition.tag.begin.tsx</string>
9879 </dict>
9880 <key>2</key>
9881 <dict>
9882 <key>name</key>
9883 <string>entity.name.tag.namespace.tsx</string>
9884 </dict>
9885 <key>3</key>
9886 <dict>
9887 <key>name</key>
9888 <string>punctuation.separator.namespace.tsx</string>
9889 </dict>
9890 <key>4</key>
9891 <dict>
9892 <key>name</key>
9893 <string>entity.name.tag.tsx</string>
9894 </dict>
9895 <key>5</key>
9896 <dict>
9897 <key>name</key>
9898 <string>support.class.component.tsx</string>
9899 </dict>
9900 <key>6</key>
9901 <dict>
9902 <key>name</key>
9903 <string>punctuation.definition.tag.end.tsx</string>
9904 </dict>
9905 </dict>
9906 <key>contentName</key>
9907 <string>meta.jsx.children.tsx</string>
9908 <key>patterns</key>
9909 <array>
9910 <dict>
9911 <key>include</key>
9912 <string>#jsx-children</string>
9913 </dict>
9914 </array>
9915 </dict>
9916 <key>jsx-tag-in-expression</key>
9917 <dict>
9918 <key>begin</key>
9919 <string>(?x)
9920 (?&lt;!\+\+|--)(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*
9921 (?!&lt;\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=&gt;])|,)) # look ahead is not type parameter of arrow
9922 (?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9923 <key>end</key>
9924 <string>(?!(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9925 <key>patterns</key>
9926 <array>
9927 <dict>
9928 <key>include</key>
9929 <string>#jsx-tag</string>
9930 </dict>
9931 </array>
9932 </dict>
9933 <key>jsx-tag</key>
9934 <dict>
9935 <key>name</key>
9936 <string>meta.tag.tsx</string>
9937 <key>begin</key>
9938 <string>(?=(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;))</string>
9939 <key>end</key>
9940 <string>(/&gt;)|(?:(&lt;/)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))?\s*(&gt;))</string>
9941 <key>endCaptures</key>
9942 <dict>
9943 <key>1</key>
9944 <dict>
9945 <key>name</key>
9946 <string>punctuation.definition.tag.end.tsx</string>
9947 </dict>
9948 <key>2</key>
9949 <dict>
9950 <key>name</key>
9951 <string>punctuation.definition.tag.begin.tsx</string>
9952 </dict>
9953 <key>3</key>
9954 <dict>
9955 <key>name</key>
9956 <string>entity.name.tag.namespace.tsx</string>
9957 </dict>
9958 <key>4</key>
9959 <dict>
9960 <key>name</key>
9961 <string>punctuation.separator.namespace.tsx</string>
9962 </dict>
9963 <key>5</key>
9964 <dict>
9965 <key>name</key>
9966 <string>entity.name.tag.tsx</string>
9967 </dict>
9968 <key>6</key>
9969 <dict>
9970 <key>name</key>
9971 <string>support.class.component.tsx</string>
9972 </dict>
9973 <key>7</key>
9974 <dict>
9975 <key>name</key>
9976 <string>punctuation.definition.tag.end.tsx</string>
9977 </dict>
9978 </dict>
9979 <key>patterns</key>
9980 <array>
9981 <dict>
9982 <key>begin</key>
9983 <string>(&lt;)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?&lt;!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?&lt;!\.|-))(?=((&lt;\s*)|(\s+))(?!\?)|\/?&gt;)</string>
9984 <key>beginCaptures</key>
9985 <dict>
9986 <key>1</key>
9987 <dict>
9988 <key>name</key>
9989 <string>punctuation.definition.tag.begin.tsx</string>
9990 </dict>
9991 <key>2</key>
9992 <dict>
9993 <key>name</key>
9994 <string>entity.name.tag.namespace.tsx</string>
9995 </dict>
9996 <key>3</key>
9997 <dict>
9998 <key>name</key>
9999 <string>punctuation.separator.namespace.tsx</string>
10000 </dict>
10001 <key>4</key>
10002 <dict>
10003 <key>name</key>
10004 <string>entity.name.tag.tsx</string>
10005 </dict>
10006 <key>5</key>
10007 <dict>
10008 <key>name</key>
10009 <string>support.class.component.tsx</string>
10010 </dict>
10011 </dict>
10012 <key>end</key>
10013 <string>(?=[/]?&gt;)</string>
10014 <key>patterns</key>
10015 <array>
10016 <dict>
10017 <key>include</key>
10018 <string>#comment</string>
10019 </dict>
10020 <dict>
10021 <key>include</key>
10022 <string>#type-arguments</string>
10023 </dict>
10024 <dict>
10025 <key>include</key>
10026 <string>#jsx-tag-attributes</string>
10027 </dict>
10028 </array>
10029 </dict>
10030 <dict>
10031 <key>begin</key>
10032 <string>(&gt;)</string>
10033 <key>beginCaptures</key>
10034 <dict>
10035 <key>1</key>
10036 <dict>
10037 <key>name</key>
10038 <string>punctuation.definition.tag.end.tsx</string>
10039 </dict>
10040 </dict>
10041 <key>end</key>
10042 <string>(?=&lt;/)</string>
10043 <key>contentName</key>
10044 <string>meta.jsx.children.tsx</string>
10045 <key>patterns</key>
10046 <array>
10047 <dict>
10048 <key>include</key>
10049 <string>#jsx-children</string>
10050 </dict>
10051 </array>
10052 </dict>
10053 </array>
10054 </dict>
10055 <key>jsx-children</key>
10056 <dict>
10057 <key>patterns</key>
10058 <array>
10059 <dict>
10060 <key>include</key>
10061 <string>#jsx-tag-without-attributes</string>
10062 </dict>
10063 <dict>
10064 <key>include</key>
10065 <string>#jsx-tag</string>
10066 </dict>
10067 <dict>
10068 <key>include</key>
10069 <string>#jsx-evaluated-code</string>
10070 </dict>
10071 <dict>
10072 <key>include</key>
10073 <string>#jsx-entities</string>
10074 </dict>
10075 </array>
10076 </dict>
10077 <key>jsx-evaluated-code</key>
10078 <dict>
10079 <key>contentName</key>
10080 <string>meta.embedded.expression.tsx</string>
10081 <key>begin</key>
10082 <string>\{</string>
10083 <key>end</key>
10084 <string>\}</string>
10085 <key>beginCaptures</key>
10086 <dict>
10087 <key>0</key>
10088 <dict>
10089 <key>name</key>
10090 <string>punctuation.section.embedded.begin.tsx</string>
10091 </dict>
10092 </dict>
10093 <key>endCaptures</key>
10094 <dict>
10095 <key>0</key>
10096 <dict>
10097 <key>name</key>
10098 <string>punctuation.section.embedded.end.tsx</string>
10099 </dict>
10100 </dict>
10101 <key>patterns</key>
10102 <array>
10103 <dict>
10104 <key>include</key>
10105 <string>#expression</string>
10106 </dict>
10107 </array>
10108 </dict>
10109 <key>jsx-entities</key>
10110 <dict>
10111 <key>patterns</key>
10112 <array>
10113 <dict>
10114 <key>name</key>
10115 <string>constant.character.entity.tsx</string>
10116 <key>match</key>
10117 <string>(&amp;)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)</string>
10118 <key>captures</key>
10119 <dict>
10120 <key>1</key>
10121 <dict>
10122 <key>name</key>
10123 <string>punctuation.definition.entity.tsx</string>
10124 </dict>
10125 <key>3</key>
10126 <dict>
10127 <key>name</key>
10128 <string>punctuation.definition.entity.tsx</string>
10129 </dict>
10130 </dict>
10131 </dict>
10132 </array>
10133 </dict>
10134 <key>jsx-tag-attributes</key>
10135 <dict>
10136 <key>name</key>
10137 <string>meta.tag.attributes.tsx</string>
10138 <key>begin</key>
10139 <string>\s+</string>
10140 <key>end</key>
10141 <string>(?=[/]?&gt;)</string>
10142 <key>patterns</key>
10143 <array>
10144 <dict>
10145 <key>include</key>
10146 <string>#comment</string>
10147 </dict>
10148 <dict>
10149 <key>include</key>
10150 <string>#jsx-tag-attribute-name</string>
10151 </dict>
10152 <dict>
10153 <key>include</key>
10154 <string>#jsx-tag-attribute-assignment</string>
10155 </dict>
10156 <dict>
10157 <key>include</key>
10158 <string>#jsx-string-double-quoted</string>
10159 </dict>
10160 <dict>
10161 <key>include</key>
10162 <string>#jsx-string-single-quoted</string>
10163 </dict>
10164 <dict>
10165 <key>include</key>
10166 <string>#jsx-evaluated-code</string>
10167 </dict>
10168 <dict>
10169 <key>include</key>
10170 <string>#jsx-tag-attributes-illegal</string>
10171 </dict>
10172 </array>
10173 </dict>
10174 <key>jsx-tag-attribute-name</key>
10175 <dict>
10176 <key>match</key>
10177 <string>(?x)
10178 \s*
10179 (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?
10180 ([_$[:alpha:]][-_$[:alnum:]]*)
10181 (?=\s|=|/?&gt;|/\*|//)</string>
10182 <key>captures</key>
10183 <dict>
10184 <key>1</key>
10185 <dict>
10186 <key>name</key>
10187 <string>entity.other.attribute-name.namespace.tsx</string>
10188 </dict>
10189 <key>2</key>
10190 <dict>
10191 <key>name</key>
10192 <string>punctuation.separator.namespace.tsx</string>
10193 </dict>
10194 <key>3</key>
10195 <dict>
10196 <key>name</key>
10197 <string>entity.other.attribute-name.tsx</string>
10198 </dict>
10199 </dict>
10200 </dict>
10201 <key>jsx-tag-attribute-assignment</key>
10202 <dict>
10203 <key>name</key>
10204 <string>keyword.operator.assignment.tsx</string>
10205 <key>match</key>
10206 <string>=(?=\s*(?:'|"|{|/\*|//|\n))</string>
10207 </dict>
10208 <key>jsx-string-double-quoted</key>
10209 <dict>
10210 <key>name</key>
10211 <string>string.quoted.double.tsx</string>
10212 <key>begin</key>
10213 <string>"</string>
10214 <key>end</key>
10215 <string>"</string>
10216 <key>beginCaptures</key>
10217 <dict>
10218 <key>0</key>
10219 <dict>
10220 <key>name</key>
10221 <string>punctuation.definition.string.begin.tsx</string>
10222 </dict>
10223 </dict>
10224 <key>endCaptures</key>
10225 <dict>
10226 <key>0</key>
10227 <dict>
10228 <key>name</key>
10229 <string>punctuation.definition.string.end.tsx</string>
10230 </dict>
10231 </dict>
10232 <key>patterns</key>
10233 <array>
10234 <dict>
10235 <key>include</key>
10236 <string>#jsx-entities</string>
10237 </dict>
10238 </array>
10239 </dict>
10240 <key>jsx-string-single-quoted</key>
10241 <dict>
10242 <key>name</key>
10243 <string>string.quoted.single.tsx</string>
10244 <key>begin</key>
10245 <string>'</string>
10246 <key>end</key>
10247 <string>'</string>
10248 <key>beginCaptures</key>
10249 <dict>
10250 <key>0</key>
10251 <dict>
10252 <key>name</key>
10253 <string>punctuation.definition.string.begin.tsx</string>
10254 </dict>
10255 </dict>
10256 <key>endCaptures</key>
10257 <dict>
10258 <key>0</key>
10259 <dict>
10260 <key>name</key>
10261 <string>punctuation.definition.string.end.tsx</string>
10262 </dict>
10263 </dict>
10264 <key>patterns</key>
10265 <array>
10266 <dict>
10267 <key>include</key>
10268 <string>#jsx-entities</string>
10269 </dict>
10270 </array>
10271 </dict>
10272 <key>jsx-tag-attributes-illegal</key>
10273 <dict>
10274 <key>name</key>
10275 <string>invalid.illegal.attribute.tsx</string>
10276 <key>match</key>
10277 <string>\S+</string>
10278 </dict>
10279 </dict>
10280 </dict>
10281</plist>
src/file-viewer/highlight.ts+51-28
...@@ -1,23 +1,27 @@...@@ -1,23 +1,27 @@
1const languages = [1const languages = [
2 "ts",
3 "tsx",
4 "zig",
5 "json",
6 "css",
7 "astro",2 "astro",
8 "mdx",3 "css",
9 "lua",4 "diff",
10 "shell",
11 "dosbatch",5 "dosbatch",
6 "html",
7 "js",
8 "json",
9 "jsx",
10 "lua",
11 "mdx",
12 "php",
12 "powershell",13 "powershell",
13 "yaml",14 "python",
15 "shell",
14 "toml",16 "toml",
17 "ts",
18 "tsx",
15 "xml",19 "xml",
16 "python",20 "yaml",
17 "php",21 "zig",
18 "diff",
19] as const;22] as const;
20const altScopes: Record<string, string> = {23const altScopes: Record<string, string> = {
24 html: "text.html.basic",
21 astro: "text.html.astro",25 astro: "text.html.astro",
22 xml: "text.xml",26 xml: "text.xml",
23 php: "text.html.php",27 php: "text.html.php",
...@@ -25,6 +29,11 @@ const altScopes: Record<string, string> = {...@@ -25,6 +29,11 @@ const altScopes: Record<string, string> = {
25export type Language = (typeof languages)[number];29export type Language = (typeof languages)[number];
2630
27const scopes = [31const scopes = [
32 // HTML
33 ["meta.tag.metadata.doctype.html", "builtin"],
34 ["meta.tag.structure", "keyword"],
35 ["meta.tag.metadata.script", "keyword"],
36
28 // CSS37 // CSS
29 ["punctuation.definition.keyword", "keyword", "css"],38 ["punctuation.definition.keyword", "keyword", "css"],
30 ["entity.name.tag.css", "class", "css"],39 ["entity.name.tag.css", "class", "css"],
...@@ -59,6 +68,7 @@ const scopes = [...@@ -59,6 +68,7 @@ const scopes = [
59 ["keyword", "keyword"],68 ["keyword", "keyword"],
60 ["variable.parameter", "parameter"],69 ["variable.parameter", "parameter"],
61 ["entity.name.function", "method"],70 ["entity.name.function", "method"],
71 ["support.class.component", "method"],
62 ["support.type.primitive", "builtin"],72 ["support.type.primitive", "builtin"],
63 ["entity.name.type", "class"],73 ["entity.name.type", "class"],
64 ["support.type", "class"],74 ["support.type", "class"],
...@@ -68,7 +78,11 @@ const scopes = [...@@ -68,7 +78,11 @@ const scopes = [
68 ["support.constant", "constant"],78 ["support.constant", "constant"],
69 ["meta.parameters", "parameter"],79 ["meta.parameters", "parameter"],
70 ["support.function", "method"],80 ["support.function", "method"],
81 ["entity.name.tag", "builtin"],
71 ["variable", "variable"],82 ["variable", "variable"],
83 ["meta.tag.attributes", "property"],
84 ["punctuation.definition.tag.begin.tsx", "keyword"],
85 ["punctuation.definition.tag.end.tsx", "keyword"],
72 ["punctuation", null],86 ["punctuation", null],
73 ["meta.function-call", "method"],87 ["meta.function-call", "method"],
74] as const;88] as const;
...@@ -146,7 +160,11 @@ export const getRegistry = async.once(async () => {...@@ -146,7 +160,11 @@ export const getRegistry = async.once(async () => {
146 }),160 }),
147 loadGrammar: async (scopeName: string) => {161 loadGrammar: async (scopeName: string) => {
148 for (const lang of languages) {162 for (const lang of languages) {
149 if (scopeName.endsWith(`.${lang}`)) {163 if (
164 altScopes[lang]
165 ? scopeName === altScopes[lang]
166 : scopeName.endsWith(`.${lang}`)
167 ) {
150 const file = await fs.readFile(168 const file = await fs.readFile(
151 path.join(import.meta.dirname, `highlight-grammar/${lang}.plist`),169 path.join(import.meta.dirname, `highlight-grammar/${lang}.plist`),
152 "utf-8",170 "utf-8",
...@@ -177,21 +195,26 @@ export async function highlightCode(code: string, language: Language) {...@@ -177,21 +195,26 @@ export async function highlightCode(code: string, language: Language) {
177 return html;195 return html;
178}196}
179197
180export async function main() {198// export async function main() {
181 // validate exts199// validate exts
182 for (const ext of languages) {200// for (const ext of languages) {
183 if (201// if (
184 !fs.existsSync(202// !fs.existsSync(
185 path.join(import.meta.dirname, `highlight-grammar/${ext}.plist`),203// path.join(import.meta.dirname, `highlight-grammar/${ext}.plist`),
186 )204// )
187 ) {205// ) {
188 console.error(`Missing grammar for ${ext}`);206// console.error(`Missing grammar for ${ext}`);
189 }207// }
190 // Sanity check208// // Sanity check
191 await highlightCode("wwwwwwwwwwwaaaaaaaaaaaaaaaa", ext);209// await highlightCode("wwwwwwwwwwwaaaaaaaaaaaaaaaa", ext);
192 }210// }
193}211// }
194212//
213// await highlightCode(
214// `return <Snow attr={'meow'}>snow!</Snow>`,
215// "tsx",
216// );
217//
195import * as async from "lib/async.ts";218import * as async from "lib/async.ts";
196import * as fs from "#sitegen/fs";219import * as fs from "#sitegen/fs";
197import * as path from "node:path";220import * as path from "node:path";
src/global.css+9
...@@ -40,6 +40,15 @@...@@ -40,6 +40,15 @@
40 U+2194-2199,40 U+2194-2199,
41 U+0100-017F;41 U+0100-017F;
42}42}
43@font-face {
44 font-family: "recu";
45 src: url("/recthin.woff2") format("woff2");
46 font-weight: 350;
47 font-style: normal;
48 font-display: swap;
49 font-variation-settings: "CASL" 0.25, "MONO" 0;
50 unicode-range: U+0020-007E;
51}
4352
44*,53*,
45::before,54::before,
src/package-lib.ts deleted-226
...@@ -1,226 +0,0 @@
1export async function updateJsrPackageExportsToAll(
2 absPath: string,
3 p: progress.Ref,
4) {
5 using _ = p.start("update deno.json");
6 const manifestPath = path.join(absPath, "deno.json");
7 const deno = JSON.parse(
8 await fs.readFile(manifestPath, "utf-8"),
9 );
10 const newExports: Record<string, string> = {};
11 for (const subPath of await fs.readdir(absPath, { recursive: true })) {
12 if (!subPath.match(/\.tsx?$/)) continue;
13 if (subPath.match(/\.(test|sample)\.tsx?$/)) continue;
14 if (subPath.startsWith("dist")) continue;
15 newExports["./" + subPath] = "./" + subPath;
16 }
17 deno.exports = Object.fromEntries(
18 Object.entries(newExports).sort(([a], [b]) => a.localeCompare(b)),
19 ) as typeof deno.exports;
20 await fs.writeFile(manifestPath, JSON.stringify(deno, null, 2));
21}
22
23export async function transpileForNpm(
24 absPath: string,
25 p: progress.Ref,
26 packageJson: Record<string, unknown>,
27) {
28 using node = p.start("transpile into js for npm");
29 const manifestPath = path.join(absPath, "deno.json");
30 const deno = JSON.parse(
31 await fs.readFile(manifestPath, "utf-8"),
32 );
33 const distPath = path.join(absPath, "dist-npm");
34 await fs.rm(distPath, { recursive: true, force: true });
35 await fs.mkdir(distPath, { recursive: true });
36
37 const files: string[] = [];
38 const exports: Record<string, string> = {};
39 for (const subPath of await fs.readdir(absPath, { recursive: true })) {
40 if (!subPath.match(/\.tsx?$/)) continue;
41 if (subPath.startsWith("dist")) continue;
42 files.push(subPath);
43 }
44 const tsFiles: string[] = [];
45 for (const subPath of files) {
46 using _ = node.start(subPath);
47 const targetSubPath = subPath.replace(/\.tsx?$/, ".js");
48 if (!subPath.match(/\.(test|sample)\.tsx?$/)) {
49 exports["./" + subPath] = "./" + targetSubPath;
50 }
51 const out = path.join(distPath, subPath);
52 await fs.mkdir(path.dirname(out), { recursive: true });
53 tsFiles.push(out);
54
55 let code = await fs.readFile(path.join(absPath, subPath), "utf-8");
56 code = code.replace(
57 / from "lib\/([^"]+)"/g,
58 (_, src) => {
59 return ' from "./' + path.relative(
60 path.dirname(subPath),
61 src.replace(/\.tsx?$/, ".js"),
62 ) + '"';
63 },
64 );
65 await fs.writeFile(out, code);
66 }
67 await subprocess.spawnAndWait({
68 cmd: [
69 "npx",
70 "tsc",
71 "--outdir",
72 distPath,
73 "--sourceMap",
74 "--declarationMap",
75 "--declaration",
76 "--module",
77 "nodenext",
78 "--lib",
79 "esnext",
80 "--skipLibCheck",
81 "--jsx",
82 "react-jsx",
83 "--jsxImportSource",
84 "./lib/dist-npm/render",
85 "--target",
86 "esnext",
87 "--isolatedModules",
88 "--verbatimModuleSyntax",
89 "--allowSyntheticDefaultImports",
90 "--moduleResolution",
91 "nodenext",
92 ...tsFiles,
93 ],
94 });
95 await fs.writeFile(
96 path.join(distPath, "readme.md"),
97 (await fs.readFile(path.join(absPath, "readme.md"), "utf-8")).replace(
98 "<!--%npm%-->\n",
99 await fs.readFile(path.join(absPath, "readme.npm.md"), "utf-8"),
100 ),
101 ).catch((e) => {
102 if (e.code !== "ENOENT") throw e;
103 });
104 await fs.cp(
105 path.join(absPath, "readme.changes.md"),
106 path.join(distPath, "readme.changes.md"),
107 ).catch((e) => {
108 if (e.code !== "ENOENT") throw e;
109 });
110 const { name, description, ...rest } = packageJson;
111 await fs.writeFile(
112 path.join(distPath, "package.json"),
113 JSON.stringify(
114 {
115 name,
116 description,
117 version: deno.version,
118 type: "module",
119 exports,
120 ...rest,
121 },
122 null,
123 2,
124 ),
125 );
126}
127
128// TODO: failed experiment
129//
130// export async function transpileForNpm(
131// absPath: string,
132// p: progress.Ref,
133// packageJson: Record<string, unknown>,
134// ) {
135// const { transpileFile } = await import("ts-to-jsdoc") as TsToJsdoc;
136//
137// using node = p.start("transpile into jsdoc for npm");
138// const manifestPath = path.join(absPath, "deno.json");
139// const deno = JSON.parse(
140// await fs.readFile(manifestPath, "utf-8"),
141// );
142// const distPath = path.join(absPath, "dist-npm");
143// await fs.rm(distPath, { recursive: true, force: true });
144// await fs.mkdir(distPath, { recursive: true });
145//
146// const files: string[] = [];
147// const exports: Record<string, string> = {};
148// for (const subPath of await fs.readdir(absPath, { recursive: true })) {
149// if (!subPath.match(/\.tsx?$/)) continue;
150// if (subPath.startsWith("dist")) continue;
151// files.push(subPath);
152// }
153// node.estimate = Object.keys(exports).length;
154// for (const subPath of files) {
155// using _ = node.start(subPath);
156// const targetSubPath = subPath.replace(/\.tsx?$/, ".js");
157// if (!subPath.match(/\.(test|sample)\.tsx?$/)) {
158// exports["./" + subPath] = "./" + targetSubPath;
159// }
160//
161// let code = transpileFile({
162// code: await fs.readFile(path.join(absPath, subPath), "utf-8"),
163// });
164// code = code.replace(
165// / from "lib\/([^"]+)"/g,
166// (_, src) => {
167// return ' from "./' + path.relative(
168// path.dirname(subPath),
169// src.replace(/\.tsx?$/, ".js"),
170// ) + '"';
171// },
172// );
173// if (packageJson.homepage) {
174// code =
175// "// This file is transpiled from TypeScript from paper clover's sitegen\n" +
176// "// " + packageJson.homepage + "/" + subPath + "\n" +
177// code;
178// }
179// const out = path.join(distPath, targetSubPath);
180// await fs.mkdir(path.dirname(out), { recursive: true });
181// await fs.writeFile(out, code);
182// node.value += 1;
183// }
184// await fs.cp(
185// path.join(absPath, "readme.npm.md"),
186// path.join(distPath, "readme.md"),
187// ).catch((e) => {
188// if (e.code !== "ENOENT") throw e;
189// });
190// await fs.cp(
191// path.join(absPath, "readme.changes.md"),
192// path.join(distPath, "readme.changes.md"),
193// ).catch((e) => {
194// if (e.code !== "ENOENT") throw e;
195// });
196// const { name, description, ...rest } = packageJson;
197// await fs.writeFile(
198// path.join(distPath, "package.json"),
199// JSON.stringify({
200// name,
201// description,
202// version: deno.version,
203// type: "module",
204// ...rest,
205// }),
206// );
207// }
208//
209export function main() {
210 const main = path.resolve("lib");
211 updateJsrPackageExportsToAll(main, progress)
212 .then(() =>
213 transpileForNpm(main, progress, {
214 name: "@paperclover/lib",
215 description: "high quality typescript libraries",
216 homepage:
217 "https://git.paperclover.net/clo/sitegen/src/branch/master/lib",
218 })
219 );
220}
221
222import * as progress from "lib/progress.ts";
223import * as path from "node:path";
224import * as fs from "node:fs/promises";
225import * as subprocess from "lib/subprocess.ts";
226import { UNWRAP } from "lib/assert.ts";
src/pages/index.marko+1
...@@ -14,6 +14,7 @@ export const meta = {...@@ -14,6 +14,7 @@ export const meta = {
14<main>14<main>
15 <div>15 <div>
16 <h2>posts</h2>16 <h2>posts</h2>
17 <p>blog: <a href="/blog/webdev/everyone-hates-nextjs">Everyone Hates Next.js</a> (2025-10-21)</p>
17 <p>song: <a href="/in-the-summer">in the summer</a> (2025-08-08)</p>18 <p>song: <a href="/in-the-summer">in the summer</a> (2025-08-08)</p>
18 <p>song: <a href="/waterfalls">waterfalls</a> (2025-01-01)</p>19 <p>song: <a href="/waterfalls">waterfalls</a> (2025-01-01)</p>
19 <h2>things</h2>20 <h2>things</h2>
src/site.ts+16-1
...@@ -10,7 +10,7 @@ export const siteSections: sg.Section[] = [...@@ -10,7 +10,7 @@ export const siteSections: sg.Section[] = [
10 { root: join("q+a/") },10 { root: join("q+a/") },
11 { root: join("file-viewer/") },11 { root: join("file-viewer/") },
12 { root: join("friends/") },12 { root: join("friends/") },
13 // { root: join("blog/"), pageBase: "/blog" },13 { root: join("blog/"), base: "/blog" },
14 // { root: join("fiction/"), pageBase: "/fiction" },14 // { root: join("fiction/"), pageBase: "/fiction" },
15];15];
1616
...@@ -55,6 +55,11 @@ const recursiveVarsQuestion: sg.FontVars = {...@@ -55,6 +55,11 @@ const recursiveVarsQuestion: sg.FontVars = {
55 MONO: [0, 1],55 MONO: [0, 1],
56 WGHT: [400, 800],56 WGHT: [400, 800],
57};57};
58const recursiveVarsThin: sg.FontVars = {
59 ...recursiveVars,
60 MONO: [0, 1],
61 WGHT: 350,
62};
58const layoutFeatures = ["numr", "dnom", "frac"];63const layoutFeatures = ["numr", "dnom", "frac"];
59export const fonts: sg.Font[] = [64export const fonts: sg.Font[] = [
60 {65 {
...@@ -86,6 +91,16 @@ export const fonts: sg.Font[] = [...@@ -86,6 +91,16 @@ export const fonts: sg.Font[] = [
86 vars: recursiveVarsQuestion,91 vars: recursiveVarsQuestion,
87 unicodes: nonAscii,92 unicodes: nonAscii,
88 },93 },
94 {
95 asset: "/recthin.[ext]",
96 vars: recursiveVarsThin,
97 unicodes: ascii,
98 },
99 {
100 asset: "/recthin2.[ext]",
101 vars: recursiveVarsThin,
102 unicodes: nonAscii,
103 },
89 ],104 ],
90 },105 },
91 {106 {
src/source-of-truth.ts+2-2
...@@ -72,7 +72,7 @@ app.get("/file/*", async (c) => {...@@ -72,7 +72,7 @@ app.get("/file/*", async (c) => {
72 if (err.code === "ENOENT") return c.notFound();72 if (err.code === "ENOENT") return c.notFound();
73 throw err;73 throw err;
74 }74 }
75 c.header("Content-Length", (await fstat(handle.fd)).size);75 c.header("Content-Length", (await fstat(handle.fd)).size.toString());
76 const nodeStream = fs.createReadStream(fullPath, {76 const nodeStream = fs.createReadStream(fullPath, {
77 fd: handle.fd,77 fd: handle.fd,
78 fs: {78 fs: {
...@@ -113,4 +113,4 @@ import * as util from "node:util";...@@ -113,4 +113,4 @@ import * as util from "node:util";
113import * as stream from "node:stream";113import * as stream from "node:stream";
114import * as mime from "lib/mime.ts";114import * as mime from "lib/mime.ts";
115import { derivedFileRoot, rawFileRoot } from "./file-viewer/paths.ts";115import { derivedFileRoot, rawFileRoot } from "./file-viewer/paths.ts";
116import { ASSERT } from "lib/assert.ts";116import { ASSERT, UNWRAP } from "lib/assert.ts";
src/static/open-graph/everyone-hates-nextjs.png created
Binary files /dev/null and b/src/static/open-graph/everyone-hates-nextjs.png differ
src/static/open-graph/readme.txt created+2
...@@ -0,0 +1,2 @@
1this directory is not under the paper clover media license,
2therefore is allowed to be downloaded and redistributed by bots.
src/web.dockerfile+1
...@@ -1,3 +1,4 @@...@@ -1,3 +1,4 @@
1# this is an example dockerfile. paper clover does not use this currently.
1from node:24 as builder2from node:24 as builder
23
3run apt install -y git4run apt install -y git