From ba98937008851c4ff2471c9823c751b792f2c3f1 Mon Sep 17 00:00:00 2001 From: clover caruso Date: Wed, 15 Oct 2025 23:35:51 -0700 Subject: [PATCH] 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. --- framework/generate.ts | 28 +- framework/hot.ts | 7 +- framework/lib/sitegen.ts | 14 +- framework/mdx-hack.tsx | 32 + lib/progress.ts | 6 + lib/render.ts | 1 + package-lock.json | 862 +- package.json | 4 +- src/{ => bin}/deploy.ts | 8 +- src/{ => bin}/package-lib.ts | 0 src/blog/blog.css | 204 + .../webdev/deranged-typescript.md | 0 .../webdev/marko-intro.markodown | 0 src/blog/helpers.ts | 0 src/blog/layout.tsx | 31 + .../pages/webdev/everyone-hates-nextjs.mdx | 831 ++ src/blog/tags/heading.tsx | 10 + src/blog/tags/table-of-contents.tsx | 8 + src/file-viewer/highlight-grammar/html.plist | 4215 +++++++ src/file-viewer/highlight-grammar/js.plist | 9858 +++++++++++++++ src/file-viewer/highlight-grammar/jsx.plist | 10281 ++++++++++++++++ src/file-viewer/highlight.ts | 79 +- src/global.css | 9 + src/pages/index.marko | 1 + src/site.ts | 17 +- src/source-of-truth.ts | 4 +- .../open-graph/everyone-hates-nextjs.png | Bin 0 -> 205004 bytes src/static/open-graph/readme.txt | 2 + src/web.dockerfile | 1 + 29 files changed, 25650 insertions(+), 863 deletions(-) create mode 100644 framework/mdx-hack.tsx rename src/{ => bin}/deploy.ts (85%) rename src/{ => bin}/package-lib.ts (100%) create mode 100644 src/blog/blog.css rename src/blog/{pages => drafts}/webdev/deranged-typescript.md (100%) rename src/blog/{pages => drafts}/webdev/marko-intro.markodown (100%) delete mode 100644 src/blog/helpers.ts create mode 100644 src/blog/pages/webdev/everyone-hates-nextjs.mdx create mode 100644 src/blog/tags/heading.tsx create mode 100644 src/blog/tags/table-of-contents.tsx create mode 100644 src/file-viewer/highlight-grammar/html.plist create mode 100644 src/file-viewer/highlight-grammar/js.plist create mode 100644 src/file-viewer/highlight-grammar/jsx.plist create mode 100755 src/static/open-graph/everyone-hates-nextjs.png create mode 100644 src/static/open-graph/readme.txt diff --git a/framework/generate.ts b/framework/generate.ts index ccd29f9707cd7cdc859e27c2ff05fcce0f0ae291..84a9993a4da56a6b4157d2acd026b7d33a2d376f 100644 --- a/framework/generate.ts +++ b/framework/generate.ts @@ -124,6 +124,7 @@ export async function readManifest(io: Io) { return { siteSections: cfg.siteSections.map((section) => ({ root: toRel(section.root), + base: section.base ?? "/", })), backends: cfg.backends.map(toRel), fonts: cfg.fonts, @@ -141,8 +142,11 @@ export async function discoverAllFiles( using node = p.start("discover files"); return ( await Promise.all( - siteConfig.siteSections.map(({ root: sectionRoot }) => - incr.work(node, scanSiteSection, toAbs(sectionRoot)) + siteConfig.siteSections.map(({ root: root, base }) => + incr.work(node, scanSiteSection, { + root: toAbs(root), + base: base.endsWith("/") ? base : base + "/", + }) ), ) ).reduce((acc, next) => ({ @@ -153,8 +157,8 @@ export async function discoverAllFiles( })); } -export async function scanSiteSection(io: Io, sectionRoot: string) { - using _ = io.start(toRel(sectionRoot)); +export async function scanSiteSection(io: Io, section: sg.Section) { + using _ = io.start(toRel(section.root)); // Static files are compressed and served as-is. // - "{section}/static/*.png" let staticFiles: FileItem[] = []; @@ -170,29 +174,32 @@ export async function scanSiteSection(io: Io, sectionRoot: string) { // - "{section}/scripts/*.client.ts" let scripts: FileItem[] = []; - const sectionPath = (...sub: string[]) => path.join(sectionRoot, ...sub); - const rootPrefix = hot.projectSrc === sectionRoot + const sectionPath = (...sub: string[]) => path.join(section.root, ...sub); + const rootPrefix = hot.projectSrc === section.root ? "" - : path.relative(hot.projectSrc, sectionRoot) + "/"; + : path.relative(hot.projectSrc, section.root) + "/"; const kinds = [ { dir: sectionPath("pages"), list: pages, - prefix: "/", + prefix: section.base, include: [".tsx", ".mdx", ".marko"], exclude: [".client.ts", ".client.tsx"], + page: true, }, { dir: sectionPath("static"), list: staticFiles, - prefix: "/", + prefix: section.base, ext: true, + page: true, }, { dir: sectionPath("scripts"), list: scripts, prefix: rootPrefix, include: [".client.ts", ".client.tsx"], + page: false, }, { dir: sectionPath("views"), @@ -200,6 +207,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) { prefix: rootPrefix, include: [".tsx", ".mdx", ".marko"], exclude: [".client.ts", ".client.tsx"], + page: false, }, ]; for (const kind of kinds) { @@ -229,7 +237,7 @@ export async function scanSiteSection(io: Io, sectionRoot: string) { ? subPath : subPath.slice(0, -path.extname(subPath).length).replaceAll(".", "/"); let id = prefix + trim.replaceAll("\\", "/"); - if (prefix === "/" && id.endsWith("/index")) { + if (kind.page && id.endsWith("/index")) { id = id.slice(0, -"/index".length) || "/"; } list.push({ id, file: path.relative(hot.projectRoot, file) }); diff --git a/framework/hot.ts b/framework/hot.ts index 324b86ff3d226041a25697f36e3a02cd9b5e3743..3695084aa3edbff84c537ad35fa75e8265e48355 100644 --- a/framework/hot.ts +++ b/framework/hot.ts @@ -174,7 +174,11 @@ function loadMarko(module: NodeJS.Module, filepath: string) { function loadMdx(module: NodeJS.Module, filepath: string) { const input = fs.readFileSync(filepath); - const out = mdx.compileSync(input, { jsxImportSource: "#jsx" }).value; + const out = mdx.compileSync(input, { + jsxImportSource: "#jsx", + providerImportSource: "#mdx", + rehypePlugins: [rehypeMdxCodeProps], + }).value; const src = typeof out === "string" ? out : Buffer.from(out).toString("utf8"); return loadEsbuildCode(module, filepath, src); } @@ -323,6 +327,7 @@ import { pathToFileURL } from "node:url"; import * as esbuild from "esbuild"; import { createRequire } from "node:module"; import * as mdx from "@mdx-js/mdx"; +import rehypeMdxCodeProps from "rehype-mdx-code-props"; import * as self from "./hot.ts"; import { Buffer } from "node:buffer"; import { UNWRAP } from "lib/assert.ts"; diff --git a/framework/lib/sitegen.ts b/framework/lib/sitegen.ts index f2413829534ccc8c9e60b1a3afc6e210800fa8b3..1e72bc84fd68700b90023d706e31f3232749722f 100644 --- a/framework/lib/sitegen.ts +++ b/framework/lib/sitegen.ts @@ -30,6 +30,7 @@ export interface FileItem { } export interface Section { root: string; + base?: string; } export interface Font { name: string; @@ -59,6 +60,17 @@ export function addScript(id: ScriptId | { value: ScriptId }) { context.get().scripts.add(typeof id === "string" ? id : id.value); } +// TODO: self-host plausible for extra privacy. i am in a rush as i write this +// TODO: properly locate this constant in `site.ts` +// +// I have this so I can see if the blog is actually seen by people. And for +// understanding where paperclover.net gets its load for. When I need to scale +// large enough, analytics will determine the location of the second web +// hosting node. +export const analytics = + ` + `; + export function wrapDocument({ body, head, @@ -72,7 +84,7 @@ export function wrapDocument({ }) { return `${head}${ inlineCss ? `` : "" - }${body}${ + }${analytics}${body}${ scripts ? `` : "" }`; } diff --git a/framework/mdx-hack.tsx b/framework/mdx-hack.tsx new file mode 100644 index 0000000000000000000000000000000000000000..61e2cc424968a8514b703934bdc34a70b2de921d --- /dev/null +++ b/framework/mdx-hack.tsx @@ -0,0 +1,32 @@ +export function useMDXComponents() { + return { + pre: async ( + { filename, whitespace, tint, children: [, , { className, children }] }, + ) => { + const lang = className.split("-")?.[1] ?? null; + const code = ["tsx", "jsx", "json", "html", "ts", "js"].includes(lang) + ? await highlight.highlightCode( + children.trim(), + lang, + ) + : children.trim(); + return ( +
+ {filename &&
{filename}
} +
{render.raw(code)}
+
+ ); + }, + code: ({ children }) => { + return ( + + {children} + + ); + }, + }; +} +import * as highlight from "../src/file-viewer/highlight.ts"; +import * as render from "lib/render.ts"; diff --git a/lib/progress.ts b/lib/progress.ts index 3f7b824c9db23367c7c93c819e1a2ef66639d911..dbff7153c437ea6114f1e42192b39f7cd53ac52a 100644 --- a/lib/progress.ts +++ b/lib/progress.ts @@ -1,3 +1,9 @@ +// For those coming from my blog, check out this video +// -> https://paperclover.net/file/2025/file%20scanner.mp4?view=embed +// +// There is some massive rework pending on this file, check out the PR +// -> https://git.paperclover.net/clo/sitegen/pulls/48 +// // This file is under heavy construction. // - I am happy with the overall design // - Will rename things diff --git a/lib/render.ts b/lib/render.ts index e26b182987ef60159fee6875230cfbb457687572..bf70fc98de65366114786764832d6a351f5b55c2 100644 --- a/lib/render.ts +++ b/lib/render.ts @@ -370,6 +370,7 @@ function stringifyStyleAttribute(style: Record): string { ) }`; } + if (!out) return ""; return "style=" + quoteIfNeeded(out); } diff --git a/package-lock.json b/package-lock.json index 46a8b52426e5cf656e75e0f60dfc6fff774cbffa..cde3bb0b5af643e58f9eea9c94892b502e69f25d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,9 +17,8 @@ "marko": "6.0.82", "msgpackr": "1.11.5", "puppeteer": "24.23.0", - "sharp": "0.34.2", + "rehype-mdx-code-props": "^3.0.1", "source-map-support": "0.5.21", - "ts-to-jsdoc": "2.4.0", "unique-names-generator": "4.7.1", "vscode-oniguruma": "2.0.1", "vscode-textmate": "9.2.0" @@ -491,16 +490,6 @@ "w3c-keyname": "^2.2.4" } }, - "node_modules/@emnapi/runtime": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", - "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -913,402 +902,6 @@ "hono": "^4" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.4.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1541,41 +1134,6 @@ "win32" ] }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@puppeteer/browsers": { "version": "2.10.10", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", @@ -1621,18 +1179,6 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT" }, - "node_modules/@ts-morph/common": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz", - "integrity": "sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "minimatch": "^9.0.4", - "mkdirp": "^3.0.1", - "path-browserify": "^1.0.1" - } - }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -1773,12 +1319,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1830,12 +1370,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, "node_modules/bare-events": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", @@ -1976,27 +1510,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browserslist": { "version": "4.26.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", @@ -2151,12 +1664,6 @@ "node": ">=12" } }, - "node_modules/code-block-writer": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", - "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", - "license": "MIT" - }, "node_modules/codem-isoboxer": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.10.tgz", @@ -2188,19 +1695,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2219,16 +1713,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -2377,6 +1861,7 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=8" } @@ -2656,6 +2141,18 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/estree-util-value-to-estree": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.1.tgz", + "integrity": "sha512-E4fEc8KLhDXnbyDa5XrbdT9PbgSMt0AGZPFUsGFok8N2Q7DTO+F6xAFJjIdw71EkidRg186I1mQCKzZ1ZbEsCw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/estree-util-visit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", @@ -2735,31 +2232,6 @@ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -2769,18 +2241,6 @@ "pend": "~1.2.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2828,16 +2288,23 @@ "node": ">= 14" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/hast-util-properties-to-mdx-jsx-attributes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-properties-to-mdx-jsx-attributes/-/hast-util-properties-to-mdx-jsx-attributes-1.0.1.tgz", + "integrity": "sha512-ZzxhjHZ+gyxaPIFp/nuRpVL4GIFoqzfH6vNgjaA3CuUAV6XCxYwAQfRczrZRkgL6msi6DdOl+/QEduOdzszvbg==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-value-to-estree": "^3.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/remcohaszing" } }, "node_modules/hast-util-to-estree": { @@ -3075,15 +2542,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3093,18 +2551,6 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-hexadecimal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", @@ -3115,15 +2561,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -3463,15 +2900,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -4068,55 +3496,12 @@ ], "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4298,18 +3683,6 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -4412,26 +3785,6 @@ "node": ">=18" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/raptor-async": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/raptor-async/-/raptor-async-1.1.3.tgz", @@ -4514,6 +3867,24 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-mdx-code-props": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rehype-mdx-code-props/-/rehype-mdx-code-props-3.0.1.tgz", + "integrity": "sha512-BWWKn0N6r7/qd7lbLgv5J8of7imz1l1PyCNoY7BH0AOR9JdJlQIfA9cKqTZVEb2h2GPKh473qrBajF0i01fq3A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-properties-to-mdx-jsx-attributes": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/rehype-recma": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", @@ -4600,39 +3971,6 @@ "node": ">=8" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", @@ -4657,74 +3995,6 @@ "semver": "bin/semver.js" } }, - "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -4916,18 +4186,6 @@ "b4a": "^1.6.4" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -4948,32 +4206,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ts-morph": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-23.0.0.tgz", - "integrity": "sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==", - "license": "MIT", - "dependencies": { - "@ts-morph/common": "~0.24.0", - "code-block-writer": "^13.0.1" - } - }, - "node_modules/ts-to-jsdoc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-to-jsdoc/-/ts-to-jsdoc-2.4.0.tgz", - "integrity": "sha512-RiI9ipxkLjXESp5+YjXIQJ5GgtjwWTZU4uDahxsIdr1HKLFaC/nQOtgkGRJ+AFxqHrrhwrXtPh093r0nXQwKmw==", - "license": "MIT", - "dependencies": { - "arg": "^5.0.1", - "ts-morph": "^23.0.0" - }, - "bin": { - "ts-to-jsdoc": "bin/ts-to-jsdoc" - }, - "optionalDependencies": { - "typescript": "*" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", diff --git a/package.json b/package.json index 4547a07f4d1c1e63c16180dbd49bb507fcf9e259..78c5874b5a08193304828bdf80db436f37d80cca 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "marko": "6.0.82", "msgpackr": "1.11.5", "puppeteer": "24.23.0", + "rehype-mdx-code-props": "^3.0.1", "source-map-support": "0.5.21", "unique-names-generator": "4.7.1", "vscode-oniguruma": "2.0.1", @@ -39,6 +40,7 @@ "deno": "hono/deno", "node": "@hono/node-server/conninfo", "worker": "hono/cloudflare-workers" - } + }, + "#mdx": "./framework/mdx-hack.tsx" } } diff --git a/src/deploy.ts b/src/bin/deploy.ts similarity index 85% rename from src/deploy.ts rename to src/bin/deploy.ts index 1fe508bea73ad73a38abc3896167f6867b847054..c17ca3edae9022f4dab8398ccb991784e5b6a67a 100644 --- a/src/deploy.ts +++ b/src/bin/deploy.ts @@ -26,7 +26,7 @@ export async function main() { await incr.compile(generate); await rsync.spawn({ - cwd: Path.resolve(import.meta.dirname).parent!.toString(), + cwd: Path.resolve(import.meta.dirname).parent!.parent!.toString(), args: [ "-a", "-r", @@ -53,9 +53,9 @@ export async function main() { }); } -import * as incr from "../framework/incremental.ts"; -import { generate } from "../framework/generate.ts"; +import * as incr from "../../framework/incremental.ts"; +import { generate } from "../../framework/generate.ts"; import * as progress from "lib/progress.ts"; import * as subprocess from "lib/subprocess.ts"; -import * as rsync from "./file-viewer/rsync.ts"; +import * as rsync from "../file-viewer/rsync.ts"; import { Path } from "#sitegen/path"; diff --git a/src/package-lib.ts b/src/bin/package-lib.ts similarity index 100% rename from src/package-lib.ts rename to src/bin/package-lib.ts diff --git a/src/blog/blog.css b/src/blog/blog.css new file mode 100644 index 0000000000000000000000000000000000000000..2c845a45d9283687548596773d6a411b5e699f9b --- /dev/null +++ b/src/blog/blog.css @@ -0,0 +1,204 @@ +:root { + --secondary: #a291ff; +} +main { + font-weight: 350; + color: #e9eaff; +} +h1, .description { + color: var(--primary); +} +h1 { + margin-bottom: 0.5rem; +} +p { + line-height: 1.6; +} +.description { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + font-style: italic; +} +.tag-list { + display: flex; + gap: 0.5rem; + font-size: 80%; +} +.tag { + background-color: #0005; + border-radius: 8px; + padding: 0.35rem; + color: #fffc; + &.date { + color: var(--secondary); + } +} +hr { + margin: 1rem 0; + border: 2px solid var(--primary); +} +img { + width: 100%; + border-radius: 8px; +} + +#toc { + background-color: #0003; + border-radius: 8px; + padding: 1rem; + + h2 { + text-decoration: none; + margin: 0; + text-transform: uppercase; + font-weight: bold; + letter-spacing: 1px; + font-size: 0.8rem; + color: #fff8; + } + ul { + margin: 0; + } + li { + list-style-type: square; + &::marker { + color: var(--primary); + } + li { + --primary: var(--secondary); + } + } +} + +h3 { + --primary: var(--secondary); +} +h2, h3 { + color: var(--primary); + text-decoration: underline; + text-decoration-color: var(--primary); + text-decoration-thickness: 2px; + text-underline-offset: 2px; + a.return { + display: inline-block; + font-size: 1rem; + margin-right: 0.1rem; + transform: translateY(-4px); + } +} + +b { + color: var(--secondary); + &.server { + color: #ff7770; + } + &.client { + color: #ffcd70; + } +} + +blockquote { + & > :first-child { + margin-top: 0; + } + & > :last-child { + margin-bottom: 0; + } + figure.code { + border: none; + pre { + padding: 0; + } + } + background-color: #0008; + border-radius: 8px; + padding: 1rem; + border-left: 4px solid var(--secondary); + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +code, kbd { + /* box-decoration-break: clone; */ + border: 1px solid rgb(from var(--secondary) r g b / 0.8); + border-radius: 4px; + padding: 1px 5px; + background-color: #0008; +} +kbd { + /* box-decoration-break: clone; */ + border-color: white; +} +a > code { + --secondary: var(--primary); +} +figure.code { + border: 4px solid var(--secondary); + background-color: lch(from var(--secondary) 4 2 h); + + &:has(figcaption) { + border-top: none; + } + + &.server { + --secondary: #ff7770; + + .variable { + color: lch(from var(--secondary) 70 c calc(h + 50)); + } + } + &.client { + --secondary: #ffcd70; + + .variable { + color: lch(from var(--secondary) 70 c calc(h + 50)); + } + } + figcaption { + padding: 0.5rem; + font-family: "rmo", monospace; + font-weight: bold; + color: black; + background-color: rgb(from var(--secondary) r g b / 100%); + } + pre { + padding: 0.5rem; + overflow-x: auto; + font-size: 95%; + } + pre > code { + border: unset; + border-radius: unset; + padding: unset; + background-color: unset; + + color: lch(from var(--secondary) 90 10 h); + + .keyword { + color: var(--secondary); + color: lch(from var(--secondary) l c h / 90%); + font-weight: bold; + } + .string { + color: lch(from var(--secondary) 90 90 calc(h + 20)); + } + .constant { + color: lch(from var(--secondary) 90 90 calc(h - 10)); + } + .method { + color: lch(from var(--secondary) 70 c calc(h + 20)); + } + .builtin { + color: lch(from var(--secondary) 90 90 calc(h - 25)); + } + .variable { + color: lch(from var(--secondary) 50 c calc(h + 50)); + } + .comment { + color: lch(from var(--secondary) 90 40 h / 50%); + } + .property, .parameter { + color: lch(from var(--secondary) 90 calc(c - 20) h); + } + } +} diff --git a/src/blog/pages/webdev/deranged-typescript.md b/src/blog/drafts/webdev/deranged-typescript.md similarity index 100% rename from src/blog/pages/webdev/deranged-typescript.md rename to src/blog/drafts/webdev/deranged-typescript.md diff --git a/src/blog/pages/webdev/marko-intro.markodown b/src/blog/drafts/webdev/marko-intro.markodown similarity index 100% rename from src/blog/pages/webdev/marko-intro.markodown rename to src/blog/drafts/webdev/marko-intro.markodown diff --git a/src/blog/helpers.ts b/src/blog/helpers.ts deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/blog/layout.tsx b/src/blog/layout.tsx index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7ad9cb7d6c81d5eb2c90ef59da8acff4d0fd2684 100644 --- a/src/blog/layout.tsx +++ b/src/blog/layout.tsx @@ -0,0 +1,31 @@ +import "./blog.css"; + +export const theme = { + bg: "#271a30", + fg: "#ffffff", + primary: "#91ffc6", +}; + +export function Layout({ meta: { title, description }, date, tags, children }) { + return ( + <> +
+
+ {/* back to clover's garden */} + back to the home page + +

{title}

+

+ {description} +

+
+
{date}
+ {tags.map((tag) =>
{tag}
)} +
+
+
+ {children} +
+ + ); +} diff --git a/src/blog/pages/webdev/everyone-hates-nextjs.mdx b/src/blog/pages/webdev/everyone-hates-nextjs.mdx new file mode 100644 index 0000000000000000000000000000000000000000..9899ee83251418b33d174b56a216c46b6d638230 --- /dev/null +++ b/src/blog/pages/webdev/everyone-hates-nextjs.mdx @@ -0,0 +1,831 @@ +import TableOfContents from "../../tags/table-of-contents.tsx"; +import Heading from "../../tags/heading.tsx"; +import { Layout } from "../../layout.tsx"; +export { theme } from "../../layout.tsx"; + +export const meta = { + title: "Everyone Hates Next.js", + description: "A critique of React Server Components in Next.js 15," + + " and how my company escaped it.", + keywords: ["webdev", "technical analysis", "opinion"], + authors: ["clover caruso"], + embed: { + thumbnail: "/open-graph/everyone-hates-nextjs.png" + }, + canonical: "/blog/webdev/everyone-hates-nextjs" +}; + + + +As I've been using [Next.js] professionally on my employer's web app, I find the +core design of their App Router and [React Server Components] (RSC) to be +extremely frustrating. And it's not small bugs or that the API is confusing, +but large disagreements about the fundamental design decisions that Vercel and +the React team made when building it. + +The more webdev events I go to, the more I see people who dislike Next.js, but +still get stuck using it. By the end of this article, I will share how me and +my colleagues escaped this hell, seamlessly migrating our entire frontend to +[TanStack Start]. + +[Next.js]: https://nextjs.org +[React Server Components]: https://react.dev/reference/rsc/server-components + + + +- [A Technical Review, What are Server Components?][§1] +- [Real-world Pitfalls of the App Router][§2] + - [Optimistic Updates are Impossible][§2.1] + - [Every Navigation is Another Fetch][§2.2] + - [Layouts are Artificially Restricted][§2.3] + - [You Still Download All the Content Twice][§2.4] + - [Turbopack Sucks][§2.5] +- [Seamlessly Ditching Next.js and Vercel at Work][§3] + - [`next/metadata` is Great][§3.1] + - [`next/og` is Good Too][§3.2] +- [My Experience Feels Like the Usual][§4] +- [Prefer Tools that Respect You][§5] + + + +[§1]: #technical-review + +A Technical Review, What are Server Components? + +The pitch of RSC is that components are put into two categories, +"server" components and "client" +components. Server components don't have `useState`, `useEffect`, but can be +`async function`s and refer to backend tools like directly calling into a +database. Client components are the existing +model, where there is code on the backend to generate HTML text and frontend +code to manage the DOM using `window.document.*`. + +> The first disaster: naming!! React is now using the words +> "server" and "client" to refer to +> a very specific things, ignoring their existing definitions. This would be +> fine, except Client components can run on the backend +> too! In this article, I'll be using the terms "backend" and +> "frontend" to describe the two execution environments that web apps +> exist in: a Node.js process and a Web browser, respectively. + +This Server/Client component model +is interesting. Since built-ins like `` get serialized across the +network, data fetching can be very trivially modeled with async server components, and the fallback UI works as if it were +client-side. + +```tsx filename="src/app/[username]/page.tsx" tint="server" +// For this article, server components will be highlighted in red +export default async function Page({ params }) { + // Page params are given as a resolved promise + const { username } = await params; + + // The components `UserInfo` and `UserPostList` will be run at the same + // time. Once `UserInfo` is ready, the visitor will see the page with a + // `PostListSkeleton` if the post list is not yet ready. + return
+ + + }> + + +
+} + +// Waterfalls are avoided by having multiple components, which +// are all evaluated at the same time. + +async function UserInfo({ username }) { + const user = await fetchUserInfo(username); + return <> +

{user.displayName}

+ {user.bio ? : ""} + +} + +async function UserPostList({ username }) { + const posts = await fetchUserPostList(username); + return /* post list ui omitted for brevity */; +} +``` + +If we ignore the 40kB gzipped bundle size of React itself, the above example +has zero JavaScript for the UI and data fetching — it just streams the +markup! For example, the imagined markdown parser within the `` +component stays on the backend. When an interactive frontend is needed, Client +components can be created by putting them in a file starting with `"use +client"`. + +```tsx filename="src/components/CopyButton.tsx" tint="client" +"use client"; // This comment marks the file for client-side bundling. + +export function CopyButton({ url }) { + return <> + {url} + + +} +``` +```tsx filename="src/app/q+a/Card.tsx" tint="server" +export function Card() { + return
+
+ {/* Make the browser import the copy button */} + +
+

+ {/* Process markdown on the backend */} + +

+
+} +``` + +[§2]: #real-world-pitfalls + +Real-world Pitfalls of the App Router + +After quitting [Bun] as a runtime engineer (I implemented [Server Components +bundling] and [a RSC template][bun-rsc] there), I joined a small company working on the +front lines: a Next.js app with a Hono backend. The following notes are +simplifications from the real world problems I've encountered when trying to +maintain and develop new features. As a result of all of these, everyone's time +is wasted either working around design flaws, or explaining to each other why +what should be a non-issue is an immovable object. + +[Bun]: https://bun.com +[Server Components bundling]: https://github.com/oven-sh/bun/blob/67f0c3e016aa479738469adac2b79a1862b88122/src/bake/bake.d.ts +[bun-rsc]: https://github.com/oven-sh/bun/tree/e7790894d92b730758ecadf971cb935063508dfb/src/bake/bun-framework-react + +[§2.1]: #optimistic-updates + +Optimistic Updates are Impossible + +The Next.js documentation for performing mutations [does not mention optimistic +updates][nextjs-updating-data]; it appears this case was not thought about. +Components rendered by the React Server, by design, can +not be modified after mounting. Elements that could change need to be inside a +client component, but data fetching cannot happen on the client components, +even during SSR on the backend. This results in awkwardly small server +components that only do data fetching and then have a client component that +contains a mostly-static version of the page. + +```tsx filename="src/app/user/[username]/page.tsx" tint="server" + +export default async function Page() { + const user = await fetchUserInfo(username); + return + + ; +} +``` +```tsx filename="src/app/user/[username]/UserProfile.tsx" tint="client" + +"use client"; // Must separate the client code into a second file! + +export function UserProfile({ user: initialUser }) { + // There are many great state management libraries out there; + // for simplicity, this example will use one state cell. + const [user, optimisticUpdateUser] = useState(initialUser); + + async function onEdit(newUser) { + optimisticUpdateUser(newUser); + const resp = await fetch("...", { + method: 'POST', + body: JSON.stringify(newUser), + ... // (headers, credentials, tracing, and more) + }) + if (!resp.ok) /* always remember to test for errors! */ + } + + return
{/* user interface with editable fields... */}
: +} +``` + +As more of the page needs interactivity, it gets messier trying to keep the +static parts truly server-side. On the work app, nearly every piece of UI +displays some dynamic data. A [`WebSocket`][ws] synchronizes data live as it +updates (for example, a user card's online state along with their basic +profile). Since these component setups are harder to understand and maintain +for engineers, almost all of our pages are entirely `"use client"` with a +`page.tsx` that defines the data fetching. + +A more concrete example of what this looks like in practice with the +data-fetching library we use at work, [TanStack Query]. + +[TanStack Query]: https://github.com/tanstack/query#readme + +```ts filename="src/queries/users.ts" +// At work, there is a helper function `defineQuery` for type safety. +// Fetchers are trivial and can run on the backend or the frontend. +export const queryUserInfo = (username) => ({ + queryKey: ['user', username], + queryFn: async ({ ... }) => /* fetch data */ +}); +``` +```tsx filename="src/app/user/[username]/page.tsx" tint="server" +export default async function Page({ params }) { + const { username } = await params; + + // There's no global state in the React Server. Since layouts + // are executed in parallel, the TanStack `QueryClient` has to + // be reconstructed multiple times per route. + const queryClient = new QueryClient(); + await queryClient.ensureQueryData(queryUserInfo(username)); + + // HydrationBoundary is a client component that passes JSON + // data from the React server to the client component. + return + + ; +} +``` +```tsx filename="src/app/user/[username]/ClientPage.tsx" tint="client" +"use client"; +export function ClientPage() { + const { username } = useParams(); + const { data: user } = useSuspenseQuery(queryUserInfo(username)); + + // ... some hooks + + return
+ {/* ... an interactive web page */} +
; +} +``` + +This example has to be three separate files because of the rules of server +component bundling. (The client component needs `"use client"`, and server +component files often can't be imported on the client due to server-only +imports.). In the Pages router, this could've been a single file because of the +tree-shaking that `getStaticProps` and `getServerSideProps` has. + +[ws]: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API +[nextjs-updating-data]: https://nextjs.org/docs/app/getting-started/updating-data + + +[§2.2]: #redundant-fetches + +Every Navigation is Another Fetch + +Since the App Router starts every page as a server component, with (ideally) +small areas of interactivity, a navigation to a new page *has* to fetch the +Next.js server, regardless of what data the client already has available! Even +with a a `loading.tsx` file, opening `/`, navigating to `/other`, and then +going back to `/` will show the loading state while it re-fetches the homepage. + +The only case this works is for **perfectly static content**, where instant +navigations and prefetching work great. But **web apps are not static**, they +have lots of dynamic content. Being logged in affects the homepage, which is +infuriating because the client literally has everything needed to display the +page instantly. It's not like the cookies changed. + +> **aside**: In further testing on a blank project, I observe cases where the +> Next frontend code would pre-fetch routes, but **without any real contents**. +> On the hello world example, this was a 1.8kB RSC payload that pointed to 2 +> different JS chunks 4 separate times. This is just pure waste of our +> bandwidth and egress, especially considering all of this information is +> re-fetched when I actually click the link. +> +> ```json whitespace="pre-wrap" +> 1:"$Sreact.fragment" +> 2:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"] +> 3:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"] +> 4:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"ViewportBoundary"] +> 6:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"MetadataBoundary"] +> 7:"$Sreact.suspense" +> 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} +> 5:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +> 9:I[27201,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/7dd66bdf8a7e5707.js"],"IconMark"] +> 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",{}]] +> ``` +> +> In review, I found there is actually some content in here: the loading state. +> Do you see it? +> +> ```json +> ["$","div","l",{"children":"loading..."}] +> ``` +> +> It's still a lot of waste, since all of this data gets re-emitted in the +> actual page RSC. + +The solution to this appears to be [`staleTime`][nextjs-stale], but it's marked +experimental and "not recommended for production". The fact this is a +non-default afterthought configuration option is embarassing. Even it we used +it, you cannot make multiple pages that refer to the same underlying data share +any of it. + +One form of loading state that cannot be represented with the App Router is +having a page such as a page like a git project's issue page, and clicking on a +user name to navigate to their profile page. With `loading.tsx`, the entire +page is a skeleton, but when modeling these queries with TanStack Query it is +possible to show the username and avatar instantly while the user's bio and +repositories are fetched in. Server components don't support this form of +navigation because the data is only available in rendered components, so it +must be re-fetched. + +[nextjs-stale]: https://nextjs.org/docs/app/api-reference/config/next-config-js/staleTimes +[nextjs-stale-bug]: https://github.com/vercel/next.js/issues/70661 + +In our Next.js site, we have this line of code on our server component data +fetchers to make soft navigations faster by skipping the data fetch phase all +together. + +```tsx filename="src/util/tanstack-query-helpers.server.ts" tint="server" +export function serverSidePrefetchQueries(queries) { + if ((await headers()).get("next-url")) { + // This is a soft-navigation. SKIP the prefetching to make it faster. + // The client might already have this data, and if not, they have the + // loading state. Ideally, this server request wouldn't exist -- The + // client side has nearly ALL the code since the app is written mostly + // as client components. Kind of a design flaw of the App router TBH. + return; + } + // ... data prefetching-logic ... +} +``` + +In addition to this, `loading.tsx` should contain the `useQuery` calls so that +while the network request for the empty RSC happens, the data is being fetched +if it actually is needed. In fact, the `loading.tsx` state can just be the +actual client component, and you'll see the client page. + +```tsx filename="src/app/user/[username]/loading.tsx" tint="client" +"use client"; +export default function PageLoadingSkeleton() { + return ; +} +``` + +> At work, we just make our `loading.tsx` files contain the `useQuery` +> calls and show a skeleton. This is because when Next.js loads the actual Server +> Component, no matter what, the entire page re-mounts. No VDOM diffing here, +> meaning all hooks (`useState`) will reset slightly after the request +> completes. I tried to reproduce a simple case where I was *begging* Next.js to +> just *update the existing DOM* and preserve state, but it just doesn't. +> Thankfully, the time the blank RSC call takes is short enough. + +[§2.3]: #layout-restrictions + +Layouts are Artificially Restricted + +Layouts can perform data fetching, but they can't observe or alter the request +in any way. This is done so that Next.js can fetch and cache layouts whenever they +wants. In every other framework, layouts are just regular components that have +no feature difference compared to page components. + +Fetching layouts in isolation is a cute idea, but it ends up being silly +because it also means that any data fetching has to be re-done per layout. You +can't share a `QueryClient`; instead, you must rely on their [monkey-patched +`fetch`][nextjs-fetch] to cache the same `GET` request like they promise. + +When a coworker asks me about why Next.js rejects some code, I've given up on +explaining the technical intricacies and just say *"It's a Next.js Skill Issue, +I'm going to blow it up soon don't worry."* These rules are too hard for normal +developers to understand. + +[nextjs-fetch]: https://nextjs.org/docs/app/api-reference/functions/fetch + +[§2.4]: #rsc-payload + +You Still Download All the Content Twice + +Unlike the ["Islands Architecture"][islands], Server Components still have to +be hydrated on the frontend to support `Suspense` and preserving client +component state. When doing soft navigations, the "RSC Payload" (which is not +HTML at all) is retrieved by `fetch`. On a fresh reload, HTML is needed for the +[first paint], but the information about Client components and `Suspense` is +not contained within that HTML. React's solution is to **send a second copy of +the entire page's markup**. An example of what a Next.js production server +would send in a dynamic page render would be something like this: + +[first paint]: https://web.dev/articles/fcp + +```html filename="GET /user/clover" + + + + {link and meta tags} + + + {server side render} + + + + +
+ {server side render of a Suspense boundary} +
+ + + + + +``` + +This solution **doubles the size of the initial HTML payload**. Except it's +worse, because the RSC payload includes JSON quoted in JS string literals, which +format is much less efficient than HTML. While it seems to compress fine +with brotli and render fast in the browser, this is wasteful. With the +hydration pattern, at least the data locally could be re-used for interactivity +and other pages. + +Even on pages that have little to no interactivity, you pay the cost. To use +the Next.js documentation as an example, loading [its +homepage](https://nextjs.org/docs) loads an page that is around 750kB (250kB of +HTML and the 500kB of script tags), and content is in there twice. + +You can verify that by pressing Cmd + Opt + u +on Mac or Ctrl + u on other platforms. And then +Cmd / Ctrl + f to locate any string of the +blog, such as "building full-stack web applications". It's there twice. And +**there is no way around this**, since it's a fundamental piece of React Server +Components. + +This RSC format certainly has more waste. But I really don't feel like digging into +why the string `/_next/static/chunks/6192a3719cda7dcc.js` appears 27 separate +times. What the hell, guys? Is your bandwidth free??? + +[islands]: https://www.patterns.dev/vanilla/islands-architecture/ + +[§2.5]: #turbopack + +Turbopack Sucks + +This section is not constructive. + +- Turbopack isn't fast +- Turbopack emits code that is hard to debug in a debugger (in development mode) +- Turbopack throws bad error messages in many cases + +I wouldn't have given this point a section in the blog normally, but I want to +point out three actual examples directly from the project. + +The first is a place where during some refactoring to satisfy the Server/Client +component models, I accidentally made a Client component `async`. This one was +quite anoying because it didn't say at all where the issue was, but only +contained the server stack trace. + +![Next.js error](/file/2025/blog-everyone-hates-nextjs/asyncerror.png) + +Another case of a terrible error message: + +![Next.js error](/file/2025/blog-everyone-hates-nextjs/nexterror.png) + +> After fixing the underlying issue in this second error (which I cannot recall), +> the Dev server hung and had to be restarted to recover. + +The final one is the dozen times I place a debugger breakpoint and the +variable name `hello` gets turned into +`__TURBOPACK__imported__module__$5b$project$5d2f$client$2f$src$2f$utils$2f$filename$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["hello"]` +and other bullshit. + +Okay. This all sucks. What can we do? + +[§3]: #ditching-nextjs + +Seamlessly Ditching Next.js and Vercel at Work + +There are two types of web projects: + +- A web site with mostly static content. +- A web app with majorly dynamic and interactive components. + +And Next.js is the wrong tool for both of these jobs. If you're in the first +category with a static web site, go for [Astro] or [Fresh]. For everyone who +needs the full power of React, this section is about how I replaced the vendor +locked Next with [TanStack Start], incrementally and seamlessly. + +[Astro]: https://astro.build/ +[Fresh]: https://fresh.deno.dev/ +[TanStack Start]: https://tanstack.com/start/latest + +It started with this Vite config. + +```ts filename="vite.config.ts" +const config = defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), "NEXT_PUBLIC_"); + return { + // Use the Next.js default port 3000 + server: { port: 3000 }, + // Use the Next.js default env prefix "NEXT_PUBLIC_" + define: Object.fromEntries(Object.entries(env).map( + ([k, v]) => [`process.env.${k}`, JSON.stringify(v)])), + plugins: [ + viteTsConfigPaths({ projects: ["./tsconfig.json"] }), + tailwindcss(), + // For ease of understanding from coworkers, I started porting + // the routes in `src/tanstack-routes`. When the migration was + // done, it would go back to the default `src/routes`. + tanstackStart({ + router: { routesDirectory: "src/tanstack-routes" }, + }), + viteReact(), + ], + resolve: { + // The key to the incremental migration: redirect `next` elsewhere + alias: { next: path.resolve("./src/tanstack-next/") }, + conditions: ["tanstack"], + extensions: [ + // Allow a file named like `utils/session.tanstack.ts` to + // override `utils/session.ts` when imported. + ".tanstack.tsx", ".tanstack.ts", + // Default import extensions + ".mjs", ".js", ".mts", ".ts", + ".jsx", ".tsx", ".json", + ], + }, + }; +}); +``` + +Then, I looked for every usage of a Next.js API, and either removed it or made +a stub for TanStack. For example, `src/tanstack-next/link.tsx` implements +`next/link`: + +```tsx filename="src/tanstack-next/link.tsx" +import { Link } from "@tanstack/react-router"; +import type { LinkProps } from "next/link"; + +export default function LinkAdapter({ href, ...rest }: LinkProps) { + return ; +} +``` + +> Some of these stubs can be extremely simple. Starting out, my implementation +> of `useRouter` was just `return {}`, but later I had to add a couple methods +> to the object. The code here doesn't have to be clean, because it is +> temporary. + +Now, the new site can import nearly every client component by either stubbing +out the Next.js APIs it needs, or by using the `.tanstack.ts` extension to +re-implement logic on a file-by-file basis. And shortly after, I got the site's +homepage to work in TanStack Start, and we merged the branch. + +![My "nextgate" PR](/file/2025/blog-everyone-hates-nextjs/pr.png) + +> This first PR only supported one of our pages, and was able to do it in a +> thousand lines of added code, and 40 lines deleted. I had previous patches to +> remove the few uses of `next/image` and `next/font`. + +What was left was porting every other route over. The one thing we lose in +migrating from Next.js to any other framework is the ability to `await` +data-fetching functions in the UI. In practice, moving every route into a +`loader` function made it much more clear what happened when a page was SSR'd. +For pages that had multiple fetches, these could be combined into a single, +special API call that would return all of the relevant data for that page. + +To re-iterate in bold font: The +migration path from Server Components is to just simplify your code — RSC +inherently drives you down a chaotic road of things you do not need. +Nearly every complex part of our site got easier to understand for all +engineers. The exception to this was having everyone get used to the new file +system routing conventions. With enough examples, we all got the hang of it. + +With the incremental migration in place, new code did not break the existing +deployment. TanStack slowly took over the codebase, and we eventually deleted +all of the Next.js stubs and gained all of the beautiful [type-safety features] +that the TanStack Router provides. At the end, the site performed faster from +every angle: Development Mode, Production page load times, Soft navigations, +and at a lower price than our Next depoyment with Vercel. + +[type-safety features]: https://tanstack.com/router/v1/docs/framework/react/guide/type-safety + +We're not the only ones seeing the change. While I try and keep myself off of +social media, someone sent me [the results of Brian Anglin's work at +Superwall][superwall-twitter], showing incredible CPU reductions on TanStack +Start. I also recall ChatGPT switching from Next.js to Remix (random online +chatter: [[1][chatgpt-1]] [[2][chatgpt-2]] [[3][chatgpt-3]]) a year ago. + +[superwall-twitter]: https://twitter.com/BriansAngles/status/1978834116079436242#m +[chatgpt-1]: https://xcancel.com/ryanflorence/status/1831379475654947233 +[chatgpt-2]: https://old.reddit.com/r/reactjs/comments/1f97zgr/chatgpt_migrates_from_nextjs_to_remix +[chatgpt-3]: https://old.reddit.com/r/nextjs/comments/1f92jdv/chatgptcom_switched_from_nextjs_to_remix + +[§3.1]: #next-metadata + +next/metadata is Great + +In my opinion, this is one of the only good APIs Next.js has, and was the one +place in our code where moving to TanStack made things harder to do. Instead of +worsening the code, I just ported their metadata API into a regular function, +so everyone can use it. Originally, I had a 1:1 port on NPM, but earlier this +year I simplified it's API into one short and understandable +file. As of this blog post, I have added a TanStack-compatible +`meta.toTags` API, which can be installed from [JSR][lib-jsr], [NPM][lib-npm], +or simply copied into your project. + +> **notice**: Due to time constraints with writing this article, the library +> has not yet been updated. I'll probably get around to it by the end of this +> week (Oct 24th). As a placeholder, I'm able to share the version that is used +> at work to my website: [`meta.tanstack.ts`](https://paperclover.net/file/2025/blog-everyone-hates-nextjs/meta.tanstack.ts). + +```tsx +// once in your project +import * as meta from "@clo/lib/meta.ts"; + +export const defineHead = meta.toTags.bind(null, { + // site-wide options + base: new URL("https://paperclover.net"), + titleTemplate: (title) => [title, "paper clover"] + .filter(Boolean).join(' | '), + // ... +}); + +// for each page... +export const Route = createFileRoute("/blog")({ + head: () => + defineHead({ + title: "clover's blog", // templated with `titleTemplate` + description: "a catgirl meows about her technology viewpoints", + canonical: "/blog", // joined with `base` + + // When specified, configures Open Graph and Twitter embed, + // using the page title and description as the default. + // The defaults are good, but it supports more options. + embed: {}, + + // Every exotic meta tag is done with a JSX fragment. This + // doesn't render React, it just loops through the tags. + // My goal was to cover the most common 99% of uses. + extra: <> + , + , + }), + + component: Page, +}); + +function Page() { + ... +} +``` + +My version wasn't concerned with covering the entire space of Next.js's metadata +object, but instead uses inline JSX to fill that gap. + +[lib-jsr]: https://jsr.io/@clo/lib +[lib-npm]: https://npmjs.com/@paperclover/lib + +[§3.2]: #vercel-og + +next/og is Good Too + +No strong opinions. I just want to remind everyone that the `@vercel/og` package exists. + +[§4]: #experience-feels-like-the-usual + +My Experience Feels like the Usual + +At the Next.js Conf 2024, everyone there was raving about Server Components. I +forget exactly who I talked to, but the big people were all in on this. I, +having implemented the bundler end of RSC, saw a couple of the problems in the +format. With Next 15 "stabilizing" the App Router last year, many companies are +building their products on it, realizing these pitfalls first-hand. + +I came into the Next.js game late, only starting in June with version 15. +But everyone I've talked to at events sympathize with my notes. All the people +I talked to on the subject at Bun's 1.3 Party agreed with me. Even some people +at Vercel told me they don't like how Next.js is to actually use. + +I hope as TanStack Start stabilizes, it becomes the Next.js replacement everyone +wants. + +[§5]: #prefer-respectful-tools + +Prefer Tools that Respect You + +A lot of in the JavaScript ecosystem is a mess. That mess is why web +development gets made fun of. There were a lot of times I thought that working +with the web was an unrecoverable mess, but the mess was actually just the +commonly-used libraries I surrounded myself with. When that is peeled back, +modern web development technologies are awesome. + +I've been making this website from scratch without any framework since late +2024, by writing systems like my own [TUI progress widget][progress], [static +file proxy][file-cache], incremental build system, and many more components. +Working on this code has produced some of my best coding sessions (by +happiness) in years. The viewers of *[paper clover]* get a better quality +website; the mini-libraries I create get [extracted for public use][lib], +everyone wins. + +This level of from-scratch is too much for most people, especially at the +workplace. I say that at the minimum, we should only give our attention and +money to high quality tools that respect us. And Next.js and the company behind +it, Vercel, are not that. + +If you use Next.js, and feel that the experience doesn't remind you of respect +too, consider whether you and your colleagues want to continue supporting their +[serverless empire]. The Vite ecosystem seems pretty decent to build on right +now, but I still have little experience in using their tools at scale in +production. The [Vite+ launch from Void0][vite-plus] seems interesting, but +only time will tell if these venture-funded tools will respect us (end-users +and developers) long term. + +Next.js Conf 2025, as of writing, is [tomorrow][next-conf]. Instead of +purchasing a $800 ticket, I decided to put that money [toward the TanStack +team][tanstack-donate] for [respecting and improving the web development +ecosystem][tanstack-ethos]. + +[paper clover]: https://paperclover.net/ +[lib]: https://git.paperclover.net/clo/sitegen/src/branch/master/lib#readme +[progress]: https://git.paperclover.net/clo/sitegen/src/branch/master/lib/progress.ts +[file-cache]: https://git.paperclover.net/clo/sitegen/src/branch/master/src/file-viewer/cache.ts + +[next-conf]: https://nextjs.org/conf +[vite-plus]: https://viteplus.dev/ +[tanstack-ethos]: https://tanstack.com/ethos +[tanstack-donate]: https://github.com/sponsors/tannerlinsley +[serverless empire]: https://youtu.be/SCIfWhAheVw + +## What the Future Holds + +Slowly, I've been replacing many pieces of software that disrespect me with +better alternatives. Some examples of this are GitHub, Visual Studio Code, +DaVinci Resolve, Discord, Google Drive/Workspace, along many more. I plan to +write more on this blog about the technical things I do (that progress library, +the purpose of my own site generator, learnings from my current job), including +some of my past projects at Bun (details on HMR, the crash reporter, and the +crazy system for bundling built-in modules). If it interests you, please +subscribe to the email list: + +click here to send an email to subscribe@paperclover.net, requesting that you would like to be added to the mailing list. (i manage this mailing list manually) + +[back to top](#top) — [ask a question about this article](/q+a) + +
+
+
+
+
+
+
+2025 (c) paper clover +
+ +
+ +
+ diff --git a/src/blog/tags/heading.tsx b/src/blog/tags/heading.tsx new file mode 100644 index 0000000000000000000000000000000000000000..c396a93a3fb3f1206db13e248cadf2401131aad3 --- /dev/null +++ b/src/blog/tags/heading.tsx @@ -0,0 +1,10 @@ +export default function ({ level: Level, slug, children }) { + return ( + <> + + § + {children} + + + ); +} diff --git a/src/blog/tags/table-of-contents.tsx b/src/blog/tags/table-of-contents.tsx new file mode 100644 index 0000000000000000000000000000000000000000..ab53d242d8a5415915a57eb194ced68b0322259b --- /dev/null +++ b/src/blog/tags/table-of-contents.tsx @@ -0,0 +1,8 @@ +export default function ({ children }) { + return ( +
+

Contents:

+ {children} +
+ ); +} diff --git a/src/file-viewer/highlight-grammar/html.plist b/src/file-viewer/highlight-grammar/html.plist new file mode 100644 index 0000000000000000000000000000000000000000..228353f83f1b10a6f1588c0bb6e10696065b59f6 --- /dev/null +++ b/src/file-viewer/highlight-grammar/html.plist @@ -0,0 +1,4215 @@ + + + + + fileTypes + + html + htm + shtml + xhtml + inc + tmpl + tpl + + firstLineMatch + <(?i:(!DOCTYPE\s*)?html) + injections + + R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html) + + comment + Uses R: to ensure this matches after any other injections. + patterns + + + match + < + name + invalid.illegal.bad-angle-bracket.html + + + + + keyEquivalent + ^~H + name + HTML + patterns + + + include + #xml-processing + + + include + #comment + + + include + #doctype + + + include + #cdata + + + include + #tags-valid + + + include + #tags-invalid + + + include + #entities + + + repository + + attribute + + patterns + + + begin + (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:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + HTML5 attributes, not event handlers + end + (?=\s*+[^=\s]) + name + meta.attribute.$1.html + patterns + + + include + #attribute-interior + + + + + begin + style(?![\w:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + HTML5 style attribute + end + (?=\s*+[^=\s]) + name + meta.attribute.style.html + patterns + + + begin + = + beginCaptures + + 0 + + name + punctuation.separator.key-value.html + + + end + (?<=[^\s=])(?!\s*=)|(?=/?>) + patterns + + + begin + (?=[^\s=<>`/]|/(?!>)) + end + (?!\G) + name + meta.embedded.line.css + patterns + + + captures + + 0 + + name + source.css + + + match + ([^\s"'=<>`/]|/(?!>))+ + name + string.unquoted.html + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + contentName + source.css + end + (") + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + 1 + + name + source.css + + + name + string.quoted.double.html + patterns + + + include + #entities + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + contentName + source.css + end + (') + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + 1 + + name + source.css + + + name + string.quoted.single.html + patterns + + + include + #entities + + + + + + + match + = + name + invalid.illegal.unexpected-equals-sign.html + + + + + + + begin + 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:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + HTML5 attributes, event handlers + end + (?=\s*+[^=\s]) + name + meta.attribute.event-handler.$1.html + patterns + + + begin + = + beginCaptures + + 0 + + name + punctuation.separator.key-value.html + + + end + (?<=[^\s=])(?!\s*=)|(?=/?>) + patterns + + + begin + (?=[^\s=<>`/]|/(?!>)) + end + (?!\G) + name + meta.embedded.line.js + patterns + + + captures + + 0 + + name + source.js + + 1 + + patterns + + + include + source.js + + + + + match + (([^\s"'=<>`/]|/(?!>))+) + name + string.unquoted.html + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + contentName + source.js + end + (") + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + 1 + + name + source.js + + + name + string.quoted.double.html + patterns + + + captures + + 0 + + patterns + + + include + source.js + + + + + match + ([^\n"/]|/(?![/*]))+ + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.js + + + end + (?=")|\n + name + comment.line.double-slash.js + + + begin + /\* + beginCaptures + + 0 + + name + punctuation.definition.comment.begin.js + + + end + (?=")|\*/ + endCaptures + + 0 + + name + punctuation.definition.comment.end.js + + + name + comment.block.js + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + contentName + source.js + end + (') + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + 1 + + name + source.js + + + name + string.quoted.single.html + patterns + + + captures + + 0 + + patterns + + + include + source.js + + + + + match + ([^\n'/]|/(?![/*]))+ + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.js + + + end + (?=')|\n + name + comment.line.double-slash.js + + + begin + /\* + beginCaptures + + 0 + + name + punctuation.definition.comment.begin.js + + + end + (?=')|\*/ + endCaptures + + 0 + + name + punctuation.definition.comment.end.js + + + name + comment.block.js + + + + + + + match + = + name + invalid.illegal.unexpected-equals-sign.html + + + + + + + begin + (data-[a-z\-]+)(?![\w:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + HTML5 attributes, data-* + end + (?=\s*+[^=\s]) + name + meta.attribute.data-x.$1.html + patterns + + + include + #attribute-interior + + + + + begin + (align|bgcolor|border)(?![\w:-]) + beginCaptures + + 0 + + name + invalid.deprecated.entity.other.attribute-name.html + + + comment + HTML attributes, deprecated + end + (?=\s*+[^=\s]) + name + meta.attribute.$1.html + patterns + + + include + #attribute-interior + + + + + begin + ([^\x{0020}"'<>/=\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}]+) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + Anything else that is valid + end + (?=\s*+[^=\s]) + name + meta.attribute.unrecognized.$1.html + patterns + + + include + #attribute-interior + + + + + match + [^\s>]+ + name + invalid.illegal.character-not-allowed-here.html + + + + attribute-interior + + patterns + + + begin + = + beginCaptures + + 0 + + name + punctuation.separator.key-value.html + + + end + (?<=[^\s=])(?!\s*=)|(?=/?>) + patterns + + + match + ([^\s"'=<>`/]|/(?!>))+ + name + string.unquoted.html + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + + name + string.quoted.double.html + patterns + + + include + #entities + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.html + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.html + + + name + string.quoted.single.html + patterns + + + include + #entities + + + + + match + = + name + invalid.illegal.unexpected-equals-sign.html + + + + + + cdata + + begin + <!\[CDATA\[ + beginCaptures + + 0 + + name + punctuation.definition.tag.begin.html + + + contentName + string.other.inline-data.html + end + ]]> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.cdata.html + + comment + + begin + <!-- + captures + + 0 + + name + punctuation.definition.comment.html + + + end + --> + name + comment.block.html + patterns + + + match + \G-?> + name + invalid.illegal.characters-not-allowed-here.html + + + match + <!--(?!>)|<!-(?=-->) + name + invalid.illegal.characters-not-allowed-here.html + + + match + --!> + name + invalid.illegal.characters-not-allowed-here.html + + + + core-minus-invalid + + comment + This should be the root pattern array includes minus #tags-invalid + patterns + + + include + #xml-processing + + + include + #comment + + + include + #doctype + + + include + #cdata + + + include + #tags-valid + + + include + #entities + + + + doctype + + begin + <!(?=(?i:DOCTYPE\s)) + beginCaptures + + 0 + + name + punctuation.definition.tag.begin.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.doctype.html + patterns + + + match + \G(?i:DOCTYPE) + name + entity.name.tag.html + + + begin + " + end + " + name + string.quoted.double.html + + + match + [^\s>]+ + name + entity.other.attribute-name.html + + + + entities + + patterns + + + captures + + 1 + + name + punctuation.definition.entity.html + + 912 + + name + punctuation.definition.entity.html + + + comment + Yes this is a bit ridiculous, there are quite a lot of these + match + (?x) + (&) (?=[a-zA-Z]) + ( + (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)) + | (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)?)) + | (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)) + | (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))) + | (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))) + | (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)) + | (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)) + | (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)) + | (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))?)) + | (j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr)) + | (k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa)) + | (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)) + | (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))) + | (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)) + | (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))) + | (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)?)?)) + | (q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr)) + | (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))) + | (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)) + | (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)) + | (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))) + | (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)) + | (w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr)) + | (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)) + | (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)) + | (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)) + ) + (;) + + name + constant.character.entity.named.$2.html + + + captures + + 1 + + name + punctuation.definition.entity.html + + 3 + + name + punctuation.definition.entity.html + + + match + (&)#[0-9]+(;) + name + constant.character.entity.numeric.decimal.html + + + captures + + 1 + + name + punctuation.definition.entity.html + + 3 + + name + punctuation.definition.entity.html + + + match + (&)#[xX][0-9a-fA-F]+(;) + name + constant.character.entity.numeric.hexadecimal.html + + + match + &(?=[a-zA-Z0-9]+;) + name + invalid.illegal.ambiguous-ampersand.html + + + + math + + patterns + + + begin + (?i)(<)(math)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.structure.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>) + endCaptures + + 0 + + name + meta.tag.structure.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + + name + meta.element.structure.$2.html + patterns + + + begin + (?<!>)\G + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + repository + + attribute + + patterns + + + begin + (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:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + end + (?=\s*+[^=\s]) + name + meta.attribute.$1.html + patterns + + + include + #attribute-interior + + + + + begin + ([^\x{0020}"'<>/=\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}]+) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + Anything else that is valid + end + (?=\s*+[^=\s]) + name + meta.attribute.unrecognized.$1.html + patterns + + + include + #attribute-interior + + + + + match + [^\s>]+ + name + invalid.illegal.character-not-allowed-here.html + + + + tags + + patterns + + + include + #comment + + + include + #cdata + + + captures + + 0 + + name + meta.tag.structure.math.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.structure.math.$2.html + + + begin + (?i)(<)(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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.structure.math.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.structure.math.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.structure.math.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.inline.math.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.inline.math.$2.html + + + begin + (?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.inline.math.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.inline.math.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.inline.math.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.object.math.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(mglyph)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.object.math.$2.html + + + begin + (?i)(<)(mglyph)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.object.math.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.object.math.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.object.math.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.other.invalid.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(([\w:]+))(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.other.invalid.html + + + begin + (?i)(<)((\w[^\s>]*))(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.other.invalid.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)((\2))\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.other.invalid.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + name + punctuation.definition.tag.end.html + + 5 + + name + punctuation.definition.tag.end.html + + + name + meta.element.other.invalid.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.invalid.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + include + #tags-invalid + + + + + + svg + + patterns + + + begin + (?i)(<)(svg)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.structure.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>) + endCaptures + + 0 + + name + meta.tag.structure.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + + name + meta.element.structure.$2.html + patterns + + + begin + (?<!>)\G + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + repository + + attribute + + patterns + + + begin + (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:-]) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + end + (?=\s*+[^=\s]) + name + meta.attribute.$1.html + patterns + + + include + #attribute-interior + + + + + begin + ([^\x{0020}"'<>/=\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}]+) + beginCaptures + + 0 + + name + entity.other.attribute-name.html + + + comment + Anything else that is valid + end + (?=\s*+[^=\s]) + name + meta.attribute.unrecognized.$1.html + patterns + + + include + #attribute-interior + + + + + match + [^\s>]+ + name + invalid.illegal.character-not-allowed-here.html + + + + tags + + patterns + + + include + #comment + + + include + #cdata + + + captures + + 0 + + name + meta.tag.metadata.svg.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(color-profile|desc|metadata|script|style|title)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.metadata.svg.$2.html + + + begin + (?i)(<)(color-profile|desc|metadata|script|style|title)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.metadata.svg.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.metadata.svg.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.metadata.svg.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.structure.svg.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.structure.svg.$2.html + + + begin + (?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.structure.svg.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.structure.svg.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.structure.svg.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.inline.svg.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.inline.svg.$2.html + + + begin + (?i)(<)(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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.inline.svg.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.inline.svg.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.inline.svg.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.object.svg.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.object.svg.$2.html + + + begin + (?i)(<)(a|circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.object.svg.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + patterns + + + include + #attribute + + + + 5 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)(\2)\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.object.svg.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.element.object.svg.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.other.svg.$2.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)((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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.other.svg.$2.html + + + begin + (?i)(<)((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|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.other.svg.$2.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)((\2))\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.other.svg.$2.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + 4 + + name + punctuation.definition.tag.end.html + + 5 + + name + punctuation.definition.tag.end.html + + + name + meta.element.other.svg.$2.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + captures + + 0 + + name + meta.tag.other.invalid.void.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + match + (?i)(<)(([\w:]+))(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(/>)) + name + meta.element.other.invalid.html + + + begin + (?i)(<)((\w[^\s>]*))(?=\s|/?>)(?:(([^"'>]|"[^"]*"|'[^']*')*)(>))? + beginCaptures + + 0 + + name + meta.tag.other.invalid.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + patterns + + + include + #attribute + + + + 6 + + name + punctuation.definition.tag.end.html + + + end + (?i)(</)((\2))\s*(>)|(/>)|(?=</\w+) + endCaptures + + 0 + + name + meta.tag.other.invalid.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + 4 + + name + punctuation.definition.tag.end.html + + 5 + + name + punctuation.definition.tag.end.html + + + name + meta.element.other.invalid.html + patterns + + + begin + (?<!>)\G + end + (?=/>)|> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.invalid.start.html + patterns + + + include + #attribute + + + + + include + #tags + + + + + include + #tags-invalid + + + + + + tags-invalid + + patterns + + + begin + (</?)((\w[^\s>]*))(?<!/) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.unrecognized-tag.html + + + end + ((?: ?/)?>) + endCaptures + + 1 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.$2.html + patterns + + + include + #attribute + + + + + + tags-valid + + patterns + + + begin + (^[ \t]+)?(?=<(?i:style)\b(?!-)) + beginCaptures + + 1 + + name + punctuation.whitespace.embedded.leading.html + + + end + (?!\G)([ \t]*$\n?)? + endCaptures + + 1 + + name + punctuation.whitespace.embedded.trailing.html + + + patterns + + + begin + (?i)(<)(style)(?=\s|/?>) + beginCaptures + + 0 + + name + meta.tag.metadata.style.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + (?i)((<)/)(style)\s*(>) + endCaptures + + 0 + + name + meta.tag.metadata.style.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + source.css + + 3 + + name + entity.name.tag.html + + 4 + + name + punctuation.definition.tag.end.html + + + name + meta.embedded.block.html + patterns + + + begin + \G + captures + + 1 + + name + punctuation.definition.tag.end.html + + + end + (>) + name + meta.tag.metadata.style.start.html + patterns + + + include + #attribute + + + + + begin + (?!\G) + end + (?=</(?i:style)) + name + source.css + patterns + + + include + source.css + + + + + + + + + begin + (^[ \t]+)?(?=<(?i:script)\b(?!-)) + beginCaptures + + 1 + + name + punctuation.whitespace.embedded.leading.html + + + end + (?!\G)([ \t]*$\n?)? + endCaptures + + 1 + + name + punctuation.whitespace.embedded.trailing.html + + + patterns + + + begin + (<)((?i:script))\b + beginCaptures + + 0 + + name + meta.tag.metadata.script.start.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + (/)((?i:script))(>) + endCaptures + + 0 + + name + meta.tag.metadata.script.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + punctuation.definition.tag.end.html + + + name + meta.embedded.block.html + patterns + + + begin + \G + end + (?=/) + patterns + + + begin + (>) + beginCaptures + + 0 + + name + meta.tag.metadata.script.start.html + + 1 + + name + punctuation.definition.tag.end.html + + + end + ((<))(?=/(?i:script)) + endCaptures + + 0 + + name + meta.tag.metadata.script.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + source.js + + + patterns + + + begin + \G + end + (?=</(?i:script)) + name + source.js + patterns + + + begin + (^[ \t]+)?(?=//) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.js + + + end + (?!\G) + patterns + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.js + + + end + (?=</script)|\n + name + comment.line.double-slash.js + + + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/|(?=</script) + name + comment.block.js + + + include + source.js + + + + + + + begin + \G + end + (?ix: + (?=> # Tag without type attribute + | type(?=[\s=]) + (?!\s*=\s* + ( + '' # Empty + | "" # Values + | ('|"|) + ( + text/ # Text mime-types + ( + javascript(1\.[0-5])? + | x-javascript + | jscript + | livescript + | (x-)?ecmascript + | babel # Javascript variant currently + # recognized as such + ) + | application/ # Application mime-types + ( + (x-)?javascript + | (x-)?ecmascript + ) + | module + ) + [\s"'>] + ) + ) + ) + ) + name + meta.tag.metadata.script.start.html + patterns + + + include + #attribute + + + + + begin + (?ix: + (?= + type\s*=\s* + ('|"|) + text/ + ( + x-handlebars + | (x-(handlebars-)?|ng-)?template + | html + ) + [\s"'>] + ) + ) + end + ((<))(?=/(?i:script)) + endCaptures + + 0 + + name + meta.tag.metadata.script.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + text.html.basic + + + patterns + + + begin + \G + end + (>) + endCaptures + + 1 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.script.start.html + patterns + + + include + #attribute + + + + + begin + (?!\G) + end + (?=</(?i:script)) + name + text.html.basic + patterns + + + include + text.html.basic + + + + + + + begin + (?=(?i:type)) + end + (<)(?=/(?i:script)) + endCaptures + + 0 + + name + meta.tag.metadata.script.end.html + + 1 + + name + punctuation.definition.tag.begin.html + + + patterns + + + begin + \G + end + (>) + endCaptures + + 1 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.script.start.html + patterns + + + include + #attribute + + + + + begin + (?!\G) + end + (?=</(?i:script)) + name + source.unknown + + + + + + + + + + + begin + (?i)(<)(base|link|meta)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(noscript|title)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)(noscript|title)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(col|hr|input)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)(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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(area|br|wbr)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)(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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(embed|img|param|source|track)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)(audio|canvas|iframe|object|picture|video)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)(audio|canvas|iframe|object|picture|video)(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((basefont|isindex))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.metadata.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((center|frameset|noembed|noframes))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)((center|frameset|noembed|noframes))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.structure.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((acronym|big|blink|font|strike|tt|xmp))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)((acronym|big|blink|font|strike|tt|xmp))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.inline.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((frame))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.void.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((applet))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)((applet))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.deprecated.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.object.$2.end.html + patterns + + + include + #attribute + + + + + begin + (?i)(<)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.no-longer-supported.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.$2.start.html + patterns + + + include + #attribute + + + + + begin + (?i)(</)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\s|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + 3 + + name + invalid.illegal.no-longer-supported.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.other.$2.end.html + patterns + + + include + #attribute + + + + + include + #math + + + include + #svg + + + begin + (<)([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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + /?> + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.custom.start.html + patterns + + + include + #attribute + + + + + begin + (</)([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|/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.html + + 2 + + name + entity.name.tag.html + + + end + > + endCaptures + + 0 + + name + punctuation.definition.tag.end.html + + + name + meta.tag.custom.end.html + patterns + + + include + #attribute + + + + + + xml-processing + + begin + (<\?)(xml) + captures + + 1 + + name + punctuation.definition.tag.html + + 2 + + name + entity.name.tag.html + + + end + (\?>) + name + meta.tag.metadata.processing.xml.html + patterns + + + include + #attribute + + + + + scopeName + text.html.basic + uuid + 17994EC8-6B1D-11D9-AC3A-000D93589AF6 + + diff --git a/src/file-viewer/highlight-grammar/js.plist b/src/file-viewer/highlight-grammar/js.plist new file mode 100644 index 0000000000000000000000000000000000000000..3f591432c514d5932fae2099649d6f94965bf17c --- /dev/null +++ b/src/file-viewer/highlight-grammar/js.plist @@ -0,0 +1,9858 @@ + + + + + name + JavaScript + scopeName + source.js + fileTypes + + ts + + uuid + ef98eb90-bf9b-11e4-bb52-0800200c9a66 + patterns + + + include + #directives + + + include + #statements + + + include + #shebang + + + repository + + shebang + + name + comment.line.shebang.ts + match + \A(#!).*(?=$) + captures + + 1 + + name + punctuation.definition.comment.ts + + + + statements + + patterns + + + include + #declaration + + + include + #control-statement + + + include + #after-operator-block-as-object-literal + + + include + #decl-block + + + include + #label + + + include + #expression + + + include + #punctuation-semicolon + + + include + #string + + + include + #comment + + + + declaration + + patterns + + + include + #decorator + + + include + #var-expr + + + include + #function-declaration + + + include + #class-declaration + + + include + #interface-declaration + + + include + #enum-declaration + + + include + #namespace-declaration + + + include + #type-alias-declaration + + + include + #import-equals-declaration + + + include + #import-declaration + + + include + #export-declaration + + + name + storage.modifier.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + control-statement + + patterns + + + include + #switch-statement + + + include + #for-loop + + + name + keyword.control.trycatch.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.control.loop.ts + + 2 + + name + entity.name.label.ts + + + + + name + keyword.control.loop.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 0 + + name + keyword.control.flow.ts + + + end + (?=[;}]|$|;|^\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)) + patterns + + + include + #expression + + + + + name + keyword.control.switch.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #if-statement + + + name + keyword.control.conditional.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.control.with.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.control.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.other.debugger.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + label + + patterns + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{) + beginCaptures + + 1 + + name + entity.name.label.ts + + 2 + + name + punctuation.separator.label.ts + + + end + (?<=\}) + patterns + + + include + #decl-block + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(:) + captures + + 1 + + name + entity.name.label.ts + + 2 + + name + punctuation.separator.label.ts + + + + + + expression + + patterns + + + include + #expressionWithoutIdentifiers + + + include + #identifiers + + + include + #expressionPunctuations + + + + expressionWithoutIdentifiers + + patterns + + + include + #string + + + include + #regex + + + include + #comment + + + include + #function-expression + + + include + #class-expression + + + include + #arrow-function + + + include + #paren-expression-possibly-arrow + + + include + #cast + + + include + #ternary-expression + + + include + #new-expr + + + include + #instanceof-expr + + + include + #object-literal + + + include + #expression-operators + + + include + #function-call + + + include + #literal + + + include + #support-objects + + + include + #paren-expression + + + + expressionPunctuations + + patterns + + + include + #punctuation-comma + + + include + #punctuation-accessor + + + + decorator + + name + meta.decorator.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))\@ + beginCaptures + + 0 + + name + punctuation.decorator.ts + + + end + (?=\s) + patterns + + + include + #expression + + + + var-expr + + patterns + + + name + meta.var.expr.ts + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.ts + + + end + (?=\S) + + + include + #destructuring-variable + + + include + #var-single-variable + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*(?=$|\/\/) + beginCaptures + + 1 + + name + punctuation.separator.comma.ts + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #destructuring-variable + + + include + #var-single-variable + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + name + meta.var.expr.ts + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.ts + + + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.ts + + + end + (?=\S) + + + include + #destructuring-const + + + include + #var-single-const + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*(?=$|\/\/) + beginCaptures + + 1 + + name + punctuation.separator.comma.ts + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #destructuring-const + + + include + #var-single-const + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + name + meta.var.expr.ts + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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:]])(?:(?=\.\.\.)|(?!\.))) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.ts + + + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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* + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.ts + + + end + (?=\S) + + + include + #var-single-const + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*((?!\S)|(?=\/\/)) + beginCaptures + + 1 + + name + punctuation.separator.comma.ts + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #var-single-const + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + + var-single-variable + + patterns + + + name + meta.var-single-variable.expr.ts + begin + (?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + beginCaptures + + 1 + + name + meta.definition.variable.ts entity.name.function.ts + + 2 + + name + keyword.operator.definiteassignment.ts + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.ts + begin + ([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)? + beginCaptures + + 1 + + name + meta.definition.variable.ts variable.other.constant.ts + + 2 + + name + keyword.operator.definiteassignment.ts + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.ts + begin + ([_$[:alpha:]][_$[:alnum:]]*)(\!)? + beginCaptures + + 1 + + name + meta.definition.variable.ts variable.other.readwrite.ts + + 2 + + name + keyword.operator.definiteassignment.ts + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + + var-single-const + + patterns + + + name + meta.var-single-variable.expr.ts + begin + (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + beginCaptures + + 1 + + name + meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.ts + begin + ([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 1 + + name + meta.definition.variable.ts variable.other.constant.ts + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + + var-single-variable-type-annotation + + patterns + + + include + #type-annotation + + + include + #string + + + include + #comment + + + + destructuring-variable + + patterns + + + name + meta.object-binding-pattern-variable.ts + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #object-binding-pattern + + + include + #type-annotation + + + include + #comment + + + + + name + meta.array-binding-pattern-variable.ts + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #array-binding-pattern + + + include + #type-annotation + + + include + #comment + + + + + + destructuring-const + + patterns + + + name + meta.object-binding-pattern-variable.ts + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #object-binding-pattern-const + + + include + #type-annotation + + + include + #comment + + + + + name + meta.array-binding-pattern-variable.ts + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #array-binding-pattern-const + + + include + #type-annotation + + + include + #comment + + + + + + object-binding-element + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #binding-element + + + + + include + #object-binding-pattern + + + include + #destructuring-variable-rest + + + include + #variable-initializer + + + include + #punctuation-comma + + + + object-binding-element-const + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #binding-element-const + + + + + include + #object-binding-pattern-const + + + include + #destructuring-variable-rest-const + + + include + #variable-initializer + + + include + #punctuation-comma + + + + object-binding-element-propertyName + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (:) + endCaptures + + 0 + + name + punctuation.destructuring.ts + + + patterns + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + name + variable.object.property.ts + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + binding-element + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #object-binding-pattern + + + include + #array-binding-pattern + + + include + #destructuring-variable-rest + + + include + #variable-initializer + + + + binding-element-const + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #object-binding-pattern-const + + + include + #array-binding-pattern-const + + + include + #destructuring-variable-rest-const + + + include + #variable-initializer + + + + destructuring-variable-rest + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + meta.definition.variable.ts variable.other.readwrite.ts + + + + destructuring-variable-rest-const + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + meta.definition.variable.ts variable.other.constant.ts + + + + object-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.object.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.ts + + + patterns + + + include + #object-binding-element + + + + object-binding-pattern-const + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.object.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.ts + + + patterns + + + include + #object-binding-element-const + + + + array-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.array.ts + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.ts + + + patterns + + + include + #binding-element + + + include + #punctuation-comma + + + + array-binding-pattern-const + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.array.ts + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.ts + + + patterns + + + include + #binding-element-const + + + include + #punctuation-comma + + + + parameter-name + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+) + captures + + 1 + + name + storage.modifier.ts + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + entity.name.function.ts variable.language.this.ts + + 4 + + name + entity.name.function.ts + + 5 + + name + keyword.operator.optional.ts + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + variable.parameter.ts variable.language.this.ts + + 4 + + name + variable.parameter.ts + + 5 + + name + keyword.operator.optional.ts + + + + + + destructuring-parameter + + patterns + + + name + meta.parameter.object-binding-pattern.ts + begin + (?<!=|:)\s*(?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.object.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.ts + + + patterns + + + include + #parameter-object-binding-element + + + + + name + meta.paramter.array-binding-pattern.ts + begin + (?<!=|:)\s*(?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.array.ts + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.ts + + + patterns + + + include + #parameter-binding-element + + + include + #punctuation-comma + + + + + + parameter-object-binding-element + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #parameter-binding-element + + + include + #paren-expression + + + + + include + #parameter-object-binding-pattern + + + include + #destructuring-parameter-rest + + + include + #variable-initializer + + + include + #punctuation-comma + + + + parameter-binding-element + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #parameter-object-binding-pattern + + + include + #parameter-array-binding-pattern + + + include + #destructuring-parameter-rest + + + include + #variable-initializer + + + + destructuring-parameter-rest + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + variable.parameter.ts + + + + parameter-object-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.object.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.ts + + + patterns + + + include + #parameter-object-binding-element + + + + parameter-array-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.ts + + 2 + + name + punctuation.definition.binding-pattern.array.ts + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.ts + + + patterns + + + include + #parameter-binding-element + + + include + #punctuation-comma + + + + field-declaration + + name + meta.field.declaration.ts + begin + (?x)(?<!\()(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s+)?(?=\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$)) + beginCaptures + + 1 + + name + storage.modifier.ts + + + end + (?x)(?=\}|;|,|$|(^(?!\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?<=\}) + patterns + + + include + #variable-initializer + + + include + #type-annotation + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + include + #comment + + + match + (?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + meta.definition.property.ts entity.name.function.ts + + 2 + + name + keyword.operator.optional.ts + + 3 + + name + keyword.operator.definiteassignment.ts + + + + + name + meta.definition.property.ts variable.object.property.ts + match + \#?[_$[:alpha:]][_$[:alnum:]]* + + + name + keyword.operator.optional.ts + match + \? + + + name + keyword.operator.definiteassignment.ts + match + \! + + + + variable-initializer + + patterns + + + begin + (?<!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=>\s*$) + beginCaptures + + 1 + + name + keyword.operator.assignment.ts + + + end + (?=$|^|[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #expression + + + + + begin + (?<!=|!)(=)(?!=) + beginCaptures + + 1 + + name + keyword.operator.assignment.ts + + + end + (?=[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))|(?=^\s*$)|(?<![\|\&\+\-\*\/])(?<=\S)(?<!=)(?=\s*$) + patterns + + + include + #expression + + + + + + function-declaration + + name + meta.function.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s* + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.async.ts + + 4 + + name + storage.type.function.ts + + 5 + + name + keyword.generator.asterisk.ts + + 6 + + name + meta.definition.function.ts entity.name.function.ts + + + end + (?=;|^\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))|(?<=\}) + patterns + + + include + #function-name + + + include + #function-body + + + + function-expression + + name + meta.function.expression.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s* + beginCaptures + + 1 + + name + storage.modifier.async.ts + + 2 + + name + storage.type.function.ts + + 3 + + name + keyword.generator.asterisk.ts + + 4 + + name + meta.definition.function.ts entity.name.function.ts + + + end + (?=;)|(?<=\}) + patterns + + + include + #function-name + + + include + #single-line-comment-consuming-line-ending + + + include + #function-body + + + + function-name + + name + meta.definition.function.ts entity.name.function.ts + match + [_$[:alpha:]][_$[:alnum:]]* + + function-body + + patterns + + + include + #comment + + + include + #type-parameters + + + include + #function-parameters + + + include + #return-type + + + include + #type-function-return-type + + + include + #decl-block + + + name + keyword.generator.asterisk.ts + match + \* + + + + method-declaration + + patterns + + + name + meta.method.declaration.ts + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.modifier.async.ts + + 5 + + name + storage.type.ts + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + name + meta.method.declaration.ts + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.modifier.async.ts + + 5 + + name + keyword.operator.new.ts + + 6 + + name + keyword.generator.asterisk.ts + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + name + meta.method.declaration.ts + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.modifier.async.ts + + 5 + + name + storage.type.property.ts + + 6 + + name + keyword.generator.asterisk.ts + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + + object-literal-method-declaration + + name + meta.method.declaration.ts + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + 2 + + name + storage.type.property.ts + + 3 + + name + keyword.generator.asterisk.ts + + + end + (?=\}|;|,)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + 2 + + name + storage.type.property.ts + + 3 + + name + keyword.generator.asterisk.ts + + + end + (?=\(|\<) + patterns + + + include + #method-declaration-name + + + + + + method-declaration-name + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\<]) + end + (?=\(|\<) + patterns + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + name + meta.definition.method.ts entity.name.function.ts + match + [_$[:alpha:]][_$[:alnum:]]* + + + name + keyword.operator.optional.ts + match + \? + + + + arrow-function + + patterns + + + name + meta.arrow.ts + match + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>) + captures + + 1 + + name + storage.modifier.async.ts + + 2 + + name + variable.parameter.ts + + + + + name + meta.arrow.ts + begin + (?x) (?: + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync) +)? ((?<![})!\]])\s* + (?= + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + ) +) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + + end + (?==>|\{|(^\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+)) + patterns + + + include + #comment + + + include + #type-parameters + + + include + #function-parameters + + + include + #arrow-return-type + + + include + #possibly-arrow-return-type + + + + + name + meta.arrow.ts + begin + => + beginCaptures + + 0 + + name + storage.type.function.arrow.ts + + + end + ((?<=\}|\S)(?<!=>)|((?!\{)(?=\S)))(?!\/[\/\*]) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #decl-block + + + include + #expression + + + + + + indexer-declaration + + name + meta.indexer.declaration.ts + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:) + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + meta.brace.square.ts + + 3 + + name + variable.parameter.ts + + + end + (\])\s*(\?\s*)?|$ + endCaptures + + 1 + + name + meta.brace.square.ts + + 2 + + name + keyword.operator.optional.ts + + + patterns + + + include + #type-annotation + + + + indexer-mapped-type-declaration + + name + meta.indexer.mappedtype.declaration.ts + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+ + beginCaptures + + 1 + + name + keyword.operator.type.modifier.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + meta.brace.square.ts + + 4 + + name + entity.name.type.ts + + 5 + + name + keyword.operator.expression.in.ts + + + end + (\])([+-])?\s*(\?\s*)?|$ + endCaptures + + 1 + + name + meta.brace.square.ts + + 2 + + name + keyword.operator.type.modifier.ts + + 3 + + name + keyword.operator.optional.ts + + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+ + captures + + 1 + + name + keyword.control.as.ts + + + + + include + #type + + + + function-parameters + + name + meta.parameters.ts + begin + \( + beginCaptures + + 0 + + name + punctuation.definition.parameters.begin.ts + + + end + \) + endCaptures + + 0 + + name + punctuation.definition.parameters.end.ts + + + patterns + + + include + #function-parameters-body + + + + function-parameters-body + + patterns + + + include + #comment + + + include + #string + + + include + #decorator + + + include + #destructuring-parameter + + + include + #parameter-name + + + include + #parameter-type-annotation + + + include + #variable-initializer + + + name + punctuation.separator.parameter.ts + match + , + + + + class-declaration + + name + meta.class.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*]) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.type.class.ts + + + end + (?<=\}) + patterns + + + include + #class-declaration-or-expression-patterns + + + + class-expression + + name + meta.class.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[<{]|\/[\/*]) + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + storage.type.class.ts + + + end + (?<=\}) + patterns + + + include + #class-declaration-or-expression-patterns + + + + class-declaration-or-expression-patterns + + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + match + [_$[:alpha:]][_$[:alnum:]]* + captures + + 0 + + name + entity.name.type.class.ts + + + + + include + #type-parameters + + + include + #class-or-interface-body + + + + interface-declaration + + name + meta.interface.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*]) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.type.interface.ts + + + end + (?<=\}) + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + match + [_$[:alpha:]][_$[:alnum:]]* + captures + + 0 + + name + entity.name.type.interface.ts + + + + + include + #type-parameters + + + include + #class-or-interface-body + + + + class-or-interface-heritage + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + storage.modifier.ts + + + end + (?=\{) + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + include + #type-parameters + + + include + #expressionWithoutIdentifiers + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*) + captures + + 1 + + name + entity.name.type.module.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + entity.other.inherited-class.ts + + + + + include + #expressionPunctuations + + + + class-or-interface-body + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #comment + + + include + #decorator + + + begin + (?<=:)\s* + end + (?=\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)) + patterns + + + include + #expression + + + + + include + #method-declaration + + + include + #indexer-declaration + + + include + #field-declaration + + + include + #string + + + include + #type-annotation + + + include + #variable-initializer + + + include + #access-modifier + + + include + #property-accessor + + + include + #async-modifier + + + include + #after-operator-block-as-object-literal + + + include + #decl-block + + + include + #expression + + + include + #punctuation-comma + + + include + #punctuation-semicolon + + + + access-modifier + + name + storage.modifier.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + property-accessor + + name + storage.type.property.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + async-modifier + + name + storage.modifier.async.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + enum-declaration + + name + meta.enum.declaration.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.modifier.ts + + 4 + + name + storage.type.enum.ts + + 5 + + name + entity.name.type.enum.ts + + + end + (?<=\}) + patterns + + + include + #comment + + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #comment + + + begin + ([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 0 + + name + variable.other.enummember.ts + + + end + (?=,|\}|$) + patterns + + + include + #comment + + + include + #variable-initializer + + + + + begin + (?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))) + end + (?=,|\}|$) + patterns + + + include + #string + + + include + #array-literal + + + include + #comment + + + include + #variable-initializer + + + + + include + #punctuation-comma + + + + + + namespace-declaration + + name + meta.namespace.declaration.ts + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`])) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.namespace.ts + + + end + (?<=\})|(?=;|^\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)) + patterns + + + include + #comment + + + include + #string + + + name + entity.name.type.module.ts + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + include + #punctuation-accessor + + + include + #decl-block + + + + type-alias-declaration + + name + meta.type.declaration.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s* + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + storage.type.type.ts + + 4 + + name + entity.name.type.alias.ts + + + end + (?=\}|;|^\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)) + patterns + + + include + #comment + + + include + #type-parameters + + + begin + (=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.assignment.ts + + 2 + + name + keyword.control.intrinsic.ts + + + end + (?=\}|;|^\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)) + patterns + + + include + #type + + + + + begin + (=)\s* + beginCaptures + + 1 + + name + keyword.operator.assignment.ts + + + end + (?=\}|;|^\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)) + patterns + + + include + #type + + + + + + import-equals-declaration + + patterns + + + name + meta.import-equals.external.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\() + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + keyword.control.import.ts + + 4 + + name + keyword.control.type.ts + + 5 + + name + variable.other.readwrite.alias.ts + + 6 + + name + keyword.operator.assignment.ts + + 7 + + name + keyword.control.require.ts + + 8 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #comment + + + include + #string + + + + + name + meta.import-equals.internal.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + keyword.control.import.ts + + 4 + + name + keyword.control.type.ts + + 5 + + name + variable.other.readwrite.alias.ts + + 6 + + name + keyword.operator.assignment.ts + + + end + (?=;|$|^) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + entity.name.type.module.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + + + + name + variable.other.readwrite.ts + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + + + import-declaration + + name + meta.import.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + keyword.control.import.ts + + 4 + + name + keyword.control.type.ts + + + end + (?<!^import|[^\._$[:alnum:]]import)(?=;|$|^) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #string + + + begin + (?<=^import|[^\._$[:alnum:]]import)(?!\s*["']) + end + \bfrom\b + endCaptures + + 0 + + name + keyword.control.from.ts + + + patterns + + + include + #import-export-declaration + + + + + include + #import-export-declaration + + + + export-declaration + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.control.export.ts + + 2 + + name + keyword.control.as.ts + + 3 + + name + storage.type.namespace.ts + + 4 + + name + entity.name.type.module.ts + + + + + name + meta.export.default.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+))) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + keyword.control.type.ts + + 3 + + name + keyword.operator.assignment.ts + + 4 + + name + keyword.control.default.ts + + + end + (?=$|;|^\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)) + patterns + + + include + #interface-declaration + + + include + #expression + + + + + name + meta.export.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + beginCaptures + + 1 + + name + keyword.control.export.ts + + 2 + + name + keyword.control.type.ts + + + end + (?=$|;|^\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)) + patterns + + + include + #import-export-declaration + + + + + + import-export-declaration + + patterns + + + include + #comment + + + include + #string + + + include + #import-export-block + + + name + keyword.control.from.ts + match + \bfrom\b + + + include + #import-export-assert-clause + + + include + #import-export-clause + + + + import-export-assert-clause + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(with)|(assert))\s*(\{) + beginCaptures + + 1 + + name + keyword.control.with.ts + + 2 + + name + keyword.control.assert.ts + + 3 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #comment + + + include + #string + + + name + meta.object-literal.key.ts + match + (?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + + + name + punctuation.separator.key-value.ts + match + : + + + + import-export-block + + name + meta.block.ts + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #import-export-clause + + + + import-export-clause + + patterns + + + include + #comment + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))) + captures + + 1 + + name + keyword.control.type.ts + + 2 + + name + keyword.control.default.ts + + 3 + + name + constant.language.import-export-all.ts + + 4 + + name + variable.other.readwrite.ts + + 5 + + name + string.quoted.alias.ts + + 12 + + name + keyword.control.as.ts + + 13 + + name + keyword.control.default.ts + + 14 + + name + variable.other.readwrite.alias.ts + + 15 + + name + string.quoted.alias.ts + + + + + include + #punctuation-comma + + + name + constant.language.import-export-all.ts + match + \* + + + name + keyword.control.default.ts + match + \b(default)\b + + + match + (?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))) + captures + + 1 + + name + keyword.control.type.ts + + 2 + + name + variable.other.readwrite.alias.ts + + 3 + + name + string.quoted.alias.ts + + + + + + switch-statement + + name + switch-statement.expr.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bswitch\s*\() + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #comment + + + name + switch-expression.expr.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(switch)\s*(\() + beginCaptures + + 1 + + name + keyword.control.switch.ts + + 2 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression + + + + + name + switch-block.expr.ts + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + (?=\}) + patterns + + + name + case-clause.expr.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.control.switch.ts + + + end + (?=:) + patterns + + + include + #expression + + + + + begin + (:)\s*(\{) + beginCaptures + + 1 + + name + case-clause.expr.ts punctuation.definition.section.case-statement.ts + + 2 + + name + meta.block.ts punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + meta.block.ts punctuation.definition.block.ts + + + contentName + meta.block.ts + patterns + + + include + #statements + + + + + match + (:) + captures + + 0 + + name + case-clause.expr.ts punctuation.definition.section.case-statement.ts + + + + + include + #statements + + + + + + for-loop + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\()) + beginCaptures + + 0 + + name + keyword.control.loop.ts + + + end + (?<=\)) + patterns + + + include + #comment + + + name + keyword.control.loop.ts + match + await + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #var-expr + + + include + #expression + + + include + #punctuation-semicolon + + + + + + if-statement + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{)) + end + (?=;|$|\}) + patterns + + + include + #comment + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(if)\s*(\() + beginCaptures + + 1 + + name + keyword.control.conditional.ts + + 2 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression + + + + + name + string.regexp.ts + begin + (?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 0 + + name + punctuation.definition.string.begin.ts + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.ts + + 2 + + name + keyword.other.ts + + + patterns + + + include + #regexp + + + + + include + #statements + + + + + + decl-block + + name + meta.block.ts + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #statements + + + + after-operator-block-as-object-literal + + name + meta.objectliteral.ts + begin + (?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{) + beginCaptures + + 1 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #object-member + + + + object-literal + + name + meta.objectliteral.ts + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #object-member + + + + object-member + + patterns + + + include + #comment + + + include + #object-literal-method-declaration + + + name + meta.object.member.ts meta.object-literal.key.ts + begin + (?=\[) + end + (?=:)|((?<=[\]])(?=\s*[\(\<])) + patterns + + + include + #comment + + + include + #array-literal + + + + + name + meta.object.member.ts meta.object-literal.key.ts + begin + (?=[\'\"\`]) + end + (?=:)|((?<=[\'\"\`])(?=((\s*[\(\<,}])|(\s+(as|satisifies)\s+)))) + patterns + + + include + #comment + + + include + #string + + + + + name + meta.object.member.ts meta.object-literal.key.ts + begin + (?x)(?=(\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))) + end + (?=:)|(?=\s*([\(\<,}])|(\s+as|satisifies\s+)) + patterns + + + include + #comment + + + include + #numeric-literal + + + + + name + meta.method.declaration.ts + begin + (?<=[\]\'\"\`])(?=\s*[\(\<]) + end + (?=\}|;|,)|(?<=\}) + patterns + + + include + #function-body + + + + + name + meta.object.member.ts + match + (?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + captures + + 0 + + name + meta.object-literal.key.ts + + 1 + + name + constant.numeric.decimal.ts + + + + + name + meta.object.member.ts + match + (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 0 + + name + meta.object-literal.key.ts + + 1 + + name + entity.name.function.ts + + + + + name + meta.object.member.ts + match + (?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + captures + + 0 + + name + meta.object-literal.key.ts + + + + + name + meta.object.member.ts + begin + \.\.\. + beginCaptures + + 0 + + name + keyword.operator.spread.ts + + + end + (?=,|\}) + patterns + + + include + #expression + + + + + name + meta.object.member.ts + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*) + captures + + 1 + + name + variable.other.readwrite.ts + + + + + name + meta.object.member.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*([,}]|$)) + captures + + 1 + + name + keyword.control.as.ts + + 2 + + name + storage.modifier.ts + + + + + name + meta.object.member.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ + beginCaptures + + 1 + + name + keyword.control.as.ts + + 2 + + name + keyword.control.satisfies.ts + + + end + (?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|^|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisifies)\s+)) + patterns + + + include + #type + + + + + name + meta.object.member.ts + begin + (?=[_$[:alpha:]][_$[:alnum:]]*\s*=) + end + (?=,|\}|$|\/\/|\/\*) + patterns + + + include + #expression + + + + + name + meta.object.member.ts + begin + : + beginCaptures + + 0 + + name + meta.object-literal.key.ts punctuation.separator.key-value.ts + + + end + (?=,|\}) + patterns + + + begin + (?<=:)\s*(async)?(?=\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + + end + (?<=\)) + patterns + + + include + #type-parameters + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + + + begin + (?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + 2 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + begin + (?<=:)\s*(async)?\s*(?=\<\s*$) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + + end + (?<=\>) + patterns + + + include + #type-parameters + + + + + begin + (?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + include + #possibly-arrow-return-type + + + include + #expression + + + + + include + #punctuation-comma + + + include + #decl-block + + + + ternary-expression + + begin + (?!\?\.\s*[^[:digit:]])(\?)(?!\?) + beginCaptures + + 1 + + name + keyword.operator.ternary.ts + + + end + \s*(:) + endCaptures + + 1 + + name + keyword.operator.ternary.ts + + + patterns + + + include + #expression + + + + function-call + + patterns + + + begin + (?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + end + (?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + patterns + + + name + meta.function-call.ts + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)) + end + (?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + patterns + + + include + #function-call-target + + + + + include + #comment + + + include + #function-call-optionals + + + include + #type-arguments + + + include + #paren-expression + + + + + begin + (?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$)) + end + (?<=\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$)) + patterns + + + name + meta.function-call.ts + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)) + end + (?=(<\s*[\{\[\(]\s*$)) + patterns + + + include + #function-call-target + + + + + include + #comment + + + include + #function-call-optionals + + + include + #type-arguments + + + + + + function-call-target + + patterns + + + include + #support-function-call-identifiers + + + name + entity.name.function.ts + match + (\#?[_$[:alpha:]][_$[:alnum:]]*) + + + + function-call-optionals + + patterns + + + name + meta.function-call.ts punctuation.accessor.optional.ts + match + \?\. + + + name + meta.function-call.ts keyword.operator.definiteassignment.ts + match + \! + + + + support-function-call-identifiers + + patterns + + + include + #literal + + + include + #support-objects + + + include + #object-identifiers + + + include + #punctuation-accessor + + + name + keyword.operator.expression.import.ts + match + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*[\(]\s*[\"\'\`])) + + + + new-expr + + name + new.expr.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.new.ts + + + end + (?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(])))) + patterns + + + include + #expression + + + + instanceof-expr + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.expression.instanceof.ts + + + end + (?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|(===|!==|==|!=)|(([\&\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(])))) + patterns + + + include + #type + + + + paren-expression-possibly-arrow + + patterns + + + begin + (?<=[(=,])\s*(async)?(?=\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + + end + (?<=\)) + patterns + + + include + #paren-expression-possibly-arrow-with-typeparameters + + + + + begin + (?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)))\s*$) + beginCaptures + + 1 + + name + storage.modifier.async.ts + + + end + (?<=\)) + patterns + + + include + #paren-expression-possibly-arrow-with-typeparameters + + + + + include + #possibly-arrow-return-type + + + + paren-expression-possibly-arrow-with-typeparameters + + patterns + + + include + #type-parameters + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + + expression-inside-possibly-arrow-parens + + patterns + + + include + #expressionWithoutIdentifiers + + + include + #comment + + + include + #string + + + include + #decorator + + + include + #destructuring-parameter + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+) + captures + + 1 + + name + storage.modifier.ts + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + entity.name.function.ts variable.language.this.ts + + 4 + + name + entity.name.function.ts + + 5 + + name + keyword.operator.optional.ts + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + variable.parameter.ts variable.language.this.ts + + 4 + + name + variable.parameter.ts + + 5 + + name + keyword.operator.optional.ts + + + + + include + #type-annotation + + + include + #variable-initializer + + + name + punctuation.separator.parameter.ts + match + , + + + include + #identifiers + + + include + #expressionPunctuations + + + + paren-expression + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + include + #expression + + + + cast + + patterns + + + name + cast.expr.ts + match + \s*(<)\s*(const)\s*(>) + captures + + 1 + + name + meta.brace.angle.ts + + 2 + + name + storage.modifier.ts + + 3 + + name + meta.brace.angle.ts + + + + + name + cast.expr.ts + begin + (?:(?<!\+\+|--)(?<=^return|[^\._$[:alnum:]]return|^throw|[^\._$[:alnum:]]throw|^yield|[^\._$[:alnum:]]yield|^await|[^\._$[:alnum:]]await|^default|[^\._$[:alnum:]]default|[=(,:>*?\&\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(<)(?!<?\=)(?!\s*$) + beginCaptures + + 1 + + name + meta.brace.angle.ts + + + end + (\>) + endCaptures + + 1 + + name + meta.brace.angle.ts + + + patterns + + + include + #type + + + + + name + cast.expr.ts + begin + (?:(?<=^))\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\s*>) + beginCaptures + + 1 + + name + meta.brace.angle.ts + + + end + (\>) + endCaptures + + 1 + + name + meta.brace.angle.ts + + + patterns + + + include + #type + + + + + + expression-operators + + patterns + + + name + keyword.control.flow.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*) + beginCaptures + + 1 + + name + keyword.control.flow.ts + + + end + \* + endCaptures + + 0 + + name + keyword.generator.asterisk.ts + + + patterns + + + include + #comment + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))? + captures + + 1 + + name + keyword.control.flow.ts + + 2 + + name + keyword.generator.asterisk.ts + + + + + name + keyword.operator.expression.delete.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.expression.in.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\() + + + name + keyword.operator.expression.of.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\() + + + name + keyword.operator.expression.instanceof.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.new.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #typeof-operator + + + name + keyword.operator.expression.void.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*($|[;,:})\]])) + captures + + 1 + + name + keyword.control.as.ts + + 2 + + name + storage.modifier.ts + + + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ + beginCaptures + + 1 + + name + keyword.control.as.ts + + 2 + + name + keyword.control.satisfies.ts + + + end + (?=^|[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisfies)\s+)|(\s+\<)) + patterns + + + include + #type + + + + + name + keyword.operator.spread.ts + match + \.\.\. + + + name + keyword.operator.assignment.compound.ts + match + \*=|(?<!\()/=|%=|\+=|\-= + + + name + keyword.operator.assignment.compound.bitwise.ts + match + \&=|\^=|<<=|>>=|>>>=|\|= + + + name + keyword.operator.bitwise.shift.ts + match + <<|>>>|>> + + + name + keyword.operator.comparison.ts + match + ===|!==|==|!= + + + name + keyword.operator.relational.ts + match + <=|>=|<>|<|> + + + match + (?<=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*]))) + captures + + 1 + + name + keyword.operator.logical.ts + + 2 + + name + keyword.operator.assignment.compound.ts + + 3 + + name + keyword.operator.arithmetic.ts + + + + + name + keyword.operator.logical.ts + match + \!|&&|\|\||\?\? + + + name + keyword.operator.bitwise.ts + match + \&|~|\^|\| + + + name + keyword.operator.assignment.ts + match + \= + + + name + keyword.operator.decrement.ts + match + -- + + + name + keyword.operator.increment.ts + match + \+\+ + + + name + keyword.operator.arithmetic.ts + match + %|\*|/|-|\+ + + + begin + (?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*])))) + end + (?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/))) + endCaptures + + 1 + + name + keyword.operator.assignment.compound.ts + + 2 + + name + keyword.operator.arithmetic.ts + + + patterns + + + include + #comment + + + + + match + (?<=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*]))) + captures + + 1 + + name + keyword.operator.assignment.compound.ts + + 2 + + name + keyword.operator.arithmetic.ts + + + + + + typeof-operator + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 0 + + name + keyword.operator.expression.typeof.ts + + + end + (?=[,);}\]=>:&|{\?]|(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)) + patterns + + + include + #type-arguments + + + include + #expression + + + + literal + + patterns + + + include + #numeric-literal + + + include + #boolean-literal + + + include + #null-literal + + + include + #undefined-literal + + + include + #numericConstant-literal + + + include + #array-literal + + + include + #this-literal + + + include + #super-literal + + + + array-literal + + name + meta.array.literal.ts + begin + \s*(\[) + beginCaptures + + 1 + + name + meta.brace.square.ts + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.ts + + + patterns + + + include + #expression + + + include + #punctuation-comma + + + + numeric-literal + + patterns + + + name + constant.numeric.hex.ts + match + \b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.ts + + + + + name + constant.numeric.binary.ts + match + \b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.ts + + + + + name + constant.numeric.octal.ts + match + \b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.ts + + + + + match + (?x) +(?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$) + captures + + 0 + + name + constant.numeric.decimal.ts + + 1 + + name + meta.delimiter.decimal.period.ts + + 2 + + name + storage.type.numeric.bigint.ts + + 3 + + name + meta.delimiter.decimal.period.ts + + 4 + + name + storage.type.numeric.bigint.ts + + 5 + + name + meta.delimiter.decimal.period.ts + + 6 + + name + storage.type.numeric.bigint.ts + + 7 + + name + storage.type.numeric.bigint.ts + + 8 + + name + meta.delimiter.decimal.period.ts + + 9 + + name + storage.type.numeric.bigint.ts + + 10 + + name + meta.delimiter.decimal.period.ts + + 11 + + name + storage.type.numeric.bigint.ts + + 12 + + name + meta.delimiter.decimal.period.ts + + 13 + + name + storage.type.numeric.bigint.ts + + 14 + + name + storage.type.numeric.bigint.ts + + + + + + boolean-literal + + patterns + + + name + constant.language.boolean.true.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + constant.language.boolean.false.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + null-literal + + name + constant.language.null.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + this-literal + + name + variable.language.this.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))this\b(?!\$) + + super-literal + + name + variable.language.super.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))super\b(?!\$) + + undefined-literal + + name + constant.language.undefined.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + numericConstant-literal + + patterns + + + name + constant.language.nan.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + constant.language.infinity.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + support-objects + + patterns + + + name + variable.language.arguments.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(arguments)\b(?!\$) + + + name + support.class.builtin.ts + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array + |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy + |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray + |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$) + + + name + support.class.error.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$) + + + name + support.class.promise.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Promise)\b(?!\$) + + + name + support.function.ts + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval| + isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\() + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?: + (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp| + expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random| + round|sign|sin|sinh|sqrt|tan|tanh|trunc) + | + (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$) + captures + + 1 + + name + support.constant.math.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.function.math.ts + + 5 + + name + support.constant.property.math.ts + + + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*( + assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log + |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$) + captures + + 1 + + name + support.class.console.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.function.console.ts + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$) + captures + + 1 + + name + support.constant.json.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.function.json.ts + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$) + captures + + 1 + + name + keyword.control.import.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.variable.property.importmeta.ts + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$) + captures + + 1 + + name + keyword.operator.new.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.variable.property.target.ts + + + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?: + (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()) + | + (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$))) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + support.variable.property.ts + + 4 + + name + support.constant.ts + + + + + match + (?x) (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.)) \b (?: + (document|event|navigator|performance|screen|window) + | + (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener + |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule + |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration + |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern + |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent + |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException + |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer + |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry + |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent + |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential + |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync + |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement + |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement + |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement + |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement + |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement + |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement + |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement + |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement + |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement + |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement + |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement + |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase + |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction + |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities + |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess + |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent + |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream + |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent + |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID + |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification + |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential + |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark + |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList + |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent + |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList + |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager + |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource + |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement + |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength + |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio + |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement + |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement + |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement + |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength + |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement + |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio + |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList + |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement + |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement + |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState + |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet + |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable + |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer + |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat + |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES + |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope + |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult + |XSLTProcessor))\b(?!\$) + captures + + 1 + + name + support.variable.dom.ts + + 2 + + name + support.class.dom.ts + + + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?: + (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE + |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR + |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR + |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR) + | + (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName + |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop + |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor + |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption + |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear + |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete + |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset + |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight + |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds + |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize + |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host + |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth + |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext + |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom + |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple + |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName + |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight + |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer + |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling + |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText + |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts + |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove + |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary + |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead + |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile + |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\() + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + support.constant.dom.ts + + 4 + + name + support.variable.property.dom.ts + + + + + name + support.class.node.ts + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream + |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$) + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?: + (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions) + | + (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime) +))?\b(?!\$) + captures + + 1 + + name + support.variable.object.process.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + support.variable.property.process.ts + + 5 + + name + support.function.process.ts + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$) + captures + + 1 + + name + support.type.object.module.ts + + 2 + + name + support.type.object.module.ts + + 3 + + name + punctuation.accessor.ts + + 4 + + name + punctuation.accessor.optional.ts + + 5 + + name + support.type.object.module.ts + + + + + name + support.variable.object.node.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$) + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* +(?: + (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset| + Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove| + Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)| + Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help| + Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate| + Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover| + Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error| + Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort) + ) | + (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages| + scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort| + sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours| + Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)| + Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice| + savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat| + contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup| + createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)| + test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift| + untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse| + print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file| + fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor| + forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert| + abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload| + releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear| + Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)| + Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo| + moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back + ) | + (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append| + appendChild|appendData|before|blur|canPlayType|captureStream| + caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click| + cloneContents|cloneNode|cloneRange|close|closest|collapse| + compareBoundaryPoints|compareDocumentPosition|comparePoint|contains| + convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute| + createAttributeNS|createCaption|createCDATASection|createComment| + createContextualFragment|createDocument|createDocumentFragment| + createDocumentType|createElement|createElementNS|createEntityReference| + createEvent|createExpression|createHTMLDocument|createNodeIterator| + createNSResolver|createProcessingInstruction|createRange|createShadowRoot| + createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete| + deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot| + deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint| + enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen| + exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get| + getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode| + getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads| + getClientRects|getContext|getDestinationInsertionPoints|getElementById| + getElementsByClassName|getElementsByName|getElementsByTagName| + getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate| + getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes| + hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement| + insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData| + insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode| + isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI| + lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild| + moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open| + parentNode|pause|play|postMessage|prepend|preventDefault|previousNode| + previousSibling|probablySupportsContext|queryCommandEnabled| + queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue| + querySelector|querySelectorAll|registerContentHandler|registerElement| + registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute| + removeAttributeNode|removeAttributeNS|removeChild|removeEventListener| + removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity| + requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView| + scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute| + setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture| + setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem| + setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore| + slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation| + submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob| + toDataURL|toggle|toString|values|write|writeln + ) | + (all|catch|finally|race|reject|resolve|then + ) +)(?=\s*\() + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + support.function.event-handler.ts + + 4 + + name + support.function.ts + + 5 + + name + support.function.dom.ts + + 6 + + name + support.function.promise.ts + + + + + + identifiers + + patterns + + + include + #object-identifiers + + + match + (?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | + +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + entity.name.function.ts + + + + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]]) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + variable.other.constant.property.ts + + + + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + variable.other.property.ts + + + + + name + variable.other.constant.ts + match + ([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]]) + + + name + variable.other.readwrite.ts + match + [_$[:alpha:]][_$[:alnum:]]* + + + + object-identifiers + + patterns + + + name + support.class.ts + match + ([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$)) + + + match + (?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?: + (\#?[[:upper:]][_$[:digit:][:upper:]]*) | + (\#?[_$[:alpha:]][_$[:alnum:]]*) +)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + 3 + + name + variable.other.constant.object.property.ts + + 4 + + name + variable.other.object.property.ts + + + + + match + (?x)(?: + ([[:upper:]][_$[:digit:][:upper:]]*) | + ([_$[:alpha:]][_$[:alnum:]]*) +)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + variable.other.constant.object.ts + + 2 + + name + variable.other.object.ts + + + + + + type-annotation + + patterns + + + name + meta.type.annotation.ts + begin + (:)(?=\s*\S) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?<![:|&])(?!\s*[|&]\s+)((?=^|[,);\}\]]|//)|(?==[^>])|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{))) + patterns + + + include + #type + + + + + name + meta.type.annotation.ts + begin + (:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?<![:|&])((?=[,);\}\]]|\/\/)|(?==[^>])|(?=^\s*$)|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{))) + patterns + + + include + #type + + + + + + parameter-type-annotation + + patterns + + + name + meta.type.annotation.ts + begin + (:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?=[,)])|(?==[^>]) + patterns + + + include + #type + + + + + + return-type + + patterns + + + name + meta.return.type.ts + begin + (?<=\))\s*(:)(?=\s*\S) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?<![:|&])(?=$|^|[{};,]|//) + patterns + + + include + #return-type-core + + + + + name + meta.return.type.ts + begin + (?<=\))\s*(:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?<![:|&])((?=[{};,]|//|^\s*$)|((?<=\S)(?=\s*$))) + patterns + + + include + #return-type-core + + + + + + return-type-core + + patterns + + + include + #comment + + + begin + (?<=[:|&])(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + arrow-return-type + + name + meta.return.type.arrow.ts + begin + (?<=\))\s*(:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.ts + + + end + (?==>|\{|(^\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+)) + patterns + + + include + #arrow-return-type-body + + + + possibly-arrow-return-type + + begin + (?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>) + beginCaptures + + 1 + + name + meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts + + + end + (?==>|\{|(^\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+)) + contentName + meta.arrow.ts meta.return.type.arrow.ts + patterns + + + include + #arrow-return-type-body + + + + arrow-return-type-body + + patterns + + + begin + (?<=[:])(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + type-parameters + + name + meta.type.parameters.ts + begin + (<) + beginCaptures + + 1 + + name + punctuation.definition.typeparameters.begin.ts + + + end + (>) + endCaptures + + 1 + + name + punctuation.definition.typeparameters.end.ts + + + patterns + + + include + #comment + + + name + storage.modifier.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #type + + + include + #punctuation-comma + + + name + keyword.operator.assignment.ts + match + (=)(?!>) + + + + type-arguments + + name + meta.type.parameters.ts + begin + \< + beginCaptures + + 0 + + name + punctuation.definition.typeparameters.begin.ts + + + end + \> + endCaptures + + 0 + + name + punctuation.definition.typeparameters.end.ts + + + patterns + + + include + #type-arguments-body + + + + type-arguments-body + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 0 + + name + keyword.operator.type.ts + + + + + include + #type + + + include + #punctuation-comma + + + + type + + patterns + + + include + #comment + + + include + #type-string + + + include + #numeric-literal + + + include + #type-primitive + + + include + #type-builtin-literals + + + include + #type-parameters + + + include + #type-tuple + + + include + #type-object + + + include + #type-operators + + + include + #type-conditional + + + include + #type-fn-type-parameters + + + include + #type-paren-or-function-parameters + + + include + #type-function-return-type + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + captures + + 1 + + name + storage.modifier.ts + + + + + include + #type-name + + + + type-primitive + + name + support.type.primitive.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + type-builtin-literals + + name + support.type.builtin.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + type-tuple + + name + meta.type.tuple.ts + begin + \[ + beginCaptures + + 0 + + name + meta.brace.square.ts + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.ts + + + patterns + + + name + keyword.operator.rest.ts + match + \.\.\. + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:) + captures + + 1 + + name + entity.name.label.ts + + 2 + + name + keyword.operator.optional.ts + + 3 + + name + punctuation.separator.label.ts + + + + + include + #type + + + include + #punctuation-comma + + + + type-object + + name + meta.object.type.ts + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.ts + + + patterns + + + include + #comment + + + include + #method-declaration + + + include + #indexer-declaration + + + include + #indexer-mapped-type-declaration + + + include + #field-declaration + + + include + #type-annotation + + + begin + \.\.\. + beginCaptures + + 0 + + name + keyword.operator.spread.ts + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #type + + + + + include + #punctuation-comma + + + include + #punctuation-semicolon + + + include + #type + + + + type-conditional + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends)\s+ + beginCaptures + + 1 + + name + storage.modifier.ts + + + end + (?<=:) + patterns + + + begin + \? + beginCaptures + + 0 + + name + keyword.operator.ternary.ts + + + end + : + endCaptures + + 0 + + name + keyword.operator.ternary.ts + + + patterns + + + include + #type + + + + + include + #type + + + + + + type-paren-or-function-parameters + + name + meta.type.paren.cover.ts + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.ts + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.ts + + + patterns + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?[\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))))) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + entity.name.function.ts variable.language.this.ts + + 4 + + name + entity.name.function.ts + + 5 + + name + keyword.operator.optional.ts + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:) + captures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.operator.rest.ts + + 3 + + name + variable.parameter.ts variable.language.this.ts + + 4 + + name + variable.parameter.ts + + 5 + + name + keyword.operator.optional.ts + + + + + include + #type-annotation + + + name + punctuation.separator.parameter.ts + match + , + + + include + #type + + + + type-fn-type-parameters + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b(?=\s*\<) + beginCaptures + + 1 + + name + meta.type.constructor.ts storage.modifier.ts + + 2 + + name + meta.type.constructor.ts keyword.control.new.ts + + + end + (?<=>) + patterns + + + include + #comment + + + include + #type-parameters + + + + + name + meta.type.constructor.ts + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b\s*(?=\() + beginCaptures + + 1 + + name + storage.modifier.ts + + 2 + + name + keyword.control.new.ts + + + end + (?<=\)) + patterns + + + include + #function-parameters + + + + + name + meta.type.function.ts + begin + (?x)( + (?= + [(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + ) + ) +) + end + (?<=\)) + patterns + + + include + #function-parameters + + + + + + type-function-return-type + + patterns + + + name + meta.type.function.return.ts + begin + (=>)(?=\s*\S) + beginCaptures + + 1 + + name + storage.type.function.arrow.ts + + + end + (?<!=>)(?<![|&])(?=[,\]\)\{\}=;>:\?]|//|$) + patterns + + + include + #type-function-return-type-core + + + + + name + meta.type.function.return.ts + begin + => + beginCaptures + + 0 + + name + storage.type.function.arrow.ts + + + end + (?<!=>)(?<![|&])((?=[,\]\)\{\}=;:\?>]|//|^\s*$)|((?<=\S)(?=\s*$))) + patterns + + + include + #type-function-return-type-core + + + + + + type-function-return-type-core + + patterns + + + include + #comment + + + begin + (?<==>)(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + type-operators + + patterns + + + include + #typeof-operator + + + include + #type-infer + + + begin + ([&|])(?=\s*\{) + beginCaptures + + 0 + + name + keyword.operator.type.ts + + + end + (?<=\}) + patterns + + + include + #type-object + + + + + begin + [&|] + beginCaptures + + 0 + + name + keyword.operator.type.ts + + + end + (?=\S) + + + name + keyword.operator.expression.keyof.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.ternary.ts + match + (\?|\:) + + + name + keyword.operator.expression.import.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + + + + type-infer + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))? + name + meta.type.infer.ts + captures + + 1 + + name + keyword.operator.expression.infer.ts + + 2 + + name + entity.name.type.ts + + 3 + + name + keyword.operator.expression.extends.ts + + + + + + type-predicate-operator + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.operator.type.asserts.ts + + 2 + + name + variable.parameter.ts variable.language.this.ts + + 3 + + name + variable.parameter.ts + + 4 + + name + keyword.operator.expression.is.ts + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.operator.type.asserts.ts + + 2 + + name + variable.parameter.ts variable.language.this.ts + + 3 + + name + variable.parameter.ts + + + + + name + keyword.operator.type.asserts.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.expression.is.ts + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + type-name + + patterns + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(<) + captures + + 1 + + name + entity.name.type.module.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + 4 + + name + meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + + + end + (>) + endCaptures + + 1 + + name + meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + + + contentName + meta.type.parameters.ts + patterns + + + include + #type-arguments-body + + + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(<) + beginCaptures + + 1 + + name + entity.name.type.ts + + 2 + + name + meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts + + + end + (>) + endCaptures + + 1 + + name + meta.type.parameters.ts punctuation.definition.typeparameters.end.ts + + + contentName + meta.type.parameters.ts + patterns + + + include + #type-arguments-body + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + entity.name.type.module.ts + + 2 + + name + punctuation.accessor.ts + + 3 + + name + punctuation.accessor.optional.ts + + + + + name + entity.name.type.ts + match + [_$[:alpha:]][_$[:alnum:]]* + + + + punctuation-comma + + name + punctuation.separator.comma.ts + match + , + + punctuation-semicolon + + name + punctuation.terminator.statement.ts + match + ; + + punctuation-accessor + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + punctuation.accessor.ts + + 2 + + name + punctuation.accessor.optional.ts + + + + string + + patterns + + + include + #qstring-single + + + include + #qstring-double + + + include + #template + + + + qstring-double + + name + string.quoted.double.ts + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.ts + + + end + (")|((?:[^\\\n])$) + endCaptures + + 1 + + name + punctuation.definition.string.end.ts + + 2 + + name + invalid.illegal.newline.ts + + + patterns + + + include + #string-character-escape + + + + qstring-single + + name + string.quoted.single.ts + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.ts + + + end + (\')|((?:[^\\\n])$) + endCaptures + + 1 + + name + punctuation.definition.string.end.ts + + 2 + + name + invalid.illegal.newline.ts + + + patterns + + + include + #string-character-escape + + + + string-character-escape + + name + constant.character.escape.ts + match + \\(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]?|.|$) + + template + + patterns + + + include + #template-call + + + contentName + string.template.ts + begin + ([_$[:alpha:]][_$[:alnum:]]*)?(`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.ts + + 2 + + name + string.template.ts punctuation.definition.string.template.begin.ts + + + end + ` + endCaptures + + 0 + + name + string.template.ts punctuation.definition.string.template.end.ts + + + patterns + + + include + #template-substitution-element + + + include + #string-character-escape + + + + + + template-call + + patterns + + + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`) + end + (?=`) + patterns + + + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)) + end + (?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`) + patterns + + + include + #support-function-call-identifiers + + + name + entity.name.function.tagged-template.ts + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + + include + #type-arguments + + + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.ts + + + end + (?=`) + patterns + + + include + #type-arguments + + + + + + template-substitution-element + + name + meta.template.expression.ts + begin + \$\{ + beginCaptures + + 0 + + name + punctuation.definition.template-expression.begin.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.template-expression.end.ts + + + patterns + + + include + #expression + + + contentName + meta.embedded.line.ts + + type-string + + patterns + + + include + #qstring-single + + + include + #qstring-double + + + include + #template-type + + + + template-type + + patterns + + + include + #template-call + + + contentName + string.template.ts + begin + ([_$[:alpha:]][_$[:alnum:]]*)?(`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.ts + + 2 + + name + string.template.ts punctuation.definition.string.template.begin.ts + + + end + ` + endCaptures + + 0 + + name + string.template.ts punctuation.definition.string.template.end.ts + + + patterns + + + include + #template-type-substitution-element + + + include + #string-character-escape + + + + + + template-type-substitution-element + + name + meta.template.expression.ts + begin + \$\{ + beginCaptures + + 0 + + name + punctuation.definition.template-expression.begin.ts + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.template-expression.end.ts + + + patterns + + + include + #type + + + contentName + meta.embedded.line.ts + + regex + + patterns + + + name + string.regexp.ts + begin + (?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 1 + + name + punctuation.definition.string.begin.ts + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.ts + + 2 + + name + keyword.other.ts + + + patterns + + + include + #regexp + + + + + name + string.regexp.ts + begin + ((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 0 + + name + punctuation.definition.string.begin.ts + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.ts + + 2 + + name + keyword.other.ts + + + patterns + + + include + #regexp + + + + + + regexp + + patterns + + + name + keyword.control.anchor.regexp + match + \\[bB]|\^|\$ + + + match + \\[1-9]\d*|\\k<([a-zA-Z_$][\w$]*)> + captures + + 0 + + name + keyword.other.back-reference.regexp + + 1 + + name + variable.other.regexp + + + + + name + keyword.operator.quantifier.regexp + match + [?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\?? + + + name + keyword.operator.or.regexp + match + \| + + + name + meta.group.assertion.regexp + begin + (\()((\?=)|(\?!)|(\?<=)|(\?<!)) + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 2 + + name + punctuation.definition.group.assertion.regexp + + 3 + + name + meta.assertion.look-ahead.regexp + + 4 + + name + meta.assertion.negative-look-ahead.regexp + + 5 + + name + meta.assertion.look-behind.regexp + + 6 + + name + meta.assertion.negative-look-behind.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + patterns + + + include + #regexp + + + + + name + meta.group.regexp + begin + \((?:(\?:)|(?:\?<([a-zA-Z_$][\w$]*)>))? + beginCaptures + + 0 + + name + punctuation.definition.group.regexp + + 1 + + name + punctuation.definition.group.no-capture.regexp + + 2 + + name + variable.other.regexp + + + end + \) + endCaptures + + 0 + + name + punctuation.definition.group.regexp + + + patterns + + + include + #regexp + + + + + name + constant.other.character-class.set.regexp + begin + (\[)(\^)? + beginCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + 2 + + name + keyword.operator.negation.regexp + + + end + (\]) + endCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + + patterns + + + name + constant.other.character-class.range.regexp + match + (?:.|(\\(?:[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])|(\\.)) + captures + + 1 + + name + constant.character.numeric.regexp + + 2 + + name + constant.character.control.regexp + + 3 + + name + constant.character.escape.backslash.regexp + + 4 + + name + constant.character.numeric.regexp + + 5 + + name + constant.character.control.regexp + + 6 + + name + constant.character.escape.backslash.regexp + + + + + include + #regex-character-class + + + + + include + #regex-character-class + + + + regex-character-class + + patterns + + + name + constant.other.character-class.regexp + match + \\[wWsSdDtrnvf]|\. + + + name + constant.character.numeric.regexp + match + \\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}) + + + name + constant.character.control.regexp + match + \\c[A-Z] + + + name + constant.character.escape.backslash.regexp + match + \\. + + + + comment + + patterns + + + name + comment.block.documentation.ts + begin + /\*\*(?!/) + beginCaptures + + 0 + + name + punctuation.definition.comment.ts + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.ts + + + patterns + + + include + #docblock + + + + + name + comment.block.ts + begin + (/\*)(?:\s*((@)internal)(?=\s|(\*/)))? + beginCaptures + + 1 + + name + punctuation.definition.comment.ts + + 2 + + name + storage.type.internaldeclaration.ts + + 3 + + name + punctuation.decorator.internaldeclaration.ts + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.ts + + + + + begin + (^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.ts + + 2 + + name + comment.line.double-slash.ts + + 3 + + name + punctuation.definition.comment.ts + + 4 + + name + storage.type.internaldeclaration.ts + + 5 + + name + punctuation.decorator.internaldeclaration.ts + + + end + (?=$) + contentName + comment.line.double-slash.ts + + + + single-line-comment-consuming-line-ending + + begin + (^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.ts + + 2 + + name + comment.line.double-slash.ts + + 3 + + name + punctuation.definition.comment.ts + + 4 + + name + storage.type.internaldeclaration.ts + + 5 + + name + punctuation.decorator.internaldeclaration.ts + + + end + (?=^) + contentName + comment.line.double-slash.ts + + directives + + name + comment.line.triple-slash.directive.ts + begin + ^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/>\s*$) + beginCaptures + + 1 + + name + punctuation.definition.comment.ts + + + end + (?=$) + patterns + + + name + meta.tag.ts + begin + (<)(reference|amd-dependency|amd-module) + beginCaptures + + 1 + + name + punctuation.definition.tag.directive.ts + + 2 + + name + entity.name.tag.directive.ts + + + end + /> + endCaptures + + 0 + + name + punctuation.definition.tag.directive.ts + + + patterns + + + name + entity.other.attribute-name.directive.ts + match + path|types|no-default-lib|lib|name|resolution-mode + + + name + keyword.operator.assignment.ts + match + = + + + include + #string + + + + + + docblock + + patterns + + + match + (?x) +((@)(?:access|api)) +\s+ +(private|protected|public) +\b + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + constant.language.access-type.jsdoc + + + + + match + (?x) +((@)author) +\s+ +( + [^@\s<>*/] + (?:[^@<>*/]|\*[^/])* +) +(?: + \s* + (<) + ([^>\s]+) + (>) +)? + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + 4 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 5 + + name + constant.other.email.link.underline.jsdoc + + 6 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + + + match + (?x) +((@)borrows) \s+ +((?:[^@\s*/]|\*[^/])+) # <that namepath> +\s+ (as) \s+ # as +((?:[^@\s*/]|\*[^/])+) # <this namepath> + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + 4 + + name + keyword.operator.control.jsdoc + + 5 + + name + entity.name.type.instance.jsdoc + + + + + name + meta.example.jsdoc + begin + ((@)example)\s+ + end + (?=@|\*/) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + patterns + + + match + ^\s\*\s+ + + + contentName + constant.other.description.jsdoc + begin + \G(<)caption(>) + beginCaptures + + 0 + + name + entity.name.tag.inline.jsdoc + + 1 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + end + (</)caption(>)|(?=\*/) + endCaptures + + 0 + + name + entity.name.tag.inline.jsdoc + + 1 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + + + match + [^\s@*](?:[^*]|\*[^/])* + captures + + 0 + + name + source.embedded.ts + + + + + + + match + (?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + constant.language.symbol-type.jsdoc + + + + + match + (?x) +((@)see) +\s+ +(?: + # URL + ( + (?=https?://) + (?:[^\s*]|\*[^/])+ + ) + | + # JSDoc namepath + ( + (?! + # Avoid matching bare URIs (also acceptable as links) + https?:// + | + # Avoid matching {@inline tags}; we match those below + (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag} + {@(?:link|linkcode|linkplain|tutorial)\b + ) + # Matched namepath + (?:[^@\s*/]|\*[^/])+ + ) +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.link.underline.jsdoc + + 4 + + name + entity.name.type.instance.jsdoc + + + + + match + (?x) +((@)template) +\s+ +# One or more valid identifiers +( + [A-Za-z_$] # First character: non-numeric word character + [\w$.\[\]]* # Rest of identifier + (?: # Possible list of additional identifiers + \s* , \s* + [A-Za-z_$] + [\w$.\[\]]* + )* +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + begin + (?x)((@)template)\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + variable.other.jsdoc + match + ([A-Za-z_$][\w$.\[\]]*) + + + + + match + (?x) +( + (@) + (?:arg|argument|const|constant|member|namespace|param|var) +) +\s+ +( + [A-Za-z_$] + [\w$.\[\]]* +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + begin + ((@)typedef)\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + entity.name.type.instance.jsdoc + match + (?:[^@\s*/]|\*[^/])+ + + + + + begin + ((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + variable.other.jsdoc + match + ([A-Za-z_$][\w$.\[\]]*) + + + name + variable.other.jsdoc + match + (?x) +(\[)\s* +[\w$]+ +(?: + (?:\[\])? # Foo[ ].bar properties within an array + \. # Foo.Bar namespaced parameter + [\w$]+ +)* +(?: + \s* + (=) # [foo=bar] Default parameter value + \s* + ( + # The inner regexes are to stop the match early at */ and to not stop at escaped quotes + (?> + "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted + '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted + \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal + (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else + )* + ) +)? +\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/)) + captures + + 1 + + name + punctuation.definition.optional-value.begin.bracket.square.jsdoc + + 2 + + name + keyword.operator.assignment.jsdoc + + 3 + + name + source.embedded.ts + + 4 + + name + punctuation.definition.optional-value.end.bracket.square.jsdoc + + 5 + + name + invalid.illegal.syntax.jsdoc + + + + + + + begin + (?x) +( + (@) + (?:define|enum|exception|export|extends|lends|implements|modifies + |namespace|private|protected|returns?|satisfies|suppress|this|throws|type + |yields?) +) +\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + + + match + (?x) +( + (@) + (?:alias|augments|callback|constructs|emits|event|fires|exports? + |extends|external|function|func|host|lends|listens|interface|memberof!? + |method|module|mixes|mixin|name|requires|see|this|typedef|uses) +) +\s+ +( + (?: + [^{}@\s*] | \*[^/] + )+ +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + + + + contentName + variable.other.jsdoc + begin + ((@)(?:default(?:value)?|license|version))\s+(([''"])) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + 4 + + name + punctuation.definition.string.begin.jsdoc + + + end + (\3)|(?=$|\*/) + endCaptures + + 0 + + name + variable.other.jsdoc + + 1 + + name + punctuation.definition.string.end.jsdoc + + + + + match + ((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + name + storage.type.class.jsdoc + match + (?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 + captures + + 1 + + name + punctuation.definition.block.tag.jsdoc + + + + + include + #inline-tags + + + match + ((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + + + + brackets + + patterns + + + begin + { + end + }|(?=\*/) + patterns + + + include + #brackets + + + + + begin + \[ + end + \]|(?=\*/) + patterns + + + include + #brackets + + + + + + inline-tags + + patterns + + + name + constant.other.description.jsdoc + match + (\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial)) + captures + + 1 + + name + punctuation.definition.bracket.square.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.square.end.jsdoc + + + + + name + entity.name.type.instance.jsdoc + begin + ({)((@)(?:link(?:code|plain)?|tutorial))\s* + beginCaptures + + 1 + + name + punctuation.definition.bracket.curly.begin.jsdoc + + 2 + + name + storage.type.class.jsdoc + + 3 + + name + punctuation.definition.inline.tag.jsdoc + + + end + }|(?=\*/) + endCaptures + + 0 + + name + punctuation.definition.bracket.curly.end.jsdoc + + + patterns + + + match + \G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)? + captures + + 1 + + name + variable.other.link.underline.jsdoc + + 2 + + name + punctuation.separator.pipe.jsdoc + + + + + match + \G((?:[^{}@\s|*]|\*[^/])+)(\|)? + captures + + 1 + + name + variable.other.description.jsdoc + + 2 + + name + punctuation.separator.pipe.jsdoc + + + + + + + + jsdoctype + + patterns + + + name + invalid.illegal.type.jsdoc + match + \G{(?:[^}*]|\*[^/}])+$ + + + contentName + entity.name.type.instance.jsdoc + begin + \G({) + beginCaptures + + 0 + + name + entity.name.type.instance.jsdoc + + 1 + + name + punctuation.definition.bracket.curly.begin.jsdoc + + + end + ((}))\s*|(?=\*/) + endCaptures + + 1 + + name + entity.name.type.instance.jsdoc + + 2 + + name + punctuation.definition.bracket.curly.end.jsdoc + + + patterns + + + include + #brackets + + + + + + + + diff --git a/src/file-viewer/highlight-grammar/jsx.plist b/src/file-viewer/highlight-grammar/jsx.plist new file mode 100644 index 0000000000000000000000000000000000000000..d58ca5978bd414060cce379de8a1af72f6c8849e --- /dev/null +++ b/src/file-viewer/highlight-grammar/jsx.plist @@ -0,0 +1,10281 @@ + + + + + name + JavaScriptReact + scopeName + source.jsx + fileTypes + + tsx + + uuid + 805375ec-d614-41f5-8993-5843fe63ea82 + patterns + + + include + #directives + + + include + #statements + + + include + #shebang + + + repository + + shebang + + name + comment.line.shebang.tsx + match + \A(#!).*(?=$) + captures + + 1 + + name + punctuation.definition.comment.tsx + + + + statements + + patterns + + + include + #declaration + + + include + #control-statement + + + include + #after-operator-block-as-object-literal + + + include + #decl-block + + + include + #label + + + include + #expression + + + include + #punctuation-semicolon + + + include + #string + + + include + #comment + + + + declaration + + patterns + + + include + #decorator + + + include + #var-expr + + + include + #function-declaration + + + include + #class-declaration + + + include + #interface-declaration + + + include + #enum-declaration + + + include + #namespace-declaration + + + include + #type-alias-declaration + + + include + #import-equals-declaration + + + include + #import-declaration + + + include + #export-declaration + + + name + storage.modifier.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(declare|export)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + control-statement + + patterns + + + include + #switch-statement + + + include + #for-loop + + + name + keyword.control.trycatch.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|goto)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.control.loop.tsx + + 2 + + name + entity.name.label.tsx + + + + + name + keyword.control.loop.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(return)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 0 + + name + keyword.control.flow.tsx + + + end + (?=[;}]|$|;|^\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)) + patterns + + + include + #expression + + + + + name + keyword.control.switch.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #if-statement + + + name + keyword.control.conditional.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(else|if)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.control.with.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(with)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.control.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(package)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.other.debugger.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(debugger)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + label + + patterns + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*\{) + beginCaptures + + 1 + + name + entity.name.label.tsx + + 2 + + name + punctuation.separator.label.tsx + + + end + (?<=\}) + patterns + + + include + #decl-block + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(:) + captures + + 1 + + name + entity.name.label.tsx + + 2 + + name + punctuation.separator.label.tsx + + + + + + expression + + patterns + + + include + #expressionWithoutIdentifiers + + + include + #identifiers + + + include + #expressionPunctuations + + + + expressionWithoutIdentifiers + + patterns + + + include + #jsx + + + include + #string + + + include + #regex + + + include + #comment + + + include + #function-expression + + + include + #class-expression + + + include + #arrow-function + + + include + #paren-expression-possibly-arrow + + + include + #cast + + + include + #ternary-expression + + + include + #new-expr + + + include + #instanceof-expr + + + include + #object-literal + + + include + #expression-operators + + + include + #function-call + + + include + #literal + + + include + #support-objects + + + include + #paren-expression + + + + expressionPunctuations + + patterns + + + include + #punctuation-comma + + + include + #punctuation-accessor + + + + decorator + + name + meta.decorator.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))\@ + beginCaptures + + 0 + + name + punctuation.decorator.tsx + + + end + (?=\s) + patterns + + + include + #expression + + + + var-expr + + patterns + + + name + meta.var.expr.tsx + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^let|[^\._$[:alnum:]]let|^var|[^\._$[:alnum:]]var)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(var|let)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.tsx + + + end + (?=\S) + + + include + #destructuring-variable + + + include + #var-single-variable + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*(?=$|\/\/) + beginCaptures + + 1 + + name + punctuation.separator.comma.tsx + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #destructuring-variable + + + include + #var-single-variable + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + name + meta.var.expr.tsx + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.tsx + + + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))((?=^|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^const|[^\._$[:alnum:]]const)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(const(?!\s+enum\b))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.tsx + + + end + (?=\S) + + + include + #destructuring-const + + + include + #var-single-const + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*(?=$|\/\/) + beginCaptures + + 1 + + name + punctuation.separator.comma.tsx + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #destructuring-const + + + include + #var-single-const + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + name + meta.var.expr.tsx + begin + (?=(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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:]])(?:(?=\.\.\.)|(?!\.))) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.tsx + + + end + (?!(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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:]])(?:(?=\.\.\.)|(?!\.)))((?=;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))|((?<!^using|[^\._$[:alnum:]]using|^await\s+using|[^\._$[:alnum:]]await\s+using)(?=\s*$))) + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\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* + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.tsx + + + end + (?=\S) + + + include + #var-single-const + + + include + #variable-initializer + + + include + #comment + + + begin + (,)\s*((?!\S)|(?=\/\/)) + beginCaptures + + 1 + + name + punctuation.separator.comma.tsx + + + end + (?<!,)(((?==|;|}|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)|^\s*$))|((?<=\S)(?=\s*$))) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #var-single-const + + + include + #punctuation-comma + + + + + include + #punctuation-comma + + + + + + var-single-variable + + patterns + + + name + meta.var-single-variable.expr.tsx + begin + (?x)([_$[:alpha:]][_$[:alnum:]]*)(\!)?(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + beginCaptures + + 1 + + name + meta.definition.variable.tsx entity.name.function.tsx + + 2 + + name + keyword.operator.definiteassignment.tsx + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.tsx + begin + ([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])(\!)? + beginCaptures + + 1 + + name + meta.definition.variable.tsx variable.other.constant.tsx + + 2 + + name + keyword.operator.definiteassignment.tsx + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.tsx + begin + ([_$[:alpha:]][_$[:alnum:]]*)(\!)? + beginCaptures + + 1 + + name + meta.definition.variable.tsx variable.other.readwrite.tsx + + 2 + + name + keyword.operator.definiteassignment.tsx + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + + var-single-const + + patterns + + + name + meta.var-single-variable.expr.tsx + begin + (?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + beginCaptures + + 1 + + name + meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + name + meta.var-single-variable.expr.tsx + begin + ([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 1 + + name + meta.definition.variable.tsx variable.other.constant.tsx + + + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + patterns + + + include + #var-single-variable-type-annotation + + + + + + var-single-variable-type-annotation + + patterns + + + include + #type-annotation + + + include + #string + + + include + #comment + + + + destructuring-variable + + patterns + + + name + meta.object-binding-pattern-variable.tsx + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #object-binding-pattern + + + include + #type-annotation + + + include + #comment + + + + + name + meta.array-binding-pattern-variable.tsx + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #array-binding-pattern + + + include + #type-annotation + + + include + #comment + + + + + + destructuring-const + + patterns + + + name + meta.object-binding-pattern-variable.tsx + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\{) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #object-binding-pattern-const + + + include + #type-annotation + + + include + #comment + + + + + name + meta.array-binding-pattern-variable.tsx + begin + (?<!=|:|^of|[^\._$[:alnum:]]of|^in|[^\._$[:alnum:]]in)\s*(?=\[) + end + (?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #array-binding-pattern-const + + + include + #type-annotation + + + include + #comment + + + + + + object-binding-element + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #binding-element + + + + + include + #object-binding-pattern + + + include + #destructuring-variable-rest + + + include + #variable-initializer + + + include + #punctuation-comma + + + + object-binding-element-const + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #binding-element-const + + + + + include + #object-binding-pattern-const + + + include + #destructuring-variable-rest-const + + + include + #variable-initializer + + + include + #punctuation-comma + + + + object-binding-element-propertyName + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (:) + endCaptures + + 0 + + name + punctuation.destructuring.tsx + + + patterns + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + name + variable.object.property.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + binding-element + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #object-binding-pattern + + + include + #array-binding-pattern + + + include + #destructuring-variable-rest + + + include + #variable-initializer + + + + binding-element-const + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #object-binding-pattern-const + + + include + #array-binding-pattern-const + + + include + #destructuring-variable-rest-const + + + include + #variable-initializer + + + + destructuring-variable-rest + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + meta.definition.variable.tsx variable.other.readwrite.tsx + + + + destructuring-variable-rest-const + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + meta.definition.variable.tsx variable.other.constant.tsx + + + + object-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.object.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.tsx + + + patterns + + + include + #object-binding-element + + + + object-binding-pattern-const + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.object.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.tsx + + + patterns + + + include + #object-binding-element-const + + + + array-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.array.tsx + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.tsx + + + patterns + + + include + #binding-element + + + include + #punctuation-comma + + + + array-binding-pattern-const + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.array.tsx + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.tsx + + + patterns + + + include + #binding-element-const + + + include + #punctuation-comma + + + + parameter-name + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+) + captures + + 1 + + name + storage.modifier.tsx + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + entity.name.function.tsx variable.language.this.tsx + + 4 + + name + entity.name.function.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + variable.parameter.tsx variable.language.this.tsx + + 4 + + name + variable.parameter.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + + destructuring-parameter + + patterns + + + name + meta.parameter.object-binding-pattern.tsx + begin + (?<!=|:)\s*(?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.object.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.tsx + + + patterns + + + include + #parameter-object-binding-element + + + + + name + meta.paramter.array-binding-pattern.tsx + begin + (?<!=|:)\s*(?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.array.tsx + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.tsx + + + patterns + + + include + #parameter-binding-element + + + include + #punctuation-comma + + + + + + parameter-object-binding-element + + patterns + + + include + #comment + + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(:)) + end + (?=,|\}) + patterns + + + include + #object-binding-element-propertyName + + + include + #parameter-binding-element + + + include + #paren-expression + + + + + include + #parameter-object-binding-pattern + + + include + #destructuring-parameter-rest + + + include + #variable-initializer + + + include + #punctuation-comma + + + + parameter-binding-element + + patterns + + + include + #comment + + + include + #string + + + include + #numeric-literal + + + include + #regex + + + include + #parameter-object-binding-pattern + + + include + #parameter-array-binding-pattern + + + include + #destructuring-parameter-rest + + + include + #variable-initializer + + + + destructuring-parameter-rest + + match + (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + variable.parameter.tsx + + + + parameter-object-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\{) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.object.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.object.tsx + + + patterns + + + include + #parameter-object-binding-element + + + + parameter-array-binding-pattern + + begin + (?:(\.\.\.)\s*)?(\[) + beginCaptures + + 1 + + name + keyword.operator.rest.tsx + + 2 + + name + punctuation.definition.binding-pattern.array.tsx + + + end + \] + endCaptures + + 0 + + name + punctuation.definition.binding-pattern.array.tsx + + + patterns + + + include + #parameter-binding-element + + + include + #punctuation-comma + + + + field-declaration + + name + meta.field.declaration.tsx + begin + (?x)(?<!\()(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s+)?(?=\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|\}|$)) + beginCaptures + + 1 + + name + storage.modifier.tsx + + + end + (?x)(?=\}|;|,|$|(^(?!\s*((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|(\#?[_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(?:(?:(\?)|(\!))\s*)?(=|:|;|,|$))))|(?<=\}) + patterns + + + include + #variable-initializer + + + include + #type-annotation + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + include + #comment + + + match + (?x)(\#?[_$[:alpha:]][_$[:alnum:]]*)(?:(\?)|(\!))?(?=\s*\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + meta.definition.property.tsx entity.name.function.tsx + + 2 + + name + keyword.operator.optional.tsx + + 3 + + name + keyword.operator.definiteassignment.tsx + + + + + name + meta.definition.property.tsx variable.object.property.tsx + match + \#?[_$[:alpha:]][_$[:alnum:]]* + + + name + keyword.operator.optional.tsx + match + \? + + + name + keyword.operator.definiteassignment.tsx + match + \! + + + + variable-initializer + + patterns + + + begin + (?<!=|!)(=)(?!=)(?=\s*\S)(?!\s*.*=>\s*$) + beginCaptures + + 1 + + name + keyword.operator.assignment.tsx + + + end + (?=$|^|[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+)) + patterns + + + include + #expression + + + + + begin + (?<!=|!)(=)(?!=) + beginCaptures + + 1 + + name + keyword.operator.assignment.tsx + + + end + (?=[,);}\]]|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(of|in)\s+))|(?=^\s*$)|(?<![\|\&\+\-\*\/])(?<=\S)(?<!=)(?=\s*$) + patterns + + + include + #expression + + + + + + function-declaration + + name + meta.function.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s* + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.async.tsx + + 4 + + name + storage.type.function.tsx + + 5 + + name + keyword.generator.asterisk.tsx + + 6 + + name + meta.definition.function.tsx entity.name.function.tsx + + + end + (?=;|^\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))|(?<=\}) + patterns + + + include + #function-name + + + include + #function-body + + + + function-expression + + name + meta.function.expression.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))([_$[:alpha:]][_$[:alnum:]]*))?\s* + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + 2 + + name + storage.type.function.tsx + + 3 + + name + keyword.generator.asterisk.tsx + + 4 + + name + meta.definition.function.tsx entity.name.function.tsx + + + end + (?=;)|(?<=\}) + patterns + + + include + #function-name + + + include + #single-line-comment-consuming-line-ending + + + include + #function-body + + + + function-name + + name + meta.definition.function.tsx entity.name.function.tsx + match + [_$[:alpha:]][_$[:alnum:]]* + + function-body + + patterns + + + include + #comment + + + include + #type-parameters + + + include + #function-parameters + + + include + #return-type + + + include + #type-function-return-type + + + include + #decl-block + + + name + keyword.generator.asterisk.tsx + match + \* + + + + method-declaration + + patterns + + + name + meta.method.declaration.tsx + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?\s*\b(constructor)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.modifier.async.tsx + + 5 + + name + storage.type.tsx + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + name + meta.method.declaration.tsx + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:(?:\s*\b(new)\b(?!:)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|(?:(\*)\s*)?)(?=\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.modifier.async.tsx + + 5 + + name + keyword.operator.new.tsx + + 6 + + name + keyword.generator.asterisk.tsx + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + name + meta.method.declaration.tsx + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(override)\s+)?(?:\b(public|private|protected)\s+)?(?:\b(abstract)\s+)?(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.modifier.async.tsx + + 5 + + name + storage.type.property.tsx + + 6 + + name + keyword.generator.asterisk.tsx + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + + + + object-literal-method-declaration + + name + meta.method.declaration.tsx + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + 2 + + name + storage.type.property.tsx + + 3 + + name + keyword.generator.asterisk.tsx + + + end + (?=\}|;|,)|(?<=\}) + patterns + + + include + #method-declaration-name + + + include + #function-body + + + begin + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(async)\s+)?(?:\b(get|set)\s+)?(?:(\*)\s*)?(?=\s*(((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??))\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?[\(]) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + 2 + + name + storage.type.property.tsx + + 3 + + name + keyword.generator.asterisk.tsx + + + end + (?=\(|\<) + patterns + + + include + #method-declaration-name + + + + + + method-declaration-name + + begin + (?x)(?=((\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))|([_$[:alpha:]][_$[:alnum:]]*)|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))\s*(\??)\s*[\(\<]) + end + (?=\(|\<) + patterns + + + include + #string + + + include + #array-literal + + + include + #numeric-literal + + + name + meta.definition.method.tsx entity.name.function.tsx + match + [_$[:alpha:]][_$[:alnum:]]* + + + name + keyword.operator.optional.tsx + match + \? + + + + arrow-function + + patterns + + + name + meta.arrow.tsx + match + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>) + captures + + 1 + + name + storage.modifier.async.tsx + + 2 + + name + variable.parameter.tsx + + + + + name + meta.arrow.tsx + begin + (?x) (?: + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(\basync) +)? ((?<![})!\]])\s* + (?= + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + ) +) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + + end + (?==>|\{|(^\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+)) + patterns + + + include + #comment + + + include + #type-parameters + + + include + #function-parameters + + + include + #arrow-return-type + + + include + #possibly-arrow-return-type + + + + + name + meta.arrow.tsx + begin + => + beginCaptures + + 0 + + name + storage.type.function.arrow.tsx + + + end + ((?<=\}|\S)(?<!=>)|((?!\{)(?=\S)))(?!\/[\/\*]) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #decl-block + + + include + #expression + + + + + + indexer-declaration + + name + meta.indexer.declaration.tsx + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s*(?=:) + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + meta.brace.square.tsx + + 3 + + name + variable.parameter.tsx + + + end + (\])\s*(\?\s*)?|$ + endCaptures + + 1 + + name + meta.brace.square.tsx + + 2 + + name + keyword.operator.optional.tsx + + + patterns + + + include + #type-annotation + + + + indexer-mapped-type-declaration + + name + meta.indexer.mappedtype.declaration.tsx + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([+-])?(readonly)\s*)?\s*(\[)\s*([_$[:alpha:]][_$[:alnum:]]*)\s+(in)\s+ + beginCaptures + + 1 + + name + keyword.operator.type.modifier.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + meta.brace.square.tsx + + 4 + + name + entity.name.type.tsx + + 5 + + name + keyword.operator.expression.in.tsx + + + end + (\])([+-])?\s*(\?\s*)?|$ + endCaptures + + 1 + + name + meta.brace.square.tsx + + 2 + + name + keyword.operator.type.modifier.tsx + + 3 + + name + keyword.operator.optional.tsx + + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+ + captures + + 1 + + name + keyword.control.as.tsx + + + + + include + #type + + + + function-parameters + + name + meta.parameters.tsx + begin + \( + beginCaptures + + 0 + + name + punctuation.definition.parameters.begin.tsx + + + end + \) + endCaptures + + 0 + + name + punctuation.definition.parameters.end.tsx + + + patterns + + + include + #function-parameters-body + + + + function-parameters-body + + patterns + + + include + #comment + + + include + #string + + + include + #decorator + + + include + #destructuring-parameter + + + include + #parameter-name + + + include + #parameter-type-annotation + + + include + #variable-initializer + + + name + punctuation.separator.parameter.tsx + match + , + + + + class-declaration + + name + meta.class.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*]) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.type.class.tsx + + + end + (?<=\}) + patterns + + + include + #class-declaration-or-expression-patterns + + + + class-expression + + name + meta.class.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(class)\b(?=\s+|[<{]|\/[\/*]) + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + storage.type.class.tsx + + + end + (?<=\}) + patterns + + + include + #class-declaration-or-expression-patterns + + + + class-declaration-or-expression-patterns + + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + match + [_$[:alpha:]][_$[:alnum:]]* + captures + + 0 + + name + entity.name.type.class.tsx + + + + + include + #type-parameters + + + include + #class-or-interface-body + + + + interface-declaration + + name + meta.interface.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*]) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.type.interface.tsx + + + end + (?<=\}) + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + match + [_$[:alpha:]][_$[:alnum:]]* + captures + + 0 + + name + entity.name.type.interface.tsx + + + + + include + #type-parameters + + + include + #class-or-interface-body + + + + class-or-interface-heritage + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:\b(extends|implements)\b)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + storage.modifier.tsx + + + end + (?=\{) + patterns + + + include + #comment + + + include + #class-or-interface-heritage + + + include + #type-parameters + + + include + #expressionWithoutIdentifiers + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?=\s*[_$[:alpha:]][_$[:alnum:]]*(\s*\??\.\s*[_$[:alpha:]][_$[:alnum:]]*)*\s*) + captures + + 1 + + name + entity.name.type.module.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + entity.other.inherited-class.tsx + + + + + include + #expressionPunctuations + + + + class-or-interface-body + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #comment + + + include + #decorator + + + begin + (?<=:)\s* + end + (?=\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)) + patterns + + + include + #expression + + + + + include + #method-declaration + + + include + #indexer-declaration + + + include + #field-declaration + + + include + #string + + + include + #type-annotation + + + include + #variable-initializer + + + include + #access-modifier + + + include + #property-accessor + + + include + #async-modifier + + + include + #after-operator-block-as-object-literal + + + include + #decl-block + + + include + #expression + + + include + #punctuation-comma + + + include + #punctuation-semicolon + + + + access-modifier + + name + storage.modifier.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + property-accessor + + name + storage.type.property.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(accessor|get|set)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + async-modifier + + name + storage.modifier.async.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(async)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + enum-declaration + + name + meta.enum.declaration.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?(?:\b(const)\s+)?\b(enum)\s+([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.modifier.tsx + + 4 + + name + storage.type.enum.tsx + + 5 + + name + entity.name.type.enum.tsx + + + end + (?<=\}) + patterns + + + include + #comment + + + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #comment + + + begin + ([_$[:alpha:]][_$[:alnum:]]*) + beginCaptures + + 0 + + name + variable.other.enummember.tsx + + + end + (?=,|\}|$) + patterns + + + include + #comment + + + include + #variable-initializer + + + + + begin + (?=((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)|(\[([^\[\]]|\[[^\[\]]*\])+\]))) + end + (?=,|\}|$) + patterns + + + include + #string + + + include + #array-literal + + + include + #comment + + + include + #variable-initializer + + + + + include + #punctuation-comma + + + + + + namespace-declaration + + name + meta.namespace.declaration.tsx + begin + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`])) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.namespace.tsx + + + end + (?<=\})|(?=;|^\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)) + patterns + + + include + #comment + + + include + #string + + + name + entity.name.type.module.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + include + #punctuation-accessor + + + include + #decl-block + + + + type-alias-declaration + + name + meta.type.declaration.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(type)\b\s+([_$[:alpha:]][_$[:alnum:]]*)\s* + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + storage.type.type.tsx + + 4 + + name + entity.name.type.alias.tsx + + + end + (?=\}|;|^\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)) + patterns + + + include + #comment + + + include + #type-parameters + + + begin + (=)\s*(intrinsic)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.assignment.tsx + + 2 + + name + keyword.control.intrinsic.tsx + + + end + (?=\}|;|^\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)) + patterns + + + include + #type + + + + + begin + (=)\s* + beginCaptures + + 1 + + name + keyword.operator.assignment.tsx + + + end + (?=\}|;|^\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)) + patterns + + + include + #type + + + + + + import-equals-declaration + + patterns + + + name + meta.import-equals.external.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(require)\s*(\() + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + keyword.control.import.tsx + + 4 + + name + keyword.control.type.tsx + + 5 + + name + variable.other.readwrite.alias.tsx + + 6 + + name + keyword.operator.assignment.tsx + + 7 + + name + keyword.control.require.tsx + + 8 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #comment + + + include + #string + + + + + name + meta.import-equals.internal.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type))?\s+([_$[:alpha:]][_$[:alnum:]]*)\s*(=)\s*(?!require\b) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + keyword.control.import.tsx + + 4 + + name + keyword.control.type.tsx + + 5 + + name + variable.other.readwrite.alias.tsx + + 6 + + name + keyword.operator.assignment.tsx + + + end + (?=;|$|^) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + entity.name.type.module.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + + + + name + variable.other.readwrite.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + + + import-declaration + + name + meta.import.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?\b(import)(?:\s+(type)(?!\s+from))?(?!\s*[:\(])(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + storage.modifier.tsx + + 3 + + name + keyword.control.import.tsx + + 4 + + name + keyword.control.type.tsx + + + end + (?<!^import|[^\._$[:alnum:]]import)(?=;|$|^) + patterns + + + include + #single-line-comment-consuming-line-ending + + + include + #comment + + + include + #string + + + begin + (?<=^import|[^\._$[:alnum:]]import)(?!\s*["']) + end + \bfrom\b + endCaptures + + 0 + + name + keyword.control.from.tsx + + + patterns + + + include + #import-export-declaration + + + + + include + #import-export-declaration + + + + export-declaration + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)\s+(as)\s+(namespace)\s+([_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + keyword.control.as.tsx + + 3 + + name + storage.type.namespace.tsx + + 4 + + name + entity.name.type.module.tsx + + + + + name + meta.export.default.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(export)(?:\s+(type))?(?:(?:\s*(=))|(?:\s+(default)(?=\s+))) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + keyword.control.type.tsx + + 3 + + name + keyword.operator.assignment.tsx + + 4 + + name + keyword.control.default.tsx + + + end + (?=$|;|^\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)) + patterns + + + include + #interface-declaration + + + include + #expression + + + + + name + meta.export.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(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))) + beginCaptures + + 1 + + name + keyword.control.export.tsx + + 2 + + name + keyword.control.type.tsx + + + end + (?=$|;|^\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)) + patterns + + + include + #import-export-declaration + + + + + + import-export-declaration + + patterns + + + include + #comment + + + include + #string + + + include + #import-export-block + + + name + keyword.control.from.tsx + match + \bfrom\b + + + include + #import-export-assert-clause + + + include + #import-export-clause + + + + import-export-assert-clause + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(with)|(assert))\s*(\{) + beginCaptures + + 1 + + name + keyword.control.with.tsx + + 2 + + name + keyword.control.assert.tsx + + 3 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #comment + + + include + #string + + + name + meta.object-literal.key.tsx + match + (?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + + + name + punctuation.separator.key-value.tsx + match + : + + + + import-export-block + + name + meta.block.tsx + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #import-export-clause + + + + import-export-clause + + patterns + + + include + #comment + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))) + captures + + 1 + + name + keyword.control.type.tsx + + 2 + + name + keyword.control.default.tsx + + 3 + + name + constant.language.import-export-all.tsx + + 4 + + name + variable.other.readwrite.tsx + + 5 + + name + string.quoted.alias.tsx + + 12 + + name + keyword.control.as.tsx + + 13 + + name + keyword.control.default.tsx + + 14 + + name + variable.other.readwrite.alias.tsx + + 15 + + name + string.quoted.alias.tsx + + + + + include + #punctuation-comma + + + name + constant.language.import-export-all.tsx + match + \* + + + name + keyword.control.default.tsx + match + \b(default)\b + + + match + (?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))) + captures + + 1 + + name + keyword.control.type.tsx + + 2 + + name + variable.other.readwrite.alias.tsx + + 3 + + name + string.quoted.alias.tsx + + + + + + switch-statement + + name + switch-statement.expr.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bswitch\s*\() + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #comment + + + name + switch-expression.expr.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(switch)\s*(\() + beginCaptures + + 1 + + name + keyword.control.switch.tsx + + 2 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression + + + + + name + switch-block.expr.tsx + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + (?=\}) + patterns + + + name + case-clause.expr.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(case|default(?=:))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.control.switch.tsx + + + end + (?=:) + patterns + + + include + #expression + + + + + begin + (:)\s*(\{) + beginCaptures + + 1 + + name + case-clause.expr.tsx punctuation.definition.section.case-statement.tsx + + 2 + + name + meta.block.tsx punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + meta.block.tsx punctuation.definition.block.tsx + + + contentName + meta.block.tsx + patterns + + + include + #statements + + + + + match + (:) + captures + + 0 + + name + case-clause.expr.tsx punctuation.definition.section.case-statement.tsx + + + + + include + #statements + + + + + + for-loop + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))for(?=((\s+|(\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*))await)?\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)?(\()) + beginCaptures + + 0 + + name + keyword.control.loop.tsx + + + end + (?<=\)) + patterns + + + include + #comment + + + name + keyword.control.loop.tsx + match + await + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #var-expr + + + include + #expression + + + include + #punctuation-semicolon + + + + + + if-statement + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?=\bif\s*(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))\s*(?!\{)) + end + (?=;|$|\}) + patterns + + + include + #comment + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(if)\s*(\() + beginCaptures + + 1 + + name + keyword.control.conditional.tsx + + 2 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression + + + + + name + string.regexp.tsx + begin + (?<=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.tsx + + 2 + + name + keyword.other.tsx + + + patterns + + + include + #regexp + + + + + include + #statements + + + + + + decl-block + + name + meta.block.tsx + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #statements + + + + after-operator-block-as-object-literal + + name + meta.objectliteral.tsx + begin + (?<!\+\+|--)(?<=[:=(,\[?+!>]|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^yield|[^\._$[:alnum:]]yield|^throw|[^\._$[:alnum:]]throw|^in|[^\._$[:alnum:]]in|^of|[^\._$[:alnum:]]of|^typeof|[^\._$[:alnum:]]typeof|&&|\|\||\*)\s*(\{) + beginCaptures + + 1 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #object-member + + + + object-literal + + name + meta.objectliteral.tsx + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #object-member + + + + object-member + + patterns + + + include + #comment + + + include + #object-literal-method-declaration + + + name + meta.object.member.tsx meta.object-literal.key.tsx + begin + (?=\[) + end + (?=:)|((?<=[\]])(?=\s*[\(\<])) + patterns + + + include + #comment + + + include + #array-literal + + + + + name + meta.object.member.tsx meta.object-literal.key.tsx + begin + (?=[\'\"\`]) + end + (?=:)|((?<=[\'\"\`])(?=((\s*[\(\<,}])|(\s+(as|satisifies)\s+)))) + patterns + + + include + #comment + + + include + #string + + + + + name + meta.object.member.tsx meta.object-literal.key.tsx + begin + (?x)(?=(\b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$))|(\b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$))|((?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$))) + end + (?=:)|(?=\s*([\(\<,}])|(\s+as|satisifies\s+)) + patterns + + + include + #comment + + + include + #numeric-literal + + + + + name + meta.method.declaration.tsx + begin + (?<=[\]\'\"\`])(?=\s*[\(\<]) + end + (?=\}|;|,)|(?<=\}) + patterns + + + include + #function-body + + + + + name + meta.object.member.tsx + match + (?![_$[:alpha:]])([[:digit:]]+)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + captures + + 0 + + name + meta.object-literal.key.tsx + + 1 + + name + constant.numeric.decimal.tsx + + + + + name + meta.object.member.tsx + match + (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:(\s*\/\*([^\*]|(\*[^\/]))*\*\/)*\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 0 + + name + meta.object-literal.key.tsx + + 1 + + name + entity.name.function.tsx + + + + + name + meta.object.member.tsx + match + (?:[_$[:alpha:]][_$[:alnum:]]*)\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*:) + captures + + 0 + + name + meta.object-literal.key.tsx + + + + + name + meta.object.member.tsx + begin + \.\.\. + beginCaptures + + 0 + + name + keyword.operator.spread.tsx + + + end + (?=,|\}) + patterns + + + include + #expression + + + + + name + meta.object.member.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$|\/\/|\/\*) + captures + + 1 + + name + variable.other.readwrite.tsx + + + + + name + meta.object.member.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*([,}]|$)) + captures + + 1 + + name + keyword.control.as.tsx + + 2 + + name + storage.modifier.tsx + + + + + name + meta.object.member.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ + beginCaptures + + 1 + + name + keyword.control.as.tsx + + 2 + + name + keyword.control.satisfies.tsx + + + end + (?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|^|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisifies)\s+)) + patterns + + + include + #type + + + + + name + meta.object.member.tsx + begin + (?=[_$[:alpha:]][_$[:alnum:]]*\s*=) + end + (?=,|\}|$|\/\/|\/\*) + patterns + + + include + #expression + + + + + name + meta.object.member.tsx + begin + : + beginCaptures + + 0 + + name + meta.object-literal.key.tsx punctuation.separator.key-value.tsx + + + end + (?=,|\}) + patterns + + + begin + (?<=:)\s*(async)?(?=\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + + end + (?<=\)) + patterns + + + include + #type-parameters + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + + + begin + (?<=:)\s*(async)?\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + 2 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + begin + (?<=:)\s*(async)?\s*(?=\<\s*$) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + + end + (?<=\>) + patterns + + + include + #type-parameters + + + + + begin + (?<=\>)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + include + #possibly-arrow-return-type + + + include + #expression + + + + + include + #punctuation-comma + + + include + #decl-block + + + + ternary-expression + + begin + (?!\?\.\s*[^[:digit:]])(\?)(?!\?) + beginCaptures + + 1 + + name + keyword.operator.ternary.tsx + + + end + \s*(:) + endCaptures + + 1 + + name + keyword.operator.ternary.tsx + + + patterns + + + include + #expression + + + + function-call + + patterns + + + begin + (?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + end + (?<=\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + patterns + + + name + meta.function-call.tsx + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)) + end + (?=\s*(?:(\?\.\s*)|(\!))?((<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?\()) + patterns + + + include + #function-call-target + + + + + include + #comment + + + include + #function-call-optionals + + + include + #type-arguments + + + include + #paren-expression + + + + + begin + (?=(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$)) + end + (?<=\>)(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\)]))(<\s*[\{\[\(]\s*$)) + patterns + + + name + meta.function-call.tsx + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*)(\s*\??\.\s*(\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*)) + end + (?=(<\s*[\{\[\(]\s*$)) + patterns + + + include + #function-call-target + + + + + include + #comment + + + include + #function-call-optionals + + + include + #type-arguments + + + + + + function-call-target + + patterns + + + include + #support-function-call-identifiers + + + name + entity.name.function.tsx + match + (\#?[_$[:alpha:]][_$[:alnum:]]*) + + + + function-call-optionals + + patterns + + + name + meta.function-call.tsx punctuation.accessor.optional.tsx + match + \?\. + + + name + meta.function-call.tsx keyword.operator.definiteassignment.tsx + match + \! + + + + support-function-call-identifiers + + patterns + + + include + #literal + + + include + #support-objects + + + include + #object-identifiers + + + include + #punctuation-accessor + + + name + keyword.operator.expression.import.tsx + match + (?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*[\(]\s*[\"\'\`])) + + + + new-expr + + name + new.expr.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.new.tsx + + + end + (?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(])))) + patterns + + + include + #expression + + + + instanceof-expr + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 1 + + name + keyword.operator.expression.instanceof.tsx + + + end + (?<=\))|(?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|(===|!==|==|!=)|(([\&\~\^\|]\s*)?[_$[:alpha:]][_$[:alnum:]]*\s+instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(])))) + patterns + + + include + #type + + + + paren-expression-possibly-arrow + + patterns + + + begin + (?<=[(=,])\s*(async)?(?=\s*((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\(\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + + end + (?<=\)) + patterns + + + include + #paren-expression-possibly-arrow-with-typeparameters + + + + + begin + (?<=[(=,]|=>|^return|[^\._$[:alnum:]]return)\s*(async)?(?=\s*((((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*))?\()|(<)|((<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)))\s*$) + beginCaptures + + 1 + + name + storage.modifier.async.tsx + + + end + (?<=\)) + patterns + + + include + #paren-expression-possibly-arrow-with-typeparameters + + + + + include + #possibly-arrow-return-type + + + + paren-expression-possibly-arrow-with-typeparameters + + patterns + + + include + #type-parameters + + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression-inside-possibly-arrow-parens + + + + + + expression-inside-possibly-arrow-parens + + patterns + + + include + #expressionWithoutIdentifiers + + + include + #comment + + + include + #string + + + include + #decorator + + + include + #destructuring-parameter + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|protected|private|readonly)\s+(?=(override|public|protected|private|readonly)\s+) + captures + + 1 + + name + storage.modifier.tsx + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s* +# function assignment | +(=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) | +# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) => +(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*))))))) | +(:\s*(=>|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(<[^<>]*>)|[^<>(),=])+=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +))) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + entity.name.function.tsx variable.language.this.tsx + + 4 + + name + entity.name.function.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(override|public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s*(\??)(?=\s*[:,]|$) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + variable.parameter.tsx variable.language.this.tsx + + 4 + + name + variable.parameter.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + include + #type-annotation + + + include + #variable-initializer + + + name + punctuation.separator.parameter.tsx + match + , + + + include + #identifiers + + + include + #expressionPunctuations + + + + paren-expression + + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + include + #expression + + + + cast + + patterns + + + include + #jsx + + + + expression-operators + + patterns + + + name + keyword.control.flow.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(await)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?=\s*\/\*([^\*]|(\*[^\/]))*\*\/\s*\*) + beginCaptures + + 1 + + name + keyword.control.flow.tsx + + + end + \* + endCaptures + + 0 + + name + keyword.generator.asterisk.tsx + + + patterns + + + include + #comment + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(yield)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s*(\*))? + captures + + 1 + + name + keyword.control.flow.tsx + + 2 + + name + keyword.generator.asterisk.tsx + + + + + name + keyword.operator.expression.delete.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))delete(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.expression.in.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))in(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\() + + + name + keyword.operator.expression.of.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))of(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?!\() + + + name + keyword.operator.expression.instanceof.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))instanceof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.new.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))new(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #typeof-operator + + + name + keyword.operator.expression.void.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))void(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as)\s+(const)(?=\s*($|[;,:})\]])) + captures + + 1 + + name + keyword.control.as.tsx + + 2 + + name + storage.modifier.tsx + + + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ + beginCaptures + + 1 + + name + keyword.control.as.tsx + + 2 + + name + keyword.control.satisfies.tsx + + + end + (?=^|[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisfies)\s+)|(\s+\<)) + patterns + + + include + #type + + + + + name + keyword.operator.spread.tsx + match + \.\.\. + + + name + keyword.operator.assignment.compound.tsx + match + \*=|(?<!\()/=|%=|\+=|\-= + + + name + keyword.operator.assignment.compound.bitwise.tsx + match + \&=|\^=|<<=|>>=|>>>=|\|= + + + name + keyword.operator.bitwise.shift.tsx + match + <<|>>>|>> + + + name + keyword.operator.comparison.tsx + match + ===|!==|==|!= + + + name + keyword.operator.relational.tsx + match + <=|>=|<>|<|> + + + match + (?<=[_$[:alnum:]])(\!)\s*(?:(/=)|(?:(/)(?![/*]))) + captures + + 1 + + name + keyword.operator.logical.tsx + + 2 + + name + keyword.operator.assignment.compound.tsx + + 3 + + name + keyword.operator.arithmetic.tsx + + + + + name + keyword.operator.logical.tsx + match + \!|&&|\|\||\?\? + + + name + keyword.operator.bitwise.tsx + match + \&|~|\^|\| + + + name + keyword.operator.assignment.tsx + match + \= + + + name + keyword.operator.decrement.tsx + match + -- + + + name + keyword.operator.increment.tsx + match + \+\+ + + + name + keyword.operator.arithmetic.tsx + match + %|\*|/|-|\+ + + + begin + (?<=[_$[:alnum:])\]])\s*(?=(\/\*([^\*]|(\*[^\/]))*\*\/\s*)+(?:(/=)|(?:(/)(?![/*])))) + end + (?:(/=)|(?:(/)(?!\*([^\*]|(\*[^\/]))*\*\/))) + endCaptures + + 1 + + name + keyword.operator.assignment.compound.tsx + + 2 + + name + keyword.operator.arithmetic.tsx + + + patterns + + + include + #comment + + + + + match + (?<=[_$[:alnum:])\]])\s*(?:(/=)|(?:(/)(?![/*]))) + captures + + 1 + + name + keyword.operator.assignment.compound.tsx + + 2 + + name + keyword.operator.arithmetic.tsx + + + + + + typeof-operator + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))typeof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + beginCaptures + + 0 + + name + keyword.operator.expression.typeof.tsx + + + end + (?=[,);}\]=>:&|{\?]|(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)) + patterns + + + include + #type-arguments + + + include + #expression + + + + literal + + patterns + + + include + #numeric-literal + + + include + #boolean-literal + + + include + #null-literal + + + include + #undefined-literal + + + include + #numericConstant-literal + + + include + #array-literal + + + include + #this-literal + + + include + #super-literal + + + + array-literal + + name + meta.array.literal.tsx + begin + \s*(\[) + beginCaptures + + 1 + + name + meta.brace.square.tsx + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.tsx + + + patterns + + + include + #expression + + + include + #punctuation-comma + + + + numeric-literal + + patterns + + + name + constant.numeric.hex.tsx + match + \b(?<!\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.tsx + + + + + name + constant.numeric.binary.tsx + match + \b(?<!\$)0(?:b|B)[01][01_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.tsx + + + + + name + constant.numeric.octal.tsx + match + \b(?<!\$)0(?:o|O)?[0-7][0-7_]*(n)?\b(?!\$) + captures + + 1 + + name + storage.type.numeric.bigint.tsx + + + + + match + (?x) +(?<!\$)(?: + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.1E+3 + (?:\b[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1.E+3 + (?:\B(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # .1E+3 + (?:\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)| # 1E+3 + (?:\b[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)| # 1.1 + (?:\b[0-9][0-9_]*(\.)(n)?\B)| # 1. + (?:\B(\.)[0-9][0-9_]*(n)?\b)| # .1 + (?:\b[0-9][0-9_]*(n)?\b(?!\.)) # 1 +)(?!\$) + captures + + 0 + + name + constant.numeric.decimal.tsx + + 1 + + name + meta.delimiter.decimal.period.tsx + + 2 + + name + storage.type.numeric.bigint.tsx + + 3 + + name + meta.delimiter.decimal.period.tsx + + 4 + + name + storage.type.numeric.bigint.tsx + + 5 + + name + meta.delimiter.decimal.period.tsx + + 6 + + name + storage.type.numeric.bigint.tsx + + 7 + + name + storage.type.numeric.bigint.tsx + + 8 + + name + meta.delimiter.decimal.period.tsx + + 9 + + name + storage.type.numeric.bigint.tsx + + 10 + + name + meta.delimiter.decimal.period.tsx + + 11 + + name + storage.type.numeric.bigint.tsx + + 12 + + name + meta.delimiter.decimal.period.tsx + + 13 + + name + storage.type.numeric.bigint.tsx + + 14 + + name + storage.type.numeric.bigint.tsx + + + + + + boolean-literal + + patterns + + + name + constant.language.boolean.true.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))true(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + constant.language.boolean.false.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))false(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + null-literal + + name + constant.language.null.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))null(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + this-literal + + name + variable.language.this.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))this\b(?!\$) + + super-literal + + name + variable.language.super.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))super\b(?!\$) + + undefined-literal + + name + constant.language.undefined.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))undefined(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + numericConstant-literal + + patterns + + + name + constant.language.nan.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))NaN(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + constant.language.infinity.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Infinity(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + support-objects + + patterns + + + name + variable.language.arguments.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(arguments)\b(?!\$) + + + name + support.class.builtin.tsx + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Array|ArrayBuffer|Atomics|BigInt|BigInt64Array|BigUint64Array|Boolean|DataView|Date|Float32Array + |Float64Array|Function|Generator|GeneratorFunction|Int8Array|Int16Array|Int32Array|Intl|Map|Number|Object|Proxy + |Reflect|RegExp|Set|SharedArrayBuffer|SIMD|String|Symbol|TypedArray + |Uint8Array|Uint16Array|Uint32Array|Uint8ClampedArray|WeakMap|WeakSet)\b(?!\$) + + + name + support.class.error.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))((Eval|Internal|Range|Reference|Syntax|Type|URI)?Error)\b(?!\$) + + + name + support.class.promise.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Promise)\b(?!\$) + + + name + support.function.tsx + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(clear(Interval|Timeout)|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval| + isFinite|isNaN|parseFloat|parseInt|require|set(Interval|Timeout)|super|unescape|uneval)(?=\s*\() + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Math)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?: + (abs|acos|acosh|asin|asinh|atan|atan2|atanh|cbrt|ceil|clz32|cos|cosh|exp| + expm1|floor|fround|hypot|imul|log|log10|log1p|log2|max|min|pow|random| + round|sign|sin|sinh|sqrt|tan|tanh|trunc) + | + (E|LN10|LN2|LOG10E|LOG2E|PI|SQRT1_2|SQRT2)))?\b(?!\$) + captures + + 1 + + name + support.constant.math.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.function.math.tsx + + 5 + + name + support.constant.property.math.tsx + + + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(console)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*( + assert|clear|count|debug|dir|error|group|groupCollapsed|groupEnd|info|log + |profile|profileEnd|table|time|timeEnd|timeStamp|trace|warn))?\b(?!\$) + captures + + 1 + + name + support.class.console.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.function.console.tsx + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(JSON)(?:\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(parse|stringify))?\b(?!\$) + captures + + 1 + + name + support.constant.json.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.function.json.tsx + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(import)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(meta)\b(?!\$) + captures + + 1 + + name + keyword.control.import.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.variable.property.importmeta.tsx + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(new)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(target)\b(?!\$) + captures + + 1 + + name + keyword.operator.new.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.variable.property.target.tsx + + + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?: + (?:(constructor|length|prototype|__proto__)\b(?!\$|\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\()) + | + (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\b(?!\$))) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + support.variable.property.tsx + + 4 + + name + support.constant.tsx + + + + + match + (?x) (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.)) \b (?: + (document|event|navigator|performance|screen|window) + | + (AnalyserNode|ArrayBufferView|Attr|AudioBuffer|AudioBufferSourceNode|AudioContext|AudioDestinationNode|AudioListener + |AudioNode|AudioParam|BatteryManager|BeforeUnloadEvent|BiquadFilterNode|Blob|BufferSource|ByteString|CSS|CSSConditionRule + |CSSCounterStyleRule|CSSGroupingRule|CSSMatrix|CSSMediaRule|CSSPageRule|CSSPrimitiveValue|CSSRule|CSSRuleList|CSSStyleDeclaration + |CSSStyleRule|CSSStyleSheet|CSSSupportsRule|CSSValue|CSSValueList|CanvasGradient|CanvasImageSource|CanvasPattern + |CanvasRenderingContext2D|ChannelMergerNode|ChannelSplitterNode|CharacterData|ChromeWorker|CloseEvent|Comment|CompositionEvent + |Console|ConvolverNode|Coordinates|Credential|CredentialsContainer|Crypto|CryptoKey|CustomEvent|DOMError|DOMException + |DOMHighResTimeStamp|DOMImplementation|DOMString|DOMStringList|DOMStringMap|DOMTimeStamp|DOMTokenList|DataTransfer + |DataTransferItem|DataTransferItemList|DedicatedWorkerGlobalScope|DelayNode|DeviceProximityEvent|DirectoryEntry + |DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|Document|DocumentFragment|DocumentTouch|DocumentType|DragEvent + |DynamicsCompressorNode|Element|Entry|EntrySync|ErrorEvent|Event|EventListener|EventSource|EventTarget|FederatedCredential + |FetchEvent|File|FileEntry|FileEntrySync|FileException|FileList|FileReader|FileReaderSync|FileSystem|FileSystemSync + |FontFace|FormData|GainNode|Gamepad|GamepadButton|GamepadEvent|Geolocation|GlobalEventHandlers|HTMLAnchorElement + |HTMLAreaElement|HTMLAudioElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement + |HTMLCollection|HTMLContentElement|HTMLDListElement|HTMLDataElement|HTMLDataListElement|HTMLDialogElement|HTMLDivElement + |HTMLDocument|HTMLElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFontElement|HTMLFormControlsCollection|HTMLFormElement + |HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement + |HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMediaElement + |HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement + |HTMLOptionsCollection|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPreElement|HTMLProgressElement + |HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement + |HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement + |HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTimeElement|HTMLTitleElement|HTMLTrackElement + |HTMLUListElement|HTMLUnknownElement|HTMLVideoElement|HashChangeEvent|History|IDBCursor|IDBCursorWithValue|IDBDatabase + |IDBEnvironment|IDBFactory|IDBIndex|IDBKeyRange|IDBMutableFile|IDBObjectStore|IDBOpenDBRequest|IDBRequest|IDBTransaction + |IDBVersionChangeEvent|IIRFilterNode|IdentityManager|ImageBitmap|ImageBitmapFactories|ImageData|Index|InputDeviceCapabilities + |InputEvent|InstallEvent|InstallTrigger|KeyboardEvent|LinkStyle|LocalFileSystem|LocalFileSystemSync|Location|MIDIAccess + |MIDIConnectionEvent|MIDIInput|MIDIInputMap|MIDIOutputMap|MediaElementAudioSourceNode|MediaError|MediaKeyMessageEvent + |MediaKeySession|MediaKeyStatusMap|MediaKeySystemAccess|MediaKeySystemConfiguration|MediaKeys|MediaRecorder|MediaStream + |MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MessageChannel|MessageEvent|MessagePort|MouseEvent + |MutationObserver|MutationRecord|NamedNodeMap|Navigator|NavigatorConcurrentHardware|NavigatorGeolocation|NavigatorID + |NavigatorLanguage|NavigatorOnLine|Node|NodeFilter|NodeIterator|NodeList|NonDocumentTypeChildNode|Notification + |OfflineAudioCompletionEvent|OfflineAudioContext|OscillatorNode|PageTransitionEvent|PannerNode|ParentNode|PasswordCredential + |Path2D|PaymentAddress|PaymentRequest|PaymentResponse|Performance|PerformanceEntry|PerformanceFrameTiming|PerformanceMark + |PerformanceMeasure|PerformanceNavigation|PerformanceNavigationTiming|PerformanceObserver|PerformanceObserverEntryList + |PerformanceResourceTiming|PerformanceTiming|PeriodicSyncEvent|PeriodicWave|Plugin|Point|PointerEvent|PopStateEvent + |PortCollection|Position|PositionError|PositionOptions|PresentationConnectionClosedEvent|PresentationConnectionList + |PresentationReceiver|ProcessingInstruction|ProgressEvent|PromiseRejectionEvent|PushEvent|PushRegistrationManager + |RTCCertificate|RTCConfiguration|RTCPeerConnection|RTCSessionDescriptionCallback|RTCStatsReport|RadioNodeList|RandomSource + |Range|ReadableByteStream|RenderingContext|SVGAElement|SVGAngle|SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement + |SVGAnimateTransformElement|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength + |SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPoints|SVGAnimatedPreserveAspectRatio + |SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGAnimationElement|SVGCircleElement|SVGClipPathElement + |SVGCursorElement|SVGDefsElement|SVGDescElement|SVGElement|SVGEllipseElement|SVGEvent|SVGFilterElement|SVGFontElement + |SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement + |SVGForeignObjectElement|SVGGElement|SVGGlyphElement|SVGGradientElement|SVGHKernElement|SVGImageElement|SVGLength + |SVGLengthList|SVGLineElement|SVGLinearGradientElement|SVGMPathElement|SVGMaskElement|SVGMatrix|SVGMissingGlyphElement + |SVGNumber|SVGNumberList|SVGPathElement|SVGPatternElement|SVGPoint|SVGPolygonElement|SVGPolylineElement|SVGPreserveAspectRatio + |SVGRadialGradientElement|SVGRect|SVGRectElement|SVGSVGElement|SVGScriptElement|SVGSetElement|SVGStopElement|SVGStringList + |SVGStylable|SVGStyleElement|SVGSwitchElement|SVGSymbolElement|SVGTRefElement|SVGTSpanElement|SVGTests|SVGTextElement + |SVGTextPositioningElement|SVGTitleElement|SVGTransform|SVGTransformList|SVGTransformable|SVGUseElement|SVGVKernElement + |SVGViewElement|ServiceWorker|ServiceWorkerContainer|ServiceWorkerGlobalScope|ServiceWorkerRegistration|ServiceWorkerState + |ShadowRoot|SharedWorker|SharedWorkerGlobalScope|SourceBufferList|StereoPannerNode|Storage|StorageEvent|StyleSheet + |StyleSheetList|SubtleCrypto|SyncEvent|Text|TextMetrics|TimeEvent|TimeRanges|Touch|TouchEvent|TouchList|Transferable + |TreeWalker|UIEvent|USVString|VRDisplayCapabilities|ValidityState|WaveShaperNode|WebGL|WebGLActiveInfo|WebGLBuffer + |WebGLContextEvent|WebGLFramebuffer|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat + |WebGLTexture|WebGLTimerQueryEXT|WebGLTransformFeedback|WebGLUniformLocation|WebGLVertexArrayObject|WebGLVertexArrayObjectOES + |WebSocket|WebSockets|WebVTT|WheelEvent|Window|WindowBase64|WindowEventHandlers|WindowTimers|Worker|WorkerGlobalScope + |WorkerLocation|WorkerNavigator|XMLHttpRequest|XMLHttpRequestEventTarget|XMLSerializer|XPathExpression|XPathResult + |XSLTProcessor))\b(?!\$) + captures + + 1 + + name + support.variable.dom.tsx + + 2 + + name + support.class.dom.tsx + + + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* (?: + (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE + |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR + |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR + |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR) + | + (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName + |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop + |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor + |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption + |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear + |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete + |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset + |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight + |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds + |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize + |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host + |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth + |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext + |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom + |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple + |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName + |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight + |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer + |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling + |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText + |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts + |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove + |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary + |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead + |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile + |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\b(?!\$|\s*(<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)?\() + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + support.constant.dom.tsx + + 4 + + name + support.variable.property.dom.tsx + + + + + name + support.class.node.tsx + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(Buffer|EventEmitter|Server|Pipe|Socket|REPLServer|ReadStream|WriteStream|Stream + |Inflate|Deflate|InflateRaw|DeflateRaw|GZip|GUnzip|Unzip|Zip)\b(?!\$) + + + match + (?x)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(process)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(?: + (arch|argv|config|connected|env|execArgv|execPath|exitCode|mainModule|pid|platform|release|stderr|stdin|stdout|title|version|versions) + | + (abort|chdir|cwd|disconnect|exit|[sg]ete?[gu]id|send|[sg]etgroups|initgroups|kill|memoryUsage|nextTick|umask|uptime|hrtime) +))?\b(?!\$) + captures + + 1 + + name + support.variable.object.process.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + support.variable.property.process.tsx + + 5 + + name + support.function.process.tsx + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(exports)|(module)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))(exports|id|filename|loaded|parent|children))?)\b(?!\$) + captures + + 1 + + name + support.type.object.module.tsx + + 2 + + name + support.type.object.module.tsx + + 3 + + name + punctuation.accessor.tsx + + 4 + + name + punctuation.accessor.optional.tsx + + 5 + + name + support.type.object.module.tsx + + + + + name + support.variable.object.node.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(global|GLOBAL|root|__dirname|__filename)\b(?!\$) + + + match + (?x) (?:(\.)|(\?\.(?!\s*[[:digit:]]))) \s* +(?: + (on(?:Rowsinserted|Rowsdelete|Rowenter|Rowexit|Resize|Resizestart|Resizeend|Reset| + Readystatechange|Mouseout|Mouseover|Mousedown|Mouseup|Mousemove| + Before(?:cut|deactivate|unload|update|paste|print|editfocus|activate)| + Blur|Scrolltop|Submit|Select|Selectstart|Selectionchange|Hover|Help| + Change|Contextmenu|Controlselect|Cut|Cellchange|Clock|Close|Deactivate| + Datasetchanged|Datasetcomplete|Dataavailable|Drop|Drag|Dragstart|Dragover| + Dragdrop|Dragenter|Dragend|Dragleave|Dblclick|Unload|Paste|Propertychange|Error| + Errorupdate|Keydown|Keyup|Keypress|Focus|Load|Activate|Afterupdate|Afterprint|Abort) + ) | + (shift|showModelessDialog|showModalDialog|showHelp|scroll|scrollX|scrollByPages| + scrollByLines|scrollY|scrollTo|stop|strike|sizeToContent|sidebar|signText|sort| + sup|sub|substr|substring|splice|split|send|set(?:Milliseconds|Seconds|Minutes|Hours| + Month|Year|FullYear|Date|UTC(?:Milliseconds|Seconds|Minutes|Hours|Month|FullYear|Date)| + Time|Hotkeys|Cursor|ZOptions|Active|Resizable|RequestHeader)|search|slice| + savePreferences|small|home|handleEvent|navigate|char|charCodeAt|charAt|concat| + contextual|confirm|compile|clear|captureEvents|call|createStyleSheet|createPopup| + createEventObject|to(?:GMTString|UTCString|String|Source|UpperCase|LowerCase|LocaleString)| + test|taint|taintEnabled|indexOf|italics|disableExternalCapture|dump|detachEvent|unshift| + untaint|unwatch|updateCommands|join|javaEnabled|pop|push|plugins.refresh|paddings|parse| + print|prompt|preference|enableExternalCapture|exec|execScript|valueOf|UTC|find|file| + fileModifiedDate|fileSize|fileCreatedDate|fileUpdatedDate|fixed|fontsize|fontcolor| + forward|fromCharCode|watch|link|load|lastIndexOf|anchor|attachEvent|atob|apply|alert| + abort|routeEvents|resize|resizeBy|resizeTo|recalc|returnValue|replace|reverse|reload| + releaseCapture|releaseEvents|go|get(?:Milliseconds|Seconds|Minutes|Hours|Month|Day|Year|FullYear| + Time|Date|TimezoneOffset|UTC(?:Milliseconds|Seconds|Minutes|Hours|Day|Month|FullYear|Date)| + Attention|Selection|ResponseHeader|AllResponseHeaders)|moveBy|moveBelow|moveTo| + moveToAbsolute|moveAbove|mergeAttributes|match|margins|btoa|big|bold|borderWidths|blink|back + ) | + (acceptNode|add|addEventListener|addTextTrack|adoptNode|after|animate|append| + appendChild|appendData|before|blur|canPlayType|captureStream| + caretPositionFromPoint|caretRangeFromPoint|checkValidity|clear|click| + cloneContents|cloneNode|cloneRange|close|closest|collapse| + compareBoundaryPoints|compareDocumentPosition|comparePoint|contains| + convertPointFromNode|convertQuadFromNode|convertRectFromNode|createAttribute| + createAttributeNS|createCaption|createCDATASection|createComment| + createContextualFragment|createDocument|createDocumentFragment| + createDocumentType|createElement|createElementNS|createEntityReference| + createEvent|createExpression|createHTMLDocument|createNodeIterator| + createNSResolver|createProcessingInstruction|createRange|createShadowRoot| + createTBody|createTextNode|createTFoot|createTHead|createTreeWalker|delete| + deleteCaption|deleteCell|deleteContents|deleteData|deleteRow|deleteTFoot| + deleteTHead|detach|disconnect|dispatchEvent|elementFromPoint|elementsFromPoint| + enableStyleSheetsForSet|entries|evaluate|execCommand|exitFullscreen| + exitPointerLock|expand|extractContents|fastSeek|firstChild|focus|forEach|get| + getAll|getAnimations|getAttribute|getAttributeNames|getAttributeNode| + getAttributeNodeNS|getAttributeNS|getBoundingClientRect|getBoxQuads| + getClientRects|getContext|getDestinationInsertionPoints|getElementById| + getElementsByClassName|getElementsByName|getElementsByTagName| + getElementsByTagNameNS|getItem|getNamedItem|getSelection|getStartDate| + getVideoPlaybackQuality|has|hasAttribute|hasAttributeNS|hasAttributes| + hasChildNodes|hasFeature|hasFocus|importNode|initEvent|insertAdjacentElement| + insertAdjacentHTML|insertAdjacentText|insertBefore|insertCell|insertData| + insertNode|insertRow|intersectsNode|isDefaultNamespace|isEqualNode| + isPointInRange|isSameNode|item|key|keys|lastChild|load|lookupNamespaceURI| + lookupPrefix|matches|move|moveAttribute|moveAttributeNode|moveChild| + moveNamedItem|namedItem|nextNode|nextSibling|normalize|observe|open| + parentNode|pause|play|postMessage|prepend|preventDefault|previousNode| + previousSibling|probablySupportsContext|queryCommandEnabled| + queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandValue| + querySelector|querySelectorAll|registerContentHandler|registerElement| + registerProtocolHandler|releaseCapture|releaseEvents|remove|removeAttribute| + removeAttributeNode|removeAttributeNS|removeChild|removeEventListener| + removeItem|replace|replaceChild|replaceData|replaceWith|reportValidity| + requestFullscreen|requestPointerLock|reset|scroll|scrollBy|scrollIntoView| + scrollTo|seekToNextFrame|select|selectNode|selectNodeContents|set|setAttribute| + setAttributeNode|setAttributeNodeNS|setAttributeNS|setCapture| + setCustomValidity|setEnd|setEndAfter|setEndBefore|setItem|setNamedItem| + setRangeText|setSelectionRange|setSinkId|setStart|setStartAfter|setStartBefore| + slice|splitText|stepDown|stepUp|stopImmediatePropagation|stopPropagation| + submit|substringData|supports|surroundContents|takeRecords|terminate|toBlob| + toDataURL|toggle|toString|values|write|writeln + ) | + (all|catch|finally|race|reject|resolve|then + ) +)(?=\s*\() + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + support.function.event-handler.tsx + + 4 + + name + support.function.tsx + + 5 + + name + support.function.dom.tsx + + 6 + + name + support.function.promise.tsx + + + + + + identifiers + + patterns + + + include + #object-identifiers + + + match + (?x)(?:(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*( + ((async\s+)?( + (function\s*[(<*]) | + (function\s+) | + ([_$[:alpha:]][_$[:alnum:]]*\s*=>) + )) | + ((async\s*)?( + ((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))) | + # sure shot arrow functions even if => is on new line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? + [(]\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)* + ( + ([)]\s*:) | # (): + ((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param: + ) +) | +( + [<]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=>] # < typeparam extends +) | +# arrow function possible to detect only with => on same line +( + (<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<]|\<\s*(((const\s+)?[_$[:alpha:]])|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\]))([^=<>]|=[^<])*\>)*\>)*>\s*)? # typeparameters + \(\s*(\/\*([^\*]|(\*[^\/]))*\*\/\s*)*(([_$[:alpha:]]|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\.\.\.\s*[_$[:alpha:]]))([^()\'\"\`]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))*)?\) # parameters + (\s*:\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+)? # return type + \s*=> # arrow operator +) + )) +)) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + entity.name.function.tsx + + + + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]]) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + variable.other.constant.property.tsx + + + + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + variable.other.property.tsx + + + + + name + variable.other.constant.tsx + match + ([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]]) + + + name + variable.other.readwrite.tsx + match + [_$[:alpha:]][_$[:alnum:]]* + + + + object-identifiers + + patterns + + + name + support.class.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*)(?=\s*\??\.\s*prototype\b(?!\$)) + + + match + (?x)(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(?: + (\#?[[:upper:]][_$[:digit:][:upper:]]*) | + (\#?[_$[:alpha:]][_$[:alnum:]]*) +)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + 3 + + name + variable.other.constant.object.property.tsx + + 4 + + name + variable.other.object.property.tsx + + + + + match + (?x)(?: + ([[:upper:]][_$[:digit:][:upper:]]*) | + ([_$[:alpha:]][_$[:alnum:]]*) +)(?=\s*\??\.\s*\#?[_$[:alpha:]][_$[:alnum:]]*) + captures + + 1 + + name + variable.other.constant.object.tsx + + 2 + + name + variable.other.object.tsx + + + + + + type-annotation + + patterns + + + name + meta.type.annotation.tsx + begin + (:)(?=\s*\S) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?<![:|&])(?!\s*[|&]\s+)((?=^|[,);\}\]]|//)|(?==[^>])|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{))) + patterns + + + include + #type + + + + + name + meta.type.annotation.tsx + begin + (:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?<![:|&])((?=[,);\}\]]|\/\/)|(?==[^>])|(?=^\s*$)|((?<=[\}>\]\)]|[_$[:alpha:]])\s*(?=\{))) + patterns + + + include + #type + + + + + + parameter-type-annotation + + patterns + + + name + meta.type.annotation.tsx + begin + (:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?=[,)])|(?==[^>]) + patterns + + + include + #type + + + + + + return-type + + patterns + + + name + meta.return.type.tsx + begin + (?<=\))\s*(:)(?=\s*\S) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?<![:|&])(?=$|^|[{};,]|//) + patterns + + + include + #return-type-core + + + + + name + meta.return.type.tsx + begin + (?<=\))\s*(:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?<![:|&])((?=[{};,]|//|^\s*$)|((?<=\S)(?=\s*$))) + patterns + + + include + #return-type-core + + + + + + return-type-core + + patterns + + + include + #comment + + + begin + (?<=[:|&])(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + arrow-return-type + + name + meta.return.type.arrow.tsx + begin + (?<=\))\s*(:) + beginCaptures + + 1 + + name + keyword.operator.type.annotation.tsx + + + end + (?==>|\{|(^\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+)) + patterns + + + include + #arrow-return-type-body + + + + possibly-arrow-return-type + + begin + (?<=\)|^)\s*(:)(?=\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=>) + beginCaptures + + 1 + + name + meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx + + + end + (?==>|\{|(^\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+)) + contentName + meta.arrow.tsx meta.return.type.arrow.tsx + patterns + + + include + #arrow-return-type-body + + + + arrow-return-type-body + + patterns + + + begin + (?<=[:])(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + type-parameters + + name + meta.type.parameters.tsx + begin + (<) + beginCaptures + + 1 + + name + punctuation.definition.typeparameters.begin.tsx + + + end + (>) + endCaptures + + 1 + + name + punctuation.definition.typeparameters.end.tsx + + + patterns + + + include + #comment + + + name + storage.modifier.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends|in|out|const)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + include + #type + + + include + #punctuation-comma + + + name + keyword.operator.assignment.tsx + match + (=)(?!>) + + + + type-arguments + + name + meta.type.parameters.tsx + begin + \< + beginCaptures + + 0 + + name + punctuation.definition.typeparameters.begin.tsx + + + end + \> + endCaptures + + 0 + + name + punctuation.definition.typeparameters.end.tsx + + + patterns + + + include + #type-arguments-body + + + + type-arguments-body + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(_)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 0 + + name + keyword.operator.type.tsx + + + + + include + #type + + + include + #punctuation-comma + + + + type + + patterns + + + include + #comment + + + include + #type-string + + + include + #numeric-literal + + + include + #type-primitive + + + include + #type-builtin-literals + + + include + #type-parameters + + + include + #type-tuple + + + include + #type-object + + + include + #type-operators + + + include + #type-conditional + + + include + #type-fn-type-parameters + + + include + #type-paren-or-function-parameters + + + include + #type-function-return-type + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))\s* + captures + + 1 + + name + storage.modifier.tsx + + + + + include + #type-name + + + + type-primitive + + name + support.type.primitive.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(string|number|bigint|boolean|symbol|any|void|never|unknown)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + type-builtin-literals + + name + support.type.builtin.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(this|true|false|undefined|null|object)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + type-tuple + + name + meta.type.tuple.tsx + begin + \[ + beginCaptures + + 0 + + name + meta.brace.square.tsx + + + end + \] + endCaptures + + 0 + + name + meta.brace.square.tsx + + + patterns + + + name + keyword.operator.rest.tsx + match + \.\.\. + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))([_$[:alpha:]][_$[:alnum:]]*)\s*(\?)?\s*(:) + captures + + 1 + + name + entity.name.label.tsx + + 2 + + name + keyword.operator.optional.tsx + + 3 + + name + punctuation.separator.label.tsx + + + + + include + #type + + + include + #punctuation-comma + + + + type-object + + name + meta.object.type.tsx + begin + \{ + beginCaptures + + 0 + + name + punctuation.definition.block.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.block.tsx + + + patterns + + + include + #comment + + + include + #method-declaration + + + include + #indexer-declaration + + + include + #indexer-mapped-type-declaration + + + include + #field-declaration + + + include + #type-annotation + + + begin + \.\.\. + beginCaptures + + 0 + + name + keyword.operator.spread.tsx + + + end + (?=\}|;|,|$)|(?<=\}) + patterns + + + include + #type + + + + + include + #punctuation-comma + + + include + #punctuation-semicolon + + + include + #type + + + + type-conditional + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(extends)\s+ + beginCaptures + + 1 + + name + storage.modifier.tsx + + + end + (?<=:) + patterns + + + begin + \? + beginCaptures + + 0 + + name + keyword.operator.ternary.tsx + + + end + : + endCaptures + + 0 + + name + keyword.operator.ternary.tsx + + + patterns + + + include + #type + + + + + include + #type + + + + + + type-paren-or-function-parameters + + name + meta.type.paren.cover.tsx + begin + \( + beginCaptures + + 0 + + name + meta.brace.round.tsx + + + end + \) + endCaptures + + 0 + + name + meta.brace.round.tsx + + + patterns + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=\s*(:\s*( + (<) | + ([(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + )) +)) | +(:\s*(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))Function(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))) | +(:\s*((<\s*$)|([\(]\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})\s*((:\s*\{?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])\s*((:\s*\[?$)|((\s*([^<>\(\)\{\}]|\<([^<>]|\<([^<>]|\<[^<>]+\>)+\>)+\>|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))))) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + entity.name.function.tsx variable.language.this.tsx + + 4 + + name + entity.name.function.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + match + (?x)(?:(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(public|private|protected|readonly)\s+)?(?:(\.\.\.)\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s*(\??)(?=:) + captures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.operator.rest.tsx + + 3 + + name + variable.parameter.tsx variable.language.this.tsx + + 4 + + name + variable.parameter.tsx + + 5 + + name + keyword.operator.optional.tsx + + + + + include + #type-annotation + + + name + punctuation.separator.parameter.tsx + match + , + + + include + #type + + + + type-fn-type-parameters + + patterns + + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b(?=\s*\<) + beginCaptures + + 1 + + name + meta.type.constructor.tsx storage.modifier.tsx + + 2 + + name + meta.type.constructor.tsx keyword.control.new.tsx + + + end + (?<=>) + patterns + + + include + #comment + + + include + #type-parameters + + + + + name + meta.type.constructor.tsx + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(abstract)\s+)?(new)\b\s*(?=\() + beginCaptures + + 1 + + name + storage.modifier.tsx + + 2 + + name + keyword.control.new.tsx + + + end + (?<=\)) + patterns + + + include + #function-parameters + + + + + name + meta.type.function.tsx + begin + (?x)( + (?= + [(]\s*( + ([)]) | + (\.\.\.) | + ([_$[:alnum:]]+\s*( + ([:,?=])| + ([)]\s*=>) + )) + ) + ) +) + end + (?<=\)) + patterns + + + include + #function-parameters + + + + + + type-function-return-type + + patterns + + + name + meta.type.function.return.tsx + begin + (=>)(?=\s*\S) + beginCaptures + + 1 + + name + storage.type.function.arrow.tsx + + + end + (?<!=>)(?<![|&])(?=[,\]\)\{\}=;>:\?]|//|$) + patterns + + + include + #type-function-return-type-core + + + + + name + meta.type.function.return.tsx + begin + => + beginCaptures + + 0 + + name + storage.type.function.arrow.tsx + + + end + (?<!=>)(?<![|&])((?=[,\]\)\{\}=;:\?>]|//|^\s*$)|((?<=\S)(?=\s*$))) + patterns + + + include + #type-function-return-type-core + + + + + + type-function-return-type-core + + patterns + + + include + #comment + + + begin + (?<==>)(?=\s*\{) + end + (?<=\}) + patterns + + + include + #type-object + + + + + include + #type-predicate-operator + + + include + #type + + + + type-operators + + patterns + + + include + #typeof-operator + + + include + #type-infer + + + begin + ([&|])(?=\s*\{) + beginCaptures + + 0 + + name + keyword.operator.type.tsx + + + end + (?<=\}) + patterns + + + include + #type-object + + + + + begin + [&|] + beginCaptures + + 0 + + name + keyword.operator.type.tsx + + + end + (?=\S) + + + name + keyword.operator.expression.keyof.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))keyof(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.ternary.tsx + match + (\?|\:) + + + name + keyword.operator.expression.import.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))import(?=\s*\() + + + + type-infer + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(infer)\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))(?:\s+(extends)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))? + name + meta.type.infer.tsx + captures + + 1 + + name + keyword.operator.expression.infer.tsx + + 2 + + name + entity.name.type.tsx + + 3 + + name + keyword.operator.expression.extends.tsx + + + + + + type-predicate-operator + + patterns + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(asserts)\s+)?(?!asserts)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))\s(is)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.operator.type.asserts.tsx + + 2 + + name + variable.parameter.tsx variable.language.this.tsx + + 3 + + name + variable.parameter.tsx + + 4 + + name + keyword.operator.expression.is.tsx + + + + + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(asserts)\s+(?!is)(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + captures + + 1 + + name + keyword.operator.type.asserts.tsx + + 2 + + name + variable.parameter.tsx variable.language.this.tsx + + 3 + + name + variable.parameter.tsx + + + + + name + keyword.operator.type.asserts.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))asserts(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + name + keyword.operator.expression.is.tsx + match + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))is(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)) + + + + type-name + + patterns + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]])))\s*(<) + captures + + 1 + + name + entity.name.type.module.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + 4 + + name + meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx + + + end + (>) + endCaptures + + 1 + + name + meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx + + + contentName + meta.type.parameters.tsx + patterns + + + include + #type-arguments-body + + + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)\s*(<) + beginCaptures + + 1 + + name + entity.name.type.tsx + + 2 + + name + meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx + + + end + (>) + endCaptures + + 1 + + name + meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx + + + contentName + meta.type.parameters.tsx + patterns + + + include + #type-arguments-body + + + + + match + ([_$[:alpha:]][_$[:alnum:]]*)\s*(?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + entity.name.type.module.tsx + + 2 + + name + punctuation.accessor.tsx + + 3 + + name + punctuation.accessor.optional.tsx + + + + + name + entity.name.type.tsx + match + [_$[:alpha:]][_$[:alnum:]]* + + + + punctuation-comma + + name + punctuation.separator.comma.tsx + match + , + + punctuation-semicolon + + name + punctuation.terminator.statement.tsx + match + ; + + punctuation-accessor + + match + (?:(\.)|(\?\.(?!\s*[[:digit:]]))) + captures + + 1 + + name + punctuation.accessor.tsx + + 2 + + name + punctuation.accessor.optional.tsx + + + + string + + patterns + + + include + #qstring-single + + + include + #qstring-double + + + include + #template + + + + qstring-double + + name + string.quoted.double.tsx + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + end + (")|((?:[^\\\n])$) + endCaptures + + 1 + + name + punctuation.definition.string.end.tsx + + 2 + + name + invalid.illegal.newline.tsx + + + patterns + + + include + #string-character-escape + + + + qstring-single + + name + string.quoted.single.tsx + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + end + (\')|((?:[^\\\n])$) + endCaptures + + 1 + + name + punctuation.definition.string.end.tsx + + 2 + + name + invalid.illegal.newline.tsx + + + patterns + + + include + #string-character-escape + + + + string-character-escape + + name + constant.character.escape.tsx + match + \\(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]?|.|$) + + template + + patterns + + + include + #template-call + + + contentName + string.template.tsx + begin + ([_$[:alpha:]][_$[:alnum:]]*)?(`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.tsx + + 2 + + name + string.template.tsx punctuation.definition.string.template.begin.tsx + + + end + ` + endCaptures + + 0 + + name + string.template.tsx punctuation.definition.string.template.end.tsx + + + patterns + + + include + #template-substitution-element + + + include + #string-character-escape + + + + + + template-call + + patterns + + + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`) + end + (?=`) + patterns + + + begin + (?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)) + end + (?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)?`) + patterns + + + include + #support-function-call-identifiers + + + name + entity.name.function.tagged-template.tsx + match + ([_$[:alpha:]][_$[:alnum:]]*) + + + + + include + #type-arguments + + + + + begin + ([_$[:alpha:]][_$[:alnum:]]*)?\s*(?=(<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))(([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>|\<\s*(((keyof|infer|typeof|readonly)\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\{([^\{\}]|(\{([^\{\}]|\{[^\{\}]*\})*\}))*\})|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(\[([^\[\]]|(\[([^\[\]]|\[[^\[\]]*\])*\]))*\])|(\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))([^<>\(]|(\(([^\(\)]|(\(([^\(\)]|\([^\(\)]*\))*\)))*\))|(?<==)\>)*(?<!=)\>))*(?<!=)\>)*(?<!=)>\s*)`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.tsx + + + end + (?=`) + patterns + + + include + #type-arguments + + + + + + template-substitution-element + + name + meta.template.expression.tsx + begin + \$\{ + beginCaptures + + 0 + + name + punctuation.definition.template-expression.begin.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.template-expression.end.tsx + + + patterns + + + include + #expression + + + contentName + meta.embedded.line.tsx + + type-string + + patterns + + + include + #qstring-single + + + include + #qstring-double + + + include + #template-type + + + + template-type + + patterns + + + include + #template-call + + + contentName + string.template.tsx + begin + ([_$[:alpha:]][_$[:alnum:]]*)?(`) + beginCaptures + + 1 + + name + entity.name.function.tagged-template.tsx + + 2 + + name + string.template.tsx punctuation.definition.string.template.begin.tsx + + + end + ` + endCaptures + + 0 + + name + string.template.tsx punctuation.definition.string.template.end.tsx + + + patterns + + + include + #template-type-substitution-element + + + include + #string-character-escape + + + + + + template-type-substitution-element + + name + meta.template.expression.tsx + begin + \$\{ + beginCaptures + + 0 + + name + punctuation.definition.template-expression.begin.tsx + + + end + \} + endCaptures + + 0 + + name + punctuation.definition.template-expression.end.tsx + + + patterns + + + include + #type + + + contentName + meta.embedded.line.tsx + + regex + + patterns + + + name + string.regexp.tsx + begin + (?<!\+\+|--|})(?<=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 1 + + name + punctuation.definition.string.begin.tsx + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.tsx + + 2 + + name + keyword.other.tsx + + + patterns + + + include + #regexp + + + + + name + string.regexp.tsx + begin + ((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuvy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])) + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + end + (/)([dgimsuvy]*) + endCaptures + + 1 + + name + punctuation.definition.string.end.tsx + + 2 + + name + keyword.other.tsx + + + patterns + + + include + #regexp + + + + + + regexp + + patterns + + + name + keyword.control.anchor.regexp + match + \\[bB]|\^|\$ + + + match + \\[1-9]\d*|\\k<([a-zA-Z_$][\w$]*)> + captures + + 0 + + name + keyword.other.back-reference.regexp + + 1 + + name + variable.other.regexp + + + + + name + keyword.operator.quantifier.regexp + match + [?+*]|\{(\d+,\d+|\d+,|,\d+|\d+)\}\?? + + + name + keyword.operator.or.regexp + match + \| + + + name + meta.group.assertion.regexp + begin + (\()((\?=)|(\?!)|(\?<=)|(\?<!)) + beginCaptures + + 1 + + name + punctuation.definition.group.regexp + + 2 + + name + punctuation.definition.group.assertion.regexp + + 3 + + name + meta.assertion.look-ahead.regexp + + 4 + + name + meta.assertion.negative-look-ahead.regexp + + 5 + + name + meta.assertion.look-behind.regexp + + 6 + + name + meta.assertion.negative-look-behind.regexp + + + end + (\)) + endCaptures + + 1 + + name + punctuation.definition.group.regexp + + + patterns + + + include + #regexp + + + + + name + meta.group.regexp + begin + \((?:(\?:)|(?:\?<([a-zA-Z_$][\w$]*)>))? + beginCaptures + + 0 + + name + punctuation.definition.group.regexp + + 1 + + name + punctuation.definition.group.no-capture.regexp + + 2 + + name + variable.other.regexp + + + end + \) + endCaptures + + 0 + + name + punctuation.definition.group.regexp + + + patterns + + + include + #regexp + + + + + name + constant.other.character-class.set.regexp + begin + (\[)(\^)? + beginCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + 2 + + name + keyword.operator.negation.regexp + + + end + (\]) + endCaptures + + 1 + + name + punctuation.definition.character-class.regexp + + + patterns + + + name + constant.other.character-class.range.regexp + match + (?:.|(\\(?:[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])|(\\.)) + captures + + 1 + + name + constant.character.numeric.regexp + + 2 + + name + constant.character.control.regexp + + 3 + + name + constant.character.escape.backslash.regexp + + 4 + + name + constant.character.numeric.regexp + + 5 + + name + constant.character.control.regexp + + 6 + + name + constant.character.escape.backslash.regexp + + + + + include + #regex-character-class + + + + + include + #regex-character-class + + + + regex-character-class + + patterns + + + name + constant.other.character-class.regexp + match + \\[wWsSdDtrnvf]|\. + + + name + constant.character.numeric.regexp + match + \\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}) + + + name + constant.character.control.regexp + match + \\c[A-Z] + + + name + constant.character.escape.backslash.regexp + match + \\. + + + + comment + + patterns + + + name + comment.block.documentation.tsx + begin + /\*\*(?!/) + beginCaptures + + 0 + + name + punctuation.definition.comment.tsx + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.tsx + + + patterns + + + include + #docblock + + + + + name + comment.block.tsx + begin + (/\*)(?:\s*((@)internal)(?=\s|(\*/)))? + beginCaptures + + 1 + + name + punctuation.definition.comment.tsx + + 2 + + name + storage.type.internaldeclaration.tsx + + 3 + + name + punctuation.decorator.internaldeclaration.tsx + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.tsx + + + + + begin + (^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.tsx + + 2 + + name + comment.line.double-slash.tsx + + 3 + + name + punctuation.definition.comment.tsx + + 4 + + name + storage.type.internaldeclaration.tsx + + 5 + + name + punctuation.decorator.internaldeclaration.tsx + + + end + (?=$) + contentName + comment.line.double-slash.tsx + + + + single-line-comment-consuming-line-ending + + begin + (^[ \t]+)?((//)(?:\s*((@)internal)(?=\s|$))?) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.tsx + + 2 + + name + comment.line.double-slash.tsx + + 3 + + name + punctuation.definition.comment.tsx + + 4 + + name + storage.type.internaldeclaration.tsx + + 5 + + name + punctuation.decorator.internaldeclaration.tsx + + + end + (?=^) + contentName + comment.line.double-slash.tsx + + directives + + name + comment.line.triple-slash.directive.tsx + begin + ^(///)\s*(?=<(reference|amd-dependency|amd-module)(\s+(path|types|no-default-lib|lib|name|resolution-mode)\s*=\s*((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))+\s*/>\s*$) + beginCaptures + + 1 + + name + punctuation.definition.comment.tsx + + + end + (?=$) + patterns + + + name + meta.tag.tsx + begin + (<)(reference|amd-dependency|amd-module) + beginCaptures + + 1 + + name + punctuation.definition.tag.directive.tsx + + 2 + + name + entity.name.tag.directive.tsx + + + end + /> + endCaptures + + 0 + + name + punctuation.definition.tag.directive.tsx + + + patterns + + + name + entity.other.attribute-name.directive.tsx + match + path|types|no-default-lib|lib|name|resolution-mode + + + name + keyword.operator.assignment.tsx + match + = + + + include + #string + + + + + + docblock + + patterns + + + match + (?x) +((@)(?:access|api)) +\s+ +(private|protected|public) +\b + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + constant.language.access-type.jsdoc + + + + + match + (?x) +((@)author) +\s+ +( + [^@\s<>*/] + (?:[^@<>*/]|\*[^/])* +) +(?: + \s* + (<) + ([^>\s]+) + (>) +)? + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + 4 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 5 + + name + constant.other.email.link.underline.jsdoc + + 6 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + + + match + (?x) +((@)borrows) \s+ +((?:[^@\s*/]|\*[^/])+) # <that namepath> +\s+ (as) \s+ # as +((?:[^@\s*/]|\*[^/])+) # <this namepath> + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + 4 + + name + keyword.operator.control.jsdoc + + 5 + + name + entity.name.type.instance.jsdoc + + + + + name + meta.example.jsdoc + begin + ((@)example)\s+ + end + (?=@|\*/) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + patterns + + + match + ^\s\*\s+ + + + contentName + constant.other.description.jsdoc + begin + \G(<)caption(>) + beginCaptures + + 0 + + name + entity.name.tag.inline.jsdoc + + 1 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + end + (</)caption(>)|(?=\*/) + endCaptures + + 0 + + name + entity.name.tag.inline.jsdoc + + 1 + + name + punctuation.definition.bracket.angle.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.angle.end.jsdoc + + + + + match + [^\s@*](?:[^*]|\*[^/])* + captures + + 0 + + name + source.embedded.tsx + + + + + + + match + (?x) ((@)kind) \s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \b + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + constant.language.symbol-type.jsdoc + + + + + match + (?x) +((@)see) +\s+ +(?: + # URL + ( + (?=https?://) + (?:[^\s*]|\*[^/])+ + ) + | + # JSDoc namepath + ( + (?! + # Avoid matching bare URIs (also acceptable as links) + https?:// + | + # Avoid matching {@inline tags}; we match those below + (?:\[[^\[\]]*\])? # Possible description [preceding]{@tag} + {@(?:link|linkcode|linkplain|tutorial)\b + ) + # Matched namepath + (?:[^@\s*/]|\*[^/])+ + ) +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.link.underline.jsdoc + + 4 + + name + entity.name.type.instance.jsdoc + + + + + match + (?x) +((@)template) +\s+ +# One or more valid identifiers +( + [A-Za-z_$] # First character: non-numeric word character + [\w$.\[\]]* # Rest of identifier + (?: # Possible list of additional identifiers + \s* , \s* + [A-Za-z_$] + [\w$.\[\]]* + )* +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + begin + (?x)((@)template)\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + variable.other.jsdoc + match + ([A-Za-z_$][\w$.\[\]]*) + + + + + match + (?x) +( + (@) + (?:arg|argument|const|constant|member|namespace|param|var) +) +\s+ +( + [A-Za-z_$] + [\w$.\[\]]* +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + begin + ((@)typedef)\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + entity.name.type.instance.jsdoc + match + (?:[^@\s*/]|\*[^/])+ + + + + + begin + ((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + name + variable.other.jsdoc + match + ([A-Za-z_$][\w$.\[\]]*) + + + name + variable.other.jsdoc + match + (?x) +(\[)\s* +[\w$]+ +(?: + (?:\[\])? # Foo[ ].bar properties within an array + \. # Foo.Bar namespaced parameter + [\w$]+ +)* +(?: + \s* + (=) # [foo=bar] Default parameter value + \s* + ( + # The inner regexes are to stop the match early at */ and to not stop at escaped quotes + (?> + "(?:(?:\*(?!/))|(?:\\(?!"))|[^*\\])*?" | # [foo="bar"] Double-quoted + '(?:(?:\*(?!/))|(?:\\(?!'))|[^*\\])*?' | # [foo='bar'] Single-quoted + \[ (?:(?:\*(?!/))|[^*])*? \] | # [foo=[1,2]] Array literal + (?:(?:\*(?!/))|\s(?!\s*\])|\[.*?(?:\]|(?=\*/))|[^*\s\[\]])* # Everything else + )* + ) +)? +\s*(?:(\])((?:[^*\s]|\*[^\s/])+)?|(?=\*/)) + captures + + 1 + + name + punctuation.definition.optional-value.begin.bracket.square.jsdoc + + 2 + + name + keyword.operator.assignment.jsdoc + + 3 + + name + source.embedded.tsx + + 4 + + name + punctuation.definition.optional-value.end.bracket.square.jsdoc + + 5 + + name + invalid.illegal.syntax.jsdoc + + + + + + + begin + (?x) +( + (@) + (?:define|enum|exception|export|extends|lends|implements|modifies + |namespace|private|protected|returns?|satisfies|suppress|this|throws|type + |yields?) +) +\s+(?={) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + end + (?=\s|\*/|[^{}\[\]A-Za-z_$]) + patterns + + + include + #jsdoctype + + + + + match + (?x) +( + (@) + (?:alias|augments|callback|constructs|emits|event|fires|exports? + |extends|external|function|func|host|lends|listens|interface|memberof!? + |method|module|mixes|mixin|name|requires|see|this|typedef|uses) +) +\s+ +( + (?: + [^{}@\s*] | \*[^/] + )+ +) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + entity.name.type.instance.jsdoc + + + + + contentName + variable.other.jsdoc + begin + ((@)(?:default(?:value)?|license|version))\s+(([''"])) + beginCaptures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + 4 + + name + punctuation.definition.string.begin.jsdoc + + + end + (\3)|(?=$|\*/) + endCaptures + + 0 + + name + variable.other.jsdoc + + 1 + + name + punctuation.definition.string.end.jsdoc + + + + + match + ((@)(?:default(?:value)?|license|tutorial|variation|version))\s+([^\s*]+) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + 3 + + name + variable.other.jsdoc + + + + + name + storage.type.class.jsdoc + match + (?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 + captures + + 1 + + name + punctuation.definition.block.tag.jsdoc + + + + + include + #inline-tags + + + match + ((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\s+) + captures + + 1 + + name + storage.type.class.jsdoc + + 2 + + name + punctuation.definition.block.tag.jsdoc + + + + + + brackets + + patterns + + + begin + { + end + }|(?=\*/) + patterns + + + include + #brackets + + + + + begin + \[ + end + \]|(?=\*/) + patterns + + + include + #brackets + + + + + + inline-tags + + patterns + + + name + constant.other.description.jsdoc + match + (\[)[^\]]+(\])(?={@(?:link|linkcode|linkplain|tutorial)) + captures + + 1 + + name + punctuation.definition.bracket.square.begin.jsdoc + + 2 + + name + punctuation.definition.bracket.square.end.jsdoc + + + + + name + entity.name.type.instance.jsdoc + begin + ({)((@)(?:link(?:code|plain)?|tutorial))\s* + beginCaptures + + 1 + + name + punctuation.definition.bracket.curly.begin.jsdoc + + 2 + + name + storage.type.class.jsdoc + + 3 + + name + punctuation.definition.inline.tag.jsdoc + + + end + }|(?=\*/) + endCaptures + + 0 + + name + punctuation.definition.bracket.curly.end.jsdoc + + + patterns + + + match + \G((?=https?://)(?:[^|}\s*]|\*[/])+)(\|)? + captures + + 1 + + name + variable.other.link.underline.jsdoc + + 2 + + name + punctuation.separator.pipe.jsdoc + + + + + match + \G((?:[^{}@\s|*]|\*[^/])+)(\|)? + captures + + 1 + + name + variable.other.description.jsdoc + + 2 + + name + punctuation.separator.pipe.jsdoc + + + + + + + + jsdoctype + + patterns + + + name + invalid.illegal.type.jsdoc + match + \G{(?:[^}*]|\*[^/}])+$ + + + contentName + entity.name.type.instance.jsdoc + begin + \G({) + beginCaptures + + 0 + + name + entity.name.type.instance.jsdoc + + 1 + + name + punctuation.definition.bracket.curly.begin.jsdoc + + + end + ((}))\s*|(?=\*/) + endCaptures + + 1 + + name + entity.name.type.instance.jsdoc + + 2 + + name + punctuation.definition.bracket.curly.end.jsdoc + + + patterns + + + include + #brackets + + + + + + jsx + + patterns + + + include + #jsx-tag-without-attributes-in-expression + + + include + #jsx-tag-in-expression + + + + jsx-tag-without-attributes-in-expression + + begin + (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s*(?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)) + end + (?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)) + patterns + + + include + #jsx-tag-without-attributes + + + + jsx-tag-without-attributes + + name + meta.tag.without-attributes.tsx + begin + (<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>) + end + (</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.tsx + + 2 + + name + entity.name.tag.namespace.tsx + + 3 + + name + punctuation.separator.namespace.tsx + + 4 + + name + entity.name.tag.tsx + + 5 + + name + support.class.component.tsx + + 6 + + name + punctuation.definition.tag.end.tsx + + + endCaptures + + 1 + + name + punctuation.definition.tag.begin.tsx + + 2 + + name + entity.name.tag.namespace.tsx + + 3 + + name + punctuation.separator.namespace.tsx + + 4 + + name + entity.name.tag.tsx + + 5 + + name + support.class.component.tsx + + 6 + + name + punctuation.definition.tag.end.tsx + + + contentName + meta.jsx.children.tsx + patterns + + + include + #jsx-children + + + + jsx-tag-in-expression + + begin + (?x) + (?<!\+\+|--)(?<=[({\[,?=>:*]|&&|\|\||\?|\*\/|^await|[^\._$[:alnum:]]await|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^yield|[^\._$[:alnum:]]yield|^)\s* + (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow + (?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)) + end + (?!(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)) + patterns + + + include + #jsx-tag + + + + jsx-tag + + name + meta.tag.tsx + begin + (?=(<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>)) + end + (/>)|(?:(</)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))?\s*(>)) + endCaptures + + 1 + + name + punctuation.definition.tag.end.tsx + + 2 + + name + punctuation.definition.tag.begin.tsx + + 3 + + name + entity.name.tag.namespace.tsx + + 4 + + name + punctuation.separator.namespace.tsx + + 5 + + name + entity.name.tag.tsx + + 6 + + name + support.class.component.tsx + + 7 + + name + punctuation.definition.tag.end.tsx + + + patterns + + + begin + (<)\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$[:alpha:]][-_$[:alnum:].]*))(?<!\.|-))(?=((<\s*)|(\s+))(?!\?)|\/?>) + beginCaptures + + 1 + + name + punctuation.definition.tag.begin.tsx + + 2 + + name + entity.name.tag.namespace.tsx + + 3 + + name + punctuation.separator.namespace.tsx + + 4 + + name + entity.name.tag.tsx + + 5 + + name + support.class.component.tsx + + + end + (?=[/]?>) + patterns + + + include + #comment + + + include + #type-arguments + + + include + #jsx-tag-attributes + + + + + begin + (>) + beginCaptures + + 1 + + name + punctuation.definition.tag.end.tsx + + + end + (?=</) + contentName + meta.jsx.children.tsx + patterns + + + include + #jsx-children + + + + + + jsx-children + + patterns + + + include + #jsx-tag-without-attributes + + + include + #jsx-tag + + + include + #jsx-evaluated-code + + + include + #jsx-entities + + + + jsx-evaluated-code + + contentName + meta.embedded.expression.tsx + begin + \{ + end + \} + beginCaptures + + 0 + + name + punctuation.section.embedded.begin.tsx + + + endCaptures + + 0 + + name + punctuation.section.embedded.end.tsx + + + patterns + + + include + #expression + + + + jsx-entities + + patterns + + + name + constant.character.entity.tsx + match + (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) + captures + + 1 + + name + punctuation.definition.entity.tsx + + 3 + + name + punctuation.definition.entity.tsx + + + + + + jsx-tag-attributes + + name + meta.tag.attributes.tsx + begin + \s+ + end + (?=[/]?>) + patterns + + + include + #comment + + + include + #jsx-tag-attribute-name + + + include + #jsx-tag-attribute-assignment + + + include + #jsx-string-double-quoted + + + include + #jsx-string-single-quoted + + + include + #jsx-evaluated-code + + + include + #jsx-tag-attributes-illegal + + + + jsx-tag-attribute-name + + match + (?x) + \s* + (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))? + ([_$[:alpha:]][-_$[:alnum:]]*) + (?=\s|=|/?>|/\*|//) + captures + + 1 + + name + entity.other.attribute-name.namespace.tsx + + 2 + + name + punctuation.separator.namespace.tsx + + 3 + + name + entity.other.attribute-name.tsx + + + + jsx-tag-attribute-assignment + + name + keyword.operator.assignment.tsx + match + =(?=\s*(?:'|"|{|/\*|//|\n)) + + jsx-string-double-quoted + + name + string.quoted.double.tsx + begin + " + end + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + endCaptures + + 0 + + name + punctuation.definition.string.end.tsx + + + patterns + + + include + #jsx-entities + + + + jsx-string-single-quoted + + name + string.quoted.single.tsx + begin + ' + end + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.tsx + + + endCaptures + + 0 + + name + punctuation.definition.string.end.tsx + + + patterns + + + include + #jsx-entities + + + + jsx-tag-attributes-illegal + + name + invalid.illegal.attribute.tsx + match + \S+ + + + + diff --git a/src/file-viewer/highlight.ts b/src/file-viewer/highlight.ts index f565051e368febca3ba819694e38723e33ca35c4..87d66eb793e92c6b688e2202ac83b7e9872199fa 100644 --- a/src/file-viewer/highlight.ts +++ b/src/file-viewer/highlight.ts @@ -1,23 +1,27 @@ const languages = [ - "ts", - "tsx", - "zig", - "json", - "css", "astro", - "mdx", - "lua", - "shell", + "css", + "diff", "dosbatch", + "html", + "js", + "json", + "jsx", + "lua", + "mdx", + "php", "powershell", - "yaml", + "python", + "shell", "toml", + "ts", + "tsx", "xml", - "python", - "php", - "diff", + "yaml", + "zig", ] as const; const altScopes: Record = { + html: "text.html.basic", astro: "text.html.astro", xml: "text.xml", php: "text.html.php", @@ -25,6 +29,11 @@ const altScopes: Record = { export type Language = (typeof languages)[number]; const scopes = [ + // HTML + ["meta.tag.metadata.doctype.html", "builtin"], + ["meta.tag.structure", "keyword"], + ["meta.tag.metadata.script", "keyword"], + // CSS ["punctuation.definition.keyword", "keyword", "css"], ["entity.name.tag.css", "class", "css"], @@ -59,6 +68,7 @@ const scopes = [ ["keyword", "keyword"], ["variable.parameter", "parameter"], ["entity.name.function", "method"], + ["support.class.component", "method"], ["support.type.primitive", "builtin"], ["entity.name.type", "class"], ["support.type", "class"], @@ -68,7 +78,11 @@ const scopes = [ ["support.constant", "constant"], ["meta.parameters", "parameter"], ["support.function", "method"], + ["entity.name.tag", "builtin"], ["variable", "variable"], + ["meta.tag.attributes", "property"], + ["punctuation.definition.tag.begin.tsx", "keyword"], + ["punctuation.definition.tag.end.tsx", "keyword"], ["punctuation", null], ["meta.function-call", "method"], ] as const; @@ -146,7 +160,11 @@ export const getRegistry = async.once(async () => { }), loadGrammar: async (scopeName: string) => { for (const lang of languages) { - if (scopeName.endsWith(`.${lang}`)) { + if ( + altScopes[lang] + ? scopeName === altScopes[lang] + : scopeName.endsWith(`.${lang}`) + ) { const file = await fs.readFile( path.join(import.meta.dirname, `highlight-grammar/${lang}.plist`), "utf-8", @@ -177,21 +195,26 @@ export async function highlightCode(code: string, language: Language) { return html; } -export async function main() { - // validate exts - for (const ext of languages) { - if ( - !fs.existsSync( - path.join(import.meta.dirname, `highlight-grammar/${ext}.plist`), - ) - ) { - console.error(`Missing grammar for ${ext}`); - } - // Sanity check - await highlightCode("wwwwwwwwwwwaaaaaaaaaaaaaaaa", ext); - } -} - +// export async function main() { +// validate exts +// for (const ext of languages) { +// if ( +// !fs.existsSync( +// path.join(import.meta.dirname, `highlight-grammar/${ext}.plist`), +// ) +// ) { +// console.error(`Missing grammar for ${ext}`); +// } +// // Sanity check +// await highlightCode("wwwwwwwwwwwaaaaaaaaaaaaaaaa", ext); +// } +// } +// +// await highlightCode( +// `return snow!`, +// "tsx", +// ); +// import * as async from "lib/async.ts"; import * as fs from "#sitegen/fs"; import * as path from "node:path"; diff --git a/src/global.css b/src/global.css index d25b9e4bc8575114af6fa38f3f320499a9ff7eb2..01a573a230fc25d3bd484059f3c04442b7472638 100644 --- a/src/global.css +++ b/src/global.css @@ -40,6 +40,15 @@ U+2194-2199, U+0100-017F; } +@font-face { + font-family: "recu"; + src: url("/recthin.woff2") format("woff2"); + font-weight: 350; + font-style: normal; + font-display: swap; + font-variation-settings: "CASL" 0.25, "MONO" 0; + unicode-range: U+0020-007E; +} *, ::before, diff --git a/src/pages/index.marko b/src/pages/index.marko index 96abbf4f00e9e8087622fa5534e23a34f82d27b2..bb1441491cd7a44a0253d32cdd3cd01544b2c1e2 100644 --- a/src/pages/index.marko +++ b/src/pages/index.marko @@ -14,6 +14,7 @@ export const meta = {

posts

+

blog: Everyone Hates Next.js (2025-10-21)

song: in the summer (2025-08-08)

song: waterfalls (2025-01-01)

things

diff --git a/src/site.ts b/src/site.ts index cdc413784402be9e194d4c91872b25e69de45ac1..c26e71738002705d22abb855c7d4c3386c0a969e 100644 --- a/src/site.ts +++ b/src/site.ts @@ -10,7 +10,7 @@ export const siteSections: sg.Section[] = [ { root: join("q+a/") }, { root: join("file-viewer/") }, { root: join("friends/") }, - // { root: join("blog/"), pageBase: "/blog" }, + { root: join("blog/"), base: "/blog" }, // { root: join("fiction/"), pageBase: "/fiction" }, ]; @@ -55,6 +55,11 @@ const recursiveVarsQuestion: sg.FontVars = { MONO: [0, 1], WGHT: [400, 800], }; +const recursiveVarsThin: sg.FontVars = { + ...recursiveVars, + MONO: [0, 1], + WGHT: 350, +}; const layoutFeatures = ["numr", "dnom", "frac"]; export const fonts: sg.Font[] = [ { @@ -86,6 +91,16 @@ export const fonts: sg.Font[] = [ vars: recursiveVarsQuestion, unicodes: nonAscii, }, + { + asset: "/recthin.[ext]", + vars: recursiveVarsThin, + unicodes: ascii, + }, + { + asset: "/recthin2.[ext]", + vars: recursiveVarsThin, + unicodes: nonAscii, + }, ], }, { diff --git a/src/source-of-truth.ts b/src/source-of-truth.ts index 5f9e3c92d0c4a2fdef482998a335121637bc65b6..69a9eb84ba5d480ece36f44fa42c107f9ee97e8a 100644 --- a/src/source-of-truth.ts +++ b/src/source-of-truth.ts @@ -72,7 +72,7 @@ app.get("/file/*", async (c) => { if (err.code === "ENOENT") return c.notFound(); throw err; } - c.header("Content-Length", (await fstat(handle.fd)).size); + c.header("Content-Length", (await fstat(handle.fd)).size.toString()); const nodeStream = fs.createReadStream(fullPath, { fd: handle.fd, fs: { @@ -113,4 +113,4 @@ import * as util from "node:util"; import * as stream from "node:stream"; import * as mime from "lib/mime.ts"; import { derivedFileRoot, rawFileRoot } from "./file-viewer/paths.ts"; -import { ASSERT } from "lib/assert.ts"; +import { ASSERT, UNWRAP } from "lib/assert.ts"; diff --git a/src/static/open-graph/everyone-hates-nextjs.png b/src/static/open-graph/everyone-hates-nextjs.png new file mode 100755 index 0000000000000000000000000000000000000000..aec17de48b7c4be227033d538d94fd91ff1699c7 GIT binary patch literal 205004 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�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

>${PE7x2 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 literal 0 HcmV?d00001 diff --git a/src/static/open-graph/readme.txt b/src/static/open-graph/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..9c393de51fd1d47b1ad205097ed8f3debfd2f0c4 --- /dev/null +++ b/src/static/open-graph/readme.txt @@ -0,0 +1,2 @@ +this directory is not under the paper clover media license, +therefore is allowed to be downloaded and redistributed by bots. diff --git a/src/web.dockerfile b/src/web.dockerfile index 03c3a6cf0b6aa453142c74efc49d47f8412949f1..e696a96925ed73aea3bbbbf0d4e4101f9e06b5ba 100644 --- a/src/web.dockerfile +++ b/src/web.dockerfile @@ -1,3 +1,4 @@ +# this is an example dockerfile. paper clover does not use this currently. from node:24 as builder run apt install -y git -- 2.54.0