From 68a55d996ea46ec372cd54c1f88fd34fd3fb9589 Mon Sep 17 00:00:00 2001 From: Dinesh Pandiyan Date: Fri, 9 Oct 2026 20:50:19 +1100 Subject: [PATCH] refactor: enforce stored observation boundaries and retire legacy modes --- README.md | 19 +- apps/web/src/DeleteContextButton.tsx | 10 +- apps/web/src/DiffWorkspace.tsx | 2 +- apps/web/src/ProjectPicker.tsx | 4 +- apps/web/src/project-picker.ts | 16 +- apps/web/test/browser/app.spec.ts | 46 +- apps/web/test/browser/async-recovery.spec.ts | 15 +- apps/web/test/browser/design-refresh.spec.ts | 22 +- apps/web/test/browser/fixture-state.ts | 13 +- apps/web/test/browser/local-workspace.spec.ts | 360 +------- apps/web/test/fixture-server.ts | 2 +- apps/web/test/project-picker.test.ts | 21 +- cmd/servediff/config_test.go | 27 +- cmd/servediff/hook.go | 18 +- cmd/servediff/ingestion_test.go | 179 +--- cmd/servediff/input.go | 53 +- cmd/servediff/local.go | 23 +- cmd/servediff/main.go | 359 +------- cmd/servediff/main_test.go | 115 +-- cmd/servediff/options.go | 35 +- cmd/servediff/options_test.go | 16 +- cmd/servediff/output.go | 31 - cmd/servediff/producer.go | 267 +----- cmd/servediff/producer_test.go | 109 +-- cmd/servediff/sync.go | 25 +- docs/agent-plugins-plan.md | 87 -- docs/architecture.md | 222 ++--- docs/development.md | 25 +- docs/mcp.md | 3 +- docs/plugins.md | 10 +- docs/release.md | 11 +- docs/system-boundaries-plan.md | 114 --- docs/system.md | 60 +- internal/contextservice/catalog_test.go | 3 - internal/contextservice/delete_test.go | 63 -- internal/contextservice/ingestion.go | 13 +- internal/contextservice/service.go | 230 +---- internal/contextservice/service_test.go | 154 +--- internal/contextservice/source_cache.go | 191 ----- internal/contextservice/store.go | 4 +- internal/controlapi/client.go | 54 -- internal/controlapi/protocol.go | 10 +- internal/controlapi/server.go | 126 +-- internal/controlapi/server_test.go | 286 +------ internal/daemon/client.go | 313 +------ internal/daemon/client_test.go | 448 +--------- internal/daemon/foreground.go | 4 +- internal/daemon/runtime.go | 4 - internal/daemon/server.go | 42 +- internal/daemon/server_test.go | 182 ---- internal/diffsource/patch.go | 50 +- internal/diffsource/source.go | 37 +- internal/diffsource/worktrees.go | 18 +- internal/hooks/hooks.go | 11 +- internal/hooks/hooks_test.go | 2 +- internal/httpapi/delete_test.go | 76 -- internal/httpapi/file_comments_test.go | 14 +- internal/httpapi/multi.go | 164 +--- internal/httpapi/multi_test.go | 133 +-- internal/httpapi/server.go | 303 ++----- internal/httpapi/server_test.go | 149 +--- internal/httpapi/store.go | 17 +- internal/ingestion/client.go | 81 +- internal/ingestion/client_test.go | 176 +--- internal/ingestion/model.go | 2 +- internal/ingestion/validate.go | 2 +- internal/ingestion/validate_test.go | 10 +- internal/ingestionqueue/queue.go | 4 +- internal/ingestionqueue/queue_test.go | 85 ++ .../remoteserver/boundaries_users_test.go | 3 +- internal/remoteserver/server.go | 4 +- internal/remoteserver/server_test.go | 5 +- internal/review/contract_test.go | 44 + internal/review/export.go | 4 +- internal/review/model.go | 2 +- internal/review/patch_context.go | 61 ++ internal/review/repository_name.go | 23 + internal/review/source.go | 35 + internal/reviewdata/model.go | 9 +- internal/reviewservice/catalog.go | 14 +- internal/reviewservice/operations.go | 149 +--- internal/reviewservice/service.go | 15 +- internal/reviewservice/service_test.go | 31 +- internal/reviewstore/boundaries_test.go | 77 +- internal/reviewstore/branch_identity_test.go | 68 -- internal/reviewstore/catalog.go | 226 +---- internal/reviewstore/catalog_test.go | 191 ----- internal/reviewstore/comparison.go | 42 - internal/reviewstore/delete_test.go | 113 +-- internal/reviewstore/ingestion.go | 133 +-- internal/reviewstore/ingestion_test.go | 159 +--- internal/reviewstore/queue.go | 11 - internal/reviewstore/reset_test.go | 58 ++ internal/reviewstore/reviews.go | 66 +- internal/reviewstore/sessions.go | 36 - internal/reviewstore/store.go | 237 +----- internal/reviewstore/store_test.go | 174 ---- internal/serverapp/capabilities_test.go | 19 +- internal/serverapp/handler.go | 32 +- internal/serverapp/handler_test.go | 27 +- internal/serverapp/health_test.go | 11 +- internal/session/session.go | 9 +- internal/submission/destination.go | 135 +++ internal/submission/destination_test.go | 58 ++ internal/submission/outbox.go | 2 +- internal/testsupport/client.go | 50 ++ internal/testsupport/server.go | 41 + ...l-DI9Gnh-6.js => angular-html-CLXnbU8d.js} | 2 +- ...-ts-D0oJNn_5.js => angular-ts-DBfR-Atp.js} | 2 +- .../{apl-BovzKLwL.js => apl-9Rn687tQ.js} | 2 +- .../{astro-DPheOMp2.js => astro-BdYFGcnW.js} | 2 +- .../{blade-MWnOITg0.js => blade-Dv4XuYG7.js} | 2 +- .../assets/{c-DLL5koqn.js => c-BFOYLRr0.js} | 2 +- ...{chapel-CWsTSfb2.js => chapel-C8gtur09.js} | 2 +- .../{cobol-DBppYo7Q.js => cobol-B11mWRHr.js} | 2 +- ...{coffee-w6pACU0m.js => coffee-DaQZRolb.js} | 2 +- .../{cpp-BOsVglB-.js => cpp-lH9GYSm7.js} | 2 +- ...rystal-CdIIvivK.js => crystal-Ctp3VANd.js} | 2 +- .../{css-D_sUZuNy.js => css-EYEy3Xlb.js} | 2 +- .../{edge-BbDvonD4.js => edge-f80K2VIZ.js} | 2 +- ...{elixir-Bf8isSWq.js => elixir-ht5CMTKg.js} | 2 +- .../{elm-DZ2GG1O0.js => elm-CIXzGuv_.js} | 2 +- .../{erb-C-JhO4M6.js => erb-BIc8Omep.js} | 2 +- ...ase-B734D6L0.js => git-rebase-BdIZdJUH.js} | 2 +- ...-js-S-qenfyd.js => glimmer-js-D-2dfiTn.js} | 2 +- ...-ts-3RXpKVtX.js => glimmer-ts-BHHXO3rp.js} | 2 +- .../{glsl-DBaA16lM.js => glsl-BYnWR4Hv.js} | 2 +- ...raphql-hCMHrW-c.js => graphql-ClvnBbMm.js} | 2 +- .../{hack-1-RmdN54.js => hack-BCf1gOIX.js} | 2 +- .../{haml-CJTw6KCx.js => haml-Bmn5-Yjh.js} | 2 +- ...ars-BjfB5oJv.js => handlebars-C7MKIi0r.js} | 2 +- ...rtwll_i.js => html-derivative-ClIm4xpX.js} | 2 +- .../{html-CQSL4Rts.js => html-rbi5PgIL.js} | 2 +- .../{http-DiFBXl1d.js => http-B2PGq0eK.js} | 2 +- .../{hurl-DTMKKsTz.js => hurl-CqQcMAR7.js} | 2 +- .../{index-B2lg52VZ.js => index-Bwvh_IHd.js} | 14 +- .../{java-BwygYcjv.js => java-BFOUMeCc.js} | 2 +- ...ipt-cZ915vnh.js => javascript-CR5GavSE.js} | 2 +- .../{jinja-BZ56G71o.js => jinja-BeguzEd0.js} | 2 +- .../{jison-CrMHkA5T.js => jison-CCx2qNB9.js} | 2 +- .../{json-xe-_kEqr.js => json-I28f8KUm.js} | 2 +- .../{jsx-BaQikP4I.js => jsx-CrD-Ow3U.js} | 2 +- .../{julia-DOQr_yfw.js => julia-DdSuU0oJ.js} | 2 +- .../{just-DJjQ6wca.js => just-DxOGI1MU.js} | 2 +- .../{latex-BR2yZEm8.js => latex-BTFSxgVs.js} | 2 +- ...{liquid-BW4tFZT5.js => liquid-WYMJQfxi.js} | 2 +- .../{lua-BMwKRpUS.js => lua-NdL_hgi8.js} | 2 +- .../{marko-_k-1VAV1.js => marko-BXDrtGB_.js} | 2 +- .../{mdc-Bpi8gJ8w.js => mdc-DFT9jeFB.js} | 2 +- .../{nginx-Bqz6odJ0.js => nginx-BGimcMtc.js} | 2 +- .../{nim-DUfzkSYY.js => nim-Boc8nMzF.js} | 2 +- .../{org-hCFMncj0.js => org-IUMfWevQ.js} | 2 +- .../{perl-BOSN-lJd.js => perl-Dlk0_VJm.js} | 2 +- .../{php-BcxfUlb0.js => php-BCj8cGx_.js} | 2 +- .../{pug-CCacKbEP.js => pug-DVicUvHI.js} | 2 +- .../{qml-BJ3i-i8V.js => qml-CAGCQzHi.js} | 2 +- .../assets/{r-Cq3JeZGS.js => r-DPCSjHhB.js} | 2 +- .../{razor-D4KIaiN4.js => razor-DaR4FNlZ.js} | 2 +- ...{regexp-BtVX3oxr.js => regexp-DD5bv9lN.js} | 2 +- .../{rst-yziTZ18z.js => rst-CwnrqHo7.js} | 2 +- .../{ruby-CxwDFG51.js => ruby-DLg3GxA3.js} | 2 +- .../{sas-DwRcM5a3.js => sas-7kC5yJIB.js} | 2 +- .../{scss-B8r4RXCT.js => scss-TPfA2Rl9.js} | 2 +- ...pt-CE8jMVsJ.js => shellscript-BxUYTJbB.js} | 2 +- ...n-CxmlJTEF.js => shellsession-D8Detfs1.js} | 2 +- .../{soy-BzTEIhUJ.js => soy-DgmP-rkN.js} | 2 +- .../{sql-ClIVuo9t.js => sql-WfIMpFBo.js} | 2 +- .../{stata-BB9tap1y.js => stata-BoXU_fVr.js} | 2 +- ...alql-CI8AgyIv.js => surrealql-BZp4t379.js} | 2 +- ...{svelte-D1eIrOoP.js => svelte-D0JzGzh-.js} | 2 +- .../{templ-Bw4hFTpq.js => templ-BuDeFWw_.js} | 2 +- .../{tex-BZ8j5Ki8.js => tex-hxvblT0F.js} | 2 +- ...s-tags-CJWRyznG.js => ts-tags-Ca4r_vit.js} | 2 +- .../{tsx-C7U7cVa6.js => tsx-B01kvZiV.js} | 2 +- .../{twig-ChWsK9Nr.js => twig-B7e2eWcZ.js} | 2 +- ...ipt-Dxzp_mdn.js => typescript-DeMv-M_d.js} | 2 +- .../{typst-DsfTC6LO.js => typst-IzvzibIJ.js} | 2 +- .../{vue-tc09nslQ.js => vue-BC0QlAe5.js} | 2 +- ...-html-DNMTIoNH.js => vue-html-B_B1dAIw.js} | 2 +- ...-vine-CJXT0Vnu.js => vue-vine-CwdEpNh4.js} | 2 +- .../{xml-BOKYiS6A.js => xml-DpeacbYS.js} | 2 +- .../{xsl-BpdVMO9A.js => xsl-xmhovwJb.js} | 2 +- .../{yaml-BmrUBDE7.js => yaml-CR2Q4Kv2.js} | 2 +- internal/webui/dist/index.html | 2 +- mise.toml | 19 +- package.json | 4 +- packages/api/openapi.yaml | 428 +--------- packages/api/src/schema.d.ts | 803 +----------------- packages/shared/package.json | 3 +- packages/shared/src/index.ts | 42 +- packages/shared/src/review.ts | 41 +- pnpm-lock.yaml | 34 +- test/conformance/hooks_test.go | 104 +-- test/conformance/server.test.ts | 72 +- test/conformance/service_failures_test.go | 265 ------ test/conformance/service_test.go | 361 +------- test/conformance/tsconfig.json | 2 +- test/contracts/comments.json | 591 +++++++++++++ test/contracts/comments.test.ts | 49 ++ tools/check-boundaries/main.go | 79 ++ 200 files changed, 2501 insertions(+), 8716 deletions(-) delete mode 100644 docs/agent-plugins-plan.md delete mode 100644 docs/system-boundaries-plan.md delete mode 100644 internal/contextservice/delete_test.go delete mode 100644 internal/contextservice/source_cache.go delete mode 100644 internal/httpapi/delete_test.go create mode 100644 internal/ingestionqueue/queue_test.go create mode 100644 internal/review/contract_test.go create mode 100644 internal/review/patch_context.go create mode 100644 internal/review/repository_name.go create mode 100644 internal/review/source.go create mode 100644 internal/reviewstore/reset_test.go create mode 100644 internal/submission/destination.go create mode 100644 internal/submission/destination_test.go create mode 100644 internal/testsupport/client.go create mode 100644 internal/testsupport/server.go rename internal/webui/dist/assets/{angular-html-DI9Gnh-6.js => angular-html-CLXnbU8d.js} (99%) rename internal/webui/dist/assets/{angular-ts-D0oJNn_5.js => angular-ts-DBfR-Atp.js} (99%) rename internal/webui/dist/assets/{apl-BovzKLwL.js => apl-9Rn687tQ.js} (99%) rename internal/webui/dist/assets/{astro-DPheOMp2.js => astro-BdYFGcnW.js} (98%) rename internal/webui/dist/assets/{blade-MWnOITg0.js => blade-Dv4XuYG7.js} (99%) rename internal/webui/dist/assets/{c-DLL5koqn.js => c-BFOYLRr0.js} (99%) rename internal/webui/dist/assets/{chapel-CWsTSfb2.js => chapel-C8gtur09.js} (99%) rename internal/webui/dist/assets/{cobol-DBppYo7Q.js => cobol-B11mWRHr.js} (99%) rename internal/webui/dist/assets/{coffee-w6pACU0m.js => coffee-DaQZRolb.js} (99%) rename internal/webui/dist/assets/{cpp-BOsVglB-.js => cpp-lH9GYSm7.js} (99%) rename internal/webui/dist/assets/{crystal-CdIIvivK.js => crystal-Ctp3VANd.js} (99%) rename internal/webui/dist/assets/{css-D_sUZuNy.js => css-EYEy3Xlb.js} (99%) rename internal/webui/dist/assets/{edge-BbDvonD4.js => edge-f80K2VIZ.js} (94%) rename internal/webui/dist/assets/{elixir-Bf8isSWq.js => elixir-ht5CMTKg.js} (99%) rename internal/webui/dist/assets/{elm-DZ2GG1O0.js => elm-CIXzGuv_.js} (99%) rename internal/webui/dist/assets/{erb-C-JhO4M6.js => erb-BIc8Omep.js} (94%) rename internal/webui/dist/assets/{git-rebase-B734D6L0.js => git-rebase-BdIZdJUH.js} (93%) rename internal/webui/dist/assets/{glimmer-js-S-qenfyd.js => glimmer-js-D-2dfiTn.js} (99%) rename internal/webui/dist/assets/{glimmer-ts-3RXpKVtX.js => glimmer-ts-BHHXO3rp.js} (99%) rename internal/webui/dist/assets/{glsl-DBaA16lM.js => glsl-BYnWR4Hv.js} (96%) rename internal/webui/dist/assets/{graphql-hCMHrW-c.js => graphql-ClvnBbMm.js} (98%) rename internal/webui/dist/assets/{hack-1-RmdN54.js => hack-BCf1gOIX.js} (99%) rename internal/webui/dist/assets/{haml-CJTw6KCx.js => haml-Bmn5-Yjh.js} (98%) rename internal/webui/dist/assets/{handlebars-BjfB5oJv.js => handlebars-C7MKIi0r.js} (98%) rename internal/webui/dist/assets/{html-derivative-Xrtwll_i.js => html-derivative-ClIm4xpX.js} (92%) rename internal/webui/dist/assets/{html-CQSL4Rts.js => html-rbi5PgIL.js} (99%) rename internal/webui/dist/assets/{http-DiFBXl1d.js => http-B2PGq0eK.js} (95%) rename internal/webui/dist/assets/{hurl-DTMKKsTz.js => hurl-CqQcMAR7.js} (96%) rename internal/webui/dist/assets/{index-B2lg52VZ.js => index-Bwvh_IHd.js} (86%) rename internal/webui/dist/assets/{java-BwygYcjv.js => java-BFOUMeCc.js} (99%) rename internal/webui/dist/assets/{javascript-cZ915vnh.js => javascript-CR5GavSE.js} (99%) rename internal/webui/dist/assets/{jinja-BZ56G71o.js => jinja-BeguzEd0.js} (98%) rename internal/webui/dist/assets/{jison-CrMHkA5T.js => jison-CCx2qNB9.js} (99%) rename internal/webui/dist/assets/{json-xe-_kEqr.js => json-I28f8KUm.js} (97%) rename internal/webui/dist/assets/{jsx-BaQikP4I.js => jsx-CrD-Ow3U.js} (99%) rename internal/webui/dist/assets/{julia-DOQr_yfw.js => julia-DdSuU0oJ.js} (99%) rename internal/webui/dist/assets/{just-DJjQ6wca.js => just-DxOGI1MU.js} (97%) rename internal/webui/dist/assets/{latex-BR2yZEm8.js => latex-BTFSxgVs.js} (99%) rename internal/webui/dist/assets/{liquid-BW4tFZT5.js => liquid-WYMJQfxi.js} (98%) rename internal/webui/dist/assets/{lua-BMwKRpUS.js => lua-NdL_hgi8.js} (99%) rename internal/webui/dist/assets/{marko-_k-1VAV1.js => marko-BXDrtGB_.js} (99%) rename internal/webui/dist/assets/{mdc-Bpi8gJ8w.js => mdc-DFT9jeFB.js} (99%) rename internal/webui/dist/assets/{nginx-Bqz6odJ0.js => nginx-BGimcMtc.js} (99%) rename internal/webui/dist/assets/{nim-DUfzkSYY.js => nim-Boc8nMzF.js} (98%) rename internal/webui/dist/assets/{org-hCFMncj0.js => org-IUMfWevQ.js} (96%) rename internal/webui/dist/assets/{perl-BOSN-lJd.js => perl-Dlk0_VJm.js} (99%) rename internal/webui/dist/assets/{php-BcxfUlb0.js => php-BCj8cGx_.js} (99%) rename internal/webui/dist/assets/{pug-CCacKbEP.js => pug-DVicUvHI.js} (99%) rename internal/webui/dist/assets/{qml-BJ3i-i8V.js => qml-CAGCQzHi.js} (98%) rename internal/webui/dist/assets/{r-Cq3JeZGS.js => r-DPCSjHhB.js} (99%) rename internal/webui/dist/assets/{razor-D4KIaiN4.js => razor-DaR4FNlZ.js} (99%) rename internal/webui/dist/assets/{regexp-BtVX3oxr.js => regexp-DD5bv9lN.js} (99%) rename internal/webui/dist/assets/{rst-yziTZ18z.js => rst-CwnrqHo7.js} (96%) rename internal/webui/dist/assets/{ruby-CxwDFG51.js => ruby-DLg3GxA3.js} (98%) rename internal/webui/dist/assets/{sas-DwRcM5a3.js => sas-7kC5yJIB.js} (99%) rename internal/webui/dist/assets/{scss-B8r4RXCT.js => scss-TPfA2Rl9.js} (99%) rename internal/webui/dist/assets/{shellscript-CE8jMVsJ.js => shellscript-BxUYTJbB.js} (99%) rename internal/webui/dist/assets/{shellsession-CxmlJTEF.js => shellsession-D8Detfs1.js} (91%) rename internal/webui/dist/assets/{soy-BzTEIhUJ.js => soy-DgmP-rkN.js} (99%) rename internal/webui/dist/assets/{sql-ClIVuo9t.js => sql-WfIMpFBo.js} (99%) rename internal/webui/dist/assets/{stata-BB9tap1y.js => stata-BoXU_fVr.js} (99%) rename internal/webui/dist/assets/{surrealql-CI8AgyIv.js => surrealql-BZp4t379.js} (99%) rename internal/webui/dist/assets/{svelte-D1eIrOoP.js => svelte-D0JzGzh-.js} (99%) rename internal/webui/dist/assets/{templ-Bw4hFTpq.js => templ-BuDeFWw_.js} (99%) rename internal/webui/dist/assets/{tex-BZ8j5Ki8.js => tex-hxvblT0F.js} (98%) rename internal/webui/dist/assets/{ts-tags-CJWRyznG.js => ts-tags-Ca4r_vit.js} (98%) rename internal/webui/dist/assets/{tsx-C7U7cVa6.js => tsx-B01kvZiV.js} (99%) rename internal/webui/dist/assets/{twig-ChWsK9Nr.js => twig-B7e2eWcZ.js} (98%) rename internal/webui/dist/assets/{typescript-Dxzp_mdn.js => typescript-DeMv-M_d.js} (99%) rename internal/webui/dist/assets/{typst-DsfTC6LO.js => typst-IzvzibIJ.js} (99%) rename internal/webui/dist/assets/{vue-tc09nslQ.js => vue-BC0QlAe5.js} (98%) rename internal/webui/dist/assets/{vue-html-DNMTIoNH.js => vue-html-B_B1dAIw.js} (99%) rename internal/webui/dist/assets/{vue-vine-CJXT0Vnu.js => vue-vine-CwdEpNh4.js} (99%) rename internal/webui/dist/assets/{xml-BOKYiS6A.js => xml-DpeacbYS.js} (97%) rename internal/webui/dist/assets/{xsl-BpdVMO9A.js => xsl-xmhovwJb.js} (95%) rename internal/webui/dist/assets/{yaml-BmrUBDE7.js => yaml-CR2Q4Kv2.js} (99%) delete mode 100644 test/conformance/service_failures_test.go create mode 100644 test/contracts/comments.json create mode 100644 test/contracts/comments.test.ts create mode 100644 tools/check-boundaries/main.go diff --git a/README.md b/README.md index fc3ce17..01662b2 100644 --- a/README.md +++ b/README.md @@ -90,8 +90,8 @@ The default listener binds to `127.0.0.1` on an available port from 7981–7990. `--port 0` chooses an OS-assigned port. A non-loopback listener exposes local reviews to reachable clients. The browser opens a loopback URL for wildcard binds. -Legacy `review`, `serve`, and `service` commands remain compatibility -paths during migration. Use `servediff --help` for usage. +Use `servediff --help` for usage. Legacy `review`, `serve`, `service` and +`capture` commands are removed. Development fixtures use `servediff dev --fixture`. ## Agent hooks and remote ingestion @@ -107,7 +107,7 @@ Configure a remote server and token first. Plugins are remote-only. The plugin returns after scheduling; a detached Go worker collects the checkout and all registered worktrees using the same branch comparison as manual review. Non-Git directories are ignored. Child repositories and branches without live -checkouts are excluded; use `review --branch` for explicit object-only recovery. +checkouts are excluded; use `sync --branch` for explicit object-only recovery. Persistent Git identities survive checkout moves and branch renames. Initially clean automatic captures are skipped. Dirty-to-clean transitions and new session associations are submitted. Unchanged uploads are skipped, overlapping requests @@ -123,7 +123,7 @@ Inspect collection/delivery activity and retry waiting payloads: servediff collector status servediff collector retry tail -n 50 ~/.local/state/servediff/hooks/hooks.log -servediff review --branch feature --base main --no-browser +servediff sync --branch feature --base main --no-browser ``` Manually schedule the same detached collection used by harness plugins: @@ -238,9 +238,8 @@ triggers or `servediff collector retry`. Their pending-data retention remains seven days independently of server retention. Manual commands always submit and report failures directly. -Collectors advertise ingestion protocol 2 for comparison and session metadata; -upgrade collector and server together. Servers still accept protocol 1 payloads -and retries from older collectors. +Collectors and servers require ingestion protocol 3; upgrade them together. +Public v1 routes and synchronous ingestion are removed. `/api/v2/contexts` lists stored observations with `q`, `repository`, `branch`, `worktree`, `hostname`, `sourceId`, `runId`, `harness`, `sessionId` and `sessionName` @@ -257,9 +256,9 @@ WebMCP while the page is open; see [docs/webmcp.md](docs/webmcp.md). Local data lives in `$XDG_STATE_HOME/servediff/state.db`, or `~/.local/state/servediff/state.db`. `--state memory` disables persistence. -Migrations preserve historical reviews and retained captures. Legacy worktree -contexts cannot load Git through the server; submit a new observation with -`servediff review`. Unsupported databases are rejected without deleting data. +Schema 9 intentionally resets older versioned databases on first open. Current +state persists across restarts; newer or unrecognized databases are refused. +Legacy commands and pending producer payloads are retired. Stop older processes before upgrading. Local service lifecycle uses a private authenticated loopback control listener; its token does not authenticate the local public API. diff --git a/apps/web/src/DeleteContextButton.tsx b/apps/web/src/DeleteContextButton.tsx index 32f1294..4f42f91 100644 --- a/apps/web/src/DeleteContextButton.tsx +++ b/apps/web/src/DeleteContextButton.tsx @@ -21,8 +21,7 @@ export function DeleteContextButton() { const [error, setError] = useState(""); const pending = useRef(false); const cancelRef = useRef(null); - const snapshot = session.kind !== "worktree"; - const label = snapshot ? "Delete snapshot" : "Delete context"; + const label = "Delete snapshot"; async function confirm() { if (pending.current) return; @@ -69,10 +68,9 @@ export function DeleteContextButton() { > {label}? - This permanently deletes{" "} - {snapshot ? "this snapshot" : "this context and all its stored diffs"} - , including comments and reviewed-file marks. This cannot be undone. - Your Git files stay unchanged. New collections can appear again. + This permanently deletes this snapshot, including comments and + reviewed-file marks. This cannot be undone. Your Git files stay + unchanged. New collections can appear again.

diff --git a/apps/web/src/ProjectPicker.tsx b/apps/web/src/ProjectPicker.tsx index 1376854..f988e31 100644 --- a/apps/web/src/ProjectPicker.tsx +++ b/apps/web/src/ProjectPicker.tsx @@ -383,7 +383,7 @@ export function ProjectPicker({ aria-selected={entry.id === active?.id} aria-disabled={!available} disabled={!available} - title={`${contextDiagnostics(context)}${available ? "" : `\n${contextUnavailableReason(context)}`}`} + title={`${contextDiagnostics(context)}${available ? "" : `\n${contextUnavailableReason()}`}`} onClick={() => choose(entry.id)} onMouseMove={() => { if (available) setHighlightedId(entry.id); @@ -421,7 +421,7 @@ export function ProjectPicker({ {!available && ( - {contextUnavailableReason(context)} + {contextUnavailableReason()} )} {(!pipedContext || grouped) && ( diff --git a/apps/web/src/project-picker.ts b/apps/web/src/project-picker.ts index a5d8e96..c7f766f 100644 --- a/apps/web/src/project-picker.ts +++ b/apps/web/src/project-picker.ts @@ -19,7 +19,7 @@ export const defaultPickerFilters: PickerFilters = { export const pipedGroupId = "piped"; export function contextIsPiped(context: ApiContext) { - return context.source === "stdin" || context.kind === "capture"; + return context.source === "stdin"; } export function contextTimestamp(context: ApiContext) { @@ -134,9 +134,7 @@ function matchScore(value: string, word: string): number { function pickerRecency(context: ApiContext) { if (contextIsPiped(context)) return contextTimestamp(context); - return context.kind === "observation" - ? context.lastSubmittedAt - : context.lastChangedAt; + return context.lastSubmittedAt; } export function pickerResults( @@ -255,7 +253,7 @@ export function contextDiagnostics(context: ApiContext) { const observation = context.observation; return [ `${context.name} · ${contextDetail(context)}`, - context.kind !== "capture" ? contextCheckoutLabel(context) : "", + contextCheckoutLabel(context), context.root ?? context.submittedFrom ?? "Piped", observationSummary(context), observation ? `Source: ${observation.sourceId}` : "", @@ -286,10 +284,8 @@ export function pickerEntryAvailable(entry: PickerEntry) { : entry.context.availability === "available"; } -export function contextUnavailableReason(context: ApiContext) { - return context.kind === "worktree" - ? "No collected snapshot for this checkout" - : "Snapshot unavailable"; +export function contextUnavailableReason() { + return "Snapshot unavailable"; } export function pickerEntries( @@ -316,7 +312,7 @@ export function pickerEntries( const piped = results.filter(contextIsPiped); for (const context of results) { if (contextIsPiped(context)) continue; - if (context.kind !== "observation" || !context.repositoryId) { + if (!context.repositoryId) { entries.push({ id: context.id, kind: "context", context }); continue; } diff --git a/apps/web/test/browser/app.spec.ts b/apps/web/test/browser/app.spec.ts index 95b3743..e2390a7 100644 --- a/apps/web/test/browser/app.spec.ts +++ b/apps/web/test/browser/app.spec.ts @@ -26,7 +26,7 @@ test("disabled comments issue no requests and expose no comment UI", async ({ contentType: "application/json", body: JSON.stringify({ id: new URL(route.request().url()).pathname.split("/").at(-1), - kind: "capture", + kind: "observation", source: "stdin", name: "Piped", root: "fixture", @@ -616,7 +616,25 @@ test("inline comments use a distinct structured surface while sidebar comments r await page.setViewportSize({ width: 1280, height: 4_000 }); await page.goto("/"); await page.evaluate(async () => { - const response = await fetch("/api/v1/diffs/current?scope=all"); + const catalog: unknown = await (await fetch("/api/v2/contexts")).json(); + if ( + typeof catalog !== "object" || + catalog === null || + !("contexts" in catalog) || + !Array.isArray(catalog.contexts) + ) + throw new Error("Missing catalog"); + const context: unknown = catalog.contexts[0]; + if ( + typeof context !== "object" || + context === null || + !("id" in context) || + typeof context.id !== "string" + ) + throw new Error("Missing context"); + const contextId = context.id; + const base = "/api/v2/contexts/" + encodeURIComponent(contextId); + const response = await fetch(base + "/diffs/current?scope=all"); const data: unknown = await response.json(); if (typeof data !== "object" || data === null) throw new Error("Bad fixture"); @@ -644,7 +662,7 @@ test("inline comments use a distinct structured surface while sidebar comments r throw new Error(`Missing fixture fingerprint for ${path}`); return fingerprint; }; - const imported = await fetch("/api/v1/comments/import", { + const imported = await fetch(base + "/comments/import", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ @@ -1262,7 +1280,25 @@ test("copy dialog reports clipboard status and restores focus", async ({ await page.goto("/"); await expect(page.locator("#connection")).toHaveText("Fixed snapshot"); await page.evaluate(async () => { - const response = await fetch("/api/v1/diffs/current?scope=all"); + const catalog: unknown = await (await fetch("/api/v2/contexts")).json(); + if ( + typeof catalog !== "object" || + catalog === null || + !("contexts" in catalog) || + !Array.isArray(catalog.contexts) + ) + throw new Error("Missing catalog"); + const context: unknown = catalog.contexts[0]; + if ( + typeof context !== "object" || + context === null || + !("id" in context) || + typeof context.id !== "string" + ) + throw new Error("Missing context"); + const contextId = context.id; + const base = "/api/v2/contexts/" + encodeURIComponent(contextId); + const response = await fetch(base + "/diffs/current?scope=all"); const data: unknown = await response.json(); if (typeof data !== "object" || data === null) throw new Error("Bad fixture"); @@ -1287,7 +1323,7 @@ test("copy dialog reports clipboard status and restores focus", async ({ : undefined; if (typeof fingerprint !== "string") throw new Error("Missing fixture fingerprint"); - const imported = await fetch("/api/v1/comments/import", { + const imported = await fetch(base + "/comments/import", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ diff --git a/apps/web/test/browser/async-recovery.spec.ts b/apps/web/test/browser/async-recovery.spec.ts index e6df9bd..eda019e 100644 --- a/apps/web/test/browser/async-recovery.spec.ts +++ b/apps/web/test/browser/async-recovery.spec.ts @@ -12,9 +12,13 @@ declare global { async function fixture(baseURL: string | undefined) { if (!baseURL) throw new Error("Missing test URL"); - const { data } = await createApiClient({ baseUrl: baseURL }).GET( - "/api/v1/diffs/current", - { params: { query: { scope: "all" } } }, + const client = createApiClient({ baseUrl: baseURL }); + const catalog = await client.GET("/api/v2/contexts"); + const contextId = catalog.data?.contexts[0]?.id; + if (!contextId) throw new Error("Missing fixture context"); + const { data } = await client.GET( + "/api/v2/contexts/{contextId}/diffs/current", + { params: { path: { contextId }, query: { scope: "all" } } }, ); if (!data) throw new Error("Missing fixture diff"); return data; @@ -503,9 +507,10 @@ test("reviewed-file failure remains visible with comments disabled and retries", baseURL, }) => { if (!baseURL) throw new Error("Missing test URL"); - const { data: session } = await createApiClient({ baseUrl: baseURL }).GET( - "/api/v1/session", + const catalog = await createApiClient({ baseUrl: baseURL }).GET( + "/api/v2/contexts", ); + const session = catalog.data?.contexts[0]; if (!session) throw new Error("Missing fixture session"); await page.route("**/api/v2/contexts/*", (route) => route.fulfill({ diff --git a/apps/web/test/browser/design-refresh.spec.ts b/apps/web/test/browser/design-refresh.spec.ts index 3cf77aa..3d93c46 100644 --- a/apps/web/test/browser/design-refresh.spec.ts +++ b/apps/web/test/browser/design-refresh.spec.ts @@ -5,7 +5,25 @@ test.beforeEach(async ({ request }) => resetFixtureState(request)); async function seedReviewComments(page: Page) { await page.evaluate(async () => { - const response = await fetch("/api/v1/diffs/current?scope=all"); + const catalog: unknown = await (await fetch("/api/v2/contexts")).json(); + if ( + typeof catalog !== "object" || + catalog === null || + !("contexts" in catalog) || + !Array.isArray(catalog.contexts) + ) + throw new Error("Missing catalog"); + const context: unknown = catalog.contexts[0]; + if ( + typeof context !== "object" || + context === null || + !("id" in context) || + typeof context.id !== "string" + ) + throw new Error("Missing context"); + const contextId = context.id; + const base = "/api/v2/contexts/" + encodeURIComponent(contextId); + const response = await fetch(base + "/diffs/current?scope=all"); const data: unknown = await response.json(); if (typeof data !== "object" || data === null) throw new Error("Bad fixture"); @@ -30,7 +48,7 @@ async function seedReviewComments(page: Page) { : undefined; if (typeof fingerprint !== "string") throw new Error("Missing fixture fingerprint"); - const imported = await fetch("/api/v1/comments/import", { + const imported = await fetch(base + "/comments/import", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ diff --git a/apps/web/test/browser/fixture-state.ts b/apps/web/test/browser/fixture-state.ts index d35199f..75fcbb5 100644 --- a/apps/web/test/browser/fixture-state.ts +++ b/apps/web/test/browser/fixture-state.ts @@ -5,16 +5,23 @@ function record(value: unknown): value is Record { } export async function resetFixtureState(request: APIRequestContext) { - const response = await request.get("/api/v1/comments"); + const catalog: unknown = await (await request.get("/api/v2/contexts")).json(); + if (!record(catalog) || !Array.isArray(catalog.contexts)) + throw new Error("Missing fixture catalog"); + const context: unknown = catalog.contexts[0]; + if (!record(context) || typeof context.id !== "string") + throw new Error("Missing fixture context"); + const base = "/api/v2/contexts/" + encodeURIComponent(context.id); + const response = await request.get(base + "/comments"); const body: unknown = await response.json(); if (record(body) && Array.isArray(body.comments)) { for (const comment of body.comments) { if (record(comment) && typeof comment.id === "string") await request.delete( - `/api/v1/comments/${encodeURIComponent(comment.id)}`, + `${base}/comments/${encodeURIComponent(comment.id)}`, ); } } for (const scope of ["all", "staged", "unstaged"]) - await request.delete(`/api/v1/review-marks?scope=${scope}`); + await request.delete(`${base}/review-marks?scope=${scope}`); } diff --git a/apps/web/test/browser/local-workspace.spec.ts b/apps/web/test/browser/local-workspace.spec.ts index 42724e0..131c4b9 100644 --- a/apps/web/test/browser/local-workspace.spec.ts +++ b/apps/web/test/browser/local-workspace.spec.ts @@ -27,7 +27,7 @@ async function localWorkspace(page: Page) { id: "local-review", locationId: "location", repositoryId: "repo", - kind: "worktree", + kind: "observation", createdAt: 1, lastSubmittedAt: 1, lastChangedAt: 1, @@ -247,7 +247,7 @@ async function deletableWorkspace( single = false, ) { const state = await localWorkspace(page); - if (snapshot) state.context.kind = "capture"; + if (snapshot) state.context.source = "stdin"; const contexts = [ state.context, { ...state.context, id: "other", name: "Other review" }, @@ -290,20 +290,20 @@ async function deletableWorkspace( return { ...deletion, contexts, state, deletion }; } -test("context deletion confirms its scope and cancel restores focus without deleting", async ({ +test("snapshot deletion confirms its scope and cancel restores focus without deleting", async ({ page, }) => { const state = await deletableWorkspace(page); const trigger = page.getByRole("button", { - name: "Delete context", + name: "Delete snapshot", exact: true, }); await trigger.click(); const dialog = page.getByRole("dialog", { - name: "Delete context?", + name: "Delete snapshot?", exact: true, }); - await expect(dialog).toContainText("all its stored diffs"); + await expect(dialog).toContainText("this snapshot"); await expect(dialog).toContainText("comments and reviewed-file marks"); await expect(dialog).toContainText("Local review"); await expect( @@ -356,14 +356,14 @@ test("deletion failure stays retryable and pending deletion blocks dismissal and const { deletion } = await deletableWorkspace(page); deletion.fail = true; await page - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); const dialog = page.getByRole("dialog", { - name: "Delete context?", + name: "Delete snapshot?", exact: true, }); await dialog - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); await expect(dialog.getByRole("alert")).toHaveText( "Storage unavailable. Try again.", @@ -372,7 +372,7 @@ test("deletion failure stays retryable and pending deletion blocks dismissal and deletion.fail = false; deletion.hold = true; await dialog - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); await expect( dialog.getByRole("button", { name: "Deleting…", exact: true }), @@ -395,10 +395,10 @@ test("deleting the last context shows a focused empty state on mobile", async ({ await deletableWorkspace(page, false, true); await page.setViewportSize({ width: 360, height: 640 }); await page - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); const dialog = page.getByRole("dialog", { - name: "Delete context?", + name: "Delete snapshot?", exact: true, }); const bounds = await dialog.boundingBox(); @@ -407,7 +407,7 @@ test("deleting the last context shows a focused empty state on mobile", async ({ expect(bounds.x + bounds.width).toBeLessThanOrEqual(360); expect(bounds.y + bounds.height).toBeLessThanOrEqual(640); await dialog - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); await expect(page).toHaveURL(/\/$/); await expect( @@ -611,11 +611,13 @@ test("context switching isolates delayed repository responses and fixed captures id: "second-repo", name: "Second repo", root: "/second-repo", + repositoryId: "second-repo", }, { ...state.context, id: "piped-patch", - kind: "capture", + kind: "observation", + source: "stdin", name: "Captured patch", root: null, locationId: null, @@ -655,7 +657,7 @@ test("context switching isolates delayed repository responses and fixed captures id: `diff-${id}`, name: context.name, root: context.root ?? "", - source: context.kind === "capture" ? "stdin" : "local", + source: context.source === "stdin" ? "stdin" : "local", }, }); }); @@ -671,6 +673,7 @@ test("context switching isolates delayed repository responses and fixed captures .getByRole("combobox", { name: "Search reviews" }) .fill("Second repo"); await page.keyboard.press("Enter"); + await page.keyboard.press("Enter"); await expect(page.locator(".context-switcher-name")).toHaveText( "Second repo", ); @@ -806,11 +809,7 @@ test("Piped history ignores repository filters and switches timestamp rows by ke await expect(trigger).toBeFocused(); }); -for (const kind of [ - "worktree", - "observation", - "capture", -] satisfies ApiContext["kind"][]) { +for (const kind of ["observation"] satisfies ApiContext["kind"][]) { test(`landing stays unselected when ${kind} contexts have no usable diff`, async ({ page, }) => { @@ -842,7 +841,7 @@ for (const kind of [ expect(state.scopes).toEqual([]); await trigger.click(); const dialog = page.getByRole("dialog", { name: "Switch review" }); - if (kind === "capture") { + if (state.context.source === "stdin") { await expect(dialog.getByRole("option")).toHaveCount(1); await dialog.getByRole("option", { name: /^Piped/ }).click(); await expect( @@ -939,6 +938,7 @@ test("empty contexts remain accessible through the picker and direct URLs", asyn await dialog.getByRole("button", { name: "Filters", exact: true }).click(); await dialog.getByRole("checkbox", { name: "All", exact: true }).check(); await dialog.getByRole("option", { name: /Local review/ }).click(); + await dialog.getByRole("option").click(); await expect(page).toHaveURL(/\/contexts\/local-review$/); await expect( page.getByRole("heading", { name: "No changes in this snapshot" }), @@ -970,14 +970,14 @@ test("deleting the last diff returns to landing when empty contexts remain", asy const picker = page.getByRole("dialog", { name: "Switch review" }); await picker.getByRole("button", { name: "Filters", exact: true }).click(); await picker.getByRole("checkbox", { name: "All", exact: true }).check(); - await expect(picker.getByRole("option")).toHaveCount(2); + await expect(picker.getByRole("option")).toContainText("2 snapshots"); await page.keyboard.press("Escape"); await page - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); await page - .getByRole("dialog", { name: "Delete context?", exact: true }) - .getByRole("button", { name: "Delete context", exact: true }) + .getByRole("dialog", { name: "Delete snapshot?", exact: true }) + .getByRole("button", { name: "Delete snapshot", exact: true }) .click(); await expect(page).toHaveURL(/\/$/); await expect( @@ -1011,6 +1011,7 @@ test("unavailable context keeps the switcher usable", async ({ page }) => { .getByRole("combobox", { name: "Search reviews" }) .fill("Local review"); await page.keyboard.press("Enter"); + await page.keyboard.press("Enter"); await ready(page); await page .getByRole("button", { name: "Switch review", exact: true }) @@ -1026,310 +1027,6 @@ test("unavailable context keeps the switcher usable", async ({ page }) => { await expect(page).toHaveURL(/\/contexts\/local-review$/); }); -test("repository popup orders checkouts by changes and shares click and keyboard search", async ({ - page, -}) => { - const state = await localWorkspace(page); - const contexts: ApiContext[] = [ - { - ...state.context, - name: "servediff", - branch: "main", - changedFileCount: 0, - lastChangedAt: 10, - }, - { - ...state.context, - id: "external-tree", - name: "servediff", - branch: "feature/picker", - worktreeName: "picker-folder", - root: "/elsewhere/picker-folder", - lastChangedAt: 3, - changedFileCount: 6, - }, - { - ...state.context, - id: "other-repo", - name: "dotfiles", - repositoryId: "dotfiles", - root: "/dotfiles", - lastChangedAt: 2, - changedFileCount: 0, - }, - ]; - await page.route("**/api/v2/contexts?*", (route) => - route.fulfill({ json: { contexts, nextCursor: null } }), - ); - await page.route("**/api/v2/contexts/*", (route) => { - const id = new URL(route.request().url()).pathname.split("/").at(-1); - return route.fulfill({ - json: contexts.find((context) => context.id === id), - }); - }); - await page.goto("/"); - await ready(page); - const trigger = page.getByRole("button", { - name: "Switch review", - exact: true, - }); - await expect(trigger).toHaveAttribute("aria-haspopup", "dialog"); - await expect(trigger).toContainText("servediff"); - await expect(trigger).toContainText("feature/picker"); - await trigger.click(); - const dialog = page.getByRole("dialog", { name: "Switch review" }); - const search = dialog.getByRole("combobox", { name: "Search reviews" }); - await expect(search).toBeFocused(); - await dialog.getByRole("button", { name: "Filters", exact: true }).click(); - const includeAll = dialog.getByRole("checkbox", { name: "All", exact: true }); - await expect(includeAll).not.toBeChecked(); - await expect(dialog.getByRole("option")).toHaveCount(1); - await expect(dialog.getByRole("option")).toContainText("feature/picker"); - await includeAll.check(); - await expect(dialog.getByRole("option")).toHaveCount(3); - await expect(dialog.locator(".project-picker-name")).toHaveText([ - "servediff", - "servediff", - "dotfiles", - ]); - await expect(dialog.locator(".project-picker-changes")).toHaveText([ - "6 changed files", - "No changes", - "No changes", - ]); - const desktopBounds = await dialog.boundingBox(); - if (!desktopBounds) throw new Error("Missing popup bounds"); - expect(desktopBounds.y).toBeLessThan(120); - await search.fill("servediff"); - await expect(dialog.getByRole("option")).toHaveCount(2); - await expect(dialog.locator(".project-picker-branch")).toHaveText([ - "feature/picker", - "main", - ]); - await search.fill(""); - await expect( - dialog.getByRole("option", { name: /feature\/picker/ }), - ).toContainText("Worktree · /elsewhere/picker-folder"); - await search.fill("no matching repo"); - await expect(dialog.getByRole("status")).toHaveText("No matching reviews"); - await search.fill(""); - await page.keyboard.press("ArrowUp"); - await page.keyboard.press("ArrowUp"); - await expect( - dialog.getByRole("option", { name: /feature\/picker/ }), - ).toHaveAttribute("aria-selected", "true"); - await page.keyboard.press("Enter"); - await expect(page).toHaveURL(/\/contexts\/external-tree$/); - await expect(dialog).toBeHidden(); - await expect(trigger).toBeFocused(); - await expect(trigger).toContainText("feature/picker"); - - for (const shortcut of ["Control+k", "Meta+k"]) { - await page.keyboard.press(shortcut); - await expect(dialog).toBeVisible(); - await expect(search).toBeFocused(); - await expect(search).toHaveValue(""); - await search.fill("servediff main"); - await expect(dialog.getByRole("option")).toHaveCount(1); - await page.keyboard.press("Escape"); - await expect(dialog).toBeHidden(); - await expect(trigger).toBeFocused(); - } - await page.setViewportSize({ width: 360, height: 640 }); - await trigger.click(); - const bounds = await dialog.boundingBox(); - if (!bounds) throw new Error("Missing popup bounds"); - expect(bounds.x).toBeGreaterThanOrEqual(0); - expect(bounds.x + bounds.width).toBeLessThanOrEqual(360); - expect(bounds.y).toBeGreaterThanOrEqual(0); - expect(bounds.y + bounds.height).toBeLessThanOrEqual(640); - await expect( - dialog.getByRole("option", { name: /feature\/picker/ }), - ).toBeVisible(); - await dialog.getByRole("option", { name: /dotfiles/ }).click(); - await expect(page).toHaveURL(/\/contexts\/other-repo$/); - await expect(dialog).toBeHidden(); -}); - -test("picker distinguishes unknown and unavailable status and refreshes change counts", async ({ - page, -}) => { - const state = await localWorkspace(page); - let changedFileCount = 0; - const unknown: ApiContext = { - ...state.context, - id: "unknown", - name: "Unknown repo", - root: "/unknown", - changedFileCount: null, - }; - const unavailable: ApiContext = { - ...state.context, - id: "unavailable", - name: "Missing repo", - root: "/missing", - availability: "unavailable", - changedFileCount: null, - }; - await page.route("**/api/v2/contexts?*", (route) => - route.fulfill({ - json: { - contexts: [ - { ...state.context, changedFileCount }, - unknown, - unavailable, - ], - nextCursor: null, - }, - }), - ); - await page.goto("/contexts/local-review"); - await ready(page); - await page - .getByRole("button", { name: "Switch review", exact: true }) - .click(); - const dialog = page.getByRole("dialog", { name: "Switch review" }); - await dialog.getByRole("button", { name: "Filters", exact: true }).click(); - const includeAll = dialog.getByRole("checkbox", { name: "All", exact: true }); - await expect(includeAll).not.toBeChecked(); - await expect(dialog.getByRole("option")).toHaveCount(0); - await includeAll.check(); - await expect( - dialog.getByRole("option", { name: /Local review/ }), - ).toContainText("No changes"); - await expect( - dialog.getByRole("option", { name: /Unknown repo/ }), - ).toContainText("Status unknown"); - await expect( - dialog.getByRole("option", { name: /Missing repo/ }), - ).toContainText("Unavailable"); - await expect( - dialog.getByRole("option", { name: /Missing repo/ }), - ).toBeDisabled(); - const search = dialog.getByRole("combobox", { name: "Search reviews" }); - await search.fill("Local"); - await expect(dialog.getByRole("option")).toHaveCount(1); - await includeAll.uncheck(); - await expect(dialog.getByRole("option")).toHaveCount(0); - await search.focus(); - changedFileCount = 2; - await page.evaluate(() => - document.dispatchEvent(new Event("visibilitychange")), - ); - await expect(dialog.getByRole("option")).toContainText("2 changed files"); - await expect(search).toBeFocused(); - await expect(search).toHaveValue("Local"); - await expect(search).toHaveAttribute( - "aria-activedescendant", - (await dialog.getByRole("option").getAttribute("id")) ?? "", - ); -}); - -test("picker combines freshness and All filters and preserves them on reopening", async ({ - page, -}) => { - const state = await localWorkspace(page); - const contexts: ApiContext[] = [ - state.context, - { ...state.context, id: "old", name: "Old changes", stale: true }, - { - ...state.context, - id: "empty", - name: "Empty latest", - changedFileCount: 0, - }, - { - ...state.context, - id: "unknown", - name: "Unknown latest", - changedFileCount: null, - }, - { - ...state.context, - id: "missing", - name: "Missing latest", - availability: "unavailable", - }, - { - ...state.context, - id: "old-empty", - name: "Empty stale", - stale: true, - changedFileCount: 0, - }, - { - ...state.context, - id: "old-missing", - name: "Missing stale", - stale: true, - availability: "unavailable", - }, - ]; - await page.route("**/api/v2/contexts?*", (route) => - route.fulfill({ json: { contexts, nextCursor: null } }), - ); - await page.goto("/"); - await ready(page); - const trigger = page.getByRole("button", { - name: "Switch review", - exact: true, - }); - await trigger.click(); - const dialog = page.getByRole("dialog", { name: "Switch review" }); - await dialog.getByRole("button", { name: "Filters", exact: true }).click(); - const search = dialog.getByRole("combobox", { name: "Search reviews" }); - const latest = dialog.getByRole("button", { name: "Latest", exact: true }); - const stale = dialog.getByRole("button", { name: "Stale", exact: true }); - const allFreshness = dialog.getByRole("button", { name: "All", exact: true }); - const includeAll = dialog.getByRole("checkbox", { name: "All", exact: true }); - await expect(latest).toHaveAttribute("aria-pressed", "true"); - await expect(allFreshness).toHaveAttribute("aria-pressed", "false"); - await expect(stale).toHaveAttribute("aria-pressed", "false"); - await expect(includeAll).not.toBeChecked(); - await expect( - dialog.getByTitle(/include unavailable.*no changes/i), - ).toBeVisible(); - const checkboxBounds = await includeAll.boundingBox(); - const staleBounds = await stale.boundingBox(); - if (!checkboxBounds || !staleBounds) throw new Error("Missing filter bounds"); - expect(checkboxBounds.x).toBeGreaterThan(staleBounds.x + staleBounds.width); - await expect(dialog.getByRole("option")).toHaveCount(1); - await expect(dialog.getByRole("option")).toContainText("Local review"); - await search.fill("Old changes"); - await expect(dialog.getByRole("option")).toHaveCount(0); - await allFreshness.click(); - await expect(dialog.getByRole("option")).toHaveCount(1); - await expect(dialog.getByRole("option")).toContainText("Stale"); - await search.fill(""); - await expect(dialog.getByRole("option")).toHaveCount(2); - await stale.click(); - await expect(dialog.getByRole("option")).toHaveCount(1); - await expect(dialog.getByRole("option")).toContainText("Old changes"); - await includeAll.check(); - await expect(dialog.getByRole("option")).toHaveCount(3); - await expect( - dialog.getByRole("option", { name: /Empty stale/ }), - ).toContainText("No changes"); - await expect( - dialog.getByRole("option", { name: /Missing stale/ }), - ).toContainText("Unavailable"); - await latest.click(); - await expect(dialog.getByRole("option")).toHaveCount(4); - await expect(dialog.getByRole("option", { name: /Old changes/ })).toHaveCount( - 0, - ); - await includeAll.uncheck(); - await expect(dialog.getByRole("option")).toHaveCount(1); - await stale.click(); - await includeAll.check(); - await page.keyboard.press("Escape"); - await expect(dialog).toBeHidden(); - await trigger.click(); - await expect(stale).toHaveAttribute("aria-pressed", "true"); - await expect(includeAll).toBeChecked(); - await expect(dialog.getByRole("option")).toHaveCount(3); -}); - test("observation picker drills into repositories and searches independent sources on the same branch", async ({ page, }) => { @@ -1544,6 +1241,7 @@ test("picker combines filters before grouping and preserves them across navigati ...state.context, id: "missing", name: "Missing checkout", + repositoryId: "missing-repository", availability: "unavailable", }, ]; @@ -1623,9 +1321,7 @@ test("picker combines filters before grouping and preserves them across navigati ); const unavailable = dialog.getByRole("option", { name: /Missing checkout/ }); await expect(unavailable).toBeDisabled(); - await expect(unavailable).toContainText( - "No collected snapshot for this checkout", - ); + await expect(unavailable).toContainText("Snapshot unavailable"); await search.fill("Missing checkout"); await search.press("ArrowDown"); await search.press("Enter"); diff --git a/apps/web/test/fixture-server.ts b/apps/web/test/fixture-server.ts index 82f5a88..ae1c6c7 100644 --- a/apps/web/test/fixture-server.ts +++ b/apps/web/test/fixture-server.ts @@ -29,7 +29,7 @@ export async function startFixtureServer(): Promise<{ [ "run", "./cmd/servediff", - "serve", + "dev", "--fixture", "test/fixtures/sample.diff", "--state", diff --git a/apps/web/test/project-picker.test.ts b/apps/web/test/project-picker.test.ts index 8ec5203..f69ab61 100644 --- a/apps/web/test/project-picker.test.ts +++ b/apps/web/test/project-picker.test.ts @@ -20,7 +20,8 @@ import { const main: ApiContext = { id: "main", - kind: "worktree", + kind: "observation", + source: "local", name: "servediff", branch: "main", worktreeName: null, @@ -152,7 +153,7 @@ test("freshness and inclusion filters combine before search and repository group }); test("lists individual checkouts by recency without repository grouping", () => { - const recentClone = { ...clone, lastSubmittedAt: 0, lastChangedAt: 3 }; + const recentClone = { ...clone, lastSubmittedAt: 3, lastChangedAt: 3 }; assert.deepEqual( pickerResults([worktree, recentClone, main], "", allFilters).map( (context) => context.id, @@ -196,7 +197,7 @@ test("search lists newest changes before stronger matches", () => { ), ["picker", "clone"], ); - const tied = { ...exact, lastChangedAt: worktree.lastChangedAt }; + const tied = { ...exact, lastSubmittedAt: worktree.lastSubmittedAt }; assert.equal( pickerResults([worktree, tied], "picker", allFilters)[0]?.id, tied.id, @@ -207,7 +208,8 @@ test("captures stay selectable", () => { const capture: ApiContext = { ...main, id: "capture", - kind: "capture", + kind: "observation", + source: "stdin", name: "Captured patch", root: null, repositoryId: null, @@ -227,8 +229,8 @@ test("captures stay selectable", () => { test("changed checkouts precede newer empty projects, including search results", () => { const changed = { ...worktree, changedFileCount: 2 }; - const newerEmpty = { ...main, lastChangedAt: 10 }; - const newerChanged = { ...clone, changedFileCount: 1, lastChangedAt: 4 }; + const newerEmpty = { ...main, lastSubmittedAt: 10 }; + const newerChanged = { ...clone, changedFileCount: 1, lastSubmittedAt: 4 }; for (const query of ["", "servediff"]) { assert.deepEqual( pickerResults([newerEmpty, changed, newerChanged], query, allFilters).map( @@ -453,7 +455,7 @@ test("freshly reviewed observations sort by latest review without changing colle assert.equal(repeatedReview.observation?.collectedAt, 1000); }); -test("Piped groups legacy captures and stdin observations independently of repositories and filters", () => { +test("Piped groups stdin observations independently of repositories and filters", () => { const piped: ApiContext = { ...observation("piped-old", "host", "run"), source: "stdin", @@ -464,7 +466,8 @@ test("Piped groups legacy captures and stdin observations independently of repos const capture: ApiContext = { ...main, id: "piped-new", - kind: "capture", + kind: "observation", + source: "stdin", createdAt: 2000, changedFileCount: 0, }; @@ -515,7 +518,7 @@ test("Piped timestamp labels use capture time and distinguish today, yesterday, const now = new Date(2026, 9, 5, 20, 30); const context: ApiContext = { ...main, - kind: "capture", + kind: "observation", createdAt: new Date(2026, 9, 5, 20, 17).getTime(), }; assert.ok(contextTimestampLabel(context, now).startsWith("Today, ")); diff --git a/cmd/servediff/config_test.go b/cmd/servediff/config_test.go index 33d3c6f..2e59d8f 100644 --- a/cmd/servediff/config_test.go +++ b/cmd/servediff/config_test.go @@ -18,36 +18,23 @@ func TestServerConfigPrecedenceAndSnapshotIsolation(t *testing.T) { t.Setenv("SERVEDIFF_PORT", "5123") t.Setenv("SERVEDIFF_STATE", "memory") t.Setenv("SERVEDIFF_WEB_DIR", "env-assets") - values, err := parseOptionsMode([]string{"--config-file", path}, io.Discard, false, true) + values, err := parseOptionsMode([]string{"--config-file", path}, io.Discard, true) if err != nil { t.Fatal(err) } - settings, _, err := resolvedServerSettings(values) + settings, err := resolvedServerSettings(values) if err != nil || settings.Host != "::1" || settings.Port != 5123 || settings.State != "memory" || filepath.Base(settings.WebDir) != "env-assets" { t.Fatalf("environment resolution: %#v %v", settings, err) } - values.config = `{"host":"192.0.2.1","port":6123,"state":"inline.db","webDir":"inline-assets"}` - settings, _, err = resolvedServerSettings(values) - if err != nil || settings.Host != "192.0.2.1" || settings.Port != 6123 || filepath.Base(settings.State) != "inline.db" || filepath.Base(settings.WebDir) != "inline-assets" { - t.Fatalf("inline resolution: %#v %v", settings, err) - } - values, err = parseOptionsMode([]string{"--config-file", path, "--config", `{"host":"192.0.2.1","port":6123,"state":"inline.db","webDir":"inline-assets"}`, "--host", "127.0.0.1", "--port", "7123", "--state", "flags.db", "--web-dir", "flags-assets"}, io.Discard, false, true) - if err != nil { - t.Fatal(err) - } - settings, explicit, err := resolvedServerSettings(values) - if err != nil || settings.Host != "127.0.0.1" || settings.Port != 7123 || filepath.Base(settings.State) != "flags.db" || filepath.Base(settings.WebDir) != "flags-assets" || !explicit.Host || !explicit.Port || !explicit.State || !explicit.WebDir { - t.Fatalf("flag resolution: %#v %#v %v", settings, explicit, err) - } - // An automatic-port parent snapshot must retain -1 and empty webDir despite env. - values, err = parseOptionsMode([]string{"--host", "127.0.0.1", "--port", "-1", "--state", "snapshot.db", "--runtime-dir", t.TempDir()}, io.Discard, true) + values, err = parseOptionsMode([]string{"--config-file", path, "--host", "127.0.0.1", "--port", "7123", "--state", "flags.db", "--web-dir", "flags-assets"}, io.Discard, true) if err != nil { t.Fatal(err) } - settings, _, err = serverSettings(values) - if err != nil || settings.Host != "127.0.0.1" || settings.Port != -1 || filepath.Base(settings.State) != "snapshot.db" || settings.WebDir != "" { - t.Fatalf("daemon snapshot changed: %#v %v", settings, err) + settings, err = resolvedServerSettings(values) + if err != nil || settings.Host != "127.0.0.1" || settings.Port != 7123 || filepath.Base(settings.State) != "flags.db" || filepath.Base(settings.WebDir) != "flags-assets" { + t.Fatalf("flag resolution: %#v %v", settings, err) } + } func TestConfigCommandExplicitFileAndEnvironmentIsolation(t *testing.T) { diff --git a/cmd/servediff/hook.go b/cmd/servediff/hook.go index dc765e7..81c1e5f 100644 --- a/cmd/servediff/hook.go +++ b/cmd/servediff/hook.go @@ -14,10 +14,10 @@ import ( "time" "github.com/flexdinesh/servediff/internal/collector" - "github.com/flexdinesh/servediff/internal/daemon" "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/hooks" "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/submission" ) // Hooks are notifications, never a reason to block or continue an agent turn. @@ -275,7 +275,7 @@ func newHookEngine(directory string) hooks.Engine { } return events, nil } - var destination *destination + var destination *submission.Destination engine.Resolve = func(ctx context.Context, event hooks.Event) (hooks.Target, error) { values, err := resolvedCollectorSettings(options{configFile: event.ConfigFile}) if err != nil { @@ -284,12 +284,12 @@ func newHookEngine(directory string) hooks.Engine { if values.server == "" || values.token == "" { return hooks.Target{}, errors.New("plugins require a remote server and bearer token; configure servediff config") } - destination, err = resolveDestination(ctx, values, daemon.Settings{}, daemon.Explicit{}, nil) + destination, err = submission.Resolve(ctx, values.server, values.token) if err != nil { return hooks.Target{}, err } - destination.target.SourceID, err = collector.SourceID() - return destination.target, err + destination.Target.SourceID, err = collector.SourceID() + return destination.Target, err } engine.Collect = func(ctx context.Context, event hooks.Event, previous string) (ingestion.Request, string, error) { settings, err := collectionOptions(options{directory: event.InputPath, sessionName: event.SessionName, agent: event.Agent, runID: event.RunID, trigger: "agent-hook", base: event.Base, branch: event.Branch}) @@ -311,16 +311,16 @@ func newHookEngine(directory string) hooks.Engine { return request, fingerprint, err } engine.Confirm = func(ctx context.Context, target hooks.Target, id string) (bool, error) { - return destination.current(ctx, id) + return destination.Current(ctx, id) } engine.SuppressInitialEmpty = func(ctx context.Context, target hooks.Target, request ingestion.Request) (bool, error) { - return destination.suppressInitialEmpty(ctx, request) + return destination.SuppressInitialEmpty(ctx, request) } engine.Deliver = func(ctx context.Context, target hooks.Target, request ingestion.Request) (string, error) { - if target != destination.target { + if target != destination.Target { return "", errors.New("destination identity changed before delivery") } - receipt, err := destination.deliver(ctx, request) + receipt, err := destination.Deliver(ctx, request) return receipt.ContextID, err } return engine diff --git a/cmd/servediff/ingestion_test.go b/cmd/servediff/ingestion_test.go index 4a90e32..b888d1b 100644 --- a/cmd/servediff/ingestion_test.go +++ b/cmd/servediff/ingestion_test.go @@ -2,17 +2,12 @@ package main import ( "bytes" - "encoding/json" "io" - "net/http" - "net/http/httptest" "os" "os/exec" "path/filepath" "strings" "testing" - - "github.com/flexdinesh/servediff/internal/ingestion" ) func cliRepository(t *testing.T) string { @@ -62,81 +57,6 @@ func TestBareInvocationRejectsNonRepositoryWithoutConsumingStdin(t *testing.T) { } } -func TestReviewManualAndAgentHookShareGitCollection(t *testing.T) { - root := cliRepository(t) - runtimeDir := filepath.Join(t.TempDir(), "runtime") - t.Setenv("SERVEDIFF_RUNTIME_DIR", runtimeDir) - t.Setenv("SERVEDIFF_CONFIG_PATH", filepath.Join(runtimeDir, "config.json")) - t.Setenv("SERVEDIFF_TOKEN", "secret-token") - var received []ingestion.Request - var server *httptest.Server - server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/api/v2/health" { - _ = json.NewEncoder(w).Encode(ingestion.Health{StateID: "database", ProtocolVersion: ingestion.ProtocolVersion}) - return - } - if r.URL.Path != "/api/v2/ingestions" || r.Header.Get("Authorization") != "Bearer secret-token" { - t.Errorf("request: %s %s", r.URL.Path, r.Header.Get("Authorization")) - } - var request ingestion.Request - if err := json.NewDecoder(r.Body).Decode(&request); err != nil { - t.Error(err) - http.Error(w, "bad request", 400) - return - } - received = append(received, request) - if len(request.Scopes) == 0 { - t.Error("missing scopes") - http.Error(w, "bad request", 400) - return - } - _ = json.NewEncoder(w).Encode(ingestion.Receipt{ContextID: "observation", ReviewURL: server.URL + "/contexts/observation", MCPURL: server.URL + "/mcp/contexts/observation", Snapshot: request.Scopes[0].Snapshot}) - })) - defer server.Close() - t.Setenv("SERVEDIFF_SERVER_URL", server.URL) - for _, trigger := range []string{"manual", "agent-hook"} { - stdin := testInputFile(t, []byte("review must ignore redirected stdin")) - arguments := []string{"review", "--path", root, "--source-id", "test-source", "--no-browser", "--trigger", trigger} - if trigger == "agent-hook" { - arguments = append(arguments, "--harness", "test-agent", "--run-id", "container-1") - } - var output bytes.Buffer - if err := run(t.Context(), arguments, stdin, &output, io.Discard); err != nil { - t.Fatal(err) - } - position, err := stdin.Seek(0, io.SeekCurrent) - if err != nil || position != 0 { - t.Fatalf("review consumed stdin: %d %v", position, err) - } - if !strings.Contains(output.String(), "/contexts/observation") || strings.Contains(output.String(), "service stop") { - t.Fatalf("remote output: %s", output.String()) - } - } - if len(received) != 2 { - t.Fatalf("received %d submissions", len(received)) - } - for index, request := range received { - expectedTrigger := []string{"manual", "agent-hook"}[index] - if request.Metadata.Root != root || request.Metadata.Branch != "feature" || request.Metadata.SourceID != "test-source" || request.Metadata.Trigger != expectedTrigger || request.Metadata.RepositoryKey == "" || request.Metadata.CheckoutKey == "" || request.Metadata.Hostname == "" { - t.Fatalf("metadata: %#v", request.Metadata) - } - } - if received[0].SubmissionID == received[1].SubmissionID { - t.Fatal("separate observations reused submission identity") - } - if received[1].Metadata.Agent != "test-agent" || received[1].Metadata.RunID != "container-1" { - t.Fatalf("hook metadata: %#v", received[1].Metadata) - } - entries, err := os.ReadDir(runtimeDir) - if err != nil || len(entries) != 3 { - t.Fatalf("remote ingestion created local service state: %v %v", entries, err) - } - log, err := os.ReadFile(filepath.Join(runtimeDir, "hooks", "hooks.log")) - if err != nil || !strings.Contains(string(log), `"status":"acknowledged"`) { - t.Fatalf("remote ingestion activity missing: %s %v", log, err) - } -} - func TestPipedInputKeepsSubmissionDirectoryWithoutGitIdentity(t *testing.T) { root := t.TempDir() t.Chdir(root) @@ -158,12 +78,12 @@ func TestPipedInputKeepsSubmissionDirectoryWithoutGitIdentity(t *testing.T) { func TestCollectorOptionsRejectAmbiguousInputsBeforeStartup(t *testing.T) { cases := [][]string{ {".", "--server", "http://example.test"}, {"change"}, {"watch"}, - {"review", "--server", "http://example.test", "--state", "memory"}, - {"review", "--trigger", "unknown"}, - {"review", "--fixture", "input.diff"}, + {"sync", "--server", "http://example.test", "--state", "memory"}, + {"sync", "--trigger", "unknown"}, + {"sync", "--fixture", "input.diff"}, {"pipe", "--capture", "saved"}, - {"review", "--config", "{}"}, - {"review", "--host", "0.0.0.0"}, + {"sync", "--config", "{}"}, + {"sync", "--host", "0.0.0.0"}, {"service", "start", "--server", "http://example.test"}, } for _, args := range cases { @@ -188,92 +108,3 @@ func TestHelpDoesNotExposeEnvironmentCredentials(t *testing.T) { } } } - -func TestConfigCLISetGetRemove(t *testing.T) { - t.Setenv("SERVEDIFF_CONFIG_PATH", filepath.Join(t.TempDir(), "config.json")) - var output bytes.Buffer - for _, args := range [][]string{{"service", "config", "set", "host", "0.0.0.0"}, {"service", "config", "get", "host"}, {"service", "config", "remove", "host"}, {"service", "config", "get", "host"}} { - if err := run(t.Context(), args, nil, &output, io.Discard); err != nil { - t.Fatal(err) - } - } - if !strings.Contains(output.String(), `"0.0.0.0"`) || !strings.Contains(output.String(), `"127.0.0.1"`) { - t.Fatalf("config output: %s", output.String()) - } -} - -func TestReviewDefaultsToCurrentCheckout(t *testing.T) { - root := cliRepository(t) - t.Chdir(root) - request, err := collectSubmission(t.Context(), "review", options{directory: ".", sourceID: "test-source", trigger: "manual"}, nil) - if err != nil { - t.Fatal(err) - } - if request.Metadata.Root != root || request.Metadata.Branch != "feature" { - t.Fatalf("current checkout: %#v", request.Metadata) - } -} - -func TestRemoteRetryReplaysCollectedSnapshot(t *testing.T) { - root := cliRepository(t) - var payloads [][]byte - var server *httptest.Server - server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/api/v2/health" { - _ = json.NewEncoder(w).Encode(ingestion.Health{StateID: "database", ProtocolVersion: ingestion.ProtocolVersion}) - return - } - raw, err := io.ReadAll(r.Body) - if err != nil { - t.Error(err) - return - } - payloads = append(payloads, raw) - if len(payloads) == 1 { - if err := os.WriteFile(filepath.Join(root, "file.txt"), []byte("newer content\n"), 0600); err != nil { - t.Error(err) - return - } - connection, _, err := w.(http.Hijacker).Hijack() - if err != nil { - t.Error(err) - return - } - _ = connection.Close() - return - } - var request ingestion.Request - if err := json.Unmarshal(raw, &request); err != nil { - t.Error(err) - return - } - _ = json.NewEncoder(w).Encode(ingestion.Receipt{ContextID: "observation", ReviewURL: server.URL + "/contexts/observation", MCPURL: server.URL + "/mcp/contexts/observation", Snapshot: request.Scopes[0].Snapshot}) - })) - defer server.Close() - if err := run(t.Context(), []string{"review", "--path", root, "--server", server.URL, "--source-id", "test-source", "--no-browser"}, nil, io.Discard, io.Discard); err != nil { - t.Fatal(err) - } - if len(payloads) != 2 || !bytes.Equal(payloads[0], payloads[1]) { - t.Fatalf("retry recollected or changed payload; submissions=%d", len(payloads)) - } -} - -func TestRemoteRejectionDoesNotRetry(t *testing.T) { - root := cliRepository(t) - attempts := 0 - var server *httptest.Server - server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/api/v2/health" { - _ = json.NewEncoder(w).Encode(ingestion.Health{StateID: "database", ProtocolVersion: ingestion.ProtocolVersion}) - return - } - attempts++ - w.WriteHeader(http.StatusForbidden) - _ = json.NewEncoder(w).Encode(ingestion.Problem{Status: http.StatusForbidden, Detail: "unauthorized source"}) - })) - defer server.Close() - err := run(t.Context(), []string{"review", "--path", root, "--server", server.URL, "--source-id", "test-source", "--no-browser"}, nil, io.Discard, io.Discard) - if err == nil || attempts != 1 { - t.Fatalf("rejected submission: attempts=%d error=%v", attempts, err) - } -} diff --git a/cmd/servediff/input.go b/cmd/servediff/input.go index 8b05ba8..13328bc 100644 --- a/cmd/servediff/input.go +++ b/cmd/servediff/input.go @@ -12,7 +12,6 @@ import ( "github.com/flexdinesh/servediff/internal/collector" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/daemon" "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/hooks" "github.com/flexdinesh/servediff/internal/ingestion" @@ -28,33 +27,29 @@ type loadedInput struct { captureID string contextID string mcpURL string - submitted bool remote bool } -func acquireInput(values options, stdin *os.File) (daemon.InitialInput, error) { - if values.capture != "" { - return daemon.InitialInput{Kind: "reopen", CaptureID: values.capture}, nil - } +func acquireInput(values options, stdin *os.File) (initialInput, error) { cwd, err := filepath.Abs(".") if err != nil { - return daemon.InitialInput{}, err + return initialInput{}, err } var input io.Reader if values.fixture != "" { file, err := os.Open(values.fixture) if err != nil { - return daemon.InitialInput{}, err + return initialInput{}, err } defer file.Close() input = file } else { if stdin == nil { - return daemon.InitialInput{}, errors.New("stdin unavailable") + return initialInput{}, errors.New("stdin unavailable") } piped, err := redirected(stdin) if err != nil { - return daemon.InitialInput{}, err + return initialInput{}, err } if values.directory == "-" || piped { input = stdin @@ -63,35 +58,19 @@ func acquireInput(values options, stdin *os.File) (daemon.InitialInput, error) { if input != nil { raw, err := io.ReadAll(io.LimitReader(input, diffsource.MaxInputBytes+1)) if err != nil { - return daemon.InitialInput{}, err + return initialInput{}, err } if len(raw) > diffsource.MaxInputBytes { - return daemon.InitialInput{}, errors.New("piped diff exceeds the 16 MiB input limit") + return initialInput{}, errors.New("piped diff exceeds the 16 MiB input limit") } - return daemon.InitialInput{Kind: "capture", Raw: raw, SubmittedFrom: cwd}, nil + return initialInput{Kind: "capture", Raw: raw, SubmittedFrom: cwd}, nil } path, err := filepath.Abs(values.directory) - return daemon.InitialInput{Kind: "worktree", Path: path}, err + return initialInput{Kind: "worktree", Path: path}, err } func newSubmissionID() string { return rand.Text() } -func submitInput(ctx context.Context, client *daemon.Connection, id string, input daemon.InitialInput) (contextservice.Submission, error) { - if input.Ingestion != nil { - return client.Ingest(ctx, *input.Ingestion) - } - switch input.Kind { - case "worktree": - return client.Register(ctx, id, input.Path) - case "capture": - return client.Capture(ctx, id, input.Raw, input.SubmittedFrom) - case "reopen": - return client.OpenCapture(ctx, input.CaptureID) - default: - return contextservice.Submission{}, errors.New("unknown diff input") - } -} - func submissionInput(value contextservice.Submission, elapsed time.Duration) loadedInput { input := loadedInput{snapshot: value.Snapshot, processed: elapsed, mode: "git"} if value.Context.Root != nil { @@ -140,7 +119,7 @@ func sourceActivity(metadata ingestion.Metadata, comparison diffsource.Compariso Base: comparison.BaseRef + "@" + comparison.BaseOID, Head: comparison.HeadOID, Agent: metadata.Agent, RunID: metadata.RunID} } -func collectSubmission(ctx context.Context, command string, values options, stdin *os.File) (request ingestion.Request, failure error) { +func collectSubmission(ctx context.Context, values options) (request ingestion.Request, failure error) { recordCollectorActivity(hooks.Activity{Stage: "collection", Status: "started", InputPath: values.directory, Agent: values.agent, RunID: values.runID, Branch: values.branch, Base: values.base}) defer func() { activity := hooks.Activity{Stage: "collection", Status: "collected", InputPath: values.directory} @@ -162,9 +141,6 @@ func collectSubmission(ctx context.Context, command string, values options, stdi if err != nil { return ingestion.Request{}, err } - if command != "review" { - return ingestion.Request{}, errors.New("expected review command") - } return collector.Collect(ctx, values.directory, settings) } @@ -180,7 +156,7 @@ func recordCollectorActivity(activity hooks.Activity, secrets ...string) { } } -func collectInitialInput(ctx context.Context, values options, input daemon.InitialInput) (ingestion.Request, error) { +func collectInitialInput(ctx context.Context, values options, input initialInput) (ingestion.Request, error) { settings, err := collectionOptions(values) if err != nil { return ingestion.Request{}, err @@ -190,3 +166,10 @@ func collectInitialInput(ctx context.Context, values options, input daemon.Initi } return collector.CollectPatch(ctx, string(input.Raw), input.SubmittedFrom, settings) } + +type initialInput struct { + Kind string + Path string + Raw []byte + SubmittedFrom string +} diff --git a/cmd/servediff/local.go b/cmd/servediff/local.go index 1d01f5b..12aa9dd 100644 --- a/cmd/servediff/local.go +++ b/cmd/servediff/local.go @@ -1,5 +1,7 @@ package main +import "github.com/mattn/go-isatty" + import ( "bufio" "context" @@ -14,19 +16,18 @@ import ( "github.com/flexdinesh/servediff/internal/contextservice" "github.com/flexdinesh/servediff/internal/daemon" - "github.com/mattn/go-isatty" ) func runLocal(ctx context.Context, arguments []string, stdin *os.File, stdout, stderr io.Writer) error { - values, err := parseOptionsMode(arguments, stderr, false, true) + values, err := parseOptionsMode(arguments, stderr, true) if errors.Is(err, errHelp) { return nil } if err != nil { return err } - if values.serverSet || values.tokenSet || values.branch != "" || values.fixture != "" || values.capture != "" || values.print || values.retry { - return errors.New("local mode accepts a checkout path or piped diff; use sync for remote collection or serve for fixtures") + if values.serverSet || values.tokenSet || values.branch != "" || values.fixture != "" || values.print || values.retry { + return errors.New("local mode accepts a checkout path or piped diff; use sync for remote collection or dev --fixture for fixtures") } input, err := acquireLocalInput(values, stdin) if err != nil { @@ -35,7 +36,7 @@ func runLocal(ctx context.Context, arguments []string, stdin *os.File, stdout, s if input.Kind == "capture" && values.base != "" { return errors.New("base is only supported for a checkout path") } - settings, _, err := resolvedServerSettings(values) + settings, err := resolvedServerSettings(values) if err != nil { return err } @@ -44,12 +45,12 @@ func runLocal(ctx context.Context, arguments []string, stdin *os.File, stdout, s if err != nil { return err } - input.Ingestion = &request + label := "Piped diff" if input.Kind == "worktree" { input.Path, label = request.Metadata.Root, request.Metadata.Root } - return daemon.RunForeground(ctx, settings, input, func(status daemon.Status) (bool, error) { + return daemon.RunForeground(ctx, settings, request, func(status daemon.Status) (bool, error) { if values.replace { return true, nil } @@ -90,21 +91,21 @@ func runLocal(ctx context.Context, arguments []string, stdin *os.File, stdout, s }) } -func acquireLocalInput(values options, stdin *os.File) (daemon.InitialInput, error) { +func acquireLocalInput(values options, stdin *os.File) (initialInput, error) { piped := false if stdin != nil { var err error piped, err = redirected(stdin) if err != nil { - return daemon.InitialInput{}, err + return initialInput{}, err } } if piped && values.repositorySet && values.directory != "-" { - return daemon.InitialInput{}, errors.New("checkout path cannot be combined with piped stdin") + return initialInput{}, errors.New("checkout path cannot be combined with piped stdin") } if piped || values.directory == "-" { return acquireInput(values, stdin) } path, err := filepath.Abs(values.directory) - return daemon.InitialInput{Kind: "worktree", Path: path}, err + return initialInput{Kind: "worktree", Path: path}, err } diff --git a/cmd/servediff/main.go b/cmd/servediff/main.go index 069ef4a..cdb74eb 100644 --- a/cmd/servediff/main.go +++ b/cmd/servediff/main.go @@ -2,312 +2,87 @@ package main import ( "context" - "encoding/json" "errors" "fmt" "io" "net/url" "os" "os/signal" - "path/filepath" "syscall" "time" "github.com/flexdinesh/servediff/internal/browser" "github.com/flexdinesh/servediff/internal/config" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/controlapi" "github.com/flexdinesh/servediff/internal/daemon" - "github.com/flexdinesh/servediff/internal/hooks" - "github.com/flexdinesh/servediff/internal/ingestion" - "github.com/flexdinesh/servediff/internal/reviewstore" buildversion "github.com/flexdinesh/servediff/internal/version" ) -var errServiceStopped = errors.New("service is stopped") - -func run(ctx context.Context, arguments []string, stdin *os.File, stdout, stderr io.Writer) (failure error) { - if len(arguments) == 0 { - return runLocal(ctx, arguments, stdin, stdout, stderr) - } - if arguments[0] == "config" { - return runConfigInput(arguments[1:], stdin, stdout) - } - if arguments[0] == "sync" { - return runSync(ctx, arguments[1:], stdin, stdout, stderr) - } - switch arguments[0] { - case "hook", "collector", "__hook-worker", "review", "service", "serve", "__daemon", "--help", "-h", "--version": - default: - return runLocal(ctx, arguments, stdin, stdout, stderr) - } - if arguments[0] == "hook" { - return runHook(arguments[1:], stdin, stdout) - } - if arguments[0] == "collector" { - return runCollector(arguments[1:], stdout) - } - if arguments[0] == "__hook-worker" { - return runHookWorker(ctx, arguments[1:]) - } - command := "" +func run(ctx context.Context, arguments []string, stdin *os.File, stdout, stderr io.Writer) error { if len(arguments) > 0 { switch arguments[0] { - case "review", "service", "serve", "__daemon": - command, arguments = arguments[0], arguments[1:] - } - } - if command == "" && arguments[0] != "--help" && arguments[0] != "-h" && arguments[0] != "--version" { - return fmt.Errorf("unknown command %q; use servediff PATH or pipe a Git diff into servediff", arguments[0]) - } - action := "" - if command == "service" { - if len(arguments) == 0 || arguments[0] == "--help" || arguments[0] == "-h" { - fmt.Fprintln(stdout, " Usage: servediff service {start|stop|restart|status} [options]") - fmt.Fprintln(stdout, " servediff service config {set KEY VALUE|get KEY|remove KEY}") + case "config": + return runConfigInput(arguments[1:], stdin, stdout) + case "sync": + return runSync(ctx, arguments[1:], stdin, stdout, stderr) + case "hook": + return runHook(arguments[1:], stdin, stdout) + case "collector": + return runCollector(arguments[1:], stdout) + case "__hook-worker": + return runHookWorker(ctx, arguments[1:]) + case "dev": + return runFixture(ctx, arguments[1:], stdin, stdout, stderr) + case "--version": + fmt.Fprintln(stdout, buildversion.String()) return nil - } - action, arguments = arguments[0], arguments[1:] - if action == "config" { - return runConfig(arguments, stdout) - } - if action != "start" && action != "stop" && action != "restart" && action != "status" { - return fmt.Errorf("unknown service command %q", action) + case "review", "service", "serve", "capture", "__daemon": + return fmt.Errorf("%s removed; use servediff PATH, sync, or dev --fixture", arguments[0]) } } - values, err := parseOptionsMode(arguments, stderr, command == "__daemon", command == "serve") - if err != nil { - if errors.Is(err, errHelp) { - return nil - } - return err - } - if command == "review" { - values, err = resolvedCollectorSettings(values) - if err != nil { - return err - } - } - if values.version { - fmt.Fprintln(stdout, buildversion.String()) + return runLocal(ctx, arguments, stdin, stdout, stderr) +} +func runFixture(ctx context.Context, arguments []string, stdin *os.File, stdout, stderr io.Writer) error { + values, err := parseOptionsMode(arguments, stderr, true) + if errors.Is(err, errHelp) { return nil } - if command != "__daemon" && values.runtimeDir != "" { - return errors.New("runtime-dir is an internal option; use SERVEDIFF_RUNTIME_DIR for isolation") - } - if values.config != "" && (command != "service" || (action != "start" && action != "restart")) { - return errors.New("config overrides are only supported by service start/restart") - } - if values.json && (command != "service" || action != "status") { - return errors.New("json is only supported by service status") - } - if command == "service" && (values.repositorySet || values.fixture != "" || values.capture != "") { - return errors.New("service commands do not accept diff input") - } - if command == "service" && (action == "stop" || action == "status") && (values.hostSet || values.portSet || values.stateSet || values.webDirSet || values.retentionDaysSet) { - return errors.New("stop and status do not accept server settings") - } - if (command == "service" || command == "serve" || command == "__daemon") && (values.serverSet || values.tokenSet || values.agent != "" || values.runID != "" || values.sessionName != "" || values.sourceID != "" || values.trigger != "manual") { - return errors.New("server lifecycle commands do not accept collector options") - } - if command == "review" && values.server != "" && (values.hostSet || values.portSet || values.stateSet || values.webDirSet || values.retentionDaysSet) { - return errors.New("remote ingestion does not accept local server settings") - } - if command == "review" && (values.fixture != "" || values.directory == "-") { - return errors.New("review collects Git data; pipe a Git diff into servediff for stdin") - } - if command != "review" && (values.base != "" || values.branch != "") { - return errors.New("base and branch are only supported by review") - } - if values.capture != "" && (values.base != "" || values.branch != "") { - return errors.New("capture cannot be combined with base or branch") - } - if values.capture != "" && values.server != "" && command == "review" { - return errors.New("capture reopening is only available on the local service") - } - if values.trigger == "agent-hook" { - values.noBrowser = true - } - if values.trigger != "manual" && values.trigger != "agent-hook" { - return errors.New("trigger must be manual or agent-hook") - } - settings, explicit := daemon.DefaultSettings(), daemon.Explicit{} - if command == "__daemon" { - // The parent passes a resolved snapshot; never reread file/environment. - settings, explicit, err = serverSettings(values) - } else if (command == "service" && (action == "start" || action == "restart")) || command == "serve" || (command == "review" && values.server == "") { - settings, explicit, err = resolvedServerSettings(values) - if command == "service" { - explicit = daemon.Explicit{Host: true, Port: true, State: true, WebDir: true, RetentionDays: true} - } - } if err != nil { return err } - if command == "__daemon" { - if values.runtimeDir == "" { - return errors.New("daemon runtime directory is required") - } - return daemon.Run(ctx, settings, values.runtimeDir, nil, nil) - } - if command == "serve" { - input, err := acquireInput(values, stdin) - if err != nil { - return err - } - input.IngestionDisabled = true - if input.Kind != "reopen" { - request, collectErr := collectInitialInput(ctx, values, input) - if collectErr != nil { - return collectErr - } - input.Ingestion = &request - } - if os.Getenv("SERVEDIFF_EXIT_ON_STDIN_CLOSE") == "1" { - child, cancel := context.WithCancel(ctx) - defer cancel() - ctx = child - go func() { _, _ = io.Copy(io.Discard, stdin); cancel() }() - } - started := time.Now() - return daemon.Run(ctx, settings, "", &input, func(status controlapi.Status, submitted *contextservice.Submission) { - if submitted == nil { - return - } - address := status.BrowserURL + "/contexts/" + url.PathEscape(submitted.Context.ID) - writeStartup(stdout, submissionInput(*submitted, time.Since(started)), address) - openBrowser(values, address, stderr) - }) - } - if command == "service" { - client, err := daemon.NewClient() - if err != nil { - return err - } - var status controlapi.Status - switch action { - case "stop": - if err := client.Stop(ctx); err != nil { - return err - } - fmt.Fprintln(stdout, " servediff service stopped") - return nil - case "start": - status, err = client.Start(ctx, settings, explicit) - case "restart": - status, err = client.Restart(ctx, settings, explicit) - case "status": - status, err = client.Status(ctx) - } - if err != nil { - if values.json { - _ = json.NewEncoder(stdout).Encode(status) - } - return err - } - writeServiceStatus(stdout, status, values.json) - if status.State != "running" { - return errServiceStopped - } - return nil - } - started := time.Now() - defer func() { - if failure != nil { - recordCollectorActivity(hooks.Activity{Stage: "submission", Status: "failed", InputPath: values.directory, Destination: values.server, Error: failure.Error()}, values.token) - } - }() - operationCtx, cancel := context.WithTimeout(ctx, 2*time.Minute) - defer cancel() - if values.capture == "" { - requests, collectErr := collectSubmissions(operationCtx, command, values, stdin) - if len(requests) == 0 { - return collectErr - } - submitErr := submitCollected(operationCtx, command, values, settings, explicit, requests, stdout, stderr, started) - return errors.Join(collectErr, submitErr) + if values.fixture == "" { + return errors.New("dev requires --fixture") } - input := daemon.InitialInput{Kind: "reopen", CaptureID: values.capture} - client, err := daemon.NewClient() + input, err := acquireInput(values, stdin) if err != nil { return err } - connection, err := client.EnsureConnection(operationCtx, settings, explicit) + request, err := collectInitialInput(ctx, values, input) if err != nil { - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "waiting", Reason: "local service unavailable", Error: err.Error()}) return err } - requestID := newSubmissionID() - if input.Ingestion != nil { - requestID = input.Ingestion.SubmissionID - } - var submitted contextservice.Submission - var firstFailure error - uncertain := false - for attempt := 0; attempt < 2; attempt++ { - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "started", SubmissionID: requestID, Attempt: attempt + 1, Destination: connection.Status().BrowserURL}) - submitted, err = submitInput(operationCtx, connection, requestID, input) - if err == nil { - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "acknowledged", SubmissionID: requestID, ContextID: submitted.Context.ID, Attempt: attempt + 1, Destination: connection.Status().BrowserURL}) - break - } - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "failed", SubmissionID: requestID, Attempt: attempt + 1, Error: err.Error()}) - retry, ambiguous := retryableSubmission(err) - uncertain = uncertain || ambiguous - if !retry || operationCtx.Err() != nil || attempt == 1 { - return submissionFailure(input, connection.Status(), requestID, uncertain, errors.Join(firstFailure, err)) - } - firstFailure = err - recovered, recoveryError := client.RecoverConnection(operationCtx, connection) - if recoveryError != nil { - cause := fmt.Errorf("%w; recovery failed: %w", err, recoveryError) - return submissionFailure(input, connection.Status(), requestID, uncertain, cause) - } - connection = recovered - } - status := connection.Status() - urls := browser.URLs(status.Settings.Host, status.Settings.Port, "/contexts/"+url.PathEscape(submitted.Context.ID)) - if input.Ingestion != nil { - loaded := submissionInput(submitted, time.Since(started)) - loaded.mode = "git" - loaded.directory = input.Ingestion.Metadata.Root - loaded.contextID, loaded.mcpURL, loaded.submitted = submitted.Context.ID, status.BrowserURL+"/mcp/contexts/"+submitted.Context.ID, true - writeStartup(stdout, loaded, urls...) - } else { - writeSubmission(stdout, submitted, time.Since(started), urls[0], status.BrowserURL+"/mcp/contexts/"+submitted.Context.ID, urls[1:]...) - } - openBrowser(values, urls[0], stderr) - return nil -} -// Only transport failures and explicit pre-submission lifecycle rejections can -// be replayed. A transport failure leaves the database commit outcome unknown. -func retryableSubmission(err error) (bool, bool) { - var problem *controlapi.Problem - if errors.As(err, &problem) { - return (problem.Status == 401 && problem.Code == "unauthorized") || - (problem.Status == 503 && problem.Code == "service_draining"), false + settings, err := resolvedServerSettings(values) + if err != nil { + return err } - return true, true -} - -func submissionFailure(input daemon.InitialInput, status controlapi.Status, id string, uncertain bool, cause error) error { - if !uncertain || input.Kind == "reopen" { - return cause + if os.Getenv("SERVEDIFF_EXIT_ON_STDIN_CLOSE") == "1" { + child, cancel := context.WithCancel(ctx) + defer cancel() + ctx = child + go func() { _, _ = io.Copy(io.Discard, stdin); cancel() }() } - return fmt.Errorf("submission %s may have been saved in %q; inspect its contexts before resubmitting: %w", id, status.Settings.State, cause) + started := time.Now() + return daemon.Run(ctx, settings, "", &request, func(status daemon.Status, submitted *contextservice.Submission) { + address := status.BrowserURL + "/contexts/" + url.PathEscape(submitted.Context.ID) + writeStartup(stdout, submissionInput(*submitted, time.Since(started)), address) + openBrowser(values, address, stderr) + }) } - -func resolvedServerSettings(values options) (daemon.Settings, daemon.Explicit, error) { +func resolvedServerSettings(values options) (daemon.Settings, error) { saved, err := config.LoadFile(values.configFile) if err != nil { - return daemon.Settings{}, daemon.Explicit{}, err - } - if values.config != "" { - saved, err = config.Merge(saved, values.config) - if err != nil { - return daemon.Settings{}, daemon.Explicit{}, err - } + return daemon.Settings{}, err } if values.hostSet { saved.Host = values.host @@ -320,7 +95,7 @@ func resolvedServerSettings(values options) (daemon.Settings, daemon.Explicit, e if saved.State == "" { defaults, err := config.Default() if err != nil { - return daemon.Settings{}, daemon.Explicit{}, err + return daemon.Settings{}, err } saved.State = defaults.State } @@ -332,45 +107,7 @@ func resolvedServerSettings(values options) (daemon.Settings, daemon.Explicit, e saved.RetentionDays = values.retentionDays } settings, err := saved.Settings() - return settings, daemon.Explicit{Host: values.hostSet, Port: values.portSet, State: values.stateSet, WebDir: values.webDirSet, RetentionDays: values.retentionDaysSet}, err -} - -func serverSettings(values options) (daemon.Settings, daemon.Explicit, error) { - settings := daemon.DefaultSettings() - settings.Host, settings.Port = values.host, -1 - settings.RetentionDays = values.retentionDays - if settings.RetentionDays == 0 { - settings.RetentionDays = 7 - } - if settings.RetentionDays < 1 || settings.RetentionDays > 106751 { - return settings, daemon.Explicit{}, errors.New("retention-days must be between 1 and 106751") - } - if values.portSet { - settings.Port = values.port - } - settings.State = values.state - if settings.State == "" { - path, err := reviewstore.DefaultPath() - if err != nil { - return settings, daemon.Explicit{}, err - } - settings.State = path - } - if settings.State != "memory" { - path, err := filepath.Abs(settings.State) - if err != nil { - return settings, daemon.Explicit{}, err - } - settings.State = filepath.Clean(path) - } - if values.webDir != "" { - path, err := filepath.Abs(values.webDir) - if err != nil { - return settings, daemon.Explicit{}, err - } - settings.WebDir = filepath.Clean(path) - } - return settings, daemon.Explicit{Host: values.hostSet, Port: values.portSet, State: values.stateSet, WebDir: values.webDirSet, RetentionDays: values.retentionDaysSet}, nil + return settings, err } func openBrowser(values options, url string, stderr io.Writer) { @@ -385,13 +122,7 @@ func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() if err := run(ctx, os.Args[1:], os.Stdin, os.Stdout, os.Stderr); err != nil { - if !errors.Is(err, errServiceStopped) { - fmt.Fprintf(os.Stderr, " servediff: %v\n", err) - } + fmt.Fprintf(os.Stderr, " servediff: %v\n", err) os.Exit(1) } } - -func submitRemote(ctx context.Context, command string, values options, request ingestion.Request, stdout, stderr io.Writer, started time.Time) error { - return submitCollected(ctx, command, values, daemon.Settings{}, daemon.Explicit{}, []ingestion.Request{request}, stdout, stderr, started) -} diff --git a/cmd/servediff/main_test.go b/cmd/servediff/main_test.go index 5570b82..4dc5301 100644 --- a/cmd/servediff/main_test.go +++ b/cmd/servediff/main_test.go @@ -2,10 +2,6 @@ package main import ( "bytes" - "context" - "encoding/json" - "errors" - "fmt" "io" "os" "path/filepath" @@ -14,32 +10,10 @@ import ( "testing" "time" - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/controlapi" - "github.com/flexdinesh/servediff/internal/daemon" "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/review" ) -func TestSubmissionFailurePreservesUnknownCommitAndCancellation(t *testing.T) { - transportError := errors.New("acknowledgement lost") - cause := fmt.Errorf("%w; recovery failed: %w", transportError, context.Canceled) - status := controlapi.Status{Settings: controlapi.Settings{State: "/review/custom.db"}} - for _, kind := range []string{"worktree", "capture", "reopen"} { - failure := submissionFailure(daemon.InitialInput{Kind: kind}, status, "retry-id", true, cause) - if !errors.Is(failure, transportError) || !errors.Is(failure, context.Canceled) { - t.Fatalf("%s lost failure causes: %v", kind, failure) - } - unknown := strings.Contains(failure.Error(), "may have been saved") - if unknown != (kind != "reopen") { - t.Fatalf("%s misreported commit outcome: %v", kind, failure) - } - if unknown && (!strings.Contains(failure.Error(), status.Settings.State) || !strings.Contains(failure.Error(), "retry-id")) { - t.Fatalf("missing recovery provenance: %v", failure) - } - } -} - func TestNormalizeArgumentsAllowsFlagsAfterPath(t *testing.T) { actual := normalizeArguments([]string{".", "--port", "4000", "--no-browser"}) expected := []string{"--port", "4000", "--no-browser", "."} @@ -49,7 +23,7 @@ func TestNormalizeArgumentsAllowsFlagsAfterPath(t *testing.T) { } func TestOptionsDefaultToLocalhostAndAutomaticPort(t *testing.T) { - values, err := parseOptionsMode([]string{".", "--host", "192.0.2.1", "--port", "8123"}, io.Discard, false, true) + values, err := parseOptionsMode([]string{".", "--host", "192.0.2.1", "--port", "8123"}, io.Discard, true) if err != nil { t.Fatal(err) } @@ -118,7 +92,7 @@ func TestOptionsTrackExplicitDefaults(t *testing.T) { if omitted.hostSet || omitted.portSet || omitted.stateSet || omitted.webDirSet { t.Fatalf("omitted settings marked explicit: %#v", omitted) } - explicit, err := parseOptionsMode([]string{".", "--host=127.0.0.1", "-p", "0", "--state=", "--web-dir="}, io.Discard, false, true) + explicit, err := parseOptionsMode([]string{".", "--host=127.0.0.1", "-p", "0", "--state=", "--web-dir="}, io.Discard, true) if err != nil { t.Fatal(err) } @@ -174,16 +148,8 @@ func TestAcquireInputBoundsFixtureAndStdin(t *testing.T) { func TestAcquireInputPriority(t *testing.T) { stdin := testInputFile(t, []byte("stdin patch")) - input, err := acquireInput(options{capture: "saved-capture"}, stdin) - if err != nil || input.Kind != "reopen" || input.CaptureID != "saved-capture" { - t.Fatalf("capture reopening: %#v %v", input, err) - } - position, err := stdin.Seek(0, io.SeekCurrent) - if err != nil || position != 0 { - t.Fatalf("reopening consumed stdin: position=%d err=%v", position, err) - } fixture := testInputFile(t, []byte("fixture patch")) - input, err = acquireInput(options{fixture: fixture.Name(), directory: ".", repositorySet: true}, stdin) + input, err := acquireInput(options{fixture: fixture.Name(), directory: ".", repositorySet: true}, stdin) if err != nil || string(input.Raw) != "fixture patch" || input.Kind != "capture" { t.Fatalf("fixture priority: %#v %v", input, err) } @@ -218,32 +184,6 @@ func TestAcquireRepositoryInputDefaultsToCurrentDirectory(t *testing.T) { } } -func TestCaptureOptionsRejectConflictingInput(t *testing.T) { - for _, arguments := range [][]string{ - {"--capture", "saved", "."}, - {"--capture", "saved", "--fixture", "patch.diff"}, - } { - if _, err := parseOptions(arguments, io.Discard); err == nil { - t.Fatalf("conflicting capture arguments accepted: %v", arguments) - } - } -} - -func TestSubmissionOutputExplainsDaemonLifetime(t *testing.T) { - var output bytes.Buffer - writeSubmission(&output, contextservice.Submission{Context: contextservice.Context{ID: "capture-1", Kind: "capture"}}, time.Millisecond, - "http://127.0.0.1:7981/contexts/capture-1", "http://127.0.0.1:7981/mcp/contexts/capture-1") - value := output.String() - for _, expected := range []string{"context ID: capture-1", "capture ID: capture-1", "/contexts/capture-1", "/mcp/contexts/capture-1", "servediff service stop"} { - if !strings.Contains(value, expected) { - t.Fatalf("missing %q in %q", expected, value) - } - } - if strings.Contains(value, "ctrl-c") { - t.Fatal("submission output incorrectly suggests foreground server lifetime") - } -} - func TestStartupPrintsEveryReviewURL(t *testing.T) { var output bytes.Buffer urls := []string{ @@ -251,57 +191,10 @@ func TestStartupPrintsEveryReviewURL(t *testing.T) { "http://192.168.1.20:7981/contexts/observation", "http://10.0.0.5:7981/contexts/observation", } - writeStartup(&output, loadedInput{mode: "git", submitted: true}, urls...) + writeStartup(&output, loadedInput{mode: "git"}, urls...) for _, url := range urls { if !strings.Contains(output.String(), " url: "+url+"\n") { t.Fatalf("missing review URL %q: %s", url, output.String()) } } } - -func TestStoppedServiceStatusDoesNotStartService(t *testing.T) { - t.Setenv("SERVEDIFF_RUNTIME_DIR", t.TempDir()) - var output bytes.Buffer - if err := run(t.Context(), []string{"service", "status", "--json"}, nil, &output, io.Discard); !errors.Is(err, errServiceStopped) { - t.Fatalf("stopped status: %v", err) - } - var status controlapi.Status - if err := json.Unmarshal(output.Bytes(), &status); err != nil { - t.Fatal(err) - } - if status.State != "stopped" || status.PID != 0 { - t.Fatalf("status started a service: %#v", status) - } -} - -func TestServiceOutputUsesBoundURL(t *testing.T) { - for _, test := range []struct { - host string - url string - browserURL string - listener string - }{ - {"127.0.0.1", "http://127.0.0.1:4000", "http://127.0.0.1:4000", "127.0.0.1:4000"}, - {"0.0.0.0", "http://0.0.0.0:4000", "http://127.0.0.1:4000", "0.0.0.0:4000"}, - {"192.0.2.1", "http://192.0.2.1:4000", "http://192.0.2.1:4000", "192.0.2.1:4000"}, - {"localhost", "http://localhost:4000", "http://localhost:4000", "localhost:4000"}, - {"::", "http://[::]:4000", "http://[::1]:4000", "[::]:4000"}, - {"::1", "http://[::1]:4000", "http://[::1]:4000", "[::1]:4000"}, - } { - t.Run(test.host, func(t *testing.T) { - var output bytes.Buffer - writeServiceStatus(&output, controlapi.Status{ - State: "running", URL: test.url, BrowserURL: test.browserURL, - Settings: controlapi.Settings{Host: test.host, Port: 4000}, - }, false) - for _, expected := range []string{ - " url: " + test.url + "\n", - " listen: " + test.listener + "\n", - } { - if !strings.Contains(output.String(), expected) { - t.Fatalf("missing %q in %q", expected, output.String()) - } - } - }) - } -} diff --git a/cmd/servediff/options.go b/cmd/servediff/options.go index fff4214..c40b305 100644 --- a/cmd/servediff/options.go +++ b/cmd/servediff/options.go @@ -25,13 +25,10 @@ type options struct { directory string repositorySet bool fixture string - capture string state string stateSet bool webDir string webDirSet bool - runtimeDir string - json bool noBrowser bool version bool server string @@ -46,7 +43,6 @@ type options struct { runID string sourceID string pathSet bool - config string configFile string base string branch string @@ -56,12 +52,12 @@ func parseOptions(arguments []string, stderr io.Writer) (options, error) { return parseOptionsMode(arguments, stderr, false) } -func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreground ...bool) (options, error) { +func parseOptionsMode(arguments []string, stderr io.Writer, allowHost bool) (options, error) { flags := flag.NewFlagSet("servediff", flag.ContinueOnError) flags.SetOutput(stderr) values := options{host: "127.0.0.1", directory: ".", trigger: "manual"} flags.StringVar(&values.directory, "path", ".", "checkout path to collect") - flags.StringVar(&values.server, "server", values.server, "ingestion server URL; defaults to local service") + flags.StringVar(&values.server, "server", values.server, "ingestion server URL; required for sync") flags.StringVar(&values.token, "token", values.token, "ingestion token; prefer SERVEDIFF_TOKEN") flags.StringVar(&values.trigger, "trigger", values.trigger, "collection trigger: manual or agent-hook") flags.StringVar(&values.agent, "harness", "", "harness name recorded with the observation") @@ -71,21 +67,15 @@ func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreg flags.StringVar(&values.sourceID, "source-id", "", "source identity; defaults to persistent local identity") flags.StringVar(&values.base, "base", "", "comparison baseline: auto (default), HEAD, or Git ref") flags.StringVar(&values.branch, "branch", "", "recover committed branch from Git objects; defaults base to auto") - if internal || (len(foreground) > 0 && foreground[0]) { - flags.StringVar(&values.host, "host", values.host, "IP address to bind (foreground/internal only)") + if allowHost { + flags.StringVar(&values.host, "host", values.host, "IP address to bind") } - flags.StringVar(&values.config, "config", "", "JSON settings override for service start/restart") flags.StringVar(&values.configFile, "config-file", "", "machine JSON config path; defaults to SERVEDIFF_CONFIG_PATH") flags.IntVar(&values.port, "port", 0, "HTTP port; defaults to the first available port from 7981 to 7990") flags.IntVar(&values.port, "p", 0, "HTTP port; defaults to the first available port from 7981 to 7990") flags.StringVar(&values.fixture, "fixture", "", "read a Git patch fixture") - flags.StringVar(&values.capture, "capture", "", "reopen a retained capture by ID") flags.StringVar(&values.state, "state", "", "state database path; memory disables persistence") flags.StringVar(&values.webDir, "web-dir", "", "serve web assets from a directory") - if internal { - flags.StringVar(&values.runtimeDir, "runtime-dir", "", "internal daemon runtime directory") - } - flags.BoolVar(&values.json, "json", false, "print service status as JSON") flags.BoolVar(&values.replace, "replace", false, "replace an existing foreground local instance") flags.BoolVar(&values.print, "print", false, "print only the configured server URL after sync") flags.BoolVar(&values.debug, "debug", false, "show sync progress on stderr") @@ -97,10 +87,6 @@ func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreg fmt.Fprintln(stderr, " git diff | servediff [options]") fmt.Fprintln(stderr, " servediff sync [--path DIRECTORY] [--print] [--debug] [--retry]") fmt.Fprintln(stderr, " servediff config {set|get|remove} KEY [VALUE]") - fmt.Fprintln(stderr, " servediff review [--path DIRECTORY] [options]") - fmt.Fprintln(stderr, " servediff service {start|stop|restart|status} [options]") - fmt.Fprintln(stderr, " servediff service config {set KEY VALUE|get KEY|remove KEY}") - fmt.Fprintln(stderr, " servediff serve [directory | - | --fixture FILE] [options]") flags.PrintDefaults() } if err := flags.Parse(normalizeArguments(arguments)); err != nil { @@ -109,11 +95,7 @@ func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreg } return options{}, err } - minimumPort := 0 - if internal { - minimumPort = -1 - } - if values.port < minimumPort || values.port > 65535 { + if values.port < 0 || values.port > 65535 { return options{}, errors.New("port must be between 0 and 65535") } host := net.ParseIP(values.host) @@ -148,9 +130,6 @@ func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreg } values.directory, values.repositorySet = flags.Arg(0), true } - if values.capture != "" && (values.repositorySet || values.fixture != "") { - return options{}, errors.New("capture cannot be combined with a directory or fixture") - } flags.Visit(func(value *flag.Flag) { if value.Name == "host" { values.hostSet = true @@ -171,8 +150,8 @@ func parseOptionsMode(arguments []string, stderr io.Writer, internal bool, foreg func normalizeArguments(arguments []string) []string { valueOptions := map[string]bool{ "-p": true, "--port": true, "--host": true, "--fixture": true, - "--config": true, "--config-file": true, "--path": true, "--server": true, "--token": true, "--trigger": true, "--harness": true, "--run-id": true, "--source-id": true, - "--state": true, "--web-dir": true, "--capture": true, "--runtime-dir": true, + "--config-file": true, "--path": true, "--server": true, "--token": true, "--trigger": true, "--harness": true, "--run-id": true, "--source-id": true, + "--state": true, "--web-dir": true, "--base": true, "--branch": true, "--session-name": true, "--retention-days": true, } options, positionals := make([]string, 0, len(arguments)), make([]string, 0, 1) diff --git a/cmd/servediff/options_test.go b/cmd/servediff/options_test.go index 6fd10d3..2649602 100644 --- a/cmd/servediff/options_test.go +++ b/cmd/servediff/options_test.go @@ -17,12 +17,12 @@ func TestEscapedDirectoryPreservesFlagDelimiter(t *testing.T) { } } -func TestHelpDocumentsServiceWithoutInternalFlags(t *testing.T) { +func TestHelpDocumentsModesWithoutLegacyCommands(t *testing.T) { var output bytes.Buffer if err := run(t.Context(), []string{"--help"}, nil, io.Discard, &output); err != nil { t.Fatal(err) } - if !strings.Contains(output.String(), "servediff service") || !strings.Contains(output.String(), "servediff serve") || strings.Contains(output.String(), "runtime-dir") { + if !strings.Contains(output.String(), "servediff sync") || strings.Contains(output.String(), "servediff service") || strings.Contains(output.String(), "runtime-dir") { t.Fatalf("help = %s", output.String()) } } @@ -47,7 +47,7 @@ func TestOptionsRejectRemovedAgentFlag(t *testing.T) { } func TestHelpDocumentsHarnessFlag(t *testing.T) { - for _, arguments := range [][]string{{"--help"}, {"review", "--help"}, {"hook", "--help"}} { + for _, arguments := range [][]string{{"--help"}, {"sync", "--help"}, {"hook", "--help"}} { var output bytes.Buffer if err := run(t.Context(), arguments, nil, &output, &output); err != nil { t.Fatal(err) @@ -57,13 +57,3 @@ func TestHelpDocumentsHarnessFlag(t *testing.T) { } } } - -func TestInternalDefaultPortIsNotAPublicPort(t *testing.T) { - if _, err := parseOptions([]string{"--port", "-1"}, io.Discard); err == nil { - t.Fatal("negative port accepted") - } - values, err := parseOptionsMode([]string{"--port", "-1", "--runtime-dir", "runtime"}, io.Discard, true) - if err != nil || values.port != -1 || values.runtimeDir != "runtime" { - t.Fatalf("internal options = %#v, %v", values, err) - } -} diff --git a/cmd/servediff/output.go b/cmd/servediff/output.go index 5ddb3b4..828e028 100644 --- a/cmd/servediff/output.go +++ b/cmd/servediff/output.go @@ -1,16 +1,11 @@ package main import ( - "encoding/json" "fmt" "io" - "net" "os" - "strconv" "time" - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/controlapi" buildversion "github.com/flexdinesh/servediff/internal/version" ) @@ -94,36 +89,10 @@ func writeStartup(writer io.Writer, input loadedInput, urls ...string) { guidance := "ctrl-c to stop." if input.remote { guidance = "snapshot submitted to remote server." - } else if input.submitted { - guidance = "servediff service stop to stop the daemon." } fmt.Fprintf(writer, " %s\n", color.paint(color.dim, guidance)) } -func writeSubmission(writer io.Writer, submission contextservice.Submission, elapsed time.Duration, url, mcpURL string, additionalURLs ...string) { - input := submissionInput(submission, elapsed) - input.contextID, input.mcpURL, input.submitted = submission.Context.ID, mcpURL, true - writeStartup(writer, input, append([]string{url}, additionalURLs...)...) -} - -func writeServiceStatus(writer io.Writer, status controlapi.Status, asJSON bool) { - if asJSON { - _ = json.NewEncoder(writer).Encode(status) - return - } - fmt.Fprintf(writer, " servediff service %s\n", status.State) - if status.State != "running" { - return - } - fmt.Fprintf(writer, " url: %s\n", status.URL) - fmt.Fprintf(writer, " listen: %s\n", net.JoinHostPort(status.Settings.Host, strconv.Itoa(status.Settings.Port))) - fmt.Fprintf(writer, " version: %s\n", status.Version) - fmt.Fprintf(writer, " protocol: %d\n", status.ProtocolVersion) - fmt.Fprintf(writer, " PID: %d\n", status.PID) - fmt.Fprintf(writer, " state: %s\n", status.Settings.State) - fmt.Fprintf(writer, " contexts: %d legacy worktrees, %d snapshots\n", status.Worktrees, status.Captures) -} - func plural(count int, singular, plural string) string { label := plural if count == 1 { diff --git a/cmd/servediff/producer.go b/cmd/servediff/producer.go index e5e4485..5f359a8 100644 --- a/cmd/servediff/producer.go +++ b/cmd/servediff/producer.go @@ -2,29 +2,14 @@ package main import ( "context" - "crypto/sha256" - "encoding/hex" - "encoding/json" "errors" "fmt" - "io" - "net/http" - "net/url" - "os" - "strings" - "time" - "github.com/flexdinesh/servediff/internal/browser" "github.com/flexdinesh/servediff/internal/collector" "github.com/flexdinesh/servediff/internal/config" - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/daemon" - "github.com/flexdinesh/servediff/internal/diffsource" - "github.com/flexdinesh/servediff/internal/hooks" "github.com/flexdinesh/servediff/internal/ingestion" ) -// Producer routing is resolved once: file < environment < explicit flags. func resolvedCollectorSettings(values options) (options, error) { saved, err := config.LoadFile(values.configFile) if err != nil { @@ -39,130 +24,9 @@ func resolvedCollectorSettings(values options) (options, error) { return values, nil } -// destination owns lifecycle and transport. A resolved destination pins every -// immutable retry to the same database; remote failure never starts locally. -type destination struct { - queued bool - progress func(ingestion.Job) - target hooks.Target - endpoint, token string - remote *ingestion.Client - local *daemon.Connection - lifecycle *daemon.Client -} - -func resolveDestination(ctx context.Context, values options, settings daemon.Settings, explicit daemon.Explicit, start func(context.Context, string, func(context.Context) error) error) (*destination, error) { - result := &destination{endpoint: values.server, token: values.token} - if values.server != "" { - result.remote = ingestion.NewClient(values.server, values.token) - health, err := result.remote.Health(ctx) - if err != nil { - return nil, err - } - digest := sha256.Sum256([]byte(values.token)) - result.queued = health.QueuedIngestion - result.target = hooks.Target{Destination: "remote:" + strings.TrimRight(values.server, "/") + ":" + hex.EncodeToString(digest[:]), Identity: health.StateID} - return result, nil - } - client, err := daemon.NewClient() - if err != nil { - return nil, err - } - result.lifecycle = client - result.target.Destination = "local:" + client.RuntimeDirectory - connect := func(ctx context.Context) error { - result.local, err = client.EnsureConnection(ctx, settings, explicit) - return err - } - if start != nil { - status, probeErr := client.Status(ctx) - if probeErr == nil && status.State == "running" { - err = connect(ctx) - } else { - err = start(ctx, result.target.Destination, connect) - } - } else { - err = connect(ctx) - } - if err != nil { - return nil, err - } - status := result.local.Status() - result.endpoint = status.BrowserURL - result.target.Identity = status.StateID - if status.Settings.State == "memory" { - result.target.Identity += ":" + status.InstanceID - } - return result, nil -} - -func (target *destination) current(ctx context.Context, id string) (bool, error) { - return ingestion.NewClient(target.endpoint, target.token).ObservationCurrent(ctx, id) -} - -func (target *destination) deliver(ctx context.Context, request ingestion.Request) (result ingestion.Receipt, failure error) { - defer func() { - if failure != nil && target.token != "" { - failure = redactedError{cause: failure, secret: target.token} - } - }() - var firstFailure error - uncertain := false - for attempt := 0; attempt < 2; attempt++ { - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "started", SubmissionID: request.SubmissionID, Attempt: attempt + 1, Destination: target.endpoint}) - var receipt ingestion.Receipt - var err error - if target.remote != nil { - if target.queued { - receipt, err = target.remote.SyncTo(ctx, request, target.target.Identity, target.progress) - } else { - receipt, err = target.remote.SubmitTo(ctx, request, target.target.Identity) - } - } else { - var submitted contextservice.Submission - submitted, err = target.local.Ingest(ctx, request) - if err == nil { - id := submitted.Context.ID - if id == "" { - return receipt, errors.New("receipt missing context identity") - } - receipt = ingestion.Receipt{ContextID: id, ReviewURL: target.endpoint + "/contexts/" + url.PathEscape(id), MCPURL: target.endpoint + "/mcp/contexts/" + url.PathEscape(id), Snapshot: submitted.Snapshot} - } - } - if err == nil { - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "acknowledged", SubmissionID: request.SubmissionID, ContextID: receipt.ContextID, Attempt: attempt + 1, Destination: target.endpoint}) - return receipt, nil - } - recordCollectorActivity(hooks.Activity{Stage: "ingestion", Status: "failed", SubmissionID: request.SubmissionID, Attempt: attempt + 1, Error: err.Error()}, target.token) - retry, ambiguous := retryableSubmission(err) - if target.remote != nil { - var transport *url.Error - var problem *ingestion.Problem - ambiguous = errors.As(err, &transport) - retry = ambiguous || (errors.As(err, &problem) && (problem.Status == 429 || problem.Status >= 500)) - } - uncertain = uncertain || ambiguous - if !retry || ctx.Err() != nil || attempt == 1 { - cause := errors.Join(firstFailure, err) - return receipt, deliveryFailure(request.SubmissionID, uncertain, cause) - } - firstFailure = err - if target.remote == nil { - recovered, recoveryErr := target.lifecycle.RecoverConnection(ctx, target.local) - if recoveryErr != nil { - cause := fmt.Errorf("recovery failed: %w", errors.Join(firstFailure, recoveryErr)) - return receipt, deliveryFailure(request.SubmissionID, uncertain, cause) - } - target.local = recovered - target.endpoint = recovered.Status().BrowserURL - } - } - return ingestion.Receipt{}, errors.New("submission failed") -} - -func collectSubmissions(ctx context.Context, command string, values options, stdin *os.File) ([]ingestion.Request, error) { - if command != "review" || values.branch != "" { - request, err := collectSubmission(ctx, command, values, stdin) +func collectSubmissions(ctx context.Context, values options) ([]ingestion.Request, error) { + if values.branch != "" { + request, err := collectSubmission(ctx, values) if err != nil { return nil, err } @@ -197,128 +61,3 @@ func collectSubmissions(ctx context.Context, command string, values options, std } return requests, errors.Join(failures...) } - -func submitCollected(ctx context.Context, command string, values options, settings daemon.Settings, explicit daemon.Explicit, requests []ingestion.Request, stdout, stderr io.Writer, started time.Time) error { - target, err := resolveDestination(ctx, values, settings, explicit, nil) - if err != nil { - return err - } - target.queued = false // Legacy review output includes the synchronous snapshot receipt. - var failures []error - var originReceipt *ingestion.Receipt - var originRequest ingestion.Request - originRoot := values.directory - if source, openErr := diffsource.OpenRepository(ctx, values.directory); openErr == nil { - originRoot = source.Root() - } - for _, request := range requests { - receipt, err := target.deliver(ctx, request) - if err != nil { - failures = append(failures, fmt.Errorf("submit %s: %w", request.Metadata.Root, err)) - continue - } - if values.branch != "" || request.Metadata.Root == originRoot { - originReceipt = &receipt - originRequest = request - } - } - if originReceipt != nil { - input := loadedInput{directory: originRequest.Metadata.Root, snapshot: originReceipt.Snapshot, processed: time.Since(started), mode: "git", contextID: originReceipt.ContextID, mcpURL: originReceipt.MCPURL, submitted: true, remote: target.remote != nil} - var status *daemon.Status - if target.local != nil { - current := target.local.Status() - status = ¤t - } - urls := submissionURLs(*originReceipt, status) - writeStartup(stdout, input, urls...) - openBrowser(values, urls[0], stderr) - } - return errors.Join(failures...) -} - -// A lost local acknowledgement must not leave an old dirty server head current. -// Query retained captures, checking stable identity and comparison policy. An -// incomplete/error response deliberately falls back to publishing the empty state. -func (target *destination) suppressInitialEmpty(ctx context.Context, request ingestion.Request) (bool, error) { - metadata := request.Metadata - query := url.Values{"sourceId": {metadata.SourceID}, "limit": {"500"}} - client := &http.Client{Timeout: 5 * time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }} - for pageNumber := 0; pageNumber < 8; pageNumber++ { - httpRequest, err := http.NewRequestWithContext(ctx, http.MethodGet, target.endpoint+"/api/v2/contexts?"+query.Encode(), nil) - if err != nil { - return false, err - } - if target.token != "" { - httpRequest.Header.Set("Authorization", "Bearer "+target.token) - } - response, err := client.Do(httpRequest) - if err != nil { - return false, err - } - if response.StatusCode != http.StatusOK { - response.Body.Close() - return false, errors.New("cannot reconcile retained captures") - } - var page contextservice.Page - decoder := json.NewDecoder(io.LimitReader(response.Body, 16<<20)) - err = decoder.Decode(&page) - valid := decoder.Decode(&struct{}{}) == io.EOF - response.Body.Close() - if err != nil || !valid || page.Contexts == nil { - return false, errors.New("invalid retained capture response") - } - for _, item := range page.Contexts { - existing := item.Observation - if existing != nil && existing.SourceID == metadata.SourceID && existing.RepositoryKey == metadata.RepositoryKey && existing.CheckoutKey == metadata.CheckoutKey && existing.BranchID == metadata.BranchID && sameComparison(existing.Comparison, metadata.Comparison) { - return false, nil - } - } - if page.NextCursor == nil { - return true, nil - } - query.Set("cursor", *page.NextCursor) - } - return false, errors.New("retained capture reconciliation exceeded page limit") -} - -func sameComparison(left, right *ingestion.Comparison) bool { - kind, base := func(value *ingestion.Comparison) (string, string) { - if value == nil { - return "working-tree", "HEAD" - } - return value.Kind, value.BaseRef - }(left) - otherKind, otherBase := func(value *ingestion.Comparison) (string, string) { - if value == nil { - return "working-tree", "HEAD" - } - return value.Kind, value.BaseRef - }(right) - return kind == otherKind && base == otherBase -} - -// Keep error identity for retry decisions while preventing persisted credentials -// echoed by a server from reaching activity logs or CLI output. -type redactedError struct { - cause error - secret string -} - -func (failure redactedError) Error() string { - return strings.ReplaceAll(failure.cause.Error(), failure.secret, "[redacted]") -} -func (failure redactedError) Unwrap() error { return failure.cause } - -func deliveryFailure(id string, uncertain bool, cause error) error { - if uncertain { - return fmt.Errorf("submission %s may have been saved; inspect server observations before resubmitting: %w", id, cause) - } - return cause -} - -func submissionURLs(receipt ingestion.Receipt, local *daemon.Status) []string { - if local == nil { - return []string{receipt.ReviewURL} - } - return browser.URLs(local.Settings.Host, local.Settings.Port, "/contexts/"+url.PathEscape(receipt.ContextID)) -} diff --git a/cmd/servediff/producer_test.go b/cmd/servediff/producer_test.go index 367c90d..f57254e 100644 --- a/cmd/servediff/producer_test.go +++ b/cmd/servediff/producer_test.go @@ -1,14 +1,9 @@ package main import ( - "bytes" "context" - "encoding/json" "errors" - "fmt" "io" - "net/http" - "net/http/httptest" "os" "os/exec" "path/filepath" @@ -16,12 +11,11 @@ import ( "testing" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/daemon" "github.com/flexdinesh/servediff/internal/hooks" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/reviewstore" - "github.com/flexdinesh/servediff/internal/serverapp" - "github.com/flexdinesh/servediff/internal/webui" + "github.com/flexdinesh/servediff/internal/submission" + "github.com/flexdinesh/servediff/internal/testsupport" ) func producerGit(t *testing.T, root string, args ...string) { @@ -59,53 +53,6 @@ func TestCollectorDestinationConfigAndExplicitLocalOverride(t *testing.T) { } } -func TestReviewCollectsAllWorktreesAndPrintsOrigin(t *testing.T) { - root := cliRepository(t) - linked := filepath.Join(t.TempDir(), "linked") - producerGit(t, root, "worktree", "add", "-b", "other", linked) - if err := os.WriteFile(filepath.Join(linked, "file.txt"), []byte("other edit\n"), 0600); err != nil { - t.Fatal(err) - } - t.Setenv("SERVEDIFF_CONFIG_PATH", filepath.Join(t.TempDir(), "config.json")) - var received []ingestion.Request - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/api/v2/health" { - _ = json.NewEncoder(w).Encode(ingestion.Health{StateID: "database", ProtocolVersion: ingestion.ProtocolVersion}) - return - } - if r.Header.Get("X-Servediff-State") != "database" { - t.Error("submission not pinned") - } - var request ingestion.Request - if err := json.NewDecoder(r.Body).Decode(&request); err != nil { - t.Error(err) - return - } - received = append(received, request) - id := "linked" - if request.Metadata.Root == root { - id = "origin" - } - _ = json.NewEncoder(w).Encode(ingestion.Receipt{ContextID: id, ReviewURL: "/contexts/" + id, MCPURL: "/mcp/contexts/" + id, Snapshot: request.Scopes[0].Snapshot}) - })) - defer server.Close() - var output bytes.Buffer - if err := run(t.Context(), []string{"review", "--path", root, "--server", server.URL, "--source-id", "machine", "--no-browser"}, nil, &output, io.Discard); err != nil { - t.Fatal(err) - } - if len(received) != 2 || received[0].Metadata.Root != root || received[1].Metadata.Root != linked { - t.Fatalf("sources: %#v", received) - } - for _, request := range received { - if request.Metadata.TriggerRoot != root { - t.Fatalf("origin provenance: %#v", request.Metadata) - } - } - if !strings.Contains(output.String(), "/contexts/origin") || strings.Contains(output.String(), "/contexts/linked") { - t.Fatalf("output: %s", output.String()) - } -} - func TestHookDiscoveryIgnoresNonGitAndObjectOnlyBranches(t *testing.T) { workspace := t.TempDir() root := cliRepository(t) @@ -143,7 +90,7 @@ func TestHookInitialCleanSessionsAndMissingAcknowledgement(t *testing.T) { } service := contextservice.NewWithContext(t.Context(), store, user) defer service.Close() - server := httptest.NewServer(serverapp.Handler(t.Context(), service, store, webui.Assets(), "")) + server := testsupport.Server(t, service, store) defer server.Close() t.Setenv("SERVEDIFF_SERVER_URL", server.URL) directory := t.TempDir() @@ -214,7 +161,7 @@ func TestHookInitialCleanSessionsAndMissingAcknowledgement(t *testing.T) { func TestRemoteFailureNeverStartsLocalService(t *testing.T) { runtime := t.TempDir() t.Setenv("SERVEDIFF_RUNTIME_DIR", runtime) - target, err := resolveDestination(context.Background(), options{server: "http://127.0.0.1:1"}, daemon.Settings{}, daemon.Explicit{}, nil) + target, err := submission.Resolve(context.Background(), "http://127.0.0.1:1", "token") if err == nil || target != nil { t.Fatalf("remote accepted: %#v %v", target, err) } @@ -230,7 +177,7 @@ func TestUnavailableWorktreeNeverProducesFalseEmptyCapture(t *testing.T) { if err := os.RemoveAll(linked); err != nil { t.Fatal(err) } - requests, err := collectSubmissions(t.Context(), "review", options{directory: root, sourceID: "machine", trigger: "manual"}, nil) + requests, err := collectSubmissions(t.Context(), options{directory: root, sourceID: "machine", trigger: "manual"}) if err == nil || !strings.Contains(err.Error(), "unavailable") { t.Fatalf("missing worktree not reported: %v", err) } @@ -238,49 +185,3 @@ func TestUnavailableWorktreeNeverProducesFalseEmptyCapture(t *testing.T) { t.Fatalf("false empty capture: %#v", requests) } } - -func TestConfiguredTokenRedactedInRejectedDelivery(t *testing.T) { - token := "persisted-private-token" - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusForbidden) - _ = json.NewEncoder(w).Encode(ingestion.Problem{Status: http.StatusForbidden, Detail: "Rejected " + token}) - })) - defer server.Close() - target := destination{endpoint: server.URL, token: token, remote: ingestion.NewClient(server.URL, token)} - _, err := target.deliver(t.Context(), ingestion.Request{}) - var problem *ingestion.Problem - if err == nil || strings.Contains(err.Error(), token) || !errors.As(err, &problem) { - t.Fatalf("credential rejection: %v", err) - } -} - -func TestUncertainSubmissionRemainsExplicitWhenRecoveryFails(t *testing.T) { - cause := fmt.Errorf("recovery failed: %w", errors.Join(io.EOF, daemon.ErrStateChanged)) - failure := deliveryFailure("submission-id", true, cause) - if !strings.Contains(failure.Error(), "submission-id may have been saved") || !errors.Is(failure, daemon.ErrStateChanged) || !errors.Is(failure, io.EOF) { - t.Fatalf("lost acknowledgement: %v", failure) - } - certain := deliveryFailure("submission-id", false, daemon.ErrSettingsChanged) - if strings.Contains(certain.Error(), "may have been saved") || !errors.Is(certain, daemon.ErrSettingsChanged) { - t.Fatalf("certain rejection: %v", certain) - } -} - -func TestSubmittedURLsUseLocalListenerAndKeepRemoteOrigin(t *testing.T) { - receipt := ingestion.Receipt{ContextID: "review-id", ReviewURL: "https://remote.example.test/contexts/review-id"} - for _, host := range []string{"127.0.0.1", "0.0.0.0", "::", "::1"} { - status := daemon.Status{Settings: daemon.Settings{Host: host, Port: 7981}} - urls := submissionURLs(receipt, &status) - expected := "http://localhost:7981/contexts/review-id" - if strings.Contains(host, ":") { - expected = "http://[::1]:7981/contexts/review-id" - } - if len(urls) == 0 || urls[0] != expected { - t.Fatalf("listener %s: %v", host, urls) - } - } - remote := submissionURLs(receipt, nil) - if len(remote) != 1 || remote[0] != receipt.ReviewURL { - t.Fatalf("remote URL changed: %v", remote) - } -} diff --git a/cmd/servediff/sync.go b/cmd/servediff/sync.go index 8d7a27d..02f3c80 100644 --- a/cmd/servediff/sync.go +++ b/cmd/servediff/sync.go @@ -1,5 +1,7 @@ package main +import "github.com/mattn/go-isatty" + import ( "context" "crypto/sha256" @@ -11,11 +13,9 @@ import ( "path/filepath" "strings" - "github.com/flexdinesh/servediff/internal/daemon" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/reviewstore" "github.com/flexdinesh/servediff/internal/submission" - "github.com/mattn/go-isatty" ) type syncProgress struct { @@ -42,14 +42,14 @@ func (progress *syncProgress) close() { } func runSync(ctx context.Context, arguments []string, stdin *os.File, stdout, stderr io.Writer) (failure error) { - values, err := parseOptionsMode(arguments, stderr, false, true) + values, err := parseOptionsMode(arguments, stderr, true) if errors.Is(err, errHelp) { return nil } if err != nil { return err } - if values.hostSet || values.portSet || values.stateSet || values.webDirSet || values.retentionDaysSet || values.replace || values.fixture != "" || values.capture != "" { + if values.hostSet || values.portSet || values.stateSet || values.webDirSet || values.retentionDaysSet || values.replace || values.fixture != "" { return errors.New("sync does not accept local server options") } values, err = resolvedCollectorSettings(values) @@ -61,7 +61,7 @@ func runSync(ctx context.Context, arguments []string, stdin *os.File, stdout, st } defer func() { if failure != nil { - failure = redactedError{cause: failure, secret: values.token} + failure = fmt.Errorf("%s", strings.ReplaceAll(failure.Error(), values.token, "[redacted]")) } }() progress := &syncProgress{writer: stderr, enabled: values.debug} @@ -88,7 +88,7 @@ func runSync(ctx context.Context, arguments []string, stdin *os.File, stdout, st if !values.retry { progress.show("Collect · discovering worktrees and reading changes") values.progress = func(stage, detail string) { progress.show(stage + " · " + detail) } - requests, collectErr := collectSubmissions(ctx, "review", values, stdin) + requests, collectErr := collectSubmissions(ctx, values) if collectErr != nil { failures = append(failures, collectErr) } @@ -107,27 +107,24 @@ func runSync(ctx context.Context, arguments []string, stdin *os.File, stdout, st return errors.New("no pending submissions") } progress.show("Upload · connecting") - target, err := resolveDestination(ctx, values, daemon.Settings{}, daemon.Explicit{}, nil) + target, err := submission.Resolve(ctx, values.server, values.token) if err != nil { return err } - if !target.queued { - return errors.New("server does not support queued ingestion; upgrade it and resume with sync --retry") - } - target.progress = func(job ingestion.Job) { + target.Progress = func(job ingestion.Job) { progress.show(fmt.Sprintf("Ingest · %s · attempt %d", job.State, job.Attempt)) } for index, item := range pending { - if item.StateID != "" && item.StateID != target.target.Identity { + if item.StateID != "" && item.StateID != target.Target.Identity { failures = append(failures, fmt.Errorf("submission %s belongs to another server database; retained for recovery", item.Request.SubmissionID)) continue } - item.StateID = target.target.Identity + item.StateID = target.Target.Identity if err := box.Save(item); err != nil { return err } progress.show(fmt.Sprintf("Upload · %d/%d", index+1, len(pending))) - if _, err := target.deliver(ctx, item.Request); err != nil { + if _, err := target.Deliver(ctx, item.Request); err != nil { failures = append(failures, fmt.Errorf("submission %s retained; resume with sync --retry: %w", item.Request.SubmissionID, err)) continue } diff --git a/docs/agent-plugins-plan.md b/docs/agent-plugins-plan.md deleted file mode 100644 index 405814c..0000000 --- a/docs/agent-plugins-plan.md +++ /dev/null @@ -1,87 +0,0 @@ -# Agent plugins implementation plan - -## Outcome - -Locally installed Codex, Claude Code, OpenCode and Pi plugins request a sync at -agent completion. The request returns promptly; a detached Go worker collects -the latest checkout against HEAD and submits through the existing collector and -ingestion flow. All worktrees remain visible in the existing web UI. No plugin -publication, turn baselines, watcher, or frontend changes. - -## Contracts and ownership - -- `servediff hook --harness NAME`: command hooks provide `cwd` and `session_id` - on JSON stdin. Embedded extensions pass `--path` and `--run-id` explicitly. - Optional `--config-file` selects machine settings. Hook failures never request - agent continuation; diagnostics go to private local logs. -- `__hook-worker`: internal detached worker entry. Null stdin and independent - stdout/stderr prevent the host waiting for inherited pipes. Workers have a - finite deadline and survive normal host teardown. -- `internal/collector`: checked collection, stable content identity, complete - bounded before/after previews. A changed-only entry avoids constructing - previews when the acknowledged checkout fingerprint is unchanged. -- `internal/hooks`: private atomic request/state files, worker ownership, - coalescing, last acknowledged fingerprint, bounded pending payloads, retries, - service-start cooldown and log retention. Keys include destination, source - and checkout; agent session IDs are provenance, not checkout identity. -- `internal/config`: code defaults, JSON file, environment, explicit flags in - that order. Config editing reads/writes file values without environment - leakage. Existing inline `--config` remains supported. Missing files have - defaults; invalid files/environment fail clearly. Server settings change on - restart; workers resolve settings on each invocation. -- Private `packages/plugin-{codex,claude,opencode,pi}`: native manifests and - completion adapters only. Codex/Claude use `Stop`, OpenCode idle status, - Pi `agent_settled`. No direct HTTP, conversation output, or model tools. -- Local installation tasks: install/remove individual plugins, preserve other - host settings, use absolute paths, expose setup/trust requirements, verify - installed artifacts independently of workspace module resolution. - -## Tracer bullets - -1. **One real path:** a synthetic completion JSON launches a detached worker, - collects an isolated dirty repository and commits an observation in an - isolated local service. Confirm return latency, host-independent lifetime, - correct worktree metadata and preserved before/after contents. -2. **Reliable sync:** repeat unchanged triggers without uploads; edit a file - without changing its size/timestamp and sync it; submit dirty-to-clean; - branch/HEAD/staging changes invalidate the fingerprint. Mark acknowledged - state only after durable receipt. Coalesce concurrent triggers and process - an event arriving while collection/upload is active. Unknown full content - identities must not be falsely suppressed. -3. **Failure isolation:** health probe, one local startup attempt, bounded - transient retries, shared cooldown after startup failure, bounded pending - payload retention. Preserve submission ID for ambiguous retries; never - silently switch an uncertain request to another server/database. New latest - state can supersede obsolete pending work. No perpetual retry loop. -4. **Four hosts:** native event adapters feed the same Go path. Verify package - shapes and local installation/removal, then smoke-test available real hosts - without requiring model calls. Document any unavailable host verification. -5. **Ship:** relevant focused tests, full `mise run check`, Go race tests, - generated-asset cleanliness, push branch and create PR targeting `main`. - -## Parallel implementation - -Independent Worktrunk worktrees own config resolution, changed-only collection, -hook worker/state, native plugins, and local installer. The integration agent -owns CLI dispatch, end-to-end tests and documentation. Contracts are shared -before implementation; integrate commits serially and resolve checks together. - -## Future compatibility - -Keep captured data immutable and retain existing full-file contents. Producer -comparison and HTTP/local transport stay separate so a later turn-baseline -producer can reuse ingestion. Do not add speculative turn fields or overload -HEAD with a turn identity. Existing latest/stale stream semantics remain intact. - -## Verification - -Behavior tests cover detached execution, coalescing/handoff, retry identity, -destination changes, bounded state, clean transitions, startup cooldown, -configuration precedence and editing, native lifecycle filtering, and installer -preservation/idempotency. Existing Git/store tests cover immutable snapshots. -No frontend change is expected; generated assets must remain clean after checks. - -## Unresolved questions - -None. Local-only plugin installation; latest checkout capture; async collection -and ingestion; bounded failures; environment overrides JSON defaults. diff --git a/docs/architecture.md b/docs/architecture.md index 1e70b03..4cd6962 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,130 +1,96 @@ # Architecture -servediff composes one Go application core into foreground local and distributed -remote runtimes. React/Vite assets are embedded; Node is a build dependency. - -## Composition - -- `servediff [PATH]`: collect only that checkout once and ingest directly. - The foreground process owns shared persistent SQLite state, UI, REST and MCP. - Ctrl-C stops collection and serving; observations and review state persist. -- `servediff sync`: finite collector including registered worktrees; authenticated - HTTP admission, durable job polling, and process exit after committed results. -- `servediff-server`: foreground container process with authenticated HTTP, - durable queue, worker, UI, REST and MCP. No Git or checkout mount. - -`serverapp.Run` shares HTTP/task cancellation, graceful shutdown and pruning. -Local composition adds authenticated singleton discovery/replacement. -Remote composition adds credential resolution and an ingestion worker. -REST and MCP call the same query/review services, never each other over HTTP. - -The local lifecycle lock serializes replacement/startup until the new descriptor -is published. Database ownership is released only after serving and background -work stop. Replacement never trusts a PID alone. Legacy daemon commands retain -their old explicit compatibility behavior; new local collection does not submit -through their HTTP ingestion adapter. - -## Modules and contracts - -- `collector`, `diffsource`: Git discovery, stable enrollment, parsing, bounded - previews and content identity. Finite producers reuse CollectChanged for suppression. -- `ingestion`: versioned request/job/receipt contracts, validation, pure content - identity and comparison policy, and HTTP clients. -- `contextservice.Store`: atomic observation publication and stored catalog reads. -- `reviewservice.CommentStore`, `MutationStore`: shared review state operations. -- `httpapi.Store`: review persistence capabilities required by REST. -- `reviewdata`: storage-independent IDs, results and errors. -- `reviewstore`: SQLite adapter and schema migration; no Git query dependency. -- `ingestionqueue.Queue`: durable acceptance/status, claims, renewable leases, - completion, delayed retry and terminal failure. -- `submission`: private immutable manual-upload recovery; `hooks` adds finite, - coalesced harness scheduling and existing session-aware suppression. -- `serverapp`, `httpapi`, `mcpapi`: shared transport composition. -- `daemon`: existing lifecycle primitives plus foreground replacement. -- `remoteserver`: remote authentication and composition root. -- `config`: shared home-directory settings, independent of lifecycle protocol. - -Storage interfaces describe complete application operations, not independently -committed CRUD steps. The SQLite queue shares its owning store. A future external -broker adapter must persist payload/status and scheduling intent atomically, -then publish from an outbox. Broker messages should carry references rather than -64 MiB captures. A new storage adapter must pass the same behavioral tests. - -## Invariants - -An observation is an immutable captured review context. Fresh submissions may -deduplicate within the same owner/source/repository/checkout/branch/HEAD/comparison -and full-content identity. Unknown content identities remain independent. -Captured metadata, scope manifests, previews, comments and reviewed marks survive -deduplication; new session associations remain searchable. - -Transport retries retain submission ID and exact payload; changed replays -conflict. Retries never extend retention. Fresh matching submissions can extend -expiry. Existing migration and branch-adoption semantics remain intact. - -Queue acceptance records a durable sequence. Stream heads compare collection -time, then acceptance sequence; worker completion order cannot regress freshness. -Heads outlive pruning. Queue replay records survive deletion/expiry, preventing -delayed delivery from resurrecting observations. Compact job/replay records are -retained; completed/failed payload bodies are removed. Legacy direct deletion -continues allowing an explicit new submission after deleting its retry mapping. - -Queries read stored data only. Failure during collection never becomes an empty -observation. Empty successful captures record dirty-to-clean transitions. - -## Queue and recovery - -Remote `POST /api/v2/ingestion-jobs` returns 202 plus a Location. Status is -authenticated and owner-scoped. Success means committed publication; acceptance -alone does not. The synchronous v2 ingestion endpoint remains compatible. - -The built-in queue caps active work at 1,024 jobs and 256 MiB, with 30-second -renewable leases, one worker, two-minute processing deadlines and five processing -attempts. Transient failures retry with bounded exponential delay; permanent -errors terminate. Expired leases recover after restart. Commit-before-ack crashes -replay the original ingestion transaction without creating another review. - -Manual sync persists captures before health/network calls and pins attempted -uploads to destination identity. `sync --retry` needs no surviving checkout. -Hooks retain their existing private pending payloads and finite retry scheduling. -Plugins require remote configuration and never start a local server. - -## Compatibility and validation - -The positional local command, sync, and top-level config are the primary UX. -Legacy commands remain migration compatibility paths. Schema 8 migrates existing -captures/reviews in place; stop old processes before upgrading. Generated OpenAPI -types and embedded web assets are committed. - -Validation covers legacy identities/retention, queue acceptance order, restart -after commit, lease fencing, terminal failure, owner isolation, full CLI sync -recovery, fixed local snapshots and singleton replacement. - -## Mode contracts and capabilities - -| Boundary | Foreground local | Remote server and producers | -| --------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------- | -| Collection | Selected checkout once; omitted path means current directory | Sync/plugins collect all registered worktrees per invocation/event | -| Observation schema | `ingestion.Request` | Same `ingestion.Request`; hooks add optional harness/session provenance | -| Ingestion | Direct `contextservice.Ingest` call | Authenticated HTTP admission; worker calls the same service | -| HTTP ingestion capabilities | Disabled | Direct and queued admission enabled | -| Checkout observation | No watcher | No watcher; plugins trigger finite collection on agent events | -| Snapshot capabilities | Stored scopes, previews and comments; no Git refresh | Identical for identical captured source support | -| Browser selection | Open the submitted snapshot URL | Catalog updates on ingestion events; selected snapshot remains pinned | - -Mode differences belong to producer/runtime composition, not the observation -schema, storage model or review components. `serverapp.Options.Capabilities` -resolves transport admission once and drives both routes and health advertising. -`session.ResolveCapabilities` resolves source support and policy for both catalog -metadata and review sessions. The web UI reads these shared capabilities. - -Captured metadata retains repository/checkout identity, root, worktree name and -linked-worktree status, branch/HEAD and comparison baseline in both modes. -The triggering directory remains separate from each discovered checkout root. -Harness/session metadata adds provenance without changing content identity. -Queries read stored snapshots; a catalog notification never initiates collection. - -The shared core already supplies collection, validation, atomic ingestion, -storage, REST/MCP and review contracts. This change removes watching/following and -duplicate capability resolution; it needs no mode-specific payload, schema -migration, parallel service implementation or generic feature-toggle framework. +ServeDiff has one stored-data application with two compositions. This is the +canonical record of package boundaries and architectural decisions. +[System semantics](system.md) covers identities and durability; +[development](development.md) covers commands and checks. + +## Modes are compositions + +| Concern | Local `servediff [PATH]` | Remote `servediff-server` | +| ---------- | ----------------------------------------------- | ---------------------------------------- | +| Collection | Selected checkout or stdin, once | Separate finite sync or hook producer | +| Admission | Direct application call before serving | Authenticated durable queue and worker | +| Lifetime | Foreground; authenticated singleton replacement | Foreground; graceful worker shutdown | +| Storage | One owner of persistent SQLite | One owner of persistent SQLite | +| Queries | Stored observations via REST/MCP | Same application services via REST/MCP | +| Access | Public listener; private lifecycle credential | Account credentials wrap the application | + +Source support and review policy resolve snapshot capabilities. A mode never +invents contents, scopes or refresh support. Queue presence at the composition +root enables remote admission; no queue means no admission routes. +Stored observations cannot refresh from Git. + +Private local control supports authenticated status/shutdown only. Replacement +uses lifecycle locking, a validated descriptor and graceful shutdown; a PID +alone is never authority. `servediff dev --fixture FILE` is isolated from +personal lifecycle discovery. + +## Modules own behavior + +- `review`: data, source contract and pure comment/patch rules. +- `collector`, `diffsource`: Git, discovery, parsing and finite collection. +- `ingestion`: versioned request/job contracts, validation and HTTP client. +- `contextservice`: owner-scoped publication, resolution and catalog. +- `reviewservice`: shared snapshot reads, comments, marks and capability checks. +- `reviewdata`: storage-independent identities, results and errors. +- `reviewstore`: SQLite transactions, stored reads, retention and queue adapter. +- `ingestionqueue`: admission/lease contract and worker failure policy. +- `submission`: immutable recovery, destination identity and delivery, shared by + manual sync and hooks. No dependency on hook scheduling. +- `hooks`: finite scheduling, coalescing and session-aware suppression. +- `httpapi`, `mcpapi`: transport parsing, projection and error mapping. +- `serverapp`: transport/task composition; `daemon`: local lifecycle; + `remoteserver`: remote authentication and worker composition. + +Interfaces live beside consumers and require the needed operation. Optional +interface assertions must not change application behavior. Storage contracts +describe atomic application operations, not independently committed CRUD steps. + +## Principles and limits + +1. Share semantics, not coincidental syntax. DRY gives identity, authorization, + replay and review rules one owner. Local direct ingestion and remote queue + admission have different failure contracts and remain distinct. +2. Separate collection from queries. Reads survive checkout removal without Git. + Failed collection never becomes a successful empty observation. +3. Compose policy at entry points. Keep mode branches out of domain operations; + prefer small explicit policies over a generic feature framework. +4. Immutable content, mutable review state. Fresh matching submissions can reuse + review state and extend retention. Exact retries cannot change retention or + resurrect deleted content. Identity commits with the observation. +5. Authorize before resource access. Owner/context/scope checks apply equally to + REST, MCP, historical versions, mutations and job polling. +6. Acceptance is not completion. Remote 202 means durable admission; succeeded + means committed publication. Retries preserve payload and submission ID. +7. Cancellation and ownership are contracts. Stop workers and serving before + releasing database ownership. Uncertain delivery stays pinned to its target. +8. Generate wire types; share examples for cross-language rules. TypeScript + aliases OpenAPI types. Real HTTP responses need runtime schema checks. +9. Prefer boundary tests; keep valuable unit tests. Parsing, hashing, leases, + retry policy and UI recovery have independent failure modes. Delete obsolete + behavior tests and implementation-shape assertions, not useful small tests. +10. Add complexity for an observed requirement. No REST cache for cheap immutable + database reads, background review daemon, or speculative infrastructure. + +## Contracts and evolution + +`mise run test:contracts` runs production dependency checks, storage/lifecycle/ +queue/transport boundaries, shared Go/TypeScript comment examples and real HTTP +schema validation. Run locally or wherever useful; pre-push invokes it. +CI configuration does not enforce this suite. + +New adapters must preserve ownership, atomic publication, retention, replay, +lease fencing and commit-before-ack recovery. External brokers require atomic +scheduling intent (an outbox). Multiple server processes need a storage backend +designed for that concurrency; SQLite retains one owning process. + +Only public v2 routes and ingestion protocol 3 remain. Retired: `review`, +`service`, `serve`, `capture`, background daemon startup, public v1, +synchronous ingestion and legacy capture/worktree storage. + +Schema 9 intentionally resets older versioned databases in one transaction under +the ownership lock. Current state survives subsequent starts; future or +unrecognized schemas are refused. Upgrade server and collectors together. +Versioned producer directories ignore old manual/hook pending payloads. +Stop old binaries before upgrading. diff --git a/docs/development.md b/docs/development.md index 8c567eb..505ade8 100644 --- a/docs/development.md +++ b/docs/development.md @@ -47,6 +47,7 @@ List available tasks with `mise tasks`. Keep personal overrides in | Install Playwright Chromium | `pnpm test:browser:install` | | Run web unit and browser tests | `pnpm test:web` | | Run Go tests | `mise run test:go` | +| Run boundary and shared-rule contracts | `mise run test:contracts` | | Run distribution API conformance tests | `mise run test:conformance` | | Run TypeScript checks | `pnpm typecheck` | | Run JavaScript linting | `pnpm lint` | @@ -58,7 +59,7 @@ List available tasks with `mise tasks`. Keep personal overrides in Set `SERVEDIFF_TEST_PORT` for a separate browser-test server (default 4173), e.g. `SERVEDIFF_TEST_PORT=4183 mise exec -- pnpm --filter @servediff/web test:browser`. `mise run setup` enables the Husky `pre-push` hook. Every push runs -`mise run check:push`: all repository suites and Go race tests, then rejects +`mise run check:push`: all repository suites, boundary contracts and Go race tests, then rejects uncommitted generated API types or embedded assets. `mise run setup` installs Playwright Chromium; reinstall it after upgrading Playwright. The hook needs mise on `PATH`; mise activates project tools. Checks run on your @@ -90,11 +91,11 @@ Start the fixture server with built web assets: mise run dev:server -- --no-browser ``` -`serve` collects its fixture before starting in the foreground and does not use -the personal daemon. `review` collects the originating checkout and all registered +`dev --fixture` collects its fixture before starting in the foreground and does +not use personal lifecycle discovery. `sync` collects the originating checkout and all registered worktrees against the default branch merge base, plus working changes. Use `--base HEAD` for working changes only, and `--branch` for explicit object-only -recovery. `review` submits to one configured destination and exits. +recovery. `sync` submits to one configured destination and exits. Redirected stdin (`git diff | servediff`) starts a foreground local process with a fixed patch and ignores remote config. `servediff [PATH]` likewise collects once, defaults to the current directory, and opens a fixed checkout snapshot. @@ -108,12 +109,10 @@ runtime directories (`SERVEDIFF_RUNTIME_DIR`) and in-memory state for lifecycle must not register inputs in the personal service. `SERVEDIFF_EXIT_ON_STDIN_CLOSE` is a foreground development-process lifecycle hook. -Before replacing a running binary, stop the service with `servediff service -stop`. Stop older foreground binaries separately; they do not honor the new -database ownership lock. Restart uses the invoking binary and restores retained -contexts from persistent state. Memory state lasts only for one process. Server -`retentionDays` defaults to seven; fresh submissions apply the current setting, -while existing expiry and exact retries retain their earlier expiry. +Stop running processes before upgrading. Schema 9 resets older versioned +databases transactionally on first open. Current databases survive restart; +in-memory state does not. Server `retentionDays` defaults to seven; fresh +submissions apply the current setting, while exact retries preserve expiry. For isolated production-user tests, start `servediff-server` with a temporary persistent database. Initial admin credentials live in `.admin-token`; @@ -157,8 +156,8 @@ labels. Piped history uses “Search Piped”, with collection timestamps newest and no repository filters. The header identifies these reviews with a terminal icon, “Piped”, and collection time, without repository, branch, worktree, or directory. The optional API `Context.source` distinguishes `local` and `stdin` independently -of `context.kind`; legacy captures also belong to Piped. Catalog presentation masks -repository identity and stale state on legacy stdin observations. Repository +of its identity. Catalog presentation masks repository identity and stale state +on stdin observations. Repository freshness, host, branch, worktree, and status filters never exclude Piped imports. Catalog reads query stored metadata only; ingestion events, reconnect, and tab visibility reload the catalog without replacing the selected observation. @@ -177,7 +176,7 @@ repository grouping. Unavailable entries are disabled and skipped during keyboar navigation. Filter selections persist while navigating and reopening the picker. Switching disposes the previous workspace's request ownership and resets transient state. -The header's delete action removes the selected snapshot or legacy context, all +The header's delete action removes the selected snapshot, all its stored diff scopes, comments, and reviewed-file marks after confirmation. Deletion preserves stream freshness history; older snapshots remain stale. It leaves Git files untouched, and a new collection can create a review again. diff --git a/docs/mcp.md b/docs/mcp.md index 61f4032..7266966 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -13,7 +13,8 @@ The browser does not need to remain open while an MCP client works. ## Connect Start `servediff` with a path or piped patch and use the printed MCP URL to -search stored reviews. `servediff review` prints a scoped MCP URL. +search stored reviews. Remote snapshots are available through the server’s `/mcp` catalog or a scoped +`/mcp/contexts/{id}` URL. For example: ```text diff --git a/docs/plugins.md b/docs/plugins.md index 0e47c65..6ae5057 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -185,7 +185,7 @@ a trigger, and the worker may capture edits made after that trigger. Nested hook directories resolve to the checkout root. Discovery includes that checkout and all registered live worktrees. Non-Git input is ignored; child repositories and branches without checkouts are -excluded. Explicit `review --branch` can recover committed changes after worktree +excluded. Explicit `sync --branch` can recover committed changes after worktree removal. Discovery never fetches, switches branches or creates worktrees. Supply the new path after moving a repository; an old path alone cannot locate an arbitrary move. The triggering directory is stored separately from each @@ -252,11 +252,11 @@ server context. Manual-command logs use `acknowledged` for the same outcome. Manually recover committed changes even when another branch is checked out: ```sh -servediff review --path /path/to/repository --branch feature --base main --no-browser -servediff review --path /path/to/checkout --base HEAD --no-browser +servediff sync --path /path/to/repository --branch feature --base main --no-browser +servediff sync --path /path/to/checkout --base HEAD --no-browser ``` -Manual review defaults to auto and collects all registered worktrees, returning +Manual sync defaults to auto and collects all registered worktrees, returning the originating checkout's URL. `--base HEAD` selects working changes only. `--branch` reads only the named branch's Git objects, defaults its base to auto, and ignores the current checkout's dirty files. Deleted uncommitted @@ -291,5 +291,5 @@ printf '%s\n' '{"cwd":"/path/to/checkout","session_id":"session-id","session_nam Hooks default to `--base auto`, never open a browser, and return after scheduling. Scheduling success does not confirm ingestion; hooks log failures and exit successfully. Inspect the dashboard or hook log for delivery state. Manual -`servediff review` always submits, waits for receipts and reports failures +`servediff sync` always submits, waits for receipts and reports failures directly. Manual and hook collection use the same auto baseline. diff --git a/docs/release.md b/docs/release.md index 1d51c0e..0739a19 100644 --- a/docs/release.md +++ b/docs/release.md @@ -38,13 +38,10 @@ arm64. Windows archives are also published. Archives include the native binary, README, and license. The embedded web application needs no installed Node.js runtime. -For daemon upgrades, stop the current service before replacing the executable, -then start it with the new binary. Stop older foreground servers separately: -they do not honor daemon/database ownership locks. State migrations -preserve existing review IDs and data and backfill snapshot freshness; -unsupported older/newer schemas fail -without modification. Persistent contexts survive restart; in-memory state does -not. Listener settings are not saved across a stopped service. +Stop running binaries before upgrading. Schema 9 intentionally resets older +versioned databases on first open; current state survives subsequent starts. +Future or unrecognized schemas are refused. Upgrade server and collectors +together for ingestion protocol 3. In-memory state lasts only for one process. The tap branch is deterministic per version, such as `servediff-v0.1.0`. Rerunning a release whose tag still points to current `main` reuses the existing diff --git a/docs/system-boundaries-plan.md b/docs/system-boundaries-plan.md deleted file mode 100644 index 3ca5679..0000000 --- a/docs/system-boundaries-plan.md +++ /dev/null @@ -1,114 +0,0 @@ -# System boundaries implementation - -## Decisions - -- Git collection defaults to branch changes from the default branch merge base, - plus working changes. Staged and unstaged remain HEAD/index comparisons. -- Collect current checkout and all registered worktrees. Workspace discovery and - object-only branch recovery remain explicit policies; hooks ignore non-Git input. -- Each producer invocation has one destination. Remote failures never fall back - locally. Independent local and remote deployments may coexist. -- Immutable snapshot content is distinct from collection/session provenance. - Sessions associate with shared reviews within one user; metadata does not assert - authorship. Preserve triggering directory for all-worktree collections. -- Production resolves credentials to individual users in one SQLite database, - one replica. Bootstrap admin and a generated persistent token; no organizations. - Local composition supplies a default user. -- Retention is configurable in whole days, defaults to seven. Existing snapshots - retain their expiry until fresh submission; retries do not extend retention. -- Publication receipts mean committed storage. No server queue or storage backend - framework is introduced without a concrete backend. - -## Shared contract - -`ingestion.Metadata` gains optional `comparison`, `agentSession`, and -`triggerRoot`. Comparison: `kind` (`working-tree` or `branch`), `baseRef`, -`baseCommit` (resolved baseline tip), `mergeBase` (actual comparison commit). -Agent session: `harness`, `id`, optional `name`. Existing `agent`/`runId` remain -compatible labels; missing structured session falls back to those fields. -Filters add `harness`, `sessionId`, `sessionName`; `runId` remains supported. -Legacy missing comparisons mean working-tree/HEAD. - -Configuration gains `server`, `token`, `retentionDays` (default 7, positive). -Store adds `OpenWithRetention(path, duration)`; `Open` keeps the seven-day default. -Local/control and remote settings carry `RetentionDays`; zero from legacy callers -means default. Destination config uses file < environment < explicit flags. - -## Parallel tracks and ownership - -1. Comparison/collection: collector, diffsource, ingestion validation. Persist - baseline facts; default auto; expose policies for registered worktrees versus - workspace/recovery. Test commits, dirty edits, clean base, explicit HEAD, - detached/unborn repositories, consistent collection and changed refs. -2. Session storage/retention: reviewstore except authentication, contextservice. - Store/query every fresh submission's session association, preserve snapshot - and comments on dedupe, partition freshness by comparison policy. Migration - preserves old data/retry hashes. Retention applies to all new/renewed scopes. -3. Producer orchestration/config: cmd/servediff, hooks, config, controlapi, - daemon. Share destination/submission logic and acknowledgements; manual review - ingests all worktrees and opens the originating review; hooks skip initial clean - captures, publish clean transitions, preserve new session associations, expose - optional session names. Reconcile missing acknowledgement state conservatively. -4. Production users: remoteserver, cmd/servediff-server, new reviewstore auth file. - Persist hashed credentials, bootstrap admin once, authenticate bearer/Basic - per user, scope handlers/services/events/caches, provide local user/token - provisioning command. Test two-user REST/MCP/event isolation and restarts. -5. Application/transports: reviewservice, httpapi, mcpapi, serverapp. Move common - review operations out of REST into application services; expose context search - and stored diff retrieval through global MCP while retaining scoped tools. - Preserve protocol and REST behavior. Require user-scoped context resolution. - -Foundation precedes these tracks. Tracks commit isolated worktrees; integration -resolves cross-track interfaces and behavior. API schema, generated artifacts, -plugin metadata adapters, system/development documentation and comprehensive -regression tests are finalized after integration. - -Integration decisions: manual review remains an explicit fresh submission; -hooks own their suppression acknowledgements and reconcile server state when -missing. Both share collection/routing/delivery operations. Ingestion protocol 2 -advertises provenance support; the server continues accepting legacy protocol 1 -payloads and retries. Collectors/server should be upgraded together. - -## Acceptance and verification - -- Manual and hooked captures use identical branch semantics and policy freshness. -- All registered worktrees collected; failures never publish false empty captures. -- Initially clean automatic captures suppressed; dirty-to-clean delivered. -- Identical content in sessions A/B shares one review, filterable under both. -- Credentials select owners; one user's IDs cannot access another user's data. -- Admin token persists across restarts; secrets never appear in help/logs. -- Config precedence/invalid values tested; configurable expiry preserves replay. -- REST/MCP reads remain stored-only after checkout deletion; review operations - share services. Legacy API/context routes remain compatible where feasible. -- Run relevant package tests per track, then `mise run check`, Go race tests, - generation/staging, and generated drift checks. Commit generated artifacts. -- No push, deployment, running-user service restart or PR creation required. - -## Risks and execution guidance - -Default branch comparisons change manual-review behavior; document `--base HEAD`. -Schema additions preserve legacy observations and classify missing policy as HEAD. -Session names are optional and mutable; plugin payloads may supply only IDs. -Configured baselines use existing local refs, with no automatic fetch. Unborn or -missing-default checkouts retain explicit working-tree fallback metadata. -Only independent tracks run in parallel. Update this plan and surface deviations -if integration changes scope, contracts, behavior or validation. - -## Completion and verification - -Implemented all five tracks on `codex/system-boundaries`; integrated their -independent commits, schema migration, generated API/plugin/web assets and docs. -Registered-worktree collection has no count limit; regression covers 129 -checkouts. Temporary agent worktrees removed; integrated worktree retained. - -Passed `mise run check`: static checks, builds, generated drift, API conformance, -unit/plugin tests, all 65 browser tests, release tests and the complete Go suite. -Passed `mise run test:race` across all Go packages. One browser assertion timed -out on the first full run; passed three isolated repetitions and the full rerun -without changing code or weakening its assertion. - -Upgrade collector and server together for ingestion protocol 2 and control -protocol 4. Production user provisioning currently requires stopping the -server; credentials and all users share one database. No push or deployment. - -Unresolved questions: none. diff --git a/docs/system.md b/docs/system.md index cd8045e..939c0fc 100644 --- a/docs/system.md +++ b/docs/system.md @@ -12,19 +12,19 @@ for transport details. ## Terminology and ownership -| Term | Meaning and responsibility | -| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| Producer | Code with access to a checkout or supplied patch. Collects data, attaches provenance and submits it. | -| Collector | The shared Git-aware collection pipeline used by manual CLI commands and agent hooks. | -| Plugin / agent hook | An event-triggered producer. Can invoke the CLI or implement the ingestion contract directly. | -| Server / daemon | One process owning ingestion, application processing, SQLite, REST, MCP and web assets. A local daemon is the background deployment of this server. | -| Observation | An immutable snapshot: original metadata, diff scopes, patches and available file contents. | -| Submission | One collection's provenance and retry identity; may associate with an existing matching observation. | -| Agent session | Harness, session ID and optional mutable name associated with submissions; does not establish authorship. | -| Context | The server-assigned address for reviewing an observation, including its review state. | -| Source | A producer installation or explicitly identified container. Distinct from a repository, branch or hostname. | -| Checkout | A source-specific Git working directory or linked worktree. Owned by the producer. | -| Account / owner | The server-established identity that owns stored observations and review state. | +| Term | Meaning and responsibility | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| Producer | Code with access to a checkout or supplied patch. Collects data, attaches provenance and submits it. | +| Collector | The shared Git-aware collection pipeline used by manual CLI commands and agent hooks. | +| Plugin / agent hook | An event-triggered producer. Can invoke the CLI or implement the ingestion contract directly. | +| Server | Foreground process owning application processing, SQLite, REST, MCP and web assets. Remote composition also owns admission and workers. | +| Observation | An immutable snapshot: original metadata, diff scopes, patches and available file contents. | +| Submission | One collection's provenance and retry identity; may associate with an existing matching observation. | +| Agent session | Harness, session ID and optional mutable name associated with submissions; does not establish authorship. | +| Context | The server-assigned address for reviewing an observation, including its review state. | +| Source | A producer installation or explicitly identified container. Distinct from a repository, branch or hostname. | +| Checkout | A source-specific Git working directory or linked worktree. Owned by the producer. | +| Account / owner | The server-established identity that owns stored observations and review state. | The CLI owns argument parsing, collection, transport and local lifecycle bootstrap. The server owns the catalog and its interpretation. The CLI does not @@ -72,10 +72,6 @@ Transient ingestion notifications remain hints; clients reload durable catalog state after reconnecting. Queue workers may execute out of order, but stream freshness follows collection time and acceptance sequence. -The older `POST /api/v2/ingestions` endpoint preserves its synchronous response -contract for existing clients. Existing explicit daemon commands remain -compatibility paths while callers migrate to positional local mode and sync. - ### Browse and review The dashboard queries `/api/v2/contexts`, selects a repository, then selects an @@ -87,7 +83,7 @@ submission associations. Filters cover All / Latest / Stale, Host, Branch and Worktree, with OR within a multi-select filter and AND across filters. Filtering precedes repository grouping and counts. Latest snapshots with changes are the default; the right-aligned All checkbox also includes -unavailable, empty and unknown-status entries. Unavailable legacy entries remain +unavailable, empty and unknown-status entries. Unavailable entries remain disabled and skipped by keyboard navigation. Selections persist while navigating the picker. New collections make older snapshots stale within the same owner, source, repository, checkout, branch and comparison policy; collection time wins over upload time, @@ -152,27 +148,13 @@ Snapshot retention is configurable in whole days, default seven, after the last fresh submission. Changing configuration preserves existing expiry until a fresh submission; retries do not extend it. Reads enforce expiry immediately; local and remote servers prune at startup and hourly, -removing all scopes, previews, comments, marks and retry mappings. Schema -migration preserves existing histories, sets expiry from their last -submission times, and backfills stream heads from retained submission history. -Pruning preserves the latest stream identity and collection time. Existing -duplicates remain until expiry. Legacy registered -worktree contexts cannot trigger server Git reads; users submit a new review. - -## Decisions and trade-offs - -| Decision | Reason and consequence | -| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Push-only freshness | Queries have predictable dependencies and work after checkout removal. Missing producer events or failed uploads can leave the catalog behind the checkout. | -| Complete observations, not path registration or change pings | The same contract works across machines and containers. Producers pay collection and upload costs; the server never needs producer filesystem access. | -| Shared pipeline for hooks and manual commands | Both paths produce the same searchable metadata and reviewable data. No separate plugin-specific storage model. | -| Immutable snapshots with configurable retention | Defaults to seven days. Reused contexts keep contents/review state; fresh submissions reset expiry. Expiry removes comments and marks too. | -| Dedupe matching checkout content | Stable hashes reuse reviews within one user/source/checkout/branch/HEAD/comparison policy. Sessions share review state; independent sources remain separate. | -| Synchronous atomic ingestion | A successful receipt means publication is committed, not merely queued. Upload latency includes validation and persistence. | -| One server process, layered entry points | Local use stays simple; remote deployment adds authentication around shared logic. This is not a distributed worker system. | -| SQLite first | Durable queries and transactions with a small operational footprint. Other storage and queue backends remain future implementation work. | -| Event notifications plus catalog queries | The database remains authoritative when a connection drops. Notifications may be missed or repeated. | -| Finite collection | Foreground mode captures its selected checkout once. Remote producers capture registered worktrees per command or agent event. No checkout watchers. | +removing all scopes, previews, comments and marks. Compact replay identities and +stream heads survive deletion and expiry, preventing replay resurrection and +regression of freshness. See architecture.md for the intentional schema reset. + +## Freshness and delivery + +Composition decisions and trade-offs live in [architecture.md](architecture.md). “Latest” means the most recently collected submission within a source, repository, checkout, branch and comparison policy; arrival order breaks ties. Delayed uploads remain stale. diff --git a/internal/contextservice/catalog_test.go b/internal/contextservice/catalog_test.go index 2ae9ea0..708db1a 100644 --- a/internal/contextservice/catalog_test.go +++ b/internal/contextservice/catalog_test.go @@ -47,9 +47,6 @@ func TestCatalogContainsOnlySubmittedWorktreeObservations(t *testing.T) { if item.Name != "servediff" || item.Root == nil || *item.Root != linked || item.Branch == nil || *item.Branch != "feature/picker" || item.WorktreeName == nil || *item.WorktreeName != "elsewhere" { t.Fatalf("captured Git metadata: %#v", item) } - if len(service.sources) != 0 { - t.Fatal("catalog loaded filesystem sources") - } } func TestOldObservationUsesRemoteNameWithoutReadingGit(t *testing.T) { diff --git a/internal/contextservice/delete_test.go b/internal/contextservice/delete_test.go deleted file mode 100644 index a6309b2..0000000 --- a/internal/contextservice/delete_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package contextservice - -import ( - "context" - "errors" - "testing" -) - -func TestDeleteInvalidatesCaptureAndPublishesCatalogChange(t *testing.T) { - service := testService(t) - submission, err := service.Capture(t.Context(), "request", testPatch, "") - if err != nil { - t.Fatal(err) - } - id := submission.Context.ID - if _, ok := service.cached(id); !ok { - t.Fatal("capture not cached") - } - events, unsubscribe := service.Subscribe() - defer unsubscribe() - if err := service.Delete(t.Context(), id); err != nil { - t.Fatal(err) - } - if _, ok := service.cached(id); ok { - t.Fatal("deleted capture still cached") - } - select { - case changed := <-events: - if changed != id { - t.Fatalf("catalog event %q, want %q", changed, id) - } - default: - t.Fatal("deletion did not publish catalog change") - } - _, err = service.Resolve(t.Context(), id) - assertStatus(t, err, 404) - assertStatus(t, service.Delete(t.Context(), id), 404) - select { - case <-events: - t.Fatal("failed deletion published catalog change") - default: - } - resubmitted, err := service.Capture(t.Context(), "request", testPatch, "") - if err != nil || resubmitted.Context.ID == id { - t.Fatalf("resubmitted capture: %#v, %v", resubmitted, err) - } -} - -func TestDeleteCancelledRequestPreservesContext(t *testing.T) { - service := testService(t) - submission, err := service.Capture(t.Context(), "request", testPatch, "") - if err != nil { - t.Fatal(err) - } - ctx, cancel := context.WithCancel(t.Context()) - cancel() - if err := service.Delete(ctx, submission.Context.ID); !errors.Is(err, context.Canceled) { - t.Fatalf("cancelled deletion: %v", err) - } - if _, err := service.Get(t.Context(), submission.Context.ID); err != nil { - t.Fatalf("cancelled deletion removed context: %v", err) - } -} diff --git a/internal/contextservice/ingestion.go b/internal/contextservice/ingestion.go index 6d04776..5e3b733 100644 --- a/internal/contextservice/ingestion.go +++ b/internal/contextservice/ingestion.go @@ -4,7 +4,6 @@ import ( "context" "sync" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" @@ -16,7 +15,7 @@ func (service *Service) Ingest(ctx context.Context, input ingestion.Request) (Su return Submission{}, err } if err := ingestion.Validate(input); err != nil { - return Submission{}, diffsource.Error(400, "%v", err) + return Submission{}, review.Error(400, "%v", err) } binding, err := service.store.IngestContext(ctx, service.user.ID, input) if err != nil { @@ -45,7 +44,7 @@ type storedSource struct { func (source *storedSource) Root() string { return source.metadata.Root } func (source *storedSource) Kind() string { return source.kind } -func (source *storedSource) Support() diffsource.Support { +func (source *storedSource) Support() review.Support { scopes := []review.DiffMode{} for _, mode := range []review.DiffMode{review.DiffAll, review.DiffStaged, review.DiffUnstaged} { if _, ok := source.binding.DiffIDs[mode]; ok { @@ -77,7 +76,7 @@ func (source *storedSource) Patch(ctx context.Context, mode review.DiffMode, fil } } if !found { - return review.FilePatch{}, diffsource.Error(404, "File not in observation") + return review.FilePatch{}, review.Error(404, "File not in observation") } value, err := source.store.ObservationPatch(source.ownerID, source.id, mode, file.ID) return value, requestError(err) @@ -88,7 +87,7 @@ func (source *storedSource) Contents(ctx context.Context, mode review.DiffMode, return review.FileContents{}, err } if preview.Contents == nil { - return review.FileContents{}, diffsource.Error(404, "Full file contents were not collected") + return review.FileContents{}, review.Error(404, "Full file contents were not collected") } return *preview.Contents, nil } @@ -97,8 +96,8 @@ func storedCapabilities(scopes []review.DiffMode, contents bool) session.Capabil return session.ResolveCapabilities(storedSupport(scopes, contents), session.Policies{}) } -func storedSupport(scopes []review.DiffMode, contents bool) diffsource.Support { - return diffsource.Support{Scopes: scopes, StagingMetadata: len(scopes) > 1, FileContents: contents} +func storedSupport(scopes []review.DiffMode, contents bool) review.Support { + return review.Support{Scopes: scopes, StagingMetadata: len(scopes) > 1, FileContents: contents} } func valueOrEmpty(value *string) string { diff --git a/internal/contextservice/service.go b/internal/contextservice/service.go index 4a345ba..3b1a276 100644 --- a/internal/contextservice/service.go +++ b/internal/contextservice/service.go @@ -3,18 +3,11 @@ package contextservice import ( "context" - "crypto/sha256" "encoding/base64" - "encoding/hex" "encoding/json" "errors" - "fmt" - "path/filepath" - "strings" - "sync" "time" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" @@ -55,43 +48,21 @@ type Submission struct { } type Service struct { - events events - store Store - user reviewdata.User - mu sync.Mutex - sources map[string]*cachedSource - loading map[string]*sourceLoad - generation map[string]uint64 - sourceBytes int - parseSlots chan struct{} - background context.Context - cancel context.CancelFunc - loaders sync.WaitGroup - closing bool + events events + store Store + user reviewdata.User + background context.Context + cancel context.CancelFunc } func New(store Store, user reviewdata.User) *Service { return NewWithContext(context.Background(), store, user) } - func NewWithContext(ctx context.Context, store Store, user reviewdata.User) *Service { background, cancel := context.WithCancel(ctx) - return &Service{store: store, user: user, - sources: make(map[string]*cachedSource), loading: make(map[string]*sourceLoad), - generation: make(map[string]uint64), parseSlots: make(chan struct{}, 2), - background: background, cancel: cancel} + return &Service{store: store, user: user, background: background, cancel: cancel} } - -// Close stops shared source work before the database owner is released. -func (service *Service) Close() error { - service.mu.Lock() - service.closing = true - service.cancel() - service.mu.Unlock() - service.loaders.Wait() - return nil -} - +func (service *Service) Close() error { service.cancel(); return nil } func (service *Service) UserID() string { return service.user.ID } func (service *Service) Delete(ctx context.Context, id string) error { @@ -101,82 +72,10 @@ func (service *Service) Delete(ctx context.Context, id string) error { if err := service.store.DeleteContext(service.user.ID, id); err != nil { return requestError(err) } - service.invalidateSource(id) service.events.publish(id) return nil } -func (service *Service) Register(ctx context.Context, requestID, path string) (Submission, error) { - if err := validateRequest(ctx, requestID); err != nil { - return Submission{}, err - } - return Submission{}, diffsource.Error(410, "Path registration removed; collect and ingest using servediff review") -} - -func (service *Service) Capture(ctx context.Context, requestID, raw, submittedFrom string) (Submission, error) { - if err := validateRequest(ctx, requestID); err != nil { - return Submission{}, err - } - if len(raw) > diffsource.MaxInputBytes { - return Submission{}, diffsource.Error(413, "Piped diff exceeds the 16 MiB input limit") - } - if submittedFrom != "" { - absolute, err := filepath.Abs(submittedFrom) - if err != nil { - return Submission{}, diffsource.Error(400, "Invalid submission directory") - } - submittedFrom = absolute - } - select { - case service.parseSlots <- struct{}{}: - default: - return Submission{}, diffsource.Error(503, "Capture parsing is busy; retry shortly") - } - source, err := diffsource.OpenPatch(raw) - <-service.parseSlots - if err != nil { - return Submission{}, err - } - snapshot, err := source.Snapshot(ctx, review.DiffAll) - if err != nil { - return Submission{}, err - } - if err := ctx.Err(); err != nil { - return Submission{}, err - } - binding, err := service.store.CaptureSubmission(service.user.ID, requestID, payloadHash("capture", raw, submittedFrom), raw, submittedFrom, snapshot) - if err != nil { - return Submission{}, requestError(err) - } - service.invalidateSource(binding.ContextID) - service.cacheSource(binding.ContextID, newCaptureCache(source, raw, snapshot), 0) - item, err := service.Get(ctx, binding.ContextID) - if err != nil { - return Submission{}, err - } - return Submission{Context: item, Snapshot: bindSnapshot(snapshot, binding)}, nil -} - -func (service *Service) OpenCapture(ctx context.Context, id string) (Submission, error) { - item, err := service.Get(ctx, id) - if err != nil { - return Submission{}, err - } - if item.Kind != "capture" && item.Kind != "observation" { - return Submission{}, diffsource.Error(404, "Capture not found") - } - resolved, err := service.Resolve(ctx, id) - if err != nil { - return Submission{}, err - } - snapshot, err := resolved.Source.Snapshot(ctx, review.DiffAll) - if err != nil { - return Submission{}, err - } - binding := reviewdata.Binding{ContextID: resolved.ContextID, LocationID: resolved.LocationID, RepositoryID: resolved.RepositoryID, DiffIDs: resolved.DiffIDs, VersionID: resolved.VersionID} - return Submission{Context: item, Snapshot: bindSnapshot(snapshot, binding)}, nil -} - func (service *Service) Resolve(ctx context.Context, id string) (session.Session, error) { if err := service.background.Err(); err != nil { return session.Session{}, err @@ -193,32 +92,20 @@ func (service *Service) Resolve(ctx context.Context, id string) (session.Session if err != nil { return session.Session{}, requestError(err) } - var source diffsource.Source - if item.Kind == "observation" { - if item.Metadata == nil { - return session.Session{}, diffsource.Error(500, "Observation metadata missing") - } - snapshot, readErr := service.store.ObservationSnapshot(service.user.ID, id, review.DiffAll) - if readErr != nil { - return session.Session{}, requestError(readErr) - } - source = &storedSource{store: service.store, ownerID: service.user.ID, id: id, metadata: *item.Metadata, binding: binding, kind: snapshot.Source} - } else if item.Kind == "worktree" { - source = &unavailableSource{root: valueOrEmpty(item.Root)} - } else { - source, err = service.sourceFor(ctx, item) + if item.Metadata == nil { + return session.Session{}, review.Error(500, "Observation metadata missing") } + snapshot, err := service.store.ObservationSnapshot(service.user.ID, id, review.DiffAll) if err != nil { - return session.Session{}, err + return session.Session{}, requestError(err) } + source := &storedSource{store: service.store, ownerID: service.user.ID, id: id, metadata: *item.Metadata, binding: binding, kind: snapshot.Source} resolved := session.Resolve(source, session.Policies{}) - resolved.Stored = item.Kind == "observation" resolved.User = session.User{ID: service.user.ID, Name: service.user.Name} resolved.ContextID = binding.ContextID resolved.LocationID = binding.LocationID resolved.RepositoryID = binding.RepositoryID resolved.DiffIDs = binding.DiffIDs - resolved.VersionID = binding.VersionID return resolved, nil } @@ -250,13 +137,13 @@ func (service *Service) ListFiltered(ctx context.Context, limit int, cursor stri limit = 100 } if limit < 1 || limit > 500 { - return Page{}, diffsource.Error(400, "Limit must be between 1 and 500") + return Page{}, review.Error(400, "Limit must be between 1 and 500") } var before cursorValue if cursor != "" { raw, err := base64.RawURLEncoding.DecodeString(cursor) if err != nil || json.Unmarshal(raw, &before) != nil || before.ID == "" || before.Time < 0 { - return Page{}, diffsource.Error(400, "Invalid context cursor") + return Page{}, review.Error(400, "Invalid context cursor") } } var items []reviewdata.ContextInfo @@ -290,11 +177,11 @@ func (service *Service) ListFiltered(ctx context.Context, limit int, cursor stri return page, nil } -func (service *Service) Count(ctx context.Context) (int, int, error) { +func (service *Service) Count(ctx context.Context) (int, error) { if err := ctx.Err(); err != nil { - return 0, 0, err + return 0, err } - return service.store.ContextCounts(service.user.ID, time.Now()) + return service.store.ContextCount(service.user.ID, time.Now()) } func (service *Service) present(item reviewdata.ContextInfo) (Context, error) { @@ -314,7 +201,7 @@ func (service *Service) present(item reviewdata.ContextInfo) (Context, error) { if err != nil { return Context{}, requestError(err) } - name := diffsource.RemoteRepositoryName(m.RemoteURL, m.RepositoryName) + name := review.RemoteRepositoryName(m.RemoteURL, m.RepositoryName) if name == "" { name = "Piped" } @@ -325,93 +212,20 @@ func (service *Service) present(item reviewdata.ContextInfo) (Context, error) { } return value, nil } - var branch, worktreeName *string - lastChangedAt := item.LastSubmittedAt - changedFileCount := item.ChangedFileCount - availability := "available" - name, source := "Piped", "stdin" - if item.Kind == "worktree" { - source = "local" - lastChangedAt = 0 - changedFileCount = nil - availability = "unavailable" - if item.Root != nil { - name = filepath.Base(*item.Root) - } - } - return Context{ID: item.ID, Kind: item.Kind, Source: source, Name: name, Branch: branch, WorktreeName: worktreeName, Root: item.Root, LocationID: item.LocationID, - RepositoryID: item.RepositoryID, CreatedAt: item.CreatedAt, LastSubmittedAt: item.LastSubmittedAt, LastChangedAt: lastChangedAt, ChangedFileCount: changedFileCount, - ExpiresAt: item.ExpiresAt, SubmittedFrom: item.SubmittedFrom, Capabilities: capabilities(item.Kind), Availability: availability}, nil -} - -func capabilities(kind string) session.Capabilities { - support := diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}} - if kind == "worktree" { - support = worktreeSupport() - } - return session.ResolveCapabilities(support, session.Policies{}) -} - -func bindSnapshot(snapshot review.RepositoryDiff, binding reviewdata.Binding) review.RepositoryDiff { - snapshot.ID = binding.DiffIDs[snapshot.Mode] - snapshot.LocationID = binding.LocationID - snapshot.RepositoryID = binding.RepositoryID - if binding.VersionID != "" { - snapshot.VersionID = binding.VersionID - } - if snapshot.VersionID == "" { - snapshot.VersionID = reviewdata.VersionID(snapshot.ID, snapshot.Revision) - } - return snapshot -} - -func validateRequest(ctx context.Context, id string) error { - if err := ctx.Err(); err != nil { - return err - } - if strings.TrimSpace(id) == "" || len(id) > 128 { - return diffsource.Error(400, "Submission ID required; maximum 128 bytes") - } - return nil -} - -func payloadHash(parts ...string) string { - hash := sha256.New() - for _, part := range parts { - _, _ = fmt.Fprintf(hash, "%d:", len(part)) - _, _ = hash.Write([]byte(part)) - } - return hex.EncodeToString(hash.Sum(nil)) + return Context{}, review.Error(500, "Observation metadata missing") } func requestError(err error) error { switch { case errors.Is(err, reviewdata.ErrNotFound): - return diffsource.Error(404, "Context not found") + return review.Error(404, "Context not found") case errors.Is(err, reviewdata.ErrExpired): - return diffsource.Error(410, "Capture expired") + return review.Error(410, "Capture expired") case errors.Is(err, reviewdata.ErrSubmissionConflict): - return diffsource.Error(409, "Submission ID reused with different input") + return review.Error(409, "Submission ID reused with different input") default: return err } } // Unavailable worktrees retain their review bindings and stored versions. -type unavailableSource struct{ root string } - -func (source *unavailableSource) Root() string { return source.root } -func (source *unavailableSource) Kind() string { return "local" } -func worktreeSupport() diffsource.Support { - return diffsource.Support{Scopes: []review.DiffMode{review.DiffAll, review.DiffStaged, review.DiffUnstaged}, Refresh: false, StagingMetadata: true, FileContents: false} -} -func (source *unavailableSource) Support() diffsource.Support { return worktreeSupport() } -func (source *unavailableSource) Snapshot(context.Context, review.DiffMode) (review.RepositoryDiff, error) { - return review.RepositoryDiff{}, diffsource.Error(503, "source_unavailable: registered worktree cannot be opened") -} -func (source *unavailableSource) Patch(context.Context, review.DiffMode, review.ChangedFile, *string) (review.FilePatch, error) { - return review.FilePatch{}, diffsource.Error(503, "source_unavailable: registered worktree cannot be opened") -} -func (source *unavailableSource) Contents(context.Context, review.DiffMode, review.ChangedFile, *string) (review.FileContents, error) { - return review.FileContents{}, diffsource.Error(503, "source_unavailable: registered worktree cannot be opened") -} diff --git a/internal/contextservice/service_test.go b/internal/contextservice/service_test.go index 0a01839..b301155 100644 --- a/internal/contextservice/service_test.go +++ b/internal/contextservice/service_test.go @@ -3,7 +3,6 @@ package contextservice import ( "context" "errors" - "fmt" "os" "os/exec" "path/filepath" @@ -55,137 +54,6 @@ func testRepo(t *testing.T) string { return path } -func TestCaptureCatalogAndImmutableIdentity(t *testing.T) { - service := testService(t) - ctx := context.Background() - first, err := service.Capture(ctx, "one", testPatch, "/repo") - if err != nil { - t.Fatal(err) - } - retry, err := service.Capture(ctx, "one", testPatch, "/repo") - if err != nil || retry.Context.ID != first.Context.ID || retry.Snapshot.VersionID != first.Snapshot.VersionID { - t.Fatalf("retry: %#v, %v", retry, err) - } - second, err := service.Capture(ctx, "two", testPatch, "/repo") - if err != nil || second.Context.ID == first.Context.ID { - t.Fatalf("independent capture: %#v, %v", second, err) - } - item := first.Context - if item.Kind != "capture" || item.Root != nil || item.LocationID != nil || item.ExpiresAt == nil || item.SubmittedFrom == nil || - item.Capabilities.Diff.Refresh.Enabled() || item.Capabilities.Diff.Scopes.Allows(review.DiffStaged) { - t.Fatalf("capture metadata: %#v", item) - } - opened, err := service.OpenCapture(ctx, item.ID) - if err != nil || opened.Snapshot.ID != first.Snapshot.ID || opened.Snapshot.VersionID != first.Snapshot.VersionID { - t.Fatalf("open capture: %#v, %v", opened, err) - } - _, err = service.Capture(ctx, "one", testPatch+"\n", "/repo") - assertStatus(t, err, 409) - page, err := service.List(ctx, 1, "") - if err != nil || len(page.Contexts) != 1 || page.NextCursor == nil { - t.Fatalf("first page: %#v, %v", page, err) - } - next, err := service.List(ctx, 1, *page.NextCursor) - if err != nil || len(next.Contexts) != 1 || next.NextCursor != nil || next.Contexts[0].ID == page.Contexts[0].ID { - t.Fatalf("second page: %#v, %v", next, err) - } - worktrees, captures, err := service.Count(ctx) - if err != nil || worktrees != 0 || captures != 2 { - t.Fatalf("counts %d %d, %v", worktrees, captures, err) - } -} - -func TestInvalidCaptureDoesNotRegister(t *testing.T) { - service := testService(t) - ctx := context.Background() - _, err := service.Capture(ctx, "invalid", "not a Git patch", "") - assertStatus(t, err, 400) - page, err := service.List(ctx, 0, "") - if err != nil || len(page.Contexts) != 0 { - t.Fatalf("invalid capture persisted: %#v, %v", page, err) - } - _, err = service.Capture(ctx, "", "", "") - assertStatus(t, err, 400) - _, err = service.List(ctx, 501, "") - assertStatus(t, err, 400) - _, err = service.List(ctx, 100, "invalid") - assertStatus(t, err, 400) -} - -func TestCatalogOwnershipAndCancelledSubmission(t *testing.T) { - service := testService(t) - ctx := context.Background() - created, err := service.Capture(ctx, "request", testPatch, "") - if err != nil { - t.Fatal(err) - } - otherUser, err := service.store.(*reviewstore.Store).User("other-user", "other-user") - if err != nil { - t.Fatal(err) - } - other := New(service.store, otherUser) - _, err = other.Get(ctx, created.Context.ID) - assertStatus(t, err, 404) - _, err = other.Resolve(ctx, created.Context.ID) - assertStatus(t, err, 404) - cancelled, cancel := context.WithCancel(ctx) - cancel() - _, err = service.Capture(cancelled, "cancelled", testPatch, "") - if !errors.Is(err, context.Canceled) { - t.Fatalf("cancelled request accepted: %v", err) - } - _, captures, err := service.Count(ctx) - if err != nil || captures != 1 { - t.Fatalf("cancelled capture persisted: %d, %v", captures, err) - } -} - -func TestCaptureCacheReusesParseAndEvictionPreservesVersion(t *testing.T) { - service := testService(t) - ctx := context.Background() - submitted, err := service.Capture(ctx, "first", testPatch, "") - if err != nil { - t.Fatal(err) - } - first, err := service.Resolve(ctx, submitted.Context.ID) - if err != nil { - t.Fatal(err) - } - for range 8 { - resolved, err := service.Resolve(ctx, submitted.Context.ID) - if err != nil || resolved.Source != first.Source { - t.Fatalf("immutable capture reparsed: %v", err) - } - } - // Exhaust the source-count budget, then reconstruct the evicted capture. - for index := range maxCachedSources { - if _, err := service.Capture(ctx, fmt.Sprintf("other-%d", index), testPatch, ""); err != nil { - t.Fatal(err) - } - } - service.mu.Lock() - retainedCount := len(service.sources) - retainedBytes := service.sourceBytes - service.mu.Unlock() - if retainedCount > maxCachedSources || retainedBytes > maxSourceBytes { - t.Fatalf("retained budget exceeded: %d entries, %d bytes", retainedCount, retainedBytes) - } - reopened, err := service.OpenCapture(ctx, submitted.Context.ID) - if err != nil || reopened.Snapshot.ID != submitted.Snapshot.ID || reopened.Snapshot.VersionID != submitted.Snapshot.VersionID { - t.Fatalf("eviction changed immutable version: %#v, %v", reopened, err) - } -} - -func TestPathRegistrationRemoved(t *testing.T) { - service := testService(t) - _, err := service.Register(t.Context(), "request", "/does-not-exist") - assertStatus(t, err, 410) - page, err := service.List(t.Context(), 100, "") - if err != nil || len(page.Contexts) != 0 { - t.Fatalf("removed registration persisted: %#v, %v", page, err) - } -} - func TestObservationStoredOnlyAfterCheckoutChangesAndRemoval(t *testing.T) { service := testService(t) root := testRepo(t) @@ -215,7 +83,7 @@ func TestObservationStoredOnlyAfterCheckoutChangesAndRemoval(t *testing.T) { if err != nil { t.Fatal(err) } - if !active.Stored || active.Capabilities.Diff.Refresh.Enabled() { + if active.Capabilities.Diff.Refresh.Enabled() { t.Fatalf("stored session: %#v", active) } snapshot, err := active.Source.Snapshot(t.Context(), review.DiffAll) @@ -247,26 +115,6 @@ func TestObservationStoredOnlyAfterCheckoutChangesAndRemoval(t *testing.T) { assertStatus(t, err, 409) } -func TestLegacyWorktreeDoesNotReadFilesystem(t *testing.T) { - service := testService(t) - root := testRepo(t) - binding, err := service.store.(*reviewstore.Store).RegisterGit(service.user.ID, root, filepath.Join(root, ".git"), filepath.Join(root, ".git")) - if err != nil { - t.Fatal(err) - } - t.Setenv("PATH", t.TempDir()) - item, err := service.Get(t.Context(), binding.ContextID) - if err != nil || item.Availability != "unavailable" || item.Capabilities.Diff.Refresh.Enabled() { - t.Fatalf("legacy catalog: %#v, %v", item, err) - } - active, err := service.Resolve(t.Context(), binding.ContextID) - if err != nil { - t.Fatal(err) - } - _, err = active.Source.Snapshot(t.Context(), review.DiffAll) - assertStatus(t, err, 503) -} - func TestClosedServiceRejectsStoredSourceResolution(t *testing.T) { service := testService(t) input, err := collector.CollectPatch(t.Context(), testPatch, "", collector.Options{SourceID: "source", SubmissionID: "request"}) diff --git a/internal/contextservice/source_cache.go b/internal/contextservice/source_cache.go deleted file mode 100644 index 28f8bb9..0000000 --- a/internal/contextservice/source_cache.go +++ /dev/null @@ -1,191 +0,0 @@ -package contextservice - -import ( - "context" - "errors" - "time" - - "github.com/flexdinesh/servediff/internal/diffsource" - "github.com/flexdinesh/servediff/internal/review" - "github.com/flexdinesh/servediff/internal/reviewdata" -) - -const ( - maxCachedSources = 128 - maxSourceBytes = 64 * 1024 * 1024 - sourceIdleLifetime = 10 * time.Minute -) - -type cachedSource struct { - source diffsource.Source - bytes int - lastUsed time.Time -} - -type sourceLoad struct { - done chan struct{} - source diffsource.Source - err error - generation uint64 -} - -func newCaptureCache(source diffsource.Source, raw string, snapshot review.RepositoryDiff) *cachedSource { - // Account original/normalized patches, preview strings and file metadata. - // Active requests and parser allocations remain outside this retained-data budget. - return &cachedSource{source: source, bytes: 3*len(raw) + 512*len(snapshot.Files), lastUsed: time.Now()} -} - -func (service *Service) invalidateSource(id string) { - service.mu.Lock() - defer service.mu.Unlock() - if entry := service.sources[id]; entry != nil { - service.sourceBytes -= entry.bytes - delete(service.sources, id) - } - service.generation[id]++ -} - -func (service *Service) cacheSource(id string, entry *cachedSource, generation uint64) { - service.mu.Lock() - defer service.mu.Unlock() - if generation != 0 && generation != service.generation[id] { - return - } - service.cacheSourceLocked(id, entry) -} - -func (service *Service) cacheSourceLocked(id string, entry *cachedSource) { - if old := service.sources[id]; old != nil { - service.sourceBytes -= old.bytes - delete(service.sources, id) - } - now := time.Now() - for key, old := range service.sources { - if now.Sub(old.lastUsed) > sourceIdleLifetime { - service.sourceBytes -= old.bytes - delete(service.sources, key) - } - } - if entry.bytes > maxSourceBytes { - return - } - for len(service.sources) >= maxCachedSources || service.sourceBytes+entry.bytes > maxSourceBytes { - var oldestID string - var oldest *cachedSource - for key, entry := range service.sources { - if oldest == nil || entry.lastUsed.Before(oldest.lastUsed) { - oldestID, oldest = key, entry - } - } - if oldest == nil { - break - } - service.sourceBytes -= oldest.bytes - delete(service.sources, oldestID) - } - service.sources[id] = entry - service.sourceBytes += entry.bytes -} - -func (service *Service) cached(id string) (diffsource.Source, bool) { - service.mu.Lock() - entry := service.sources[id] - if entry == nil { - service.mu.Unlock() - return nil, false - } - if time.Since(entry.lastUsed) > sourceIdleLifetime { - service.sourceBytes -= entry.bytes - delete(service.sources, id) - service.mu.Unlock() - return nil, false - } - entry.lastUsed = time.Now() - service.mu.Unlock() - return entry.source, true -} - -func (service *Service) sourceFor(ctx context.Context, item reviewdata.ContextInfo) (diffsource.Source, error) { - if err := service.background.Err(); err != nil { - return nil, err - } - if source, ok := service.cached(item.ID); ok { - if err := service.background.Err(); err != nil { - return nil, err - } - return source, nil - } - service.mu.Lock() - if service.closing || service.background.Err() != nil { - service.mu.Unlock() - return nil, context.Canceled - } - load := service.loading[item.ID] - if load == nil { - load = &sourceLoad{done: make(chan struct{}), generation: service.generation[item.ID]} - service.loading[item.ID] = load - service.loaders.Add(1) - go service.loadSource(item, load) - } - service.mu.Unlock() - select { - case <-ctx.Done(): - return nil, ctx.Err() - case <-load.done: - return load.source, load.err - } -} - -func (service *Service) loadSource(item reviewdata.ContextInfo, load *sourceLoad) { - defer service.loaders.Done() - ctx, cancel := context.WithTimeout(service.background, 30*time.Second) - defer cancel() - var entry *cachedSource - var source diffsource.Source - var err error - if item.Kind == "capture" { - select { - case service.parseSlots <- struct{}{}: - defer func() { <-service.parseSlots }() - default: - service.mu.Lock() - load.err = diffsource.Error(503, "Capture parsing is busy; retry shortly") - if service.loading[item.ID] == load { - delete(service.loading, item.ID) - } - close(load.done) - service.mu.Unlock() - return - } - var raw string - raw, _, err = service.store.ReopenCapture(service.user.ID, item.ID, time.Now()) - if err != nil { - err = requestError(err) - } else { - source, err = diffsource.OpenPatch(raw) - if err == nil { - var snapshot review.RepositoryDiff - snapshot, err = source.Snapshot(ctx, review.DiffAll) - if err == nil { - entry = newCaptureCache(source, raw, snapshot) - } - } - } - } else { - err = errors.New("only retained captures can load a patch source") - } - if ctx.Err() != nil { - err = ctx.Err() - entry = nil - } - service.mu.Lock() - if !service.closing && load.generation == service.generation[item.ID] && entry != nil { - service.cacheSourceLocked(item.ID, entry) - } - load.source, load.err = source, err - if service.loading[item.ID] == load { - delete(service.loading, item.ID) - } - close(load.done) - service.mu.Unlock() -} diff --git a/internal/contextservice/store.go b/internal/contextservice/store.go index c09e220..e1f9023 100644 --- a/internal/contextservice/store.go +++ b/internal/contextservice/store.go @@ -18,8 +18,6 @@ type Store interface { Context(string, string, time.Time) (reviewdata.ContextInfo, error) ContextBinding(string, string, time.Time) (reviewdata.Binding, error) Contexts(string, int, int64, string, time.Time) ([]reviewdata.ContextInfo, error) - ContextCounts(string, time.Time) (int, int, error) + ContextCount(string, time.Time) (int, error) DeleteContext(string, string) error - CaptureSubmission(string, string, string, string, string, review.RepositoryDiff) (reviewdata.Binding, error) - ReopenCapture(string, string, time.Time) (string, reviewdata.Binding, error) } diff --git a/internal/controlapi/client.go b/internal/controlapi/client.go index f2b8475..183f6f3 100644 --- a/internal/controlapi/client.go +++ b/internal/controlapi/client.go @@ -1,9 +1,7 @@ package controlapi import ( - "bytes" "context" - "encoding/base64" "encoding/json" "fmt" "io" @@ -12,9 +10,6 @@ import ( "net/url" "strings" "time" - - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/ingestion" ) type Client struct { @@ -50,42 +45,6 @@ func (client *Client) Status(ctx context.Context) (Status, error) { return result, err } -func (client *Client) Register(ctx context.Context, submissionID, path string) (contextservice.Submission, error) { - input := struct { - SubmissionID string `json:"submissionId"` - Path string `json:"path"` - }{SubmissionID: submissionID, Path: path} - body, err := json.Marshal(input) - if err != nil { - return contextservice.Submission{}, err - } - var result contextservice.Submission - err = client.do(ctx, http.MethodPost, "/control/v1/worktrees", bytes.NewReader(body), http.Header{"Content-Type": []string{"application/json"}}, &result) - return result, err -} - -func (client *Client) Capture(ctx context.Context, submissionID string, raw []byte, submittedFrom string) (contextservice.Submission, error) { - if len(raw) > MaxPatchBytes { - return contextservice.Submission{}, &Problem{Status: http.StatusRequestEntityTooLarge, Code: "input_too_large", Detail: "Patch exceeds 16 MiB limit"} - } - headers := make(http.Header) - headers.Set("Content-Type", "application/octet-stream") - headers.Set(submissionHeader, submissionID) - headers.Set(submittedFromHeader, base64.RawURLEncoding.EncodeToString([]byte(submittedFrom))) - var result contextservice.Submission - err := client.do(ctx, http.MethodPost, "/control/v1/captures", bytes.NewReader(raw), headers, &result) - return result, err -} - -func (client *Client) OpenCapture(ctx context.Context, id string) (contextservice.Submission, error) { - if id == "" || strings.ContainsAny(id, "/?#") { - return contextservice.Submission{}, fmt.Errorf("invalid capture ID") - } - var result contextservice.Submission - err := client.do(ctx, http.MethodPost, "/control/v1/captures/"+url.PathEscape(id)+"/open", nil, nil, &result) - return result, err -} - func (client *Client) Shutdown(ctx context.Context) error { var result struct{} return client.do(ctx, http.MethodPost, "/control/v1/shutdown", nil, nil, &result) @@ -130,16 +89,3 @@ func (client *Client) do(ctx context.Context, method, path string, body io.Reade } return nil } - -func (client *Client) Ingest(ctx context.Context, input ingestion.Request) (contextservice.Submission, error) { - raw, err := json.Marshal(input) - if err != nil { - return contextservice.Submission{}, err - } - if len(raw) > ingestion.MaxRequestBytes { - return contextservice.Submission{}, fmt.Errorf("snapshot exceeds 64 MiB ingestion limit") - } - var result contextservice.Submission - err = client.do(ctx, http.MethodPost, "/control/v1/ingestions", bytes.NewReader(raw), http.Header{"Content-Type": []string{"application/json"}}, &result) - return result, err -} diff --git a/internal/controlapi/protocol.go b/internal/controlapi/protocol.go index e3c4ee9..5a8fa5c 100644 --- a/internal/controlapi/protocol.go +++ b/internal/controlapi/protocol.go @@ -1,14 +1,9 @@ // Package controlapi implements the private, authenticated CLI-to-daemon API. package controlapi -import "github.com/flexdinesh/servediff/internal/diffsource" import "github.com/flexdinesh/servediff/internal/config" -const ProtocolVersion = 4 -const MaxPatchBytes = diffsource.MaxInputBytes - -const submissionHeader = "X-Servediff-Submission" -const submittedFromHeader = "X-Servediff-Submitted-From" +const ProtocolVersion = 5 type Settings = config.ServerSettings @@ -22,8 +17,7 @@ type Status struct { URL string `json:"url"` BrowserURL string `json:"browserUrl"` Settings Settings `json:"settings"` - Worktrees int `json:"worktrees"` - Captures int `json:"captures"` + Observations int `json:"observations"` } // Problem is a daemon rejection, distinct from an interrupted transport. diff --git a/internal/controlapi/server.go b/internal/controlapi/server.go index 0ffbfd2..1fabc43 100644 --- a/internal/controlapi/server.go +++ b/internal/controlapi/server.go @@ -1,44 +1,25 @@ package controlapi import ( - "context" "crypto/subtle" - "encoding/base64" "encoding/json" "errors" - "io" "net/http" - "strings" "sync/atomic" - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/diffsource" - "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/review" ) -type contextService interface { - Register(context.Context, string, string) (contextservice.Submission, error) - Capture(context.Context, string, string, string) (contextservice.Submission, error) - OpenCapture(context.Context, string) (contextservice.Submission, error) -} - type handler struct { token string - service contextService status func() (Status, error) shutdown func() draining atomic.Bool - parses chan struct{} -} - -func New(token string, service *contextservice.Service, status func() (Status, error), shutdown func()) http.Handler { - return newHandler(token, service, status, shutdown) } -func newHandler(token string, service contextService, status func() (Status, error), shutdown func()) *handler { - return &handler{token: token, service: service, status: status, shutdown: shutdown, parses: make(chan struct{}, 2)} +func New(token string, status func() (Status, error), shutdown func()) http.Handler { + return &handler{token: token, status: status, shutdown: shutdown} } - func (handler *handler) ServeHTTP(response http.ResponseWriter, request *http.Request) { response.Header().Set("Cache-Control", "no-store") response.Header().Set("X-Content-Type-Options", "nosniff") @@ -77,104 +58,7 @@ func (handler *handler) ServeHTTP(response http.ResponseWriter, request *http.Re } return } - if handler.draining.Load() { - writeProblem(response, http.StatusServiceUnavailable, "service_draining", "Service is stopping") - return - } - var result contextservice.Submission - var err error - switch { - case request.URL.Path == "/control/v1/ingestions": - ingestService, ok := handler.service.(interface { - Ingest(context.Context, ingestion.Request) (contextservice.Submission, error) - }) - if !ok { - err = diffsource.Error(503, "Ingestion unavailable") - break - } - var input ingestion.Request - decoder := json.NewDecoder(http.MaxBytesReader(response, request.Body, ingestion.MaxRequestBytes)) - decoder.DisallowUnknownFields() - if err = decoder.Decode(&input); err == nil { - var trailing interface{} - if tail := decoder.Decode(&trailing); tail != io.EOF { - err = diffsource.Error(400, "Trailing ingestion data") - } else { - result, err = ingestService.Ingest(request.Context(), input) - } - } else { - var max *http.MaxBytesError - if !errors.As(err, &max) { - err = diffsource.Error(400, "Malformed ingestion request") - } - } - case request.URL.Path == "/control/v1/worktrees": - var input struct { - SubmissionID string `json:"submissionId"` - Path string `json:"path"` - } - if err = decodeJSON(response, request, &input); err == nil { - if input.SubmissionID == "" || input.Path == "" { - err = diffsource.Error(http.StatusBadRequest, "submissionId and path required") - } else { - result, err = handler.service.Register(request.Context(), input.SubmissionID, input.Path) - } - } - case request.URL.Path == "/control/v1/captures": - select { - case handler.parses <- struct{}{}: - defer func() { <-handler.parses }() - default: - writeProblem(response, http.StatusServiceUnavailable, "service_overloaded", "Capture parser busy; retry submission") - return - } - if request.Header.Get(submissionHeader) == "" { - err = diffsource.Error(http.StatusBadRequest, "submission ID required") - break - } - var submittedFrom []byte - submittedFrom, err = base64.RawURLEncoding.DecodeString(request.Header.Get(submittedFromHeader)) - if err != nil || len(submittedFrom) > 32<<10 { - err = diffsource.Error(http.StatusBadRequest, "Invalid submission directory") - break - } - var raw []byte - raw, err = io.ReadAll(http.MaxBytesReader(response, request.Body, MaxPatchBytes)) - if err == nil { - result, err = handler.service.Capture(request.Context(), request.Header.Get(submissionHeader), string(raw), string(submittedFrom)) - } - case strings.HasPrefix(request.URL.Path, "/control/v1/captures/") && strings.HasSuffix(request.URL.Path, "/open"): - id := strings.TrimSuffix(strings.TrimPrefix(request.URL.Path, "/control/v1/captures/"), "/open") - if id == "" || strings.Contains(id, "/") { - err = diffsource.Error(http.StatusNotFound, "Capture not found") - } else { - result, err = handler.service.OpenCapture(request.Context(), id) - } - default: - err = diffsource.Error(http.StatusNotFound, "Control endpoint not found") - } - if err != nil { - writeError(response, err) - return - } - writeJSON(response, http.StatusOK, result) -} - -func decodeJSON(response http.ResponseWriter, request *http.Request, value interface{}) error { - decoder := json.NewDecoder(http.MaxBytesReader(response, request.Body, 64<<10)) - decoder.DisallowUnknownFields() - if err := decoder.Decode(value); err != nil { - var limit *http.MaxBytesError - if errors.As(err, &limit) { - return err - } - return diffsource.Error(http.StatusBadRequest, "Malformed control request") - } - var trailing interface{} - if err := decoder.Decode(&trailing); err != io.EOF { - return diffsource.Error(http.StatusBadRequest, "Trailing control request data") - } - return nil + writeProblem(response, 404, "not_found", "Control endpoint not found") } func writeJSON(response http.ResponseWriter, status int, value interface{}) { @@ -191,7 +75,7 @@ func writeProblem(response http.ResponseWriter, status int, code, detail string) func writeError(response http.ResponseWriter, err error) { var limit *http.MaxBytesError - var requestError *diffsource.RequestError + var requestError *review.RequestError switch { case errors.As(err, &limit): writeProblem(response, http.StatusRequestEntityTooLarge, "input_too_large", "Input exceeds control request limit") diff --git a/internal/controlapi/server_test.go b/internal/controlapi/server_test.go index d982448..667da5c 100644 --- a/internal/controlapi/server_test.go +++ b/internal/controlapi/server_test.go @@ -2,275 +2,65 @@ package controlapi import ( "context" - "errors" - "io" "net/http" "net/http/httptest" - "strings" "sync/atomic" "testing" "time" - - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/reviewstore" ) -type testService struct { - register func(context.Context, string, string) (contextservice.Submission, error) - capture func(context.Context, string, string, string) (contextservice.Submission, error) -} - -func (service testService) Register(ctx context.Context, id, path string) (contextservice.Submission, error) { - if service.register != nil { - return service.register(ctx, id, path) - } - return contextservice.Submission{}, nil -} - -func (service testService) Capture(ctx context.Context, id, raw, from string) (contextservice.Submission, error) { - if service.capture != nil { - return service.capture(ctx, id, raw, from) - } - return contextservice.Submission{}, nil -} - -func (service testService) OpenCapture(context.Context, string) (contextservice.Submission, error) { - return contextservice.Submission{}, nil -} - -func statusValue() (Status, error) { - return Status{State: "running", ProtocolVersion: ProtocolVersion}, nil -} - -func TestControlAuthenticationAndBrowserDenial(t *testing.T) { - handler := newHandler("secret", testService{}, statusValue, func() {}) - cases := []struct { - name, authorization, header, value string - want int +func TestLifecycleAuthenticationAndIdempotentShutdown(t *testing.T) { + var stops atomic.Int32 + server := httptest.NewServer(New("secret", func() (Status, error) { + return Status{State: "running", ProtocolVersion: ProtocolVersion, InstanceID: "instance"}, nil + }, func() { stops.Add(1) })) + defer server.Close() + for _, scenario := range []struct { + token, origin, path string + status int }{ - {name: "missing", want: http.StatusUnauthorized}, - {name: "wrong", authorization: "Bearer wrong", want: http.StatusUnauthorized}, - {name: "authenticated", authorization: "Bearer secret", want: http.StatusOK}, - {name: "origin", authorization: "Bearer secret", header: "Origin", value: "http://127.0.0.1", want: http.StatusForbidden}, - {name: "null origin", authorization: "Bearer secret", header: "Origin", value: "null", want: http.StatusForbidden}, - {name: "same site", authorization: "Bearer secret", header: "Sec-Fetch-Site", value: "same-site", want: http.StatusForbidden}, - {name: "navigation", authorization: "Bearer secret", header: "Sec-Fetch-Mode", value: "navigate", want: http.StatusForbidden}, - } - for _, test := range cases { - t.Run(test.name, func(t *testing.T) { - request := httptest.NewRequest(http.MethodGet, "/control/v1/status", nil) - request.Header.Set("Authorization", test.authorization) - if test.header != "" { - request.Header.Set(test.header, test.value) - } - response := httptest.NewRecorder() - handler.ServeHTTP(response, request) - if response.Code != test.want { - t.Fatalf("status %d; want %d: %s", response.Code, test.want, response.Body.String()) - } - }) - } -} - -func TestWorktreeRejectsMalformedJSONBeforeRegistration(t *testing.T) { - var called atomic.Bool - service := testService{register: func(context.Context, string, string) (contextservice.Submission, error) { - called.Store(true) - return contextservice.Submission{}, nil - }} - handler := newHandler("secret", service, statusValue, func() {}) - for _, body := range []string{ - `{"submissionId":"test","path":"/repo","unknown":true}`, - `{"submissionId":"test","path":"/repo"}{}`, - `{"submissionId":"test"}`, - `null`, + {"", "", "/control/v1/status", 401}, + {"wrong", "", "/control/v1/status", 401}, + {"secret", "http://browser", "/control/v1/status", 403}, + {"secret", "", "/control/v1/status", 200}, } { - request := httptest.NewRequest(http.MethodPost, "/control/v1/worktrees", strings.NewReader(body)) - request.Header.Set("Authorization", "Bearer secret") - response := httptest.NewRecorder() - handler.ServeHTTP(response, request) - if response.Code != http.StatusBadRequest || called.Load() { - t.Fatalf("body %s: status %d, called %v", body, response.Code, called.Load()) + req, _ := http.NewRequest("GET", server.URL+scenario.path, nil) + req.Header.Set("Authorization", "Bearer "+scenario.token) + req.Header.Set("Origin", scenario.origin) + response, err := server.Client().Do(req) + if err != nil { + t.Fatal(err) } - } -} - -func TestCaptureSizeLimitBeforeParsing(t *testing.T) { - var called atomic.Bool - handler := newHandler("secret", testService{capture: func(context.Context, string, string, string) (contextservice.Submission, error) { - called.Store(true) - return contextservice.Submission{}, nil - }}, statusValue, func() {}) - request := httptest.NewRequest(http.MethodPost, "/control/v1/captures", strings.NewReader(strings.Repeat("x", MaxPatchBytes+1))) - request.Header.Set("Authorization", "Bearer secret") - request.Header.Set(submissionHeader, "submission") - response := httptest.NewRecorder() - handler.ServeHTTP(response, request) - if response.Code != http.StatusRequestEntityTooLarge || called.Load() { - t.Fatalf("status %d, parser called %v", response.Code, called.Load()) - } -} - -type countingReader struct{ calls int } - -func (reader *countingReader) Read([]byte) (int, error) { - reader.calls++ - return 0, io.EOF -} - -func TestCaptureOverloadRejectsBeforeReadingBody(t *testing.T) { - started := make(chan struct{}, 2) - release := make(chan struct{}) - defer close(release) - service := testService{capture: func(ctx context.Context, _, _, _ string) (contextservice.Submission, error) { - started <- struct{}{} - select { - case <-release: - case <-ctx.Done(): + response.Body.Close() + if response.StatusCode != scenario.status { + t.Fatalf("status=%d want %d", response.StatusCode, scenario.status) } - return contextservice.Submission{}, nil - }} - handler := newHandler("secret", service, statusValue, func() {}) - for range 2 { - go func() { - request := httptest.NewRequest(http.MethodPost, "/control/v1/captures", strings.NewReader("patch")) - request.Header.Set("Authorization", "Bearer secret") - request.Header.Set(submissionHeader, "submission") - handler.ServeHTTP(httptest.NewRecorder(), request) - }() } + client := NewClient(server.URL, "secret") for range 2 { - select { - case <-started: - case <-time.After(time.Second): - t.Fatal("capture not started") + if err := client.Shutdown(t.Context()); err != nil { + t.Fatal(err) } } - body := &countingReader{} - request := httptest.NewRequest(http.MethodPost, "/control/v1/captures", body) - request.Header.Set("Authorization", "Bearer secret") - request.Header.Set(submissionHeader, "third") - response := httptest.NewRecorder() - handler.ServeHTTP(response, request) - if response.Code != http.StatusServiceUnavailable || body.calls != 0 { - t.Fatalf("status %d, reads %d", response.Code, body.calls) - } -} - -func TestShutdownDrainsAndRunsOnce(t *testing.T) { - var calls atomic.Int32 - stopped := make(chan struct{}, 2) - handler := newHandler("secret", testService{}, statusValue, func() { calls.Add(1); stopped <- struct{}{} }) - server := httptest.NewServer(handler) - defer server.Close() - client := NewClient(server.URL, "secret") - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - if err := client.Shutdown(ctx); err != nil { - t.Fatal(err) - } - select { - case <-stopped: - case <-ctx.Done(): - t.Fatal(ctx.Err()) + deadline := time.Now().Add(time.Second) + for stops.Load() == 0 && time.Now().Before(deadline) { + time.Sleep(time.Millisecond) } - if err := client.Shutdown(ctx); err != nil { - t.Fatal(err) + if stops.Load() != 1 { + t.Fatalf("shutdown called %d times", stops.Load()) } - status, err := client.Status(ctx) + status, err := client.Status(context.Background()) if err != nil || status.State != "draining" { - t.Fatalf("status %+v: %v", status, err) - } - _, err = client.Register(ctx, "submission", "/repo") - var problem *Problem - if !errors.As(err, &problem) || problem.Status != http.StatusServiceUnavailable || calls.Load() != 1 { - t.Fatalf("register %v, shutdown calls %d", err, calls.Load()) - } -} - -func TestClientCapturePreservesRawPatchAndDirectory(t *testing.T) { - raw := "diff --git a/file b/file\n+line\r\n" - from := "/repo/new\nline/日本語" - service := testService{capture: func(_ context.Context, id, patch, directory string) (contextservice.Submission, error) { - if id != "submission" || patch != raw || directory != from { - t.Errorf("submission %q, patch %q, from %q", id, patch, directory) - } - return contextservice.Submission{}, nil - }} - server := httptest.NewServer(newHandler("secret", service, statusValue, func() {})) - defer server.Close() - if _, err := NewClient(server.URL, "secret").Capture(context.Background(), "submission", []byte(raw), from); err != nil { - t.Fatal(err) - } -} - -func TestClientNeverRedirectsCredentials(t *testing.T) { - var leaked atomic.Bool - destination := httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) { - leaked.Store(request.Header.Get("Authorization") != "") - response.WriteHeader(http.StatusOK) - })) - defer destination.Close() - redirector := httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) { - http.Redirect(response, request, destination.URL, http.StatusTemporaryRedirect) - })) - defer redirector.Close() - _, err := NewClient(redirector.URL, "secret").Status(context.Background()) - var problem *Problem - if !errors.As(err, &problem) || problem.Status != http.StatusTemporaryRedirect || leaked.Load() { - t.Fatalf("error %v, leaked %v", err, leaked.Load()) - } -} - -func TestClientRejectsNonLocalEndpoints(t *testing.T) { - for _, endpoint := range []string{"https://127.0.0.1:1", "http://example.com:1", "http://127.0.0.1", "http://127.0.0.1:1/path", "http://user@127.0.0.1:1"} { - if _, err := NewClient(endpoint, "secret").Status(context.Background()); err == nil { - t.Errorf("accepted endpoint %q", endpoint) - } - } -} - -func TestCaptureSubmissionRetryAndReopen(t *testing.T) { - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - user, err := store.User("control-test", "Control Test") - if err != nil { - t.Fatal(err) - } - service := contextservice.New(store, user) - server := httptest.NewServer(New("secret", service, statusValue, func() {})) - defer server.Close() - client := NewClient(server.URL, "secret") - ctx := context.Background() - raw := []byte("diff --git a/file.txt b/file.txt\n--- a/file.txt\n+++ b/file.txt\n@@ -1 +1 @@\n-before\n+after\n") - first, err := client.Capture(ctx, "submission", raw, "/repo") - if err != nil { - t.Fatal(err) + t.Fatalf("status=%+v err=%v", status, err) } - retry, err := client.Capture(ctx, "submission", raw, "/repo") + req, _ := http.NewRequest("POST", server.URL+"/control/v1/ingest", nil) + req.Header.Set("Authorization", "Bearer secret") + response, err := server.Client().Do(req) if err != nil { t.Fatal(err) } - independent, err := client.Capture(ctx, "another-submission", raw, "/repo") - if err != nil { - t.Fatal(err) - } - reopened, err := client.OpenCapture(ctx, first.Context.ID) - if err != nil { - t.Fatal(err) - } - if first.Context.ID == "" || retry.Context.ID != first.Context.ID || reopened.Context.ID != first.Context.ID || independent.Context.ID == first.Context.ID { - t.Fatalf("IDs: first=%q retry=%q reopened=%q independent=%q", first.Context.ID, retry.Context.ID, reopened.Context.ID, independent.Context.ID) - } - if first.Context.Kind != "capture" || first.Snapshot.VersionID != reopened.Snapshot.VersionID { - t.Fatalf("capture changed on reopening: %+v -> %+v", first, reopened) - } - _, err = client.Capture(ctx, "submission", raw, "/different-repo") - var problem *Problem - if !errors.As(err, &problem) || problem.Status != http.StatusConflict { - t.Fatalf("changed request did not conflict: %v", err) + defer response.Body.Close() + if response.StatusCode != 404 { + t.Fatalf("retired ingestion status=%d", response.StatusCode) } } diff --git a/internal/daemon/client.go b/internal/daemon/client.go index 2b87260..0389375 100644 --- a/internal/daemon/client.go +++ b/internal/daemon/client.go @@ -4,58 +4,16 @@ import ( "context" "errors" "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strconv" - "strings" "time" - "github.com/flexdinesh/servediff/internal/contextservice" "github.com/flexdinesh/servediff/internal/controlapi" - "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/processlock" ) var ErrUnavailable = errors.New("service unavailable; ownership held but control endpoint is unreachable") -var ErrIncompatible = errors.New("incompatible service protocol; run servediff service restart") -var ErrStateChanged = errors.New("service database identity changed; submission not replayed") -var ErrSettingsChanged = errors.New("service settings changed; submission not replayed") -var ErrMemoryRestarted = errors.New("memory service restarted; submission not replayed") - -// Connection binds accepted settings and authenticated status to one endpoint. -// Its credentials remain private and submitting never rediscovers a daemon. -type Connection struct { - status Status - control *controlapi.Client -} - -func (connection *Connection) Status() Status { return connection.status } - -func (connection *Connection) Register(ctx context.Context, id, path string) (contextservice.Submission, error) { - return connection.control.Register(ctx, id, path) -} - -func (connection *Connection) Capture(ctx context.Context, id string, raw []byte, from string) (contextservice.Submission, error) { - return connection.control.Capture(ctx, id, raw, from) -} - -func (connection *Connection) OpenCapture(ctx context.Context, id string) (contextservice.Submission, error) { - return connection.control.OpenCapture(ctx, id) -} - -func boundConnection(descriptor Descriptor, status Status) (*Connection, error) { - if status.ProtocolVersion != controlapi.ProtocolVersion || status.StateID == "" { - return nil, ErrIncompatible - } - status.Settings = normalizeSettings(status.Settings) - return &Connection{status: status, control: controlapi.NewClient(descriptor.Endpoint, descriptor.Token)}, nil -} type Client struct { RuntimeDirectory string - Executable string } func NewClient() (*Client, error) { @@ -63,11 +21,7 @@ func NewClient() (*Client, error) { if err != nil { return nil, err } - executable, err := os.Executable() - if err != nil { - return nil, err - } - return &Client{RuntimeDirectory: dir, Executable: executable}, nil + return &Client{RuntimeDirectory: dir}, nil } func (client *Client) probe(ctx context.Context) (Descriptor, Status, error) { @@ -119,122 +73,6 @@ func (client *Client) Status(ctx context.Context) (Status, error) { return status, err } -func (client *Client) Ensure(ctx context.Context, requested Settings, explicit Explicit) (Status, error) { - connection, err := client.EnsureConnection(ctx, requested, explicit) - if err != nil { - if errors.Is(err, ErrUnavailable) { - return Status{State: "unavailable"}, err - } - return Status{}, err - } - return connection.Status(), nil -} - -func (client *Client) EnsureConnection(ctx context.Context, requested Settings, explicit Explicit) (*Connection, error) { - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - d, status, err := client.probe(ctx) - if err != nil { - if errors.Is(err, ErrUnavailable) { - return client.startConnection(ctx, requested, explicit) - } - return nil, err - } - if status.State == "running" { - if err := checkSettings(status, requested, explicit); err != nil { - return nil, err - } - return boundConnection(d, status) - } - if status.State != "stopped" { - return nil, errors.New("service stopping; retry after shutdown") - } - return client.startConnection(ctx, requested, explicit) -} - -func (client *Client) Start(ctx context.Context, requested Settings, explicit Explicit) (Status, error) { - connection, err := client.startConnection(ctx, requested, explicit) - if err != nil { - return Status{}, err - } - return connection.Status(), nil -} - -func (client *Client) startConnection(ctx context.Context, requested Settings, explicit Explicit) (*Connection, error) { - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - lock, err := client.lifecycleLock(ctx) - if err != nil { - return nil, err - } - defer lock.Close() - d, status, err := client.probe(ctx) - if err != nil { - return nil, err - } - if status.State == "running" { - if err := checkSettings(status, requested, explicit); err != nil { - return nil, err - } - return boundConnection(d, status) - } - if status.State != "stopped" { - return nil, errors.New("service stopping; retry after shutdown") - } - return client.spawnConnection(ctx, requested) -} - -// RecoverConnection may restore the accepted persistent service, but never -// redirects an uncertain submission into different state or settings. -func (client *Client) RecoverConnection(ctx context.Context, previous *Connection) (*Connection, error) { - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - lock, err := client.lifecycleLock(ctx) - if err != nil { - return nil, err - } - defer lock.Close() - for { - d, status, err := client.probe(ctx) - if err != nil && !errors.Is(err, ErrUnavailable) { - return nil, err - } - if err == nil && status.State == "running" { - connection, err := boundConnection(d, status) - if err != nil { - return nil, err - } - return verifyRecovery(previous, connection) - } - if err == nil && status.State == "stopped" { - if previous.status.Settings.State == "memory" { - return nil, ErrMemoryRestarted - } - connection, err := client.spawnConnection(ctx, previous.status.Settings) - if err != nil { - return nil, err - } - return verifyRecovery(previous, connection) - } - if err := pause(ctx); err != nil { - return nil, fmt.Errorf("service recovery timed out: %w", err) - } - } -} - -func verifyRecovery(previous, current *Connection) (*Connection, error) { - if normalizeSettings(previous.status.Settings) != normalizeSettings(current.status.Settings) { - return nil, ErrSettingsChanged - } - if previous.status.Settings.State == "memory" && previous.status.InstanceID != current.status.InstanceID { - return nil, ErrMemoryRestarted - } - if previous.status.StateID != current.status.StateID { - return nil, ErrStateChanged - } - return current, nil -} - func (client *Client) Stop(ctx context.Context) error { lock, err := client.lifecycleLock(ctx) if err != nil { @@ -244,69 +82,6 @@ func (client *Client) Stop(ctx context.Context) error { return client.stop(ctx) } -func (client *Client) Restart(ctx context.Context, requested Settings, explicit Explicit) (Status, error) { - lock, err := client.lifecycleLock(ctx) - if err != nil { - return Status{}, err - } - defer lock.Close() - _, status, err := client.probe(ctx) - if err != nil { - return status, err - } - settings := requested - if status.State == "running" { - settings = status.Settings - if explicit.Host { - settings.Host = requested.Host - } - if explicit.Port { - settings.Port = requested.Port - } - if explicit.State { - settings.State = requested.State - } - if explicit.WebDir { - settings.WebDir = requested.WebDir - } - if explicit.RetentionDays { - settings.RetentionDays = requested.RetentionDays - } - } - if err := client.stop(ctx); err != nil { - return Status{}, err - } - return client.spawn(ctx, settings) -} - -func checkSettings(status Status, requested Settings, explicit Explicit) error { - if status.ProtocolVersion != controlapi.ProtocolVersion { - return ErrIncompatible - } - current := normalizeSettings(status.Settings) - requested = normalizeSettings(requested) - var flags []string - if explicit.Host && requested.Host != current.Host { - flags = append(flags, "--host "+requested.Host) - } - if explicit.Port && requested.Port > 0 && requested.Port != current.Port { - flags = append(flags, "--port "+strconv.Itoa(requested.Port)) - } - if explicit.State && requested.State != current.State { - flags = append(flags, "--state "+requested.State) - } - if explicit.WebDir && requested.WebDir != current.WebDir { - flags = append(flags, "--web-dir "+requested.WebDir) - } - if explicit.RetentionDays && requested.RetentionDays != current.RetentionDays { - flags = append(flags, "--retention-days "+strconv.Itoa(requested.RetentionDays)) - } - if len(flags) != 0 { - return fmt.Errorf("service running at %s with different settings; run: servediff service restart %s", status.URL, strings.Join(flags, " ")) - } - return nil -} - func (client *Client) lifecycleLock(ctx context.Context) (*processlock.Lock, error) { if _, err := prepareRuntime(client.RuntimeDirectory); err != nil { return nil, err @@ -361,89 +136,3 @@ func (client *Client) stop(ctx context.Context) error { } } } - -func (client *Client) spawn(ctx context.Context, settings Settings) (Status, error) { - connection, err := client.spawnConnection(ctx, settings) - if err != nil { - return Status{}, err - } - return connection.Status(), nil -} - -func (client *Client) spawnConnection(ctx context.Context, settings Settings) (*Connection, error) { - if err := ctx.Err(); err != nil { - return nil, err - } - if settings.Host == "" { - settings.Host = "127.0.0.1" - } - settings = normalizeSettings(settings) - startupCtx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - args := []string{"__daemon", "--host", settings.Host, "--port", strconv.Itoa(settings.Port), "--state", settings.State, "--runtime-dir", client.RuntimeDirectory, "--retention-days", strconv.Itoa(settings.RetentionDays)} - if settings.WebDir != "" { - args = append(args, "--web-dir", settings.WebDir) - } - command := exec.Command(client.Executable, args...) - detach(command) - null, err := os.Open(os.DevNull) - if err != nil { - return nil, err - } - defer null.Close() - if err := rotateLog(client.RuntimeDirectory); err != nil { - return nil, err - } - log, err := os.OpenFile(LogPath(client.RuntimeDirectory), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0o600) - if err != nil { - return nil, err - } - defer log.Close() - command.Stdin, command.Stdout, command.Stderr = null, log, log - if err := startupCtx.Err(); err != nil { - return nil, err - } - if err := command.Start(); err != nil { - return nil, err - } - exited := make(chan error, 1) - go func() { exited <- command.Wait() }() - for { - select { - case err := <-exited: - return nil, fmt.Errorf("service failed to start (%v): %s", err, logTail(client.RuntimeDirectory)) - default: - } - d, status, err := client.probe(startupCtx) - if err == nil && status.State == "running" { - if err := checkSettings(status, settings, Explicit{Host: true, Port: true, State: settings.State != "", WebDir: true, RetentionDays: true}); err != nil { - return nil, err - } - return boundConnection(d, status) - } - if err := pause(startupCtx); err != nil { - return nil, fmt.Errorf("service startup timed out: %w; %s", err, logTail(client.RuntimeDirectory)) - } - } -} - -func logTail(dir string) string { - file, err := os.Open(filepath.Join(dir, "daemon.log")) - if err != nil { - return "see daemon log" - } - defer file.Close() - info, err := file.Stat() - if err != nil { - return "see daemon log" - } - if info.Size() > 4096 { - _, _ = file.Seek(-4096, io.SeekEnd) - } - data, _ := io.ReadAll(file) - return strings.TrimSpace(string(data)) -} - -func (connection *Connection) Ingest(ctx context.Context, input ingestion.Request) (contextservice.Submission, error) { - return connection.control.Ingest(ctx, input) -} diff --git a/internal/daemon/client_test.go b/internal/daemon/client_test.go index ce23ef1..6760a70 100644 --- a/internal/daemon/client_test.go +++ b/internal/daemon/client_test.go @@ -2,91 +2,17 @@ package daemon import ( "context" - "encoding/json" "errors" - "flag" - "fmt" - "net" - "net/http" - "net/http/httptest" "os" "path/filepath" "strings" - "sync" - "sync/atomic" "testing" "time" - - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/controlapi" - "github.com/flexdinesh/servediff/internal/processlock" ) -// Run the same detached executable path as production, with a small test server. -func TestMain(m *testing.M) { - if len(os.Args) > 1 && os.Args[1] == "__daemon" { - if err := helperDaemon(os.Args[2:]); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - os.Exit(0) - } - os.Exit(m.Run()) -} - -func helperDaemon(args []string) error { - flags := flag.NewFlagSet("__daemon", flag.ContinueOnError) - settings := DefaultSettings() - var dir string - flags.StringVar(&settings.Host, "host", settings.Host, "") - flags.IntVar(&settings.Port, "port", settings.Port, "") - flags.StringVar(&settings.State, "state", "", "") - flags.StringVar(&settings.WebDir, "web-dir", "", "") - flags.IntVar(&settings.RetentionDays, "retention-days", settings.RetentionDays, "") - flags.StringVar(&dir, "runtime-dir", "", "") - if err := flags.Parse(args); err != nil { - return err - } - if settings.Host == "fail-start" { - return errors.New("requested test startup failure") - } - lock, err := processlock.TryAcquire(OwnershipPath(dir)) - if err != nil { - return err - } - defer lock.Close() - listener, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return err - } - defer listener.Close() - if settings.Port <= 0 { - settings.Port = listener.Addr().(*net.TCPAddr).Port - } - stateID := "state:" + settings.State - if settings.State == "memory" { - stateID = fmt.Sprint(os.Getpid()) - } - status := Status{State: "running", InstanceID: fmt.Sprint(os.Getpid()), StateID: stateID, PID: os.Getpid(), Version: "test", ProtocolVersion: controlapi.ProtocolVersion, Settings: settings, URL: "http://127.0.0.1:7981"} - d := Descriptor{Endpoint: "http://" + listener.Addr().String(), Token: strings.Repeat("x", 64), Status: status} - done := make(chan struct{}) - server := &http.Server{Handler: controlapi.New(d.Token, nil, func() (Status, error) { return status, nil }, func() { close(done) })} - if err := PublishDescriptor(dir, d); err != nil { - return err - } - defer RemoveDescriptor(dir, status.InstanceID) - go server.Serve(listener) - <-done - return server.Close() -} - func testClient(t *testing.T) *Client { t.Helper() - executable, err := os.Executable() - if err != nil { - t.Fatal(err) - } - client := &Client{RuntimeDirectory: t.TempDir(), Executable: executable} + client := &Client{RuntimeDirectory: t.TempDir()} t.Cleanup(func() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -97,82 +23,6 @@ func testClient(t *testing.T) *Client { return client } -func TestConcurrentStartupAndRestart(t *testing.T) { - client := testClient(t) - ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) - defer cancel() - var group sync.WaitGroup - results := make(chan Status, 8) - errorsFound := make(chan error, 8) - for range 8 { - group.Go(func() { - status, err := client.Ensure(ctx, DefaultSettings(), Explicit{}) - if err != nil { - errorsFound <- err - } else { - results <- status - } - }) - } - group.Wait() - close(results) - close(errorsFound) - for err := range errorsFound { - t.Error(err) - } - var initial Status - for status := range results { - if initial.PID == 0 { - initial = status - } - if initial.PID != status.PID { - t.Errorf("duplicate daemons: %d and %d", initial.PID, status.PID) - } - } - if initial.PID == 0 { - t.Fatal("no daemon started") - } - requested := DefaultSettings() - requested.Port = 4100 - if _, err := client.Ensure(ctx, requested, Explicit{Port: true}); err == nil { - t.Fatal("conflicting port accepted") - } - status, err := client.Status(ctx) - if err != nil || status.PID != initial.PID { - t.Fatalf("conflict changed daemon: %+v %v", status, err) - } - restarted, err := client.Restart(ctx, requested, Explicit{Port: true}) - if err != nil { - t.Fatal(err) - } - if restarted.PID == initial.PID || restarted.Settings.Port != 4100 { - t.Fatalf("restart = %+v", restarted) - } - if err := client.Stop(ctx); err != nil { - t.Fatal(err) - } - if err := client.Stop(ctx); err != nil { - t.Fatal(err) - } - status, err = client.Status(ctx) - if err != nil || status.State != "stopped" { - t.Fatalf("after stop = %+v %v", status, err) - } -} - -func TestOwnershipWithoutDescriptorNeverStarts(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - lock, err := processlock.Acquire(OwnershipPath(client.RuntimeDirectory)) - if err != nil { - t.Fatal(err) - } - defer lock.Close() - status, err := client.Ensure(context.Background(), DefaultSettings(), Explicit{}) - if !errors.Is(err, ErrUnavailable) || status.State != "unavailable" { - t.Fatalf("ensure = %+v %v", status, err) - } -} - func TestStaleDescriptorReportsStopped(t *testing.T) { client := testClient(t) d := Descriptor{Endpoint: "http://127.0.0.1:1", Token: strings.Repeat("x", 64), Status: Status{InstanceID: "stale", PID: os.Getpid(), State: "running"}} @@ -188,16 +38,6 @@ func TestStaleDescriptorReportsStopped(t *testing.T) { } } -func TestStartupFailureIncludesChildError(t *testing.T) { - client := testClient(t) - settings := DefaultSettings() - settings.Host = "fail-start" - _, err := client.Start(context.Background(), settings, Explicit{Host: true}) - if err == nil || !strings.Contains(err.Error(), "requested test startup failure") { - t.Fatalf("startup error = %v", err) - } -} - func TestDescriptorRejectsRemoteEndpoint(t *testing.T) { dir := t.TempDir() d := Descriptor{Endpoint: "http://192.0.2.1:4000", Token: strings.Repeat("x", 64), Status: Status{InstanceID: "x"}} @@ -208,289 +48,3 @@ func TestDescriptorRejectsRemoteEndpoint(t *testing.T) { t.Fatalf("invalid descriptor written: %v", err) } } - -func TestCompatibilityAndExplicitPortZero(t *testing.T) { - settings := Settings{Host: "127.0.0.1", Port: 7981, State: "state"} - status := Status{State: "running", Settings: settings, ProtocolVersion: controlapi.ProtocolVersion} - requested := settings - requested.Port = 0 - if err := checkSettings(status, requested, Explicit{Port: true}); err != nil { - t.Fatal(err) - } - status.ProtocolVersion++ - if err := checkSettings(status, requested, Explicit{}); !errors.Is(err, ErrIncompatible) { - t.Fatalf("protocol = %v", err) - } -} - -func TestCrashedDaemonCanBeReplaced(t *testing.T) { - client := testClient(t) - ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) - defer cancel() - initial, err := client.Start(ctx, DefaultSettings(), Explicit{}) - if err != nil { - t.Fatal(err) - } - process, err := os.FindProcess(initial.PID) - if err != nil { - t.Fatal(err) - } - if err := process.Kill(); err != nil { - t.Fatal(err) - } - for { - status, err := client.Status(ctx) - if err == nil && status.State == "stopped" { - break - } - if err := pause(ctx); err != nil { - t.Fatal(err) - } - } - replacement, err := client.Ensure(ctx, DefaultSettings(), Explicit{}) - if err != nil { - t.Fatal(err) - } - if replacement.PID == initial.PID { - t.Fatal("dead daemon reused") - } -} - -func TestLogsRemainBounded(t *testing.T) { - dir := t.TempDir() - writer, err := OpenLog(dir) - if err != nil { - t.Fatal(err) - } - defer writer.Close() - message := strings.Repeat("x", logLimit+100) - if count, err := writer.Write([]byte(message)); err != nil || count != len(message) { - t.Fatalf("write = %d %v", count, err) - } - if _, err := writer.Write([]byte("next")); err != nil { - t.Fatal(err) - } - for _, path := range []string{LogPath(dir), LogPath(dir) + ".1"} { - info, err := os.Stat(path) - if err != nil { - t.Fatal(err) - } - if info.Size() > logLimit { - t.Fatalf("unbounded log: %d", info.Size()) - } - } -} - -func publishTestEndpoint(t *testing.T, client *Client, status Status, afterStatus func(), captures *atomic.Int32) { - t.Helper() - token := strings.Repeat("t", 64) - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Header.Get("Authorization") != "Bearer "+token { - w.WriteHeader(http.StatusUnauthorized) - return - } - switch r.URL.Path { - case "/control/v1/status": - if afterStatus != nil { - afterStatus() - } - _ = json.NewEncoder(w).Encode(status) - case "/control/v1/captures": - if captures != nil { - captures.Add(1) - } - _ = json.NewEncoder(w).Encode(contextservice.Submission{Context: contextservice.Context{ID: status.StateID}}) - default: - w.WriteHeader(http.StatusNotFound) - } - })) - t.Cleanup(server.Close) - if err := PublishDescriptor(client.RuntimeDirectory, Descriptor{Endpoint: server.URL, Token: token, Status: status}); err != nil { - t.Fatal(err) - } -} - -func TestEnsureConnectionKeepsAuthenticatedEndpointDuringDescriptorSwap(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - settings := Settings{Host: "127.0.0.1", Port: 7981, State: "A"} - initial := Status{State: "running", InstanceID: "instance-A", StateID: "database-A", ProtocolVersion: controlapi.ProtocolVersion, Settings: settings, URL: "http://127.0.0.1:7981"} - replacement := initial - replacement.InstanceID, replacement.StateID, replacement.Settings.State = "instance-B", "database-B", "B" - var initialCaptures, replacementCaptures atomic.Int32 - // Replace discovery while the original authenticated status is in flight. - publishTestEndpoint(t, client, initial, func() { - publishTestEndpoint(t, client, replacement, nil, &replacementCaptures) - }, &initialCaptures) - connection, err := client.EnsureConnection(t.Context(), settings, Explicit{State: true}) - if err != nil { - t.Fatal(err) - } - submission, err := connection.Capture(t.Context(), "submission", []byte("patch"), "") - if err != nil { - t.Fatal(err) - } - if connection.Status().InstanceID != initial.InstanceID || submission.Context.ID != initial.StateID || initialCaptures.Load() != 1 || replacementCaptures.Load() != 0 { - t.Fatalf("submission redirected: status=%+v submission=%+v writes=%d/%d", connection.Status(), submission, initialCaptures.Load(), replacementCaptures.Load()) - } -} - -func TestRecoveryRejectsForeignStateAndSettings(t *testing.T) { - for _, test := range []struct { - name string - change func(*Status) - want error - }{ - {"settings", func(status *Status) { status.Settings.State = "other.db" }, ErrSettingsChanged}, - {"port", func(status *Status) { status.Settings.Port++ }, ErrSettingsChanged}, - {"retention", func(status *Status) { status.Settings.RetentionDays = 14 }, ErrSettingsChanged}, - {"replaced same path", func(status *Status) { status.StateID = "new-database" }, ErrStateChanged}, - {"memory restart", func(status *Status) { status.InstanceID = "new-instance" }, ErrMemoryRestarted}, - } { - t.Run(test.name, func(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - initial := Status{State: "running", InstanceID: "initial", StateID: "database", ProtocolVersion: controlapi.ProtocolVersion, Settings: Settings{Host: "127.0.0.1", Port: 7981, State: "state.db"}} - if test.name == "memory restart" { - initial.Settings.State = "memory" - } - publishTestEndpoint(t, client, initial, nil, nil) - connection, err := client.EnsureConnection(t.Context(), initial.Settings, Explicit{}) - if err != nil { - t.Fatal(err) - } - replacement := initial - test.change(&replacement) - var captures atomic.Int32 - publishTestEndpoint(t, client, replacement, nil, &captures) - if _, err := client.RecoverConnection(t.Context(), connection); !errors.Is(err, test.want) { - t.Fatalf("recovery = %v, want %v", err, test.want) - } - if captures.Load() != 0 { - t.Fatal("rejected replacement received payload") - } - }) - } -} - -func TestRetentionSettingsAndLegacyRecovery(t *testing.T) { - settings := DefaultSettings() - status := Status{Settings: settings, ProtocolVersion: controlapi.ProtocolVersion, StateID: "database", URL: "http://localhost:7981"} - requested := settings - requested.RetentionDays = 14 - if err := checkSettings(status, requested, Explicit{RetentionDays: true}); err == nil || !strings.Contains(err.Error(), "--retention-days 14") { - t.Fatalf("retention mismatch: %v", err) - } - if err := checkSettings(status, requested, Explicit{}); err != nil { - t.Fatalf("implicit retention changed active service: %v", err) - } - legacy := status - legacy.Settings.RetentionDays = 0 - if _, err := verifyRecovery(&Connection{status: legacy}, &Connection{status: status}); err != nil { - t.Fatalf("legacy default recovery: %v", err) - } - if err := checkSettings(legacy, settings, Explicit{RetentionDays: true}); err != nil { - t.Fatalf("legacy default mismatch: %v", err) - } -} - -func TestRestartAppliesAndPreservesRetention(t *testing.T) { - client := testClient(t) - settings := DefaultSettings() - settings.RetentionDays = 14 - if _, err := client.Start(t.Context(), settings, Explicit{}); err != nil { - t.Fatal(err) - } - status, err := client.Restart(t.Context(), DefaultSettings(), Explicit{}) - if err != nil || status.Settings.RetentionDays != 14 { - t.Fatalf("restart lost retention: %#v %v", status, err) - } - settings.RetentionDays = 3 - status, err = client.Restart(t.Context(), settings, Explicit{RetentionDays: true}) - if err != nil || status.Settings.RetentionDays != 3 { - t.Fatalf("restart ignored retention: %#v %v", status, err) - } -} - -func TestRecoveryRestoresAcceptedPersistentSettings(t *testing.T) { - client := testClient(t) - settings := DefaultSettings() - settings.State = filepath.Join(t.TempDir(), "custom.db") - connection, err := client.EnsureConnection(t.Context(), settings, Explicit{State: true}) - if err != nil { - t.Fatal(err) - } - if err := client.Stop(t.Context()); err != nil { - t.Fatal(err) - } - recovered, err := client.RecoverConnection(t.Context(), connection) - if err != nil { - t.Fatal(err) - } - if recovered.Status().Settings != connection.Status().Settings || recovered.Status().StateID != connection.Status().StateID || recovered.Status().InstanceID == connection.Status().InstanceID { - t.Fatalf("recovery changed accepted state: %+v => %+v", connection.Status(), recovered.Status()) - } -} - -func TestRecoveryNeverRecreatesStoppedMemoryStore(t *testing.T) { - client := testClient(t) - settings := DefaultSettings() - settings.State = "memory" - connection, err := client.EnsureConnection(t.Context(), settings, Explicit{State: true}) - if err != nil { - t.Fatal(err) - } - if err := client.Stop(t.Context()); err != nil { - t.Fatal(err) - } - if _, err := client.RecoverConnection(t.Context(), connection); !errors.Is(err, ErrMemoryRestarted) { - t.Fatalf("memory recovery = %v", err) - } - status, err := client.Status(t.Context()) - if err != nil || status.State != "stopped" { - t.Fatalf("memory restarted: %+v %v", status, err) - } -} - -func TestRecoveryWaitHonorsDeadlineAndCancellation(t *testing.T) { - for _, path := range []func(string) string{OwnershipPath, LifecyclePath} { - t.Run(filepath.Base(path("")), func(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - lock, err := processlock.Acquire(path(client.RuntimeDirectory)) - if err != nil { - t.Fatal(err) - } - defer lock.Close() - ctx, cancel := context.WithTimeout(t.Context(), 150*time.Millisecond) - defer cancel() - previous := &Connection{status: Status{StateID: "database", Settings: Settings{State: "state.db"}}} - if _, err := client.RecoverConnection(ctx, previous); !errors.Is(err, context.DeadlineExceeded) { - t.Fatalf("waiting deadline = %v", err) - } - ctx, stop := context.WithCancel(t.Context()) - stop() - if _, err := client.RecoverConnection(ctx, previous); !errors.Is(err, context.Canceled) { - t.Fatalf("waiting cancellation = %v", err) - } - }) - } -} - -func TestBoundConnectionRequiresDatabaseIdentity(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - status := Status{State: "running", InstanceID: "instance", ProtocolVersion: controlapi.ProtocolVersion, Settings: DefaultSettings()} - publishTestEndpoint(t, client, status, nil, nil) - if _, err := client.EnsureConnection(t.Context(), status.Settings, Explicit{}); !errors.Is(err, ErrIncompatible) { - t.Fatalf("missing state identity = %v", err) - } -} - -func TestCancelledStartupDoesNotLaunchDaemon(t *testing.T) { - client := &Client{RuntimeDirectory: t.TempDir(), Executable: "must-not-run"} - ctx, cancel := context.WithCancel(t.Context()) - cancel() - if _, err := client.spawnConnection(ctx, DefaultSettings()); !errors.Is(err, context.Canceled) { - t.Fatalf("cancelled startup = %v", err) - } - if _, err := os.Stat(LogPath(client.RuntimeDirectory)); !errors.Is(err, os.ErrNotExist) { - t.Fatalf("cancelled startup created log: %v", err) - } -} diff --git a/internal/daemon/foreground.go b/internal/daemon/foreground.go index 36df44e..18db16b 100644 --- a/internal/daemon/foreground.go +++ b/internal/daemon/foreground.go @@ -9,12 +9,13 @@ import ( "os" "github.com/flexdinesh/servediff/internal/contextservice" + "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/processlock" ) // RunForeground serializes discovery, replacement and publication. Shutdown // uses the authenticated control endpoint, never an unverified operating-system PID. -func RunForeground(ctx context.Context, settings Settings, input InitialInput, confirm func(Status) (bool, error), ready func(Status, *contextservice.Submission)) error { +func RunForeground(ctx context.Context, settings Settings, input ingestion.Request, confirm func(Status) (bool, error), ready func(Status, *contextservice.Submission)) error { client, err := NewClient() if err != nil { return err @@ -49,7 +50,6 @@ func RunForeground(ctx context.Context, settings Settings, input InitialInput, c defer RemoveDescriptor(client.RuntimeDirectory, id) ctx, cancel := context.WithCancel(ctx) defer cancel() - input.IngestionDisabled = true return runServer(ctx, cancel, settings, client.RuntimeDirectory, id, &input, func(status Status, submitted *contextservice.Submission) { _ = lifecycle.Close() if ready != nil { diff --git a/internal/daemon/runtime.go b/internal/daemon/runtime.go index c237e02..e9be58e 100644 --- a/internal/daemon/runtime.go +++ b/internal/daemon/runtime.go @@ -18,16 +18,12 @@ import ( type Settings = controlapi.Settings type Status = controlapi.Status -type Explicit struct{ Host, Port, State, WebDir, RetentionDays bool } - type Descriptor struct { Endpoint string `json:"endpoint"` Token string `json:"token"` Status Status `json:"status"` } -func DefaultSettings() Settings { return Settings{Host: "127.0.0.1", Port: -1, RetentionDays: 7} } - func normalizeSettings(settings Settings) Settings { if settings.RetentionDays == 0 { settings.RetentionDays = 7 diff --git a/internal/daemon/server.go b/internal/daemon/server.go index 9d987a2..eae8976 100644 --- a/internal/daemon/server.go +++ b/internal/daemon/server.go @@ -26,18 +26,7 @@ import ( "github.com/flexdinesh/servediff/internal/webui" ) -// InitialInput is acquired by a foreground CLI, never by the daemon's stdin. -type InitialInput struct { - IngestionDisabled bool - Ingestion *ingestion.Request - Kind string - Path string - Raw []byte - SubmittedFrom string - CaptureID string -} - -func Run(ctx context.Context, settings Settings, runtimeDir string, initial *InitialInput, ready func(Status, *contextservice.Submission)) error { +func Run(ctx context.Context, settings Settings, runtimeDir string, initial *ingestion.Request, ready func(Status, *contextservice.Submission)) error { ctx, cancel := context.WithCancel(ctx) defer cancel() instanceID := rand.Text() @@ -62,7 +51,7 @@ func Run(ctx context.Context, settings Settings, runtimeDir string, initial *Ini return runServer(ctx, cancel, settings, "", instanceID, initial, ready, log.New(os.Stderr, "servediff: ", log.LstdFlags)) } -func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings, runtimeDir, instanceID string, initial *InitialInput, ready func(Status, *contextservice.Submission), logger *log.Logger) error { +func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings, runtimeDir, instanceID string, initial *ingestion.Request, ready func(Status, *contextservice.Submission), logger *log.Logger) error { settings = normalizeSettings(settings) if settings.RetentionDays < 1 || settings.RetentionDays > 106751 { return errors.New("retention-days must be between 1 and 106751") @@ -99,7 +88,7 @@ func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings var submitted *contextservice.Submission defaultContextID := "" if initial != nil { - value, err := initialSubmission(ctx, service, *initial) + value, err := service.Ingest(ctx, *initial) if err != nil { return err } @@ -145,13 +134,10 @@ func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings statusFunc := func() (Status, error) { value := status var err error - value.Worktrees, value.Captures, err = service.Count(ctx) + value.Observations, err = service.Count(ctx) return value, err } configuration := serverapp.Options{} - if initial != nil { - configuration.IngestionDisabled = initial.IngestionDisabled - } mux := serverapp.Handler(ctx, service, store, assets, defaultContextID, configuration) webServer := &http.Server{Handler: publicRequests(mux, settings), ReadHeaderTimeout: 5 * time.Second, IdleTimeout: 60 * time.Second, ErrorLog: logger} endpoints := []serverapp.Endpoint{{Server: webServer, Listener: listener}} @@ -162,8 +148,8 @@ func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings } defer controlListener.Close() token := rand.Text() + rand.Text() - controlHandler := controlapi.New(token, service, statusFunc, cancel) - if configuration.IngestionDisabled { + controlHandler := controlapi.New(token, statusFunc, cancel) + { underlying := controlHandler controlHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/control/v1/status" && r.URL.Path != "/control/v1/shutdown" { @@ -188,22 +174,6 @@ func runServer(ctx context.Context, cancel context.CancelFunc, settings Settings }) } -func initialSubmission(ctx context.Context, service *contextservice.Service, input InitialInput) (contextservice.Submission, error) { - if input.Ingestion != nil { - return service.Ingest(ctx, *input.Ingestion) - } - switch input.Kind { - case "worktree": - return service.Register(ctx, rand.Text(), input.Path) - case "capture": - return service.Capture(ctx, rand.Text(), string(input.Raw), input.SubmittedFrom) - case "reopen": - return service.OpenCapture(ctx, input.CaptureID) - default: - return contextservice.Submission{}, errors.New("unknown diff input") - } -} - func listenWeb(settings Settings) (net.Listener, error) { if settings.Port >= 0 { return net.Listen("tcp", net.JoinHostPort(settings.Host, strconv.Itoa(settings.Port))) diff --git a/internal/daemon/server_test.go b/internal/daemon/server_test.go index 93c8429..77a89c8 100644 --- a/internal/daemon/server_test.go +++ b/internal/daemon/server_test.go @@ -2,25 +2,15 @@ package daemon import ( "context" - "encoding/json" "errors" "fmt" "io" "net" - "net/http" - "net/http/httptest" "net/url" - "strings" "testing" "time" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/controlapi" - "github.com/flexdinesh/servediff/internal/mcpapi" - "github.com/flexdinesh/servediff/internal/review" - "github.com/flexdinesh/servediff/internal/reviewstore" - "github.com/flexdinesh/servediff/internal/serverapp" - "github.com/modelcontextprotocol/go-sdk/mcp" ) const serverPatch = "diff --git a/value.txt b/value.txt\n--- a/value.txt\n+++ b/value.txt\n@@ -1 +1 @@\n-old\n+new\n" @@ -75,178 +65,6 @@ func TestRunForcesCloseWhenIdleConnectionExhaustsShutdownGrace(t *testing.T) { } } -func TestRunSeparatesControlAndPublicEndpoints(t *testing.T) { - ctx, cancel := context.WithCancel(t.Context()) - runtimeDir := t.TempDir() - ready := make(chan Status, 1) - done := make(chan error, 1) - go func() { - done <- Run(ctx, Settings{Host: "127.0.0.1", Port: 0, State: "memory"}, runtimeDir, nil, func(status Status, _ *contextservice.Submission) { ready <- status }) - }() - t.Cleanup(func() { - cancel() - select { - case err := <-done: - if err != nil { - t.Errorf("server shutdown: %v", err) - } - case <-time.After(10 * time.Second): - t.Error("server failed to stop") - } - }) - var status Status - select { - case status = <-ready: - case err := <-done: - t.Fatalf("startup: %v", err) - case <-time.After(10 * time.Second): - t.Fatal("startup timed out") - } - for _, path := range []string{"/control/v1/status", "/control/v1/shutdown"} { - response, err := http.Get(status.BrowserURL + path) - if err != nil { - t.Fatal(err) - } - _ = response.Body.Close() - if response.StatusCode != 404 { - t.Fatalf("public control %s = %d", path, response.StatusCode) - } - } - response, err := http.Get(status.BrowserURL + "/api/v2/contexts") - if err != nil { - t.Fatal(err) - } - var catalog contextservice.Page - err = json.NewDecoder(response.Body).Decode(&catalog) - _ = response.Body.Close() - if err != nil || len(catalog.Contexts) != 0 { - t.Fatalf("empty catalog: %#v %v", catalog, err) - } - request, err := http.NewRequest(http.MethodGet, status.BrowserURL+"/api/v2/contexts", nil) - if err != nil { - t.Fatal(err) - } - request.Host = "attacker.example" - response, err = http.DefaultClient.Do(request) - if err != nil { - t.Fatal(err) - } - _ = response.Body.Close() - if response.StatusCode != 403 { - t.Fatalf("foreign host = %d", response.StatusCode) - } - descriptor, err := ReadDescriptor(runtimeDir) - if err != nil { - t.Fatal(err) - } - response, err = http.Get(descriptor.Endpoint + "/control/v1/status") - if err != nil { - t.Fatal(err) - } - _ = response.Body.Close() - if response.StatusCode != 401 { - t.Fatalf("unauthenticated control = %d", response.StatusCode) - } - client := controlapi.NewClient(descriptor.Endpoint, descriptor.Token) - submitted, err := client.Capture(t.Context(), "capture-one", []byte(serverPatch), "") - if err != nil { - t.Fatal(err) - } - response, err = http.Get(status.BrowserURL + "/api/v2/contexts/" + submitted.Context.ID + "/diffs/current?scope=all") - if err != nil { - t.Fatal(err) - } - _ = response.Body.Close() - if response.StatusCode != 200 { - t.Fatalf("captured diff = %d", response.StatusCode) - } - if err := client.Shutdown(t.Context()); err != nil { - t.Fatal(err) - } -} - -func TestScopedMCPDoesNotShareReviewContext(t *testing.T) { - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - user, err := store.User("test", "test") - if err != nil { - t.Fatal(err) - } - service := contextservice.New(store, user) - a, err := service.Capture(t.Context(), "a", serverPatch, "") - if err != nil { - t.Fatal(err) - } - b, err := service.Capture(t.Context(), "b", serverPatch, "") - if err != nil { - t.Fatal(err) - } - comment := review.ReviewComment{ID: "a-comment", DiffID: a.Context.ID, VersionID: a.Snapshot.VersionID, Path: "value.txt", Scope: review.DiffAll, Fingerprint: a.Snapshot.Files[0].Fingerprint, Side: "additions", Start: 1, End: 1, Body: "Only A", Status: "open", CreatedAt: 1} - if err := store.PutComment(a.Context.ID, comment); err != nil { - t.Fatal(err) - } - server := httptest.NewServer(serverapp.Handler(t.Context(), service, store, nil, "")) - defer server.Close() - response, err := http.Get(server.URL + "/mcp") - if err != nil { - t.Fatal(err) - } - _ = response.Body.Close() - if response.StatusCode != http.StatusMethodNotAllowed { - t.Fatalf("global MCP standalone GET = %d", response.StatusCode) - } - connect := func(id string) *mcp.ClientSession { - client := mcp.NewClient(&mcp.Implementation{Name: "test", Version: "test"}, &mcp.ClientOptions{Capabilities: &mcp.ClientCapabilities{}}) - session, err := client.Connect(t.Context(), &mcp.StreamableClientTransport{Endpoint: server.URL + "/mcp/contexts/" + id, HTTPClient: server.Client(), DisableStandaloneSSE: true}, &mcp.ClientSessionOptions{ProtocolVersion: mcpapi.ProtocolVersion}) - if err != nil { - t.Fatal(err) - } - t.Cleanup(func() { _ = session.Close() }) - return session - } - sessionA, sessionB := connect(a.Context.ID), connect(b.Context.ID) - result, err := sessionA.CallTool(t.Context(), &mcp.CallToolParams{Name: "get_review_comments", Arguments: map[string]any{}}) - if err != nil || result.IsError { - t.Fatalf("A comments: %#v %v", result, err) - } - var text strings.Builder - for _, block := range result.Content { - if content, ok := block.(*mcp.TextContent); ok { - text.WriteString(content.Text) - } - } - if !strings.Contains(text.String(), "Only A") { - t.Fatalf("A comment missing: %s", text.String()) - } - result, err = sessionB.CallTool(t.Context(), &mcp.CallToolParams{Name: "get_review_comments", Arguments: map[string]any{}}) - if err != nil || result.IsError { - t.Fatalf("B comments: %#v %v", result, err) - } - text.Reset() - for _, block := range result.Content { - if content, ok := block.(*mcp.TextContent); ok { - text.WriteString(content.Text) - } - } - if strings.Contains(text.String(), "Only A") { - t.Fatal("A comment leaked into B") - } - result, err = sessionB.CallTool(t.Context(), &mcp.CallToolParams{Name: "resolve_review_comment", Arguments: map[string]any{"comment_id": "a-comment"}}) - if err != nil { - t.Fatal(err) - } - if !result.IsError { - t.Fatal("foreign comment resolved") - } - comments, err := store.Comments(a.Context.ID) - if err != nil || len(comments) != 1 || comments[0].Status != "open" { - t.Fatalf("foreign mutation: %#v %v", comments, err) - } -} - func TestDefaultPortExhaustionLeavesListenersRunning(t *testing.T) { var listeners []net.Listener for port := 7981; port <= 7990; port++ { diff --git a/internal/diffsource/patch.go b/internal/diffsource/patch.go index c93e14f..0e30b35 100644 --- a/internal/diffsource/patch.go +++ b/internal/diffsource/patch.go @@ -424,55 +424,7 @@ func patchStats(patch string) (int, int) { } func PatchContext(patch, side string, start, end int) (string, bool) { - if start > end { - start, end = end, start - } - if start < 1 || end-start >= 200 || (side != "additions" && side != "deletions") { - return "", false - } - selected := make(map[int]string) - oldLine, newLine, inHunk := 0, 0, false - for _, line := range strings.Split(patch, "\n") { - if match := hunkHeader.FindStringSubmatch(line); len(match) == 5 { - oldLine, _ = strconv.Atoi(match[1]) - newLine, _ = strconv.Atoi(match[3]) - inHunk = true - continue - } - if !inHunk || line == "" || strings.HasPrefix(line, "\\ No newline") { - continue - } - prefix := line[0] - switch prefix { - case ' ': - if side == "additions" { - selected[newLine] = " " + line[1:] - } else { - selected[oldLine] = " " + line[1:] - } - oldLine++ - newLine++ - case '+': - if side == "additions" { - selected[newLine] = "+ " + line[1:] - } - newLine++ - case '-': - if side == "deletions" { - selected[oldLine] = "- " + line[1:] - } - oldLine++ - } - } - lines := make([]string, 0, end-start+1) - for line := start; line <= end; line++ { - value, ok := selected[line] - if !ok { - return "", false - } - lines = append(lines, value) - } - return strings.Join(lines, "\n"), true + return review.PatchContext(patch, side, start, end) } func digest(value string) string { diff --git a/internal/diffsource/source.go b/internal/diffsource/source.go index da35214..774ed57 100644 --- a/internal/diffsource/source.go +++ b/internal/diffsource/source.go @@ -1,37 +1,12 @@ package diffsource -import ( - "context" - "fmt" +import "github.com/flexdinesh/servediff/internal/review" - "github.com/flexdinesh/servediff/internal/review" -) - -type Source interface { - Root() string - Kind() string - Support() Support - Snapshot(context.Context, review.DiffMode) (review.RepositoryDiff, error) - Patch(context.Context, review.DiffMode, review.ChangedFile, *string) (review.FilePatch, error) - Contents(context.Context, review.DiffMode, review.ChangedFile, *string) (review.FileContents, error) -} - -type Support struct { - Scopes []review.DiffMode - Refresh bool - StagingMetadata bool - FileContents bool -} - -type RequestError struct { - Status int - Detail string -} - -func (err *RequestError) Error() string { return err.Detail } +type Source = review.Source +type Support = review.Support +type RequestError = review.RequestError func Error(status int, format string, values ...any) error { - return &RequestError{Status: status, Detail: fmt.Sprintf(format, values...)} + return review.Error(status, format, values...) } - -func Message(value string) *string { return &value } +func Message(value string) *string { return review.Message(value) } diff --git a/internal/diffsource/worktrees.go b/internal/diffsource/worktrees.go index 9fc4626..6bb1dda 100644 --- a/internal/diffsource/worktrees.go +++ b/internal/diffsource/worktrees.go @@ -3,12 +3,12 @@ package diffsource import ( "context" "errors" - "net/url" "os" - "path" "path/filepath" "strconv" "strings" + + "github.com/flexdinesh/servediff/internal/review" ) // Worktree describes a checkout without reading its diff or file contents. @@ -140,17 +140,5 @@ func parseWorktrees(raw string) []Worktree { // RemoteRepositoryName extracts the display name from URL and SCP-style remotes. func RemoteRepositoryName(remote, fallback string) string { - if remote == "" { - return fallback - } - if parsed, err := url.Parse(remote); err == nil && parsed.Scheme != "" && (parsed.Host != "" || parsed.Scheme == "file") { - remote = parsed.Path - } else if _, suffix, ok := strings.Cut(remote, ":"); ok { - remote = suffix - } - name := strings.TrimSuffix(path.Base(strings.TrimRight(remote, "/")), ".git") - if name == "" || name == "." || name == "/" { - return fallback - } - return name + return review.RemoteRepositoryName(remote, fallback) } diff --git a/internal/hooks/hooks.go b/internal/hooks/hooks.go index 1eedd78..5bc8808 100644 --- a/internal/hooks/hooks.go +++ b/internal/hooks/hooks.go @@ -14,6 +14,7 @@ import ( "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/processlock" + "github.com/flexdinesh/servediff/internal/submission" ) var ErrUnchanged = errors.New("checkout unchanged") @@ -42,11 +43,7 @@ type Event struct { // Identity identifies the server's persistent database (or memory instance). // An unknown identity disables suppression and prevents uncertain replay. -type Target struct { - Destination string - Identity string - SourceID string -} +type Target = submission.Target type Engine struct { Directory string @@ -85,7 +82,7 @@ type pending struct { func StateDirectory() (string, error) { if runtime := os.Getenv("SERVEDIFF_RUNTIME_DIR"); runtime != "" { - return filepath.Join(runtime, "hooks"), nil + return filepath.Join(runtime, "hooks-v3"), nil } root := os.Getenv("XDG_STATE_HOME") if root == "" { @@ -95,7 +92,7 @@ func StateDirectory() (string, error) { } root = filepath.Join(home, ".local", "state") } - return filepath.Join(root, "servediff", "hooks"), nil + return filepath.Join(root, "servediff", "hooks-v3"), nil } func key(parts ...string) string { diff --git a/internal/hooks/hooks_test.go b/internal/hooks/hooks_test.go index 2c4913c..9c4a5c7 100644 --- a/internal/hooks/hooks_test.go +++ b/internal/hooks/hooks_test.go @@ -355,7 +355,7 @@ func TestRuntimeIsolationAndSafeJobNames(t *testing.T) { runtime := t.TempDir() t.Setenv("SERVEDIFF_RUNTIME_DIR", runtime) directory, err := StateDirectory() - if err != nil || directory != filepath.Join(runtime, "hooks") { + if err != nil || directory != filepath.Join(runtime, "hooks-v3") { t.Fatalf("directory = %q %v", directory, err) } engine := Engine{Directory: directory} diff --git a/internal/httpapi/delete_test.go b/internal/httpapi/delete_test.go deleted file mode 100644 index b5a3587..0000000 --- a/internal/httpapi/delete_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package httpapi - -import ( - "net/http" - "net/http/httptest" - "testing" - "testing/fstest" - - "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/reviewstore" -) - -func TestDeleteContextEvictsCacheAndPreservesOtherOwners(t *testing.T) { - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - owner, err := store.User("owner", "owner") - if err != nil { - t.Fatal(err) - } - other, err := store.User("other", "other") - if err != nil { - t.Fatal(err) - } - provider := contextservice.New(store, owner) - defer provider.Close() - foreignProvider := contextservice.New(store, other) - defer foreignProvider.Close() - const patch = "diff --git a/file b/file\n--- a/file\n+++ b/file\n@@ -1 +1 @@\n-old\n+new\n" - target, err := provider.Capture(t.Context(), "request", patch, "") - if err != nil { - t.Fatal(err) - } - foreign, err := foreignProvider.Capture(t.Context(), "request", patch, "") - if err != nil { - t.Fatal(err) - } - multi := &Multi{background: t.Context(), provider: provider, store: store, assets: fstest.MapFS{}, caches: make(map[string]contextCache)} - server := httptest.NewServer(multi) - defer server.Close() - base := server.URL + "/api/v2/contexts/" - for _, item := range []struct { - method string - path string - status int - }{ - {http.MethodGet, target.Context.ID + "/diffs/current?scope=all", http.StatusOK}, - {http.MethodDelete, foreign.Context.ID, http.StatusNotFound}, - {http.MethodDelete, "missing", http.StatusNotFound}, - {http.MethodDelete, target.Context.ID, http.StatusNoContent}, - {http.MethodDelete, target.Context.ID, http.StatusNotFound}, - {http.MethodGet, target.Context.ID, http.StatusNotFound}, - {http.MethodGet, target.Context.ID + "/diffs/current?scope=all", http.StatusNotFound}, - } { - response := request(t, server.Client(), item.method, base+item.path, nil) - if response.StatusCode != item.status { - t.Fatalf("%s %s: %d, want %d", item.method, item.path, response.StatusCode, item.status) - } - response.Body.Close() - } - multi.mu.Lock() - _, cached := multi.caches[target.Context.ID] - multi.mu.Unlock() - if cached { - t.Fatal("deleted context remains in HTTP snapshot cache") - } - if _, err := foreignProvider.Get(t.Context(), foreign.Context.ID); err != nil { - t.Fatalf("foreign context removed: %v", err) - } - page := decode[contextservice.Page](t, request(t, server.Client(), http.MethodGet, server.URL+"/api/v2/contexts", nil)) - if len(page.Contexts) != 0 { - t.Fatalf("deleted context still listed: %#v", page) - } -} diff --git a/internal/httpapi/file_comments_test.go b/internal/httpapi/file_comments_test.go index 93a510b..65575c7 100644 --- a/internal/httpapi/file_comments_test.go +++ b/internal/httpapi/file_comments_test.go @@ -40,14 +40,14 @@ rename to new.ts service := reviewservice.New(active, store) server := httptest.NewServer(New(active, store, service, fstest.MapFS{"index.html": {Data: []byte("web")}})) defer server.Close() - snapshot := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/current?scope=all", nil)) + snapshot := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, server.URL+"/api/review/diffs/current?scope=all", nil)) if len(snapshot.Files) != 3 { t.Fatalf("expected empty, binary, and renamed files, got %#v", snapshot.Files) } for _, file := range snapshot.Files { t.Run(file.Path, func(t *testing.T) { - body := createCommentRequest{DiffID: snapshot.ID, VersionID: snapshot.VersionID, FileID: file.ID, Scope: review.DiffAll, FileVersion: file.Fingerprint, Target: "file", Side: "additions", Body: "Review entire " + file.Path} - response := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/comments", body) + body := reviewservice.CreateCommentInput{DiffID: snapshot.ID, VersionID: snapshot.VersionID, FileID: file.ID, Scope: review.DiffAll, FileVersion: file.Fingerprint, Target: "file", Side: "additions", Body: "Review entire " + file.Path} + response := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/comments", body) if response.StatusCode != http.StatusCreated { detail, _ := io.ReadAll(response.Body) response.Body.Close() @@ -66,7 +66,7 @@ rename to new.ts for _, target := range []string{"", "lines", "unknown"} { invalid := body invalid.Target = target - response := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/comments", invalid) + response := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/comments", invalid) response.Body.Close() if response.StatusCode != http.StatusBadRequest { t.Fatalf("zero-line target %q status: %d", target, response.StatusCode) @@ -81,7 +81,7 @@ rename to new.ts } { invalid := body invalid.Side, invalid.Start, invalid.End = selection.side, selection.start, selection.end - response := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/comments", invalid) + response := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/comments", invalid) response.Body.Close() if response.StatusCode != http.StatusBadRequest { t.Fatalf("file target accepted line context: %d", response.StatusCode) @@ -93,7 +93,7 @@ rename to new.ts } { invalid := body invalid.FileVersion, invalid.VersionID = identity.fileVersion, identity.versionID - response := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/comments", invalid) + response := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/comments", invalid) response.Body.Close() if response.StatusCode != http.StatusConflict { t.Fatalf("file target bypassed snapshot validation: %d", response.StatusCode) @@ -110,7 +110,7 @@ rename to new.ts t.Fatalf("agent file comment: %#v", comment) } } - exportResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/comments/export", nil) + exportResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/comments/export", nil) exported, _ := io.ReadAll(exportResponse.Body) exportResponse.Body.Close() if strings.Count(string(exported), `selection="file"`) != 3 || strings.Contains(string(exported), "") || strings.Contains(string(exported), ` line=`) { diff --git a/internal/httpapi/multi.go b/internal/httpapi/multi.go index 0bc5ce4..d0360f4 100644 --- a/internal/httpapi/multi.go +++ b/internal/httpapi/multi.go @@ -7,13 +7,11 @@ import ( "net/http" "strconv" "strings" - "sync" - "time" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/processmetrics" + "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" "github.com/flexdinesh/servediff/internal/reviewservice" "github.com/flexdinesh/servediff/internal/session" @@ -23,94 +21,20 @@ import ( // Provider resolves persistent identities into request-local source bindings. type Provider interface { Resolve(context.Context, string) (session.Session, error) - List(context.Context, int, string) (contextservice.Page, error) + ListFiltered(context.Context, int, string, ingestion.Filter) (contextservice.Page, error) Get(context.Context, string) (contextservice.Context, error) Delete(context.Context, string) error UserID() string } -type contextCache struct { - snapshots *snapshotCache - used time.Time - submitted int64 -} - type Multi struct { - background context.Context - provider Provider - store Store - assets fs.FS - defaultContextID string - metrics *processmetrics.Collector - mu sync.Mutex - caches map[string]contextCache -} - -func NewMulti(provider Provider, store Store, assets fs.FS, defaultContextID string) http.Handler { - return NewMultiWithContext(context.Background(), provider, store, assets, defaultContextID) + provider Provider + store Store + assets fs.FS + metrics *processmetrics.Collector } // NewMultiWithContext ties shared snapshot work to the service lifetime. -func NewMultiWithContext(background context.Context, provider Provider, store Store, assets fs.FS, defaultContextID string) http.Handler { - return &Multi{background: background, provider: provider, store: store, assets: assets, defaultContextID: defaultContextID, metrics: processmetrics.New(), caches: make(map[string]contextCache)} -} - -func (multi *Multi) cache(id string, submitted int64) *snapshotCache { - multi.mu.Lock() - defer multi.mu.Unlock() - now := time.Now() - for key, entry := range multi.caches { - if now.Sub(entry.used) > 10*time.Minute { - entry.snapshots.mu.Lock() - active := len(entry.snapshots.flights) > 0 - entry.snapshots.mu.Unlock() - if !active { - delete(multi.caches, key) - } - } - } - entry, ok := multi.caches[id] - if !ok || entry.submitted != submitted { - entry = contextCache{snapshots: newSnapshotCache(multi.background), submitted: submitted} - entry.snapshots.onUpdate = multi.trim - } - entry.used = now - multi.caches[id] = entry - - multi.trimLocked() - - return entry.snapshots -} - -func (multi *Multi) trim() { - multi.mu.Lock() - defer multi.mu.Unlock() - multi.trimLocked() -} - -func (multi *Multi) trimLocked() { - // Account retained snapshot data, not total process memory or in-flight work. - const maxBytes = 64 * 1024 * 1024 - for { - var total int64 - oldestID := "" - var oldest time.Time - for key, entry := range multi.caches { - entry.snapshots.mu.Lock() - total += entry.snapshots.bytes - active := len(entry.snapshots.flights) > 0 - entry.snapshots.mu.Unlock() - if !active && (oldestID == "" || entry.used.Before(oldest)) { - oldestID, oldest = key, entry.used - } - } - if (len(multi.caches) <= 128 && total <= maxBytes) || oldestID == "" { - return - } - delete(multi.caches, oldestID) - } -} - func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Request) { base := &Handler{store: multi.store, assets: multi.assets, metrics: multi.metrics} response.Header().Set("X-Content-Type-Options", "nosniff") @@ -123,7 +47,7 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques pathname := request.URL.Path if pathname == "/openapi.yaml" { if request.Method != http.MethodGet && request.Method != http.MethodHead { - base.problem(response, diffsource.Error(405, "Method not allowed")) + base.problem(response, review.Error(405, "Method not allowed")) return } response.Header().Set("Content-Type", "application/yaml; charset=utf-8") @@ -132,37 +56,24 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques } return } - if pathname == "/api/v1/metrics" || pathname == "/api/v2/metrics" { + if pathname == "/api/v2/metrics" { if request.Method != http.MethodGet { - base.problem(response, diffsource.Error(405, "Method not allowed")) + base.problem(response, review.Error(405, "Method not allowed")) return } _ = writeJSON(response, 200, multi.metrics.Collect()) return } - if pathname == "/api/v1/diffs/captures" { - if request.Method != http.MethodGet { - base.problem(response, diffsource.Error(405, "Method not allowed")) - return - } - captures, err := multi.store.ListCaptures(multi.provider.UserID(), time.Now()) - if err != nil { - base.problem(response, err) - return - } - _ = writeJSON(response, 200, map[string]any{"captures": captures}) - return - } if pathname == "/api/v2/contexts" { if request.Method != http.MethodGet { - base.problem(response, diffsource.Error(405, "Method not allowed")) + base.problem(response, review.Error(405, "Method not allowed")) return } limit := 100 if value := request.URL.Query().Get("limit"); value != "" { parsed, err := strconv.Atoi(value) if err != nil || parsed < 1 || parsed > 500 { - base.problem(response, diffsource.Error(400, "Limit must be between 1 and 500")) + base.problem(response, review.Error(400, "Limit must be between 1 and 500")) return } limit = parsed @@ -171,13 +82,7 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques var err error query := request.URL.Query() filter := ingestion.Filter{Query: query.Get("q"), Repository: query.Get("repository"), Branch: query.Get("branch"), Worktree: query.Get("worktree"), Hostname: query.Get("hostname"), SourceID: query.Get("sourceId"), RunID: query.Get("runId"), Harness: query.Get("harness"), SessionID: query.Get("sessionId"), SessionName: query.Get("sessionName")} - if provider, ok := multi.provider.(interface { - ListFiltered(context.Context, int, string, ingestion.Filter) (contextservice.Page, error) - }); ok { - page, err = provider.ListFiltered(request.Context(), limit, query.Get("cursor"), filter) - } else { - page, err = multi.provider.List(request.Context(), limit, query.Get("cursor")) - } + page, err = multi.provider.ListFiltered(request.Context(), limit, query.Get("cursor"), filter) if err != nil { base.problem(response, err) return @@ -191,7 +96,7 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques parts := strings.SplitN(strings.TrimPrefix(pathname, "/api/v2/contexts/"), "/", 2) contextID = parts[0] if contextID == "" { - base.problem(response, diffsource.Error(404, "Context not found")) + base.problem(response, review.Error(404, "Context not found")) return } if len(parts) == 1 { @@ -200,14 +105,11 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques base.problem(response, err) return } - multi.mu.Lock() - delete(multi.caches, contextID) - multi.mu.Unlock() response.WriteHeader(http.StatusNoContent) return } if request.Method != http.MethodGet { - base.problem(response, diffsource.Error(405, "Method not allowed")) + base.problem(response, review.Error(405, "Method not allowed")) return } metadata, err := multi.provider.Get(request.Context(), contextID) @@ -218,28 +120,13 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques _ = writeJSON(response, 200, metadata) return } - scopedPath = "/api/v1/" + parts[1] - } else if strings.HasPrefix(pathname, "/api/v1/") { - contextID = multi.defaultContextID - if contextID == "" { - page, err := multi.provider.List(request.Context(), 2, "") - if err != nil { - base.problem(response, err) - return - } - if len(page.Contexts) != 1 || page.NextCursor != nil { - _ = writeJSONType(response, 409, "application/problem+json; charset=utf-8", map[string]any{"type": "about:blank", "title": "Context required", "status": 409, "code": "context_required", "detail": "Select an explicit context using /api/v2/contexts/{contextId}."}) - return - } - contextID = page.Contexts[0].ID - } - scopedPath = pathname + scopedPath = "/api/review/" + parts[1] } else if strings.HasPrefix(pathname, "/api/") { - base.problem(response, diffsource.Error(404, "Unknown API route")) + base.problem(response, review.Error(404, "Unknown API route")) return } else { if request.Method != http.MethodGet && request.Method != http.MethodHead { - base.problem(response, diffsource.Error(405, "Method not allowed")) + base.problem(response, review.Error(405, "Method not allowed")) return } assetRequest := request @@ -253,22 +140,17 @@ func (multi *Multi) ServeHTTP(response http.ResponseWriter, request *http.Reques active, err := multi.provider.Resolve(request.Context(), contextID) if err != nil { if errors.Is(err, reviewdata.ErrNotFound) { - err = diffsource.Error(404, "Context not found") + err = review.Error(404, "Context not found") } base.problem(response, err) return } - metadata, err := multi.provider.Get(request.Context(), contextID) - if err != nil { - base.problem(response, err) - return - } - cache := multi.cache(contextID, metadata.LastSubmittedAt) - if metadata.Availability == "unavailable" { - cache = newSnapshotCache(multi.background) - } - handler := &Handler{session: active, store: multi.store, review: reviewservice.New(active, multi.store), assets: multi.assets, metrics: multi.metrics, cache: cache, strictContext: true} + handler := &Handler{session: active, store: multi.store, review: reviewservice.New(active, multi.store), assets: multi.assets, metrics: multi.metrics} scoped := request.Clone(request.Context()) scoped.URL.Path = scopedPath handler.ServeHTTP(response, scoped) } + +func NewMulti(provider Provider, store Store, assets fs.FS) http.Handler { + return &Multi{provider: provider, store: store, assets: assets, metrics: processmetrics.New()} +} diff --git a/internal/httpapi/multi_test.go b/internal/httpapi/multi_test.go index 43e820b..5ef4e02 100644 --- a/internal/httpapi/multi_test.go +++ b/internal/httpapi/multi_test.go @@ -3,7 +3,6 @@ package httpapi import ( "context" "fmt" - "github.com/flexdinesh/servediff/internal/collector" "net/http" "net/http/httptest" "os" @@ -11,10 +10,11 @@ import ( "path/filepath" "testing" "testing/fstest" - "time" + "github.com/flexdinesh/servediff/internal/collector" "github.com/flexdinesh/servediff/internal/contextservice" "github.com/flexdinesh/servediff/internal/diffsource" + "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewstore" "github.com/flexdinesh/servediff/internal/session" @@ -40,7 +40,7 @@ func (provider *testProvider) Resolve(_ context.Context, id string) (session.Ses } func (provider *testProvider) Get(ctx context.Context, id string) (contextservice.Context, error) { active, err := provider.Resolve(ctx, id) - return contextservice.Context{ID: id, Kind: "capture", Name: "patch", Capabilities: active.Capabilities, Availability: "available"}, err + return contextservice.Context{ID: id, Kind: "observation", Name: "patch", Capabilities: active.Capabilities, Availability: "available"}, err } func (provider *testProvider) Delete(ctx context.Context, id string) error { if err := ctx.Err(); err != nil { @@ -70,7 +70,7 @@ func (provider *testProvider) List(ctx context.Context, limit int, _ string) (co return page, nil } -func TestMultiContextCaptureIsolation(t *testing.T) { +func TestMultiContextObservationIsolation(t *testing.T) { raw, err := os.ReadFile("../../test/fixtures/sample.diff") if err != nil { t.Fatal(err) @@ -88,7 +88,7 @@ func TestMultiContextCaptureIsolation(t *testing.T) { } provider.sessions = append(provider.sessions, patchSession(t, store, source, string(raw), session.Policies{})) } - server := httptest.NewServer(NewMulti(provider, store, fstest.MapFS{"index.html": {Data: []byte("web")}}, "")) + server := httptest.NewServer(NewMulti(provider, store, fstest.MapFS{"index.html": {Data: []byte("web")}})) defer server.Close() first := provider.sessions[0] second := provider.sessions[1] @@ -97,7 +97,7 @@ func TestMultiContextCaptureIsolation(t *testing.T) { snapshot := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, firstBase+"/diffs/current?scope=all", nil)) other := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, secondBase+"/diffs/current?scope=all", nil)) if snapshot.ID == other.ID { - t.Fatal("independent captures share identity") + t.Fatal("independent observations share identity") } for _, suffix := range []string{ "/diffs/" + snapshot.ID + "/versions/" + snapshot.VersionID, @@ -116,11 +116,11 @@ func TestMultiContextCaptureIsolation(t *testing.T) { } response.Body.Close() response = request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/session", nil) - if response.StatusCode != http.StatusConflict { + if response.StatusCode != http.StatusNotFound { t.Fatalf("legacy ambiguity status %d", response.StatusCode) } problem := decode[map[string]any](t, response) - if problem["code"] != "context_required" { + if problem["status"] != float64(404) { t.Fatalf("legacy problem %#v", problem) } response = request(t, server.Client(), http.MethodGet, firstBase+"/diffs/"+snapshot.ID+"/versions/"+snapshot.VersionID, nil) @@ -136,9 +136,9 @@ func TestMultiGlobalRoutesWithoutContext(t *testing.T) { t.Fatal(err) } defer store.Close() - server := httptest.NewServer(NewMulti(&testProvider{}, store, fstest.MapFS{"index.html": {Data: []byte("web")}}, "")) + server := httptest.NewServer(NewMulti(&testProvider{}, store, fstest.MapFS{"index.html": {Data: []byte("web")}})) defer server.Close() - for _, suffix := range []string{"/api/v2/contexts", "/api/v2/metrics", "/api/v1/metrics", "/api/v1/diffs/captures", "/openapi.yaml", "/contexts/example"} { + for _, suffix := range []string{"/api/v2/contexts", "/api/v2/metrics", "/openapi.yaml", "/contexts/example"} { response := request(t, server.Client(), http.MethodGet, server.URL+suffix, nil) if response.StatusCode != http.StatusOK { t.Fatalf("global route %s status %d", suffix, response.StatusCode) @@ -187,7 +187,7 @@ func TestMultiObservationsAndRetainedFilesWithoutCheckout(t *testing.T) { } targets = append(targets, target) } - server := httptest.NewServer(NewMulti(provider, store, fstest.MapFS{"index.html": {Data: []byte("web")}}, "")) + server := httptest.NewServer(NewMulti(provider, store, fstest.MapFS{"index.html": {Data: []byte("web")}})) defer server.Close() page := decode[contextservice.Page](t, request(t, server.Client(), http.MethodGet, server.URL+"/api/v2/contexts?repository=shared&branch=shared", nil)) if len(page.Contexts) != 2 || page.Contexts[0].Observation == nil || page.Contexts[1].Observation == nil || page.Contexts[0].Observation.SourceID == page.Contexts[1].Observation.SourceID { @@ -205,10 +205,6 @@ func TestMultiObservationsAndRetainedFilesWithoutCheckout(t *testing.T) { firstBase := server.URL + "/api/v2/contexts/" + first.Context.ID secondBase := server.URL + "/api/v2/contexts/" + targets[1].Context.ID snapshot := first.Snapshot - complete, err := store.VersionComplete(snapshot.VersionID, len(snapshot.Files)) - if err != nil || !complete { - t.Fatalf("ingestion did not persist previews: %v,%v", complete, err) - } staged := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, firstBase+"/diffs/current?scope=staged", nil)) if staged.Mode != review.DiffStaged || staged.ID == snapshot.ID || staged.VersionID == snapshot.VersionID { t.Fatalf("scope identities: %#v", staged) @@ -269,109 +265,6 @@ func gitCommand(t *testing.T, root string, arguments ...string) { } } -func TestMultiLegacyForegroundIsPinned(t *testing.T) { - raw, err := os.ReadFile("../../test/fixtures/sample.diff") - if err != nil { - t.Fatal(err) - } - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - provider := &testProvider{} - for range 2 { - source, err := diffsource.OpenPatch(string(raw)) - if err != nil { - t.Fatal(err) - } - provider.sessions = append(provider.sessions, patchSession(t, store, source, string(raw), session.Policies{})) - } - active := provider.sessions[0] - server := httptest.NewServer(NewMulti(provider, store, fstest.MapFS{}, active.ContextID)) - defer server.Close() - response := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/current?scope=all", nil) - if response.StatusCode != http.StatusOK { - t.Fatalf("foreground legacy status %d", response.StatusCode) - } - snapshot := decode[review.RepositoryDiff](t, response) - if snapshot.ID != active.DiffIDs[review.DiffAll] { - t.Fatalf("foreground legacy diff %s", snapshot.ID) - } -} - -// blockedSource exposes the computation lifetime without relying on Git timing. -type blockedSource struct { - diffsource.Source - started chan context.Context - finished chan struct{} -} - -func (source *blockedSource) Snapshot(ctx context.Context, mode review.DiffMode) (review.RepositoryDiff, error) { - source.started <- ctx - <-ctx.Done() - close(source.finished) - return review.RepositoryDiff{}, ctx.Err() -} - -func TestMultiSharedSnapshotLifetime(t *testing.T) { - raw, err := os.ReadFile("../../test/fixtures/sample.diff") - if err != nil { - t.Fatal(err) - } - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - patch, err := diffsource.OpenPatch(string(raw)) - if err != nil { - t.Fatal(err) - } - active := patchSession(t, store, patch, string(raw), session.Policies{}) - source := &blockedSource{Source: patch, started: make(chan context.Context, 1), finished: make(chan struct{})} - active.Source = source - lifetime, stop := context.WithCancel(t.Context()) - defer stop() - handler := NewMultiWithContext(lifetime, &testProvider{sessions: []session.Session{active}}, store, fstest.MapFS{}, "") - caller, cancelCaller := context.WithCancel(t.Context()) - defer cancelCaller() - request := httptest.NewRequest(http.MethodGet, "/api/v2/contexts/"+active.ContextID+"/diffs/current?scope=all", nil).WithContext(caller) - done := make(chan struct{}) - go func() { - handler.ServeHTTP(httptest.NewRecorder(), request) - close(done) - }() - var computation context.Context - select { - case computation = <-source.started: - case <-time.After(2 * time.Second): - t.Fatal("snapshot did not start") - } - cancelCaller() - select { - case <-done: - case <-time.After(2 * time.Second): - t.Fatal("cancelled caller did not return") - } - if err := computation.Err(); err != nil { - t.Fatalf("caller cancelled shared computation: %v", err) - } - secondDone := make(chan struct{}) - go func() { - request := httptest.NewRequest(http.MethodGet, "/api/v2/contexts/"+active.ContextID+"/diffs/current?scope=all", nil) - handler.ServeHTTP(httptest.NewRecorder(), request) - close(secondDone) - }() - stop() - select { - case <-source.finished: - case <-time.After(2 * time.Second): - t.Fatal("service shutdown did not cancel snapshot") - } - select { - case <-secondDone: - case <-time.After(2 * time.Second): - t.Fatal("shared waiter did not return after shutdown") - } +func (p *testProvider) ListFiltered(ctx context.Context, limit int, cursor string, filter ingestion.Filter) (contextservice.Page, error) { + return p.List(ctx, limit, cursor) } diff --git a/internal/httpapi/server.go b/internal/httpapi/server.go index 4a2714a..e4ede18 100644 --- a/internal/httpapi/server.go +++ b/internal/httpapi/server.go @@ -1,7 +1,6 @@ package httpapi import ( - "context" "encoding/json" "errors" "io" @@ -10,10 +9,8 @@ import ( "net/http" "path" "strings" - "sync" "time" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/processmetrics" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" @@ -22,96 +19,23 @@ import ( contract "github.com/flexdinesh/servediff/packages/api" ) -type cachedSnapshot struct { - at time.Time - snapshot review.RepositoryDiff - err error - bytes int64 -} - -type snapshotCache struct { - background context.Context - mu sync.Mutex - snapshots map[review.DiffMode]cachedSnapshot - flights map[review.DiffMode]chan struct{} - bytes int64 - onUpdate func() -} - -func newSnapshotCache(background context.Context) *snapshotCache { - return &snapshotCache{background: background, snapshots: make(map[review.DiffMode]cachedSnapshot), flights: make(map[review.DiffMode]chan struct{})} -} - type Handler struct { - session session.Session - store Store - review *reviewservice.Service - assets fs.FS - metrics *processmetrics.Collector - cache *snapshotCache - strictContext bool + session session.Session + store Store + review *reviewservice.Service + assets fs.FS + metrics *processmetrics.Collector } func New(active session.Session, store Store, service *reviewservice.Service, assets fs.FS) *Handler { return &Handler{ session: active, store: store, review: service, assets: assets, - metrics: processmetrics.New(), cache: newSnapshotCache(context.Background()), + metrics: processmetrics.New(), } } func (handler *Handler) SessionID() string { return handler.session.ID } -func (handler *Handler) snapshot(request *http.Request, mode review.DiffMode, fresh bool) (review.RepositoryDiff, error) { - cache := handler.cache - cache.mu.Lock() - if cached, ok := cache.snapshots[mode]; !fresh && ok && time.Since(cached.at) < 500*time.Millisecond { - cache.mu.Unlock() - return cached.snapshot, cached.err - } - flight, running := cache.flights[mode] - if !running { - flight = make(chan struct{}) - cache.flights[mode] = flight - // Computation belongs to the shared cache; one cancelled caller cannot cancel others. - go func() { - ctx, cancel := context.WithTimeout(cache.background, 30*time.Second) - defer cancel() - snapshot, err := handler.session.Source.Snapshot(ctx, mode) - if err == nil { - snapshot.ID = handler.session.DiffIDs[mode] - snapshot.LocationID = handler.session.LocationID - snapshot.RepositoryID = handler.session.RepositoryID - if handler.session.VersionID != "" { - snapshot.VersionID = handler.session.VersionID - } else if snapshot.VersionID == "" { - snapshot.VersionID = reviewdata.VersionID(snapshot.ID, snapshot.Revision) - } - } - encoded, _ := json.Marshal(snapshot) - size := int64(len(encoded)) - cache.mu.Lock() - cache.bytes += size - cache.snapshots[mode].bytes - cache.snapshots[mode] = cachedSnapshot{at: time.Now(), snapshot: snapshot, err: err, bytes: size} - delete(cache.flights, mode) - close(flight) - cache.mu.Unlock() - if cache.onUpdate != nil { - cache.onUpdate() - } - }() - } - cache.mu.Unlock() - select { - case <-request.Context().Done(): - return review.RepositoryDiff{}, request.Context().Err() - case <-flight: - cache.mu.Lock() - result := cache.snapshots[mode] - cache.mu.Unlock() - return result.snapshot, result.err - } -} - func (handler *Handler) ownsDiff(diffID string) bool { for _, id := range handler.session.DiffIDs { if id == diffID { @@ -129,17 +53,6 @@ func (handler *Handler) ServeHTTP(response http.ResponseWriter, request *http.Re handler.problem(response, err) return } - if !handler.session.Stored && handler.session.Source.Kind() == "stdin" && strings.HasPrefix(request.URL.Path, "/api/v1/") && request.URL.Path != "/api/v1/diffs/captures" && request.URL.Path != "/api/v1/metrics" { - alive, err := handler.store.CaptureAlive(handler.session.User.ID, handler.session.ContextID, time.Now()) - if err != nil { - handler.problem(response, err) - return - } - if !alive { - handler.problem(response, diffsource.Error(410, "Capture expired")) - return - } - } handled, err := handler.api(response, request) if err != nil { handler.problem(response, err) @@ -149,7 +62,7 @@ func (handler *Handler) ServeHTTP(response http.ResponseWriter, request *http.Re return } if request.Method != http.MethodGet && request.Method != http.MethodHead { - handler.problem(response, diffsource.Error(405, "Method not allowed")) + handler.problem(response, review.Error(405, "Method not allowed")) return } handler.serveAsset(response, request) @@ -157,10 +70,10 @@ func (handler *Handler) ServeHTTP(response http.ResponseWriter, request *http.Re func (handler *Handler) checkRequest(request *http.Request) error { if origin := request.Header.Get("Origin"); origin != "" && origin != "http://"+request.Host && origin != "https://"+request.Host { - return diffsource.Error(403, "Cross-origin access denied") + return review.Error(403, "Cross-origin access denied") } if request.Header.Get("Sec-Fetch-Site") == "cross-site" { - return diffsource.Error(403, "Cross-site access denied") + return review.Error(403, "Cross-site access denied") } return nil } @@ -169,7 +82,7 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) pathname := request.URL.Path if pathname == "/openapi.yaml" { if request.Method != http.MethodGet && request.Method != http.MethodHead { - return true, diffsource.Error(405, "Method not allowed") + return true, review.Error(405, "Method not allowed") } response.Header().Set("Content-Type", "application/yaml; charset=utf-8") if request.Method == http.MethodGet { @@ -177,19 +90,19 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) } return true, nil } - if !strings.HasPrefix(pathname, "/api/v1/") { + if !strings.HasPrefix(pathname, "/api/review/") { return false, nil } - if pathname == "/api/v1/metrics" && request.Method == http.MethodGet { + if pathname == "/api/review/metrics" && request.Method == http.MethodGet { return true, writeJSON(response, 200, handler.metrics.Collect()) } - if pathname == "/api/v1/session" && request.Method == http.MethodGet { + if pathname == "/api/review/session" && request.Method == http.MethodGet { scopes := handler.session.Capabilities.Diff.Scopes.Values mode := review.DiffAll if len(scopes) > 0 { mode = scopes[0] } - snapshot, err := handler.snapshot(request, mode, false) + snapshot, err := handler.review.Snapshot(request.Context(), mode) if err != nil { return true, err } @@ -199,25 +112,21 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) "capabilities": handler.session.Capabilities, }) } - if pathname == "/api/v1/diffs/captures" && request.Method == http.MethodGet { - captures, err := handler.store.ListCaptures(handler.session.User.ID, time.Now()) - return true, writeResult(response, map[string]any{"captures": captures}, err) - } - if pathname == "/api/v1/diffs/current" && request.Method == http.MethodGet { + if pathname == "/api/review/diffs/current" && request.Method == http.MethodGet { mode, err := handler.requestScope(request) if err != nil { return true, err } - snapshot, err := handler.snapshot(request, mode, false) + snapshot, err := handler.review.Snapshot(request.Context(), mode) return true, writeResult(response, snapshot, err) } if diffID, versionID, ok := parseVersionRoute(pathname); ok && request.Method == http.MethodGet { - if handler.strictContext && !handler.ownsDiff(diffID) { - return true, diffsource.Error(404, "Diff version not found") + if !handler.ownsDiff(diffID) { + return true, review.Error(404, "Diff version not found") } snapshot, err := handler.store.StoredVersion(handler.session.User.ID, diffID, versionID, time.Now()) if errors.Is(err, reviewdata.ErrNotFound) { - err = diffsource.Error(404, "Diff version not found") + err = review.Error(404, "Diff version not found") } return true, writeResult(response, snapshot, err) } @@ -227,7 +136,7 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) if (commentRoute(pathname) || agentReviewRoute(pathname)) && !handler.session.Capabilities.Review.Comments.Enabled() { return true, session.NotEnabled(session.ReviewComments) } - if pathname == "/api/v1/review/comments" && request.Method == http.MethodGet { + if pathname == "/api/review/review/comments" && request.Method == http.MethodGet { includeResolved, err := booleanQuery(request, "includeResolved") if err != nil { return true, err @@ -238,11 +147,11 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) if commentID, ok := reviewResolveRoute(pathname); ok && request.Method == http.MethodPost { resolution, err := handler.review.ResolveComment(commentID) if errors.Is(err, reviewservice.ErrCommentNotFound) { - err = diffsource.Error(404, "Comment not found") + err = review.Error(404, "Comment not found") } return true, writeResult(response, resolution, err) } - if pathname == "/api/v1/comments" { + if pathname == "/api/review/comments" { switch request.Method { case http.MethodGet: comments, err := handler.review.Comments() @@ -253,53 +162,53 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) return true, handler.deleteComments(response, request) } } - if pathname == "/api/v1/comments/import" && request.Method == http.MethodPost { + if pathname == "/api/review/comments/import" && request.Method == http.MethodPost { return true, handler.importComments(response, request) } - if pathname == "/api/v1/comments/export" && request.Method == http.MethodGet { + if pathname == "/api/review/comments/export" && request.Method == http.MethodGet { return true, handler.exportComments(response, request) } - if commentID, ok := routeValue(pathname, "/api/v1/comments/"); ok { + if commentID, ok := routeValue(pathname, "/api/review/comments/"); ok { switch request.Method { case http.MethodPatch: return true, handler.updateComment(response, request, commentID) case http.MethodDelete: - deleted, err := handler.reviewOperations(request).DeleteComment(commentID) + deleted, err := handler.review.DeleteComment(commentID) if err != nil { return true, err } if !deleted { - return true, diffsource.Error(404, "Comment not found") + return true, review.Error(404, "Comment not found") } response.WriteHeader(http.StatusNoContent) return true, nil } } - if pathname == "/api/v1/review-marks" { + if pathname == "/api/review/review-marks" { mode, err := handler.requestScope(request) if err != nil { return true, err } switch request.Method { case http.MethodGet: - marks, err := handler.reviewOperations(request).Marks(mode) + marks, err := handler.review.Marks(mode) return true, writeResult(response, map[string]any{"marks": marks}, err) case http.MethodDelete: - if err := handler.reviewOperations(request).ClearMarks(mode); err != nil { + if err := handler.review.ClearMarks(mode); err != nil { return true, err } response.WriteHeader(http.StatusNoContent) return true, nil } } - if fileID, ok := routeValue(pathname, "/api/v1/review-marks/"); ok { + if fileID, ok := routeValue(pathname, "/api/review/review-marks/"); ok { switch request.Method { case http.MethodPut: return true, handler.putMark(response, request, fileID) case http.MethodDelete: mode, err := handler.requestScope(request) if err == nil { - err = handler.reviewOperations(request).DeleteMark(mode, fileID) + err = handler.review.DeleteMark(mode, fileID) } if err != nil { return true, err @@ -308,36 +217,36 @@ func (handler *Handler) api(response http.ResponseWriter, request *http.Request) return true, nil } } - known := pathname == "/api/v1/session" || pathname == "/api/v1/diffs/current" || pathname == "/api/v1/diffs/captures" || - pathname == "/api/v1/comments" || pathname == "/api/v1/comments/import" || - pathname == "/api/v1/comments/export" || pathname == "/api/v1/review/comments" || - pathname == "/api/v1/review-marks" + known := pathname == "/api/review/session" || pathname == "/api/review/diffs/current" || + pathname == "/api/review/comments" || pathname == "/api/review/comments/import" || + pathname == "/api/review/comments/export" || pathname == "/api/review/review/comments" || + pathname == "/api/review/review-marks" if _, ok := parseFileRoute(pathname); ok { known = true } if _, _, ok := parseVersionRoute(pathname); ok { known = true } - if _, ok := routeValue(pathname, "/api/v1/comments/"); ok { + if _, ok := routeValue(pathname, "/api/review/comments/"); ok { known = true } - if _, ok := routeValue(pathname, "/api/v1/review-marks/"); ok { + if _, ok := routeValue(pathname, "/api/review/review-marks/"); ok { known = true } if _, ok := reviewResolveRoute(pathname); ok { known = true } if known { - return true, diffsource.Error(405, "Method not allowed") + return true, review.Error(405, "Method not allowed") } - return true, diffsource.Error(404, "Unknown API route") + return true, review.Error(404, "Unknown API route") } type fileRoute struct{ diffID, fileID, resource string } func parseVersionRoute(pathname string) (string, string, bool) { parts := strings.Split(strings.TrimPrefix(pathname, "/"), "/") - if len(parts) != 6 || parts[0] != "api" || parts[1] != "v1" || parts[2] != "diffs" || parts[4] != "versions" || parts[3] == "" || parts[5] == "" { + if len(parts) != 6 || parts[0] != "api" || parts[1] != "review" || parts[2] != "diffs" || parts[4] != "versions" || parts[3] == "" || parts[5] == "" { return "", "", false } return parts[3], parts[5], true @@ -345,7 +254,7 @@ func parseVersionRoute(pathname string) (string, string, bool) { func parseFileRoute(pathname string) (fileRoute, bool) { parts := strings.Split(strings.TrimPrefix(pathname, "/"), "/") - if len(parts) != 7 || parts[0] != "api" || parts[1] != "v1" || parts[2] != "diffs" || parts[4] != "files" || (parts[6] != "patch" && parts[6] != "contents") { + if len(parts) != 7 || parts[0] != "api" || parts[1] != "review" || parts[2] != "diffs" || parts[4] != "files" || (parts[6] != "patch" && parts[6] != "contents") { return fileRoute{}, false } return fileRoute{diffID: parts[3], fileID: parts[5], resource: parts[6]}, true @@ -360,15 +269,15 @@ func routeValue(pathname, prefix string) (string, bool) { } func commentRoute(pathname string) bool { - if pathname == "/api/v1/comments" || pathname == "/api/v1/comments/import" || pathname == "/api/v1/comments/export" { + if pathname == "/api/review/comments" || pathname == "/api/review/comments/import" || pathname == "/api/review/comments/export" { return true } - _, ok := routeValue(pathname, "/api/v1/comments/") + _, ok := routeValue(pathname, "/api/review/comments/") return ok } func agentReviewRoute(pathname string) bool { - if pathname == "/api/v1/review/comments" { + if pathname == "/api/review/review/comments" { return true } _, ok := reviewResolveRoute(pathname) @@ -376,7 +285,7 @@ func agentReviewRoute(pathname string) bool { } func reviewResolveRoute(pathname string) (string, bool) { - const prefix = "/api/v1/review/comments/" + const prefix = "/api/review/review/comments/" const suffix = "/resolve" if !strings.HasPrefix(pathname, prefix) || !strings.HasSuffix(pathname, suffix) { return "", false @@ -393,13 +302,13 @@ func booleanQuery(request *http.Request, name string) (bool, error) { if value == "true" { return true, nil } - return false, diffsource.Error(400, "Invalid %s value", name) + return false, review.Error(400, "Invalid %s value", name) } func (handler *Handler) requestScope(request *http.Request) (review.DiffMode, error) { mode, err := review.ParseDiffMode(request.URL.Query().Get("scope")) if err != nil { - return "", diffsource.Error(400, "Invalid diff scope") + return "", review.Error(400, "Invalid diff scope") } if !handler.session.Capabilities.Diff.Scopes.Allows(mode) { return "", session.NotEnabled(session.DiffScopes) @@ -407,13 +316,13 @@ func (handler *Handler) requestScope(request *http.Request) (review.DiffMode, er return mode, nil } -func (handler *Handler) currentFile(request *http.Request, mode review.DiffMode, diffID, versionID, fileID, fileVersion string, fresh bool) (review.RepositoryDiff, review.ChangedFile, error) { - return handler.reviewOperations(request).CurrentFile(request.Context(), mode, diffID, versionID, fileID, fileVersion, fresh) +func (handler *Handler) currentFile(request *http.Request, mode review.DiffMode, diffID, versionID, fileID, fileVersion string) (review.RepositoryDiff, review.ChangedFile, error) { + return handler.review.CurrentFile(request.Context(), mode, diffID, versionID, fileID, fileVersion) } func (handler *Handler) getFile(response http.ResponseWriter, request *http.Request, route fileRoute) error { - if handler.strictContext && !handler.ownsDiff(route.diffID) { - return diffsource.Error(404, "File preview not found") + if !handler.ownsDiff(route.diffID) { + return review.Error(404, "File preview not found") } if route.resource == "contents" && !handler.session.Capabilities.Files.Contents.Enabled() { return session.NotEnabled(session.FilesContents) @@ -424,69 +333,10 @@ func (handler *Handler) getFile(response http.ResponseWriter, request *http.Requ } versionID := request.URL.Query().Get("versionId") if versionID == "" { - return diffsource.Error(400, "Version ID is required") + return review.Error(400, "Version ID is required") } fileVersion := request.URL.Query().Get("fileVersion") - if route.diffID == handler.session.DiffIDs[mode] { - current, currentError := handler.snapshot(request, mode, false) - if currentError != nil || current.VersionID != versionID { - stored, err := handler.store.StoredVersion(handler.session.User.ID, route.diffID, versionID, time.Now()) - if errors.Is(err, reviewdata.ErrNotFound) { - if currentError != nil { - return currentError - } - return diffsource.Error(409, "Diff changed. Refresh to load the latest version.") - } - if err != nil { - return err - } - for _, file := range stored.Files { - if file.ID != route.fileID || file.Fingerprint != fileVersion { - continue - } - preview, err := handler.store.StoredPatch(versionID, route.fileID, fileVersion) - if err != nil { - return diffsource.Error(404, "File preview not retained") - } - if route.resource == "contents" { - if preview.Contents == nil { - return diffsource.Error(404, "Full context not retained") - } - return writeJSON(response, 200, preview.Contents) - } - return writeJSON(response, 200, preview) - } - return diffsource.Error(404, "File is not in the diff version") - } - } - if route.diffID != handler.session.DiffIDs[mode] { - stored, err := handler.store.StoredVersion(handler.session.User.ID, route.diffID, versionID, time.Now()) - if errors.Is(err, reviewdata.ErrNotFound) { - return diffsource.Error(404, "Diff version not found") - } - if err != nil { - return err - } - if stored.Source != "stdin" || route.resource != "patch" || stored.Mode != mode { - return diffsource.Error(404, "File preview not found") - } - raw, _, err := handler.store.ReopenCapture(handler.session.User.ID, route.diffID, time.Now()) - if err != nil { - return diffsource.Error(404, "Diff version not found") - } - source, err := diffsource.OpenPatch(raw) - if err != nil { - return err - } - for _, file := range stored.Files { - if file.ID == route.fileID && file.Fingerprint == fileVersion { - preview, err := source.Patch(request.Context(), mode, file, stored.Head) - return writeResult(response, preview, err) - } - } - return diffsource.Error(404, "File is not in the diff version") - } - snapshot, file, err := handler.currentFile(request, mode, route.diffID, versionID, route.fileID, fileVersion, false) + snapshot, file, err := handler.currentFile(request, mode, route.diffID, versionID, route.fileID, fileVersion) if err != nil { return err } @@ -503,7 +353,7 @@ func (handler *Handler) createComment(response http.ResponseWriter, request *htt if err := decodeBody(response, request, &body); err != nil { return err } - comment, err := handler.reviewOperations(request).CreateComment(request.Context(), body) + comment, err := handler.review.CreateComment(request.Context(), body) if err != nil { return err } @@ -511,7 +361,7 @@ func (handler *Handler) createComment(response http.ResponseWriter, request *htt } func (handler *Handler) deleteComments(response http.ResponseWriter, request *http.Request) error { - result, err := handler.reviewOperations(request).DeleteComments(request.Context(), request.URL.Query().Get("status")) + result, err := handler.review.DeleteComments(request.Context(), request.URL.Query().Get("status")) return writeResult(response, result, err) } @@ -523,9 +373,9 @@ func (handler *Handler) importComments(response http.ResponseWriter, request *ht return err } if body.Comments == nil { - return diffsource.Error(400, "Invalid comment import") + return review.Error(400, "Invalid comment import") } - comments, err := handler.reviewOperations(request).ImportComments(request.Context(), *body.Comments) + comments, err := handler.review.ImportComments(request.Context(), *body.Comments) return writeResult(response, map[string]any{"comments": comments}, err) } @@ -533,22 +383,22 @@ func (handler *Handler) exportComments(response http.ResponseWriter, request *ht query := request.URL.Query() resolved := query.Get("includeResolved") if query.Has("includeResolved") && resolved != "true" && resolved != "false" { - return diffsource.Error(400, "Invalid includeResolved value") + return review.Error(400, "Invalid includeResolved value") } revision, requestedScope := query.Get("revision"), query.Get("scope") if query.Has("scope") { parsed, err := review.ParseDiffMode(requestedScope) if err != nil { - return diffsource.Error(400, "Invalid diff scope") + return review.Error(400, "Invalid diff scope") } if !handler.session.Capabilities.Diff.Scopes.Allows(parsed) { return session.NotEnabled(session.DiffScopes) } } if query.Has("revision") != query.Has("scope") { - return diffsource.Error(400, "revision and scope must be provided together") + return review.Error(400, "revision and scope must be provided together") } - formatted, err := handler.reviewOperations(request).ExportComments(request.Context(), reviewservice.ExportCommentsInput{Revision: revision, Scope: requestedScope, CommentID: query.Get("commentId"), IncludeResolved: resolved == "true"}) + formatted, err := handler.review.ExportComments(request.Context(), reviewservice.ExportCommentsInput{Revision: revision, Scope: requestedScope, CommentID: query.Get("commentId"), IncludeResolved: resolved == "true"}) if err != nil { return err } @@ -562,7 +412,7 @@ func (handler *Handler) updateComment(response http.ResponseWriter, request *htt if err := decodeBody(response, request, &body); err != nil { return err } - comment, err := handler.reviewOperations(request).UpdateComment(commentID, body) + comment, err := handler.review.UpdateComment(commentID, body) return writeResult(response, comment, err) } @@ -579,27 +429,27 @@ func (handler *Handler) putMark(response http.ResponseWriter, request *http.Requ return err } if body.FileVersion == nil || body.VersionID == nil { - return diffsource.Error(400, "Invalid review mark") + return review.Error(400, "Invalid review mark") } - mark, err := handler.reviewOperations(request).PutMark(request.Context(), mode, fileID, *body.VersionID, *body.FileVersion) + mark, err := handler.review.PutMark(request.Context(), mode, fileID, *body.VersionID, *body.FileVersion) return writeResult(response, mark, err) } func decodeBody(response http.ResponseWriter, request *http.Request, target any) error { if !strings.HasPrefix(request.Header.Get("Content-Type"), "application/json") { - return diffsource.Error(415, "Expected application/json request body") + return review.Error(415, "Expected application/json request body") } decoder := json.NewDecoder(http.MaxBytesReader(response, request.Body, 1024*1024)) decoder.DisallowUnknownFields() if err := decoder.Decode(target); err != nil { var maximum *http.MaxBytesError if errors.As(err, &maximum) { - return diffsource.Error(413, "Request body exceeds 1 MiB") + return review.Error(413, "Request body exceeds 1 MiB") } - return diffsource.Error(400, "Invalid JSON request body") + return review.Error(400, "Invalid JSON request body") } if decoder.Decode(&struct{}{}) != io.EOF { - return diffsource.Error(400, "Invalid JSON request body") + return review.Error(400, "Invalid JSON request body") } return nil } @@ -611,13 +461,13 @@ func (handler *Handler) serveAsset(response http.ResponseWriter, request *http.R } file, err := handler.assets.Open(name) if err != nil { - handler.problem(response, diffsource.Error(404, "Not found")) + handler.problem(response, review.Error(404, "Not found")) return } defer file.Close() stat, err := file.Stat() if err != nil || stat.IsDir() { - handler.problem(response, diffsource.Error(404, "Not found")) + handler.problem(response, review.Error(404, "Not found")) return } if contentType := mime.TypeByExtension(path.Ext(name)); contentType != "" { @@ -632,7 +482,7 @@ func (handler *Handler) serveAsset(response http.ResponseWriter, request *http.R func (handler *Handler) problem(response http.ResponseWriter, err error) { status := 500 body := map[string]any{"type": "about:blank", "title": "Request Failed", "status": status, "detail": err.Error()} - var requestError *diffsource.RequestError + var requestError *review.RequestError if errors.As(err, &requestError) { status = requestError.Status if status == http.StatusServiceUnavailable && strings.HasPrefix(requestError.Detail, "source_unavailable:") { @@ -670,12 +520,3 @@ func writeJSONType(response http.ResponseWriter, status int, contentType string, response.WriteHeader(status) return json.NewEncoder(response).Encode(value) } - -func (handler *Handler) reviewOperations(request *http.Request) *reviewservice.Service { - return handler.review.WithOperations(handler.store, handler.strictContext, func(ctx context.Context, mode review.DiffMode, fresh bool) (review.RepositoryDiff, error) { - return handler.snapshot(request.Clone(ctx), mode, fresh) - }) -} - -// Kept for existing internal request construction. -type createCommentRequest = reviewservice.CreateCommentInput diff --git a/internal/httpapi/server_test.go b/internal/httpapi/server_test.go index a794367..9f23d8c 100644 --- a/internal/httpapi/server_test.go +++ b/internal/httpapi/server_test.go @@ -10,8 +10,9 @@ import ( "strings" "testing" "testing/fstest" - "time" + "github.com/flexdinesh/servediff/internal/collector" + "github.com/flexdinesh/servediff/internal/contextservice" "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewservice" @@ -59,19 +60,25 @@ func patchSession(t *testing.T, store *reviewstore.Store, source diffsource.Sour if err != nil { t.Fatal(err) } - snapshot, err := source.Snapshot(t.Context(), review.DiffAll) + _, err = source.Snapshot(t.Context(), review.DiffAll) if err != nil { t.Fatal(err) } - binding, err := store.Capture(user.ID, raw, snapshot) + input, err := collector.CollectPatch(t.Context(), raw, "", collector.Options{SourceID: t.TempDir()}) if err != nil { t.Fatal(err) } - active := session.Resolve(source, policies) - active.User = session.User{ID: user.ID, Name: user.Name} - active.ContextID = binding.ContextID - active.DiffIDs = binding.DiffIDs - active.VersionID = binding.VersionID + service := contextservice.NewWithContext(t.Context(), store, user) + t.Cleanup(func() { service.Close() }) + submitted, err := service.Ingest(t.Context(), input) + if err != nil { + t.Fatal(err) + } + active, err := service.Resolve(t.Context(), submitted.Context.ID) + if err != nil { + t.Fatal(err) + } + active.Capabilities = session.ResolveCapabilities(active.Source.Support(), policies) return active } @@ -92,7 +99,7 @@ func TestAPIReviewWorkflow(t *testing.T) { handler := New(active, store, reviewservice.New(active, store), fstest.MapFS{"index.html": {Data: []byte("web")}}) server := httptest.NewServer(handler) defer server.Close() - emptyCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/comments", nil) + emptyCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/comments", nil) if emptyCommentsResponse.StatusCode != http.StatusOK { t.Fatalf("comments status: %d", emptyCommentsResponse.StatusCode) } @@ -103,8 +110,8 @@ func TestAPIReviewWorkflow(t *testing.T) { t.Fatalf("expected empty comment array, got %#v", emptyComments.Comments) } for _, endpoint := range []string{ - "/api/v1/comments/export?scope=", - "/api/v1/comments/export?includeResolved=", + "/api/review/comments/export?scope=", + "/api/review/comments/export?includeResolved=", } { response := request(t, server.Client(), http.MethodGet, server.URL+endpoint, nil) if response.StatusCode != http.StatusBadRequest { @@ -112,7 +119,7 @@ func TestAPIReviewWorkflow(t *testing.T) { } response.Body.Close() } - diffResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/current?scope=all", nil) + diffResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/diffs/current?scope=all", nil) if diffResponse.StatusCode != http.StatusOK { t.Fatalf("diff status: %d", diffResponse.StatusCode) } @@ -120,25 +127,18 @@ func TestAPIReviewWorkflow(t *testing.T) { if snapshot.ID == "" || snapshot.VersionID == "" || snapshot.ID == snapshot.Revision { t.Fatalf("diff identity: %#v", snapshot) } - capturesResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/captures", nil) - captures := decode[struct { - Captures []reviewstore.CaptureInfo `json:"captures"` - }](t, capturesResponse) - if len(captures.Captures) != 1 || captures.Captures[0].ID != snapshot.ID || captures.Captures[0].VersionID != snapshot.VersionID { - t.Fatalf("captures: %#v", captures.Captures) - } - versionResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/"+snapshot.ID+"/versions/"+snapshot.VersionID, nil) + versionResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/diffs/"+snapshot.ID+"/versions/"+snapshot.VersionID, nil) version := decode[review.RepositoryDiff](t, versionResponse) if version.ID != snapshot.ID || version.Revision != snapshot.Revision { t.Fatalf("stored version: %#v", version) } file := snapshot.Files[0] - emptyMark := request(t, server.Client(), http.MethodPut, server.URL+"/api/v1/review-marks/"+file.ID+"?scope=all", map[string]string{"fileVersion": "", "versionId": snapshot.VersionID}) + emptyMark := request(t, server.Client(), http.MethodPut, server.URL+"/api/review/review-marks/"+file.ID+"?scope=all", map[string]string{"fileVersion": "", "versionId": snapshot.VersionID}) if emptyMark.StatusCode != http.StatusConflict { t.Fatalf("empty mark status: %d", emptyMark.StatusCode) } emptyMark.Body.Close() - createdResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/comments", map[string]any{ + createdResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/comments", map[string]any{ "diffId": snapshot.ID, "versionId": snapshot.VersionID, "fileId": file.ID, "scope": "all", "fileVersion": file.Fingerprint, "side": "additions", "start": 1, "end": 1, "body": "Keep the new value.", }) @@ -150,18 +150,18 @@ func TestAPIReviewWorkflow(t *testing.T) { if created.Code != "+ export const value = 2;" || created.Origin == nil { t.Fatalf("created comment: %#v", created) } - markResponse := request(t, server.Client(), http.MethodPut, server.URL+"/api/v1/review-marks/"+file.ID+"?scope=all", map[string]string{"fileVersion": file.Fingerprint, "versionId": snapshot.VersionID}) + markResponse := request(t, server.Client(), http.MethodPut, server.URL+"/api/review/review-marks/"+file.ID+"?scope=all", map[string]string{"fileVersion": file.Fingerprint, "versionId": snapshot.VersionID}) if markResponse.StatusCode != http.StatusOK { t.Fatalf("mark status: %d", markResponse.StatusCode) } markResponse.Body.Close() - exportResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/comments/export", nil) + exportResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/comments/export", nil) exported, _ := io.ReadAll(exportResponse.Body) exportResponse.Body.Close() if !strings.Contains(string(exported), "Keep the new value.") || !strings.Contains(string(exported), `applicability="anchored"`) { t.Fatalf("unexpected export: %s", exported) } - agentCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/review/comments", nil) + agentCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/review/comments", nil) if agentCommentsResponse.StatusCode != http.StatusOK { t.Fatalf("agent comments status: %d", agentCommentsResponse.StatusCode) } @@ -172,7 +172,7 @@ func TestAPIReviewWorkflow(t *testing.T) { t.Fatalf("agent comments: %#v", agentComments.Comments) } for range 2 { - resolveResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/review/comments/"+created.ID+"/resolve", nil) + resolveResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/review/comments/"+created.ID+"/resolve", nil) if resolveResponse.StatusCode != http.StatusOK { t.Fatalf("resolve status: %d", resolveResponse.StatusCode) } @@ -181,14 +181,14 @@ func TestAPIReviewWorkflow(t *testing.T) { t.Fatalf("resolution: %#v", resolution) } } - resolvedCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/review/comments?includeResolved=true", nil) + resolvedCommentsResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/review/comments?includeResolved=true", nil) resolvedComments := decode[struct { Comments []reviewservice.Comment `json:"comments"` }](t, resolvedCommentsResponse) if len(resolvedComments.Comments) != 1 || resolvedComments.Comments[0].Status != "resolved" || resolvedComments.Comments[0].Actionable { t.Fatalf("resolved comments: %#v", resolvedComments.Comments) } - missingResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/v1/review/comments/missing/resolve", nil) + missingResponse := request(t, server.Client(), http.MethodPost, server.URL+"/api/review/review/comments/missing/resolve", nil) if missingResponse.StatusCode != http.StatusNotFound { t.Fatalf("missing resolve status: %d", missingResponse.StatusCode) } @@ -216,71 +216,6 @@ func TestAPIReviewWorkflow(t *testing.T) { } } -func TestHistoricalCaptureAndExpiry(t *testing.T) { - raw, err := os.ReadFile("../../test/fixtures/sample.diff") - if err != nil { - t.Fatal(err) - } - source, err := diffsource.OpenPatch(string(raw)) - if err != nil { - t.Fatal(err) - } - store, err := reviewstore.Open("") - if err != nil { - t.Fatal(err) - } - defer store.Close() - user, err := store.User("owner", "Owner") - if err != nil { - t.Fatal(err) - } - manifest, err := source.Snapshot(t.Context(), review.DiffAll) - if err != nil { - t.Fatal(err) - } - previous, err := store.Capture(user.ID, string(raw), manifest) - if err != nil { - t.Fatal(err) - } - current, err := store.Capture(user.ID, string(raw), manifest) - if err != nil { - t.Fatal(err) - } - active := session.Resolve(source, session.Policies{}) - active.User = session.User{ID: user.ID, Name: user.Name} - active.ContextID = current.ContextID - active.DiffIDs = current.DiffIDs - active.VersionID = current.VersionID - server := httptest.NewServer(New(active, store, reviewservice.New(active, store), fstest.MapFS{"index.html": {Data: []byte("web")}})) - defer server.Close() - previousVersion := decode[review.RepositoryDiff](t, request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/"+previous.ContextID+"/versions/"+previous.VersionID, nil)) - var file review.ChangedFile - for _, candidate := range previousVersion.Files { - if candidate.Path == "src/value.ts" { - file = candidate - } - } - if file.ID == "" { - t.Fatal("stored file missing") - } - previewResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/"+previous.ContextID+"/files/"+file.ID+"/patch?scope=all&versionId="+previous.VersionID+"&fileVersion="+file.Fingerprint, nil) - if previewResponse.StatusCode != http.StatusOK { - t.Fatalf("historical preview status: %d", previewResponse.StatusCode) - } - preview := decode[review.FilePatch](t, previewResponse) - if !strings.Contains(preview.Patch, "export const value = 2") { - t.Fatalf("historical preview: %#v", preview) - } - if err := store.PruneExpired(time.Now().Add(15 * 24 * time.Hour)); err != nil { - t.Fatal(err) - } - expired := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/diffs/current?scope=all", nil) - if expired.StatusCode != http.StatusGone { - t.Fatalf("expired active capture status: %d", expired.StatusCode) - } - expired.Body.Close() -} - func TestSessionCapabilitiesAndEnforcement(t *testing.T) { raw, err := os.ReadFile("../../test/fixtures/sample.diff") if err != nil { @@ -298,7 +233,7 @@ func TestSessionCapabilitiesAndEnforcement(t *testing.T) { server := httptest.NewServer(New(active, store, reviewservice.New(active, store), fstest.MapFS{"index.html": {Data: []byte("web")}})) defer server.Close() - sessionResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/v1/session", nil) + sessionResponse := request(t, server.Client(), http.MethodGet, server.URL+"/api/review/session", nil) if sessionResponse.StatusCode != http.StatusOK { t.Fatalf("session status: %d", sessionResponse.StatusCode) } @@ -313,13 +248,13 @@ func TestSessionCapabilitiesAndEnforcement(t *testing.T) { } for _, endpoint := range []string{ - "/api/v1/diffs/current?scope=staged", - "/api/v1/diffs/revision/files/file/contents?scope=all&fileVersion=version", + "/api/review/diffs/current?scope=staged", + "/api/review/diffs/" + active.DiffIDs[review.DiffAll] + "/files/file/contents?scope=all&fileVersion=version&versionId=version", } { response := request(t, server.Client(), http.MethodGet, server.URL+endpoint, nil) assertCapabilityProblem(t, response, map[string]string{ - "/api/v1/diffs/current?scope=staged": session.DiffScopes, - "/api/v1/diffs/revision/files/file/contents?scope=all&fileVersion=version": session.FilesContents, + "/api/review/diffs/current?scope=staged": session.DiffScopes, + "/api/review/diffs/" + active.DiffIDs[review.DiffAll] + "/files/file/contents?scope=all&fileVersion=version&versionId=version": session.FilesContents, }[endpoint]) } } @@ -346,15 +281,15 @@ func TestDisabledCommentsRejectEveryRoute(t *testing.T) { path string body any }{ - {method: http.MethodGet, path: "/api/v1/comments"}, - {method: http.MethodPost, path: "/api/v1/comments", body: map[string]string{}}, - {method: http.MethodDelete, path: "/api/v1/comments"}, - {method: http.MethodPost, path: "/api/v1/comments/import", body: map[string]string{}}, - {method: http.MethodGet, path: "/api/v1/comments/export"}, - {method: http.MethodPatch, path: "/api/v1/comments/id", body: map[string]string{}}, - {method: http.MethodDelete, path: "/api/v1/comments/id"}, - {method: http.MethodGet, path: "/api/v1/review/comments"}, - {method: http.MethodPost, path: "/api/v1/review/comments/id/resolve"}, + {method: http.MethodGet, path: "/api/review/comments"}, + {method: http.MethodPost, path: "/api/review/comments", body: map[string]string{}}, + {method: http.MethodDelete, path: "/api/review/comments"}, + {method: http.MethodPost, path: "/api/review/comments/import", body: map[string]string{}}, + {method: http.MethodGet, path: "/api/review/comments/export"}, + {method: http.MethodPatch, path: "/api/review/comments/id", body: map[string]string{}}, + {method: http.MethodDelete, path: "/api/review/comments/id"}, + {method: http.MethodGet, path: "/api/review/review/comments"}, + {method: http.MethodPost, path: "/api/review/review/comments/id/resolve"}, } { response := request(t, server.Client(), test.method, server.URL+test.path, test.body) assertCapabilityProblem(t, response, session.ReviewComments) diff --git a/internal/httpapi/store.go b/internal/httpapi/store.go index f8c807f..fdb0aa0 100644 --- a/internal/httpapi/store.go +++ b/internal/httpapi/store.go @@ -1,18 +1,5 @@ package httpapi -import ( - "time" +import "github.com/flexdinesh/servediff/internal/reviewservice" - "github.com/flexdinesh/servediff/internal/review" - "github.com/flexdinesh/servediff/internal/reviewdata" - "github.com/flexdinesh/servediff/internal/reviewservice" -) - -// Store combines only the storage operations used by REST review handlers. -type Store interface { - reviewservice.MutationStore - CaptureAlive(string, string, time.Time) (bool, error) - ListCaptures(string, time.Time) ([]reviewdata.CaptureInfo, error) - StoredPatch(string, string, string) (review.FilePatch, error) - ReopenCapture(string, string, time.Time) (string, reviewdata.Binding, error) -} +type Store interface{ reviewservice.MutationStore } diff --git a/internal/ingestion/client.go b/internal/ingestion/client.go index 30838c9..b69222f 100644 --- a/internal/ingestion/client.go +++ b/internal/ingestion/client.go @@ -1,7 +1,6 @@ package ingestion import ( - "bytes" "context" "encoding/json" "errors" @@ -11,15 +10,12 @@ import ( "net/url" "strings" "time" - - "github.com/flexdinesh/servediff/internal/review" ) type Receipt struct { - ContextID string `json:"contextId"` - ReviewURL string `json:"reviewUrl"` - MCPURL string `json:"mcpUrl"` - Snapshot review.RepositoryDiff `json:"snapshot"` + ContextID string `json:"contextId"` + ReviewURL string `json:"reviewUrl"` + MCPURL string `json:"mcpUrl"` } // Health identifies the durable destination, including replacement databases. @@ -129,74 +125,3 @@ func (client *Client) ObservationCurrent(ctx context.Context, id string) (bool, } return observation.Kind == "observation" && observation.Availability == "available" && !*observation.Stale && observation.ExpiresAt != nil && *observation.ExpiresAt > time.Now().UnixMilli(), nil } - -func (client *Client) Submit(ctx context.Context, input Request) (Receipt, error) { - return client.SubmitTo(ctx, input, "") -} - -// SubmitTo refuses delivery when the destination database changed after probing. -func (client *Client) SubmitTo(ctx context.Context, input Request, stateID string) (Receipt, error) { - if client.err != nil { - return Receipt{}, client.err - } - raw, err := json.Marshal(input) - if err != nil { - return Receipt{}, err - } - if len(raw) > MaxRequestBytes { - return Receipt{}, errors.New("snapshot exceeds the 64 MiB ingestion limit") - } - request, err := http.NewRequestWithContext(ctx, http.MethodPost, client.endpoint+"/api/v2/ingestions", bytes.NewReader(raw)) - if err != nil { - return Receipt{}, err - } - request.Header.Set("Content-Type", "application/json") - if stateID != "" { - request.Header.Set("X-Servediff-State", stateID) - } - if client.token != "" { - request.Header.Set("Authorization", "Bearer "+client.token) - } - response, err := client.http.Do(request) - if err != nil { - return Receipt{}, err - } - defer response.Body.Close() - limit := int64(MaxRequestBytes) - if response.StatusCode >= 300 { - limit = 64 << 10 - } - body, err := io.ReadAll(io.LimitReader(response.Body, limit+1)) - if err != nil { - return Receipt{}, &url.Error{Op: "read ingestion response", URL: client.endpoint, Err: err} - } - if int64(len(body)) > limit { - return Receipt{}, errors.New("ingestion response exceeds limit") - } - if response.StatusCode < 200 || response.StatusCode >= 300 { - problem := &Problem{Status: response.StatusCode, Detail: "Ingestion failed: " + http.StatusText(response.StatusCode)} - _ = json.Unmarshal(body, problem) - problem.Status = response.StatusCode - return Receipt{}, problem - } - var receipt Receipt - if err := json.Unmarshal(body, &receipt); err != nil { - return Receipt{}, fmt.Errorf("invalid ingestion receipt: %w", err) - } - if receipt.ContextID == "" || receipt.ReviewURL == "" || receipt.MCPURL == "" { - return Receipt{}, errors.New("ingestion receipt is missing context identity or review URLs") - } - origin, _ := url.Parse(client.endpoint) - for _, value := range []*string{&receipt.ReviewURL, &receipt.MCPURL} { - target, err := url.Parse(*value) - if err != nil || origin == nil { - return Receipt{}, errors.New("invalid receipt URL") - } - target = origin.ResolveReference(target) - if target.Scheme != origin.Scheme || target.Host != origin.Host || target.User != nil { - return Receipt{}, errors.New("receipt URL must belong to configured server") - } - *value = target.String() - } - return receipt, nil -} diff --git a/internal/ingestion/client_test.go b/internal/ingestion/client_test.go index 5f9e7be..5a037e3 100644 --- a/internal/ingestion/client_test.go +++ b/internal/ingestion/client_test.go @@ -2,165 +2,43 @@ package ingestion import ( "context" - "errors" - "fmt" + "encoding/json" "net/http" "net/http/httptest" - "net/url" - "strings" + "sync/atomic" "testing" - "time" ) -func TestClientReceiptURLsAndBearer(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != "POST" || r.URL.Path != "/api/v2/ingestions" || r.Header.Get("Authorization") != "Bearer secret" || r.Header.Get("Content-Type") != "application/json" { - t.Errorf("ingestion request: %s %s %v", r.Method, r.URL, r.Header) - } - w.WriteHeader(201) - _, _ = fmt.Fprint(w, `{"contextId":"observation","reviewUrl":"/contexts/observation","mcpUrl":"/mcp/contexts/observation"}`) +func TestClientRejectsRedirects(t *testing.T) { + var received atomic.Bool + other := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { received.Store(true) })) + defer other.Close() + redirect := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, other.URL, http.StatusTemporaryRedirect) })) - defer server.Close() - receipt, err := NewClient(server.URL+"/", "secret").Submit(t.Context(), validRequest()) - if err != nil { - t.Fatal(err) + defer redirect.Close() + client := NewClient(redirect.URL, "secret") + if _, err := client.Health(t.Context()); err == nil { + t.Fatal("health followed redirect") } - if receipt.ReviewURL != server.URL+"/contexts/observation" || receipt.MCPURL != server.URL+"/mcp/contexts/observation" { - t.Fatalf("receipt: %#v", receipt) + if _, err := client.SyncTo(t.Context(), Request{SubmissionID: "id"}, "state", nil); err == nil { + t.Fatal("upload followed redirect") } -} - -func TestClientRejectsUnsafeEndpointsAndReceipts(t *testing.T) { - for _, endpoint := range []string{"file:///tmp/server", "http://user:password@example.com", "https://example.com/path", "https://example.com?token=secret", "https://example.com#fragment", "example.com"} { - if _, err := NewClient(endpoint, "secret").Submit(t.Context(), validRequest()); err == nil { - t.Errorf("endpoint accepted: %s", endpoint) - } - } - for _, body := range []string{ - `{"contextId":"x","reviewUrl":"https://foreign.example/review","mcpUrl":"/mcp"}`, - `{"contextId":"x","reviewUrl":"/review","mcpUrl":"//foreign.example/mcp"}`, - `{"reviewUrl":"/review","mcpUrl":"/mcp"}`, - `{"contextId":"x"}`, - `{"contextId":`, - } { - t.Run(body, func(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = fmt.Fprint(w, body) })) - defer server.Close() - if _, err := NewClient(server.URL, "").Submit(t.Context(), validRequest()); err == nil { - t.Fatal("unsafe/malformed receipt accepted") - } - }) + if received.Load() { + t.Fatal("credential sent to redirected destination") } } - -func TestClientDoesNotFollowRedirects(t *testing.T) { - called := false - destination := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { called = true })) - defer destination.Close() - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, destination.URL, 307) })) - defer server.Close() - _, err := NewClient(server.URL, "secret").Submit(t.Context(), validRequest()) - var problem *Problem - if !errors.As(err, &problem) || problem.Status != 307 { - t.Fatalf("redirect error: %v", err) - } - if called { - t.Fatal("ingestion credentials/payload forwarded through redirect") - } -} - -func TestClientTruncatedResponseRemainsTransportError(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Length", "1000") - _, _ = fmt.Fprint(w, `{"contextId":`) - })) - defer server.Close() - _, err := NewClient(server.URL, "").Submit(t.Context(), validRequest()) - var transport *url.Error - if !errors.As(err, &transport) { - t.Fatalf("ambiguous transport failure must remain retryable: %T %v", err, err) - } - ctx, cancel := context.WithCancel(t.Context()) - cancel() - if _, err := NewClient(server.URL, "").Submit(ctx, validRequest()); !errors.Is(err, context.Canceled) { - t.Fatalf("cancelled submission: %v", err) - } -} - -func TestClientPreservesHTTPProblemStatus(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(409) - _, _ = fmt.Fprint(w, `{"status":200,"detail":"Submission identity already used"}`) - })) - defer server.Close() - _, err := NewClient(server.URL, "").Submit(t.Context(), validRequest()) - var problem *Problem - if !errors.As(err, &problem) || problem.Status != 409 || !strings.Contains(problem.Detail, "identity") { - t.Fatalf("HTTP problem: %v", err) - } -} - -func TestHealthChecksIdentityProtocolAndAuthentication(t *testing.T) { - for _, test := range []struct { - name string - body string - code int - ok bool - }{ - {"ready", `{"stateId":"database-account","protocolVersion":2}`, 200, true}, - {"missing identity", `{"protocolVersion":2}`, 200, false}, - {"incompatible", `{"stateId":"database-account","protocolVersion":1}`, 200, false}, - {"trailing data", `{"stateId":"database-account","protocolVersion":2} {}`, 200, false}, - {"authentication", `Unauthorized`, 401, false}, - {"redirect", ``, 307, false}, - } { - t.Run(test.name, func(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet || r.URL.Path != "/api/v2/health" || r.Header.Get("Authorization") != "Bearer secret" { - t.Errorf("health request: %s %s", r.Method, r.URL) - } - w.WriteHeader(test.code) - _, _ = fmt.Fprint(w, test.body) - })) - defer server.Close() - health, err := NewClient(server.URL, "secret").Health(t.Context()) - if (err == nil) != test.ok || (test.ok && health.StateID != "database-account") { - t.Fatalf("health %#v, error %v", health, err) - } - }) - } -} - -func TestObservationCurrentRequiresExplicitFreshnessAndExpiry(t *testing.T) { - future := time.Now().Add(time.Hour).UnixMilli() - for _, test := range []struct { - name string - body string - code int - current bool - err bool - }{ - {"latest", fmt.Sprintf(`{"id":"context","kind":"observation","availability":"available","stale":false,"expiresAt":%d}`, future), 200, true, false}, - {"stale", fmt.Sprintf(`{"id":"context","kind":"observation","availability":"available","stale":true,"expiresAt":%d}`, future), 200, false, false}, - {"expired", `{"id":"context","kind":"observation","availability":"available","stale":false,"expiresAt":1}`, 200, false, false}, - {"missing freshness", fmt.Sprintf(`{"id":"context","kind":"observation","availability":"available","expiresAt":%d}`, future), 200, false, true}, - {"wrong identity", `{"id":"other","stale":false}`, 200, false, true}, - {"pruned", `{}`, 404, false, false}, - {"unavailable", `{}`, 503, false, true}, +func TestClientRequiresCompletedMatchingJob(t *testing.T) { + for _, job := range []Job{ + {ID: "job", SubmissionID: "other", State: "succeeded", ContextID: "context"}, + {ID: "job", SubmissionID: "id", State: "succeeded"}, + {ID: "job", SubmissionID: "id", State: "invalid"}, } { - t.Run(test.name, func(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/api/v2/contexts/context" || r.Header.Get("Authorization") != "Bearer secret" { - t.Errorf("context probe: %s", r.URL) - } - w.WriteHeader(test.code) - _, _ = fmt.Fprint(w, test.body) - })) - defer server.Close() - current, err := NewClient(server.URL, "secret").ObservationCurrent(t.Context(), "context") - if current != test.current || (err != nil) != test.err { - t.Fatalf("current=%v error=%v", current, err) - } - }) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(job) })) + _, err := NewClient(server.URL, "secret").SyncTo(context.Background(), Request{SubmissionID: "id"}, "state", nil) + server.Close() + if err == nil { + t.Fatalf("accepted invalid completion: %+v", job) + } } } diff --git a/internal/ingestion/model.go b/internal/ingestion/model.go index 576babd..3551542 100644 --- a/internal/ingestion/model.go +++ b/internal/ingestion/model.go @@ -4,7 +4,7 @@ package ingestion import "github.com/flexdinesh/servediff/internal/review" -const ProtocolVersion = 2 +const ProtocolVersion = 3 const MaxRequestBytes = 64 << 20 // Comparison records the interpretation and resolved Git baseline of a capture. diff --git a/internal/ingestion/validate.go b/internal/ingestion/validate.go index 0a0e1da..c741983 100644 --- a/internal/ingestion/validate.go +++ b/internal/ingestion/validate.go @@ -9,7 +9,7 @@ import ( ) func Validate(input Request) error { - if input.ProtocolVersion != 1 && input.ProtocolVersion != ProtocolVersion { + if input.ProtocolVersion != ProtocolVersion { return fmt.Errorf("unsupported ingestion protocol %d", input.ProtocolVersion) } if strings.TrimSpace(input.SubmissionID) == "" || len(input.SubmissionID) > 128 { diff --git a/internal/ingestion/validate_test.go b/internal/ingestion/validate_test.go index eeff574..6c84089 100644 --- a/internal/ingestion/validate_test.go +++ b/internal/ingestion/validate_test.go @@ -124,10 +124,12 @@ func TestValidateEmptyAndUnavailableSnapshots(t *testing.T) { } } -func TestValidateLegacyProtocol(t *testing.T) { +func TestRejectLegacyProtocols(t *testing.T) { r := validRequest() - r.ProtocolVersion = 1 - if err := Validate(r); err != nil { - t.Fatalf("legacy producer: %v", err) + for _, version := range []int{1, 2} { + r.ProtocolVersion = version + if err := Validate(r); err == nil { + t.Fatalf("accepted retired protocol %d", version) + } } } diff --git a/internal/ingestionqueue/queue.go b/internal/ingestionqueue/queue.go index be91093..37d2284 100644 --- a/internal/ingestionqueue/queue.go +++ b/internal/ingestionqueue/queue.go @@ -6,8 +6,8 @@ import ( "errors" "time" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/review" ) var ErrEmpty = errors.New("no ingestion jobs available") @@ -93,7 +93,7 @@ func process(ctx context.Context, queue Queue, delivery Delivery, ingest Ingest) if err == nil { return queue.Complete(ctx, delivery, id) } - var problem *diffsource.RequestError + var problem *review.RequestError if errors.As(err, &problem) && problem.Status >= 400 && problem.Status < 500 { return queue.Fail(ctx, delivery, problem.Detail) } diff --git a/internal/ingestionqueue/queue_test.go b/internal/ingestionqueue/queue_test.go new file mode 100644 index 0000000..06cc79e --- /dev/null +++ b/internal/ingestionqueue/queue_test.go @@ -0,0 +1,85 @@ +package ingestionqueue + +import ( + "context" + "errors" + "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/review" + "testing" + "time" +) + +type recordingQueue struct { + action, contextID string + at time.Time + completeError error +} + +func (*recordingQueue) Accept(context.Context, string, ingestion.Request) (Job, error) { + panic("unexpected admission") +} +func (*recordingQueue) Get(context.Context, string, string) (Job, error) { panic("unexpected status") } +func (*recordingQueue) Claim(context.Context, time.Duration) (Delivery, error) { + return Delivery{}, ErrEmpty +} +func (*recordingQueue) Renew(context.Context, Delivery, time.Duration) error { return nil } +func (q *recordingQueue) Complete(_ context.Context, _ Delivery, id string) error { + q.action = "complete" + q.contextID = id + return q.completeError +} +func (q *recordingQueue) Retry(_ context.Context, _ Delivery, at time.Time, _ string) error { + q.action = "retry" + q.at = at + return nil +} +func (q *recordingQueue) Fail(context.Context, Delivery, string) error { q.action = "fail"; return nil } +func TestWorkerOutcomeContract(t *testing.T) { + for _, c := range []struct { + name string + attempt int + failure error + action string + }{ + {"committed", 1, nil, "complete"}, + {"transient", 1, errors.New("storage unavailable"), "retry"}, + {"permanent", 1, review.Error(400, "invalid observation"), "fail"}, + {"exhausted", 5, errors.New("storage unavailable"), "fail"}, + } { + t.Run(c.name, func(t *testing.T) { + q := &recordingQueue{} + before := time.Now() + err := process(t.Context(), q, Delivery{OwnerID: "owner", Job: Job{ID: "job", Attempt: c.attempt}}, func(ctx context.Context, owner string, _ ingestion.Request) (string, error) { + if owner != "owner" { + t.Fatalf("wrong owner %s", owner) + } + if _, ok := ctx.Deadline(); !ok { + t.Fatal("processing has no deadline") + } + return "context", c.failure + }) + if err != nil || q.action != c.action { + t.Fatalf("action=%s error=%v", q.action, err) + } + if c.action == "complete" && q.contextID != "context" { + t.Fatal("lost committed context") + } + if c.action == "retry" && !q.at.After(before) { + t.Fatal("retry not delayed") + } + }) + } +} +func TestWorkerCancellationAndLeaseFencing(t *testing.T) { + ctx, cancel := context.WithCancel(t.Context()) + q := &recordingQueue{} + err := process(ctx, q, Delivery{}, func(context.Context, string, ingestion.Request) (string, error) { cancel(); return "committed", nil }) + if err != nil || q.action != "" { + t.Fatalf("shutdown changed job: %s %v", q.action, err) + } + q = &recordingQueue{completeError: ErrLeaseLost} + err = process(t.Context(), q, Delivery{}, func(context.Context, string, ingestion.Request) (string, error) { return "committed", nil }) + if !errors.Is(err, ErrLeaseLost) || q.action != "complete" { + t.Fatalf("lost lease retried: %s %v", q.action, err) + } +} diff --git a/internal/remoteserver/boundaries_users_test.go b/internal/remoteserver/boundaries_users_test.go index 2478d46..ce504da 100644 --- a/internal/remoteserver/boundaries_users_test.go +++ b/internal/remoteserver/boundaries_users_test.go @@ -16,6 +16,7 @@ import ( "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/mcpapi" "github.com/flexdinesh/servediff/internal/reviewstore" + "github.com/flexdinesh/servediff/internal/testsupport" "github.com/modelcontextprotocol/go-sdk/mcp" ) @@ -133,7 +134,7 @@ func TestGlobalMCPOwnershipAcrossUsers(t *testing.T) { } contexts := make([]string, 2) for index, token := range tokens { - receipt, err := ingestion.NewClient(server.URL, token).Submit(t.Context(), input) + receipt, err := testsupport.NewClient(server.URL, token).Submit(t.Context(), input) if err != nil { t.Fatal(err) } diff --git a/internal/remoteserver/server.go b/internal/remoteserver/server.go index 7284fe4..82cc5ee 100644 --- a/internal/remoteserver/server.go +++ b/internal/remoteserver/server.go @@ -15,9 +15,9 @@ import ( "time" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/ingestionqueue" + "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewstore" "github.com/flexdinesh/servediff/internal/serverapp" "github.com/flexdinesh/servediff/internal/webui" @@ -82,7 +82,7 @@ func compose(ctx context.Context, store *reviewstore.Store, assets fs.FS) (http. return ingestionqueue.Run(ctx, queue, func(ctx context.Context, owner string, input ingestion.Request) (string, error) { service, ok := byOwner[owner] if !ok { - return "", diffsource.Error(403, "Account unavailable") + return "", review.Error(403, "Account unavailable") } result, err := service.Ingest(ctx, input) return result.Context.ID, err diff --git a/internal/remoteserver/server_test.go b/internal/remoteserver/server_test.go index 3b5d966..0089052 100644 --- a/internal/remoteserver/server_test.go +++ b/internal/remoteserver/server_test.go @@ -18,6 +18,7 @@ import ( "github.com/flexdinesh/servediff/internal/collector" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/reviewstore" + "github.com/flexdinesh/servediff/internal/testsupport" ) const testToken = "remote-test-credential-at-least-thirty-two-bytes" @@ -129,11 +130,11 @@ func TestMultiUserRESTMCPAndEventIsolation(t *testing.T) { if err != nil { t.Fatal(err) } - adminReceipt, err := ingestion.NewClient(server.URL, testToken).Submit(t.Context(), input) + adminReceipt, err := testsupport.NewClient(server.URL, testToken).Submit(t.Context(), input) if err != nil { t.Fatal(err) } - otherReceipt, err := ingestion.NewClient(server.URL, otherToken).Submit(t.Context(), input) + otherReceipt, err := testsupport.NewClient(server.URL, otherToken).Submit(t.Context(), input) if err != nil { t.Fatal(err) } diff --git a/internal/review/contract_test.go b/internal/review/contract_test.go new file mode 100644 index 0000000..dd0e0e6 --- /dev/null +++ b/internal/review/contract_test.go @@ -0,0 +1,44 @@ +package review + +import ( + "encoding/json" + "os" + "testing" +) + +func TestSharedCommentContracts(t *testing.T) { + raw, err := os.ReadFile("../../test/contracts/comments.json") + if err != nil { + t.Fatal(err) + } + var cases []struct { + Name string + Comment ReviewComment + Repository *RepositoryDiff + Valid bool + Applicability string + Export string + } + if err := json.Unmarshal(raw, &cases); err != nil { + t.Fatal(err) + } + for _, c := range cases { + t.Run(c.Name, func(t *testing.T) { + if got := c.Comment.Valid(); got != c.Valid { + t.Fatalf("valid=%v want %v", got, c.Valid) + } + if got := Applicability(c.Comment, c.Repository); got != c.Applicability { + t.Fatalf("applicability=%s want %s", got, c.Applicability) + } + if c.Export != "" { + var repos []RepositoryDiff + if c.Repository != nil { + repos = append(repos, *c.Repository) + } + if got := FormatComments([]ReviewComment{c.Comment}, true, repos); got != c.Export { + t.Fatalf("export mismatch:\n%s", got) + } + } + }) + } +} diff --git a/internal/review/export.go b/internal/review/export.go index 21a3db2..b2b7cfb 100644 --- a/internal/review/export.go +++ b/internal/review/export.go @@ -6,13 +6,13 @@ import ( ) func Applicability(comment ReviewComment, repository *RepositoryDiff) string { - if repository == nil { + if repository == nil || comment.DiffID == "" || repository.ID == "" { return "unknown" } if comment.Scope != repository.Mode { return "other-scope" } - if comment.DiffID != "" && repository.ID != "" && comment.DiffID != repository.ID { + if comment.DiffID != repository.ID { return "other-scope" } for _, file := range repository.Files { diff --git a/internal/review/model.go b/internal/review/model.go index 41b3eaa..c20481a 100644 --- a/internal/review/model.go +++ b/internal/review/model.go @@ -106,7 +106,7 @@ func (comment ReviewComment) Valid() bool { if comment.Target == "file" { validSelection = comment.Side == "additions" && comment.Start == 0 && comment.End == 0 && comment.Code == "" } - return modeError == nil && + return comment.Scope != "" && modeError == nil && validSelection && strings.TrimSpace(comment.Body) != "" && (comment.Status == "open" || comment.Status == "resolved") && !math.IsNaN(comment.CreatedAt) && !math.IsInf(comment.CreatedAt, 0) && diff --git a/internal/review/patch_context.go b/internal/review/patch_context.go new file mode 100644 index 0000000..7394edf --- /dev/null +++ b/internal/review/patch_context.go @@ -0,0 +1,61 @@ +package review + +import ( + "regexp" + "strconv" + "strings" +) + +var hunkHeader = regexp.MustCompile(`^@@ -([0-9]+)(?:,([0-9]+))? \+([0-9]+)(?:,([0-9]+))? @@`) + +func PatchContext(patch, side string, start, end int) (string, bool) { + if start > end { + start, end = end, start + } + if start < 1 || end-start >= 200 || (side != "additions" && side != "deletions") { + return "", false + } + selected := make(map[int]string) + oldLine, newLine, inHunk := 0, 0, false + for _, line := range strings.Split(patch, "\n") { + if match := hunkHeader.FindStringSubmatch(line); len(match) == 5 { + oldLine, _ = strconv.Atoi(match[1]) + newLine, _ = strconv.Atoi(match[3]) + inHunk = true + continue + } + if !inHunk || line == "" || strings.HasPrefix(line, "\\ No newline") { + continue + } + prefix := line[0] + switch prefix { + case ' ': + if side == "additions" { + selected[newLine] = " " + line[1:] + } else { + selected[oldLine] = " " + line[1:] + } + oldLine++ + newLine++ + case '+': + if side == "additions" { + selected[newLine] = "+ " + line[1:] + } + newLine++ + case '-': + if side == "deletions" { + selected[oldLine] = "- " + line[1:] + } + oldLine++ + } + } + lines := make([]string, 0, end-start+1) + for line := start; line <= end; line++ { + value, ok := selected[line] + if !ok { + return "", false + } + lines = append(lines, value) + } + return strings.Join(lines, "\n"), true +} diff --git a/internal/review/repository_name.go b/internal/review/repository_name.go new file mode 100644 index 0000000..65c0e7d --- /dev/null +++ b/internal/review/repository_name.go @@ -0,0 +1,23 @@ +package review + +import ( + "net/url" + "path" + "strings" +) + +func RemoteRepositoryName(remote, fallback string) string { + if remote == "" { + return fallback + } + if parsed, err := url.Parse(remote); err == nil && parsed.Scheme != "" && (parsed.Host != "" || parsed.Scheme == "file") { + remote = parsed.Path + } else if _, suffix, ok := strings.Cut(remote, ":"); ok { + remote = suffix + } + name := strings.TrimSuffix(path.Base(strings.TrimRight(remote, "/")), ".git") + if name == "" || name == "." || name == "/" { + return fallback + } + return name +} diff --git a/internal/review/source.go b/internal/review/source.go new file mode 100644 index 0000000..77d55a0 --- /dev/null +++ b/internal/review/source.go @@ -0,0 +1,35 @@ +package review + +import ( + "context" + "fmt" +) + +type Source interface { + Root() string + Kind() string + Support() Support + Snapshot(context.Context, DiffMode) (RepositoryDiff, error) + Patch(context.Context, DiffMode, ChangedFile, *string) (FilePatch, error) + Contents(context.Context, DiffMode, ChangedFile, *string) (FileContents, error) +} + +type Support struct { + Scopes []DiffMode + Refresh bool + StagingMetadata bool + FileContents bool +} + +type RequestError struct { + Status int + Detail string +} + +func (err *RequestError) Error() string { return err.Detail } + +func Error(status int, format string, values ...any) error { + return &RequestError{Status: status, Detail: fmt.Sprintf(format, values...)} +} + +func Message(value string) *string { return &value } diff --git a/internal/reviewdata/model.go b/internal/reviewdata/model.go index d0028a9..79ba4f0 100644 --- a/internal/reviewdata/model.go +++ b/internal/reviewdata/model.go @@ -3,6 +3,7 @@ package reviewdata import ( "errors" + "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/review" ) @@ -23,14 +24,6 @@ type Binding struct { LocationID *string RepositoryID *string DiffIDs map[review.DiffMode]string - VersionID string -} - -type CaptureInfo struct { - ID string `json:"id"` - VersionID string `json:"versionId"` - CreatedAt int64 `json:"createdAt"` - ExpiresAt int64 `json:"expiresAt"` } type ContextInfo struct { diff --git a/internal/reviewservice/catalog.go b/internal/reviewservice/catalog.go index 78f4bde..c11e7b8 100644 --- a/internal/reviewservice/catalog.go +++ b/internal/reviewservice/catalog.go @@ -4,7 +4,6 @@ import ( "context" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/session" @@ -19,10 +18,10 @@ type ContextProvider interface { type Catalog struct { provider ContextProvider - store CommentStore + store MutationStore } -func NewCatalog(provider ContextProvider, store CommentStore) *Catalog { +func NewCatalog(provider ContextProvider, store MutationStore) *Catalog { return &Catalog{provider: provider, store: store} } func (catalog *Catalog) ListContexts(ctx context.Context, limit int, cursor string, filter ingestion.Filter) (contextservice.Page, error) { @@ -30,14 +29,13 @@ func (catalog *Catalog) ListContexts(ctx context.Context, limit int, cursor stri } func (catalog *Catalog) Review(ctx context.Context, id string) (*Service, error) { if id == "" { - return nil, diffsource.Error(400, "context_id required; use list_contexts to select a review") + return nil, review.Error(400, "context_id required; use list_contexts to select a review") } active, err := catalog.provider.Resolve(ctx, id) if err != nil { return nil, err } service := New(active, catalog.store) - service.strictContext = true return service, nil } func (catalog *Catalog) GetDiff(ctx context.Context, id string, scope review.DiffMode) (review.RepositoryDiff, error) { @@ -45,7 +43,7 @@ func (catalog *Catalog) GetDiff(ctx context.Context, id string, scope review.Dif if err != nil { return review.RepositoryDiff{}, err } - return service.snapshot(ctx, scope, false) + return service.Snapshot(ctx, scope) } func (catalog *Catalog) GetPatch(ctx context.Context, id string, scope review.DiffMode, fileID string) (review.FilePatch, error) { @@ -53,7 +51,7 @@ func (catalog *Catalog) GetPatch(ctx context.Context, id string, scope review.Di if err != nil { return review.FilePatch{}, err } - snapshot, err := service.snapshot(ctx, scope, false) + snapshot, err := service.Snapshot(ctx, scope) if err != nil { return review.FilePatch{}, err } @@ -62,5 +60,5 @@ func (catalog *Catalog) GetPatch(ctx context.Context, id string, scope review.Di return service.session.Source.Patch(ctx, scope, file, snapshot.Head) } } - return review.FilePatch{}, diffsource.Error(404, "File is not in the stored diff") + return review.FilePatch{}, review.Error(404, "File is not in the stored diff") } diff --git a/internal/reviewservice/operations.go b/internal/reviewservice/operations.go index c0aa9ae..a7879b8 100644 --- a/internal/reviewservice/operations.go +++ b/internal/reviewservice/operations.go @@ -8,7 +8,6 @@ import ( "strings" "time" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" "github.com/flexdinesh/servediff/internal/session" @@ -24,36 +23,14 @@ type MutationStore interface { DeleteMark(string, review.DiffMode, string) error PutMark(string, review.ReviewMark) error StoredVersion(string, string, string, time.Time) (review.RepositoryDiff, error) - VersionComplete(string, int) (bool, error) - PinVersion(review.RepositoryDiff, map[string]review.FilePatch) error } -type SnapshotLoader func(context.Context, review.DiffMode, bool) (review.RepositoryDiff, error) - -// WithOperations uses the transport's snapshot cache while keeping review rules in the application. -func (service *Service) WithOperations(store MutationStore, strict bool, loader SnapshotLoader) *Service { - copy := *service - copy.mutations, copy.strictContext, copy.snapshotLoader = store, strict, loader - return © -} - -func (service *Service) snapshot(ctx context.Context, mode review.DiffMode, fresh bool) (review.RepositoryDiff, error) { +// Snapshot reads and capability checks belong to the application, shared by transports. +func (service *Service) Snapshot(ctx context.Context, mode review.DiffMode) (review.RepositoryDiff, error) { if !service.session.Capabilities.Diff.Scopes.Allows(mode) { return review.RepositoryDiff{}, session.NotEnabled(session.DiffScopes) } - if service.snapshotLoader != nil { - return service.snapshotLoader(ctx, mode, fresh) - } - snapshot, err := service.session.Source.Snapshot(ctx, mode) - snapshot.ID = service.session.DiffIDs[mode] - snapshot.LocationID, snapshot.RepositoryID = service.session.LocationID, service.session.RepositoryID - if service.session.VersionID != "" { - snapshot.VersionID = service.session.VersionID - } - if snapshot.VersionID == "" { - snapshot.VersionID = reviewdata.VersionID(snapshot.ID, snapshot.Revision) - } - return snapshot, err + return service.session.Source.Snapshot(ctx, mode) } func (service *Service) ownsDiff(id string) bool { @@ -95,25 +72,25 @@ func (service *Service) DeleteComment(id string) (bool, error) { if err := service.requireComments(); err != nil { return false, err } - return service.mutations.DeleteComment(service.session.ContextID, id) + return service.store.DeleteComment(service.session.ContextID, id) } func (service *Service) Marks(mode review.DiffMode) ([]review.ReviewMark, error) { if !service.session.Capabilities.Diff.Scopes.Allows(mode) { return nil, session.NotEnabled(session.DiffScopes) } - return service.mutations.Marks(service.session.ContextID, mode) + return service.store.Marks(service.session.ContextID, mode) } func (service *Service) ClearMarks(mode review.DiffMode) error { if !service.session.Capabilities.Diff.Scopes.Allows(mode) { return session.NotEnabled(session.DiffScopes) } - return service.mutations.ClearMarks(service.session.ContextID, mode) + return service.store.ClearMarks(service.session.ContextID, mode) } func (service *Service) DeleteMark(mode review.DiffMode, id string) error { if !service.session.Capabilities.Diff.Scopes.Allows(mode) { return session.NotEnabled(session.DiffScopes) } - return service.mutations.DeleteMark(service.session.ContextID, mode, id) + return service.store.DeleteMark(service.session.ContextID, mode, id) } func contentContext(contents string, start, end int) (string, bool) { if start > end { @@ -142,56 +119,24 @@ func repositoryFor(comment review.ReviewComment, repositories []review.Repositor return nil } -func (service *Service) CurrentFile(ctx context.Context, mode review.DiffMode, diffID, versionID, fileID, fileVersion string, fresh bool) (review.RepositoryDiff, review.ChangedFile, error) { - snapshot, err := service.snapshot(ctx, mode, fresh) +func (service *Service) CurrentFile(ctx context.Context, mode review.DiffMode, diffID, versionID, fileID, fileVersion string) (review.RepositoryDiff, review.ChangedFile, error) { + snapshot, err := service.Snapshot(ctx, mode) if err != nil { return review.RepositoryDiff{}, review.ChangedFile{}, err } if snapshot.ID != diffID || snapshot.VersionID != versionID { - return review.RepositoryDiff{}, review.ChangedFile{}, diffsource.Error(409, "Diff changed. Refresh to load the latest version.") + return review.RepositoryDiff{}, review.ChangedFile{}, review.Error(409, "Diff changed. Refresh to load the latest version.") } for _, file := range snapshot.Files { if file.ID != fileID { continue } if file.Fingerprint != fileVersion { - return review.RepositoryDiff{}, review.ChangedFile{}, diffsource.Error(409, "File changed. Refresh to load the latest version.") + return review.RepositoryDiff{}, review.ChangedFile{}, review.Error(409, "File changed. Refresh to load the latest version.") } return snapshot, file, nil } - return review.RepositoryDiff{}, review.ChangedFile{}, diffsource.Error(404, "File is not in the current diff") -} - -func (service *Service) pinSnapshot(ctx context.Context, snapshot review.RepositoryDiff) error { - complete, err := service.mutations.VersionComplete(snapshot.VersionID, len(snapshot.Files)) - if err != nil { - return err - } - if complete { - return nil - } - previews := make(map[string]review.FilePatch, len(snapshot.Files)) - for _, file := range snapshot.Files { - preview, err := service.session.Source.Patch(ctx, snapshot.Mode, file, snapshot.Head) - if err != nil { - return err - } - if service.session.Capabilities.Files.Contents.Enabled() && !file.Binary && file.Status != "U" && preview.Contents == nil { - contents, contentError := service.session.Source.Contents(ctx, snapshot.Mode, file, snapshot.Head) - if contentError == nil { - preview.Contents = &contents - } - } - previews[file.ID] = preview - } - current, err := service.session.Source.Snapshot(ctx, snapshot.Mode) - if err != nil { - return err - } - if current.Revision != snapshot.Revision { - return diffsource.Error(409, "Diff changed while saving the review. Refresh to try again.") - } - return service.mutations.PinVersion(snapshot, previews) + return review.RepositoryDiff{}, review.ChangedFile{}, review.Error(404, "File is not in the current diff") } func (service *Service) repositories(ctx context.Context, comments []review.ReviewComment) ([]review.RepositoryDiff, error) { @@ -208,7 +153,7 @@ func (service *Service) repositories(ctx context.Context, comments []review.Revi if !include { continue } - snapshot, err := service.snapshot(ctx, mode, false) + snapshot, err := service.Snapshot(ctx, mode) if err != nil { return nil, err } @@ -222,12 +167,12 @@ func (service *Service) validateReference(ctx context.Context, diffID, versionID return nil } if !service.ownsDiff(diffID) { - return diffsource.Error(404, "Comment diff not found") + return review.Error(404, "Comment diff not found") } if versionID == "" { return nil } - _, err := service.mutations.StoredVersion(service.session.User.ID, diffID, versionID, time.Now()) + _, err := service.store.StoredVersion(service.session.User.ID, diffID, versionID, time.Now()) if err == nil { return nil } @@ -238,12 +183,12 @@ func (service *Service) validateReference(ctx context.Context, diffID, versionID if id != diffID { continue } - current, err := service.snapshot(ctx, mode, false) + current, err := service.Snapshot(ctx, mode) if err == nil && current.VersionID == versionID { - return service.pinSnapshot(ctx, current) + return nil } } - return diffsource.Error(404, "Comment version not found") + return review.Error(404, "Comment version not found") } type CreateCommentInput struct { @@ -268,12 +213,12 @@ func (service *Service) CreateComment(ctx context.Context, body CreateCommentInp validSelection = body.Side == "additions" && body.Start == 0 && body.End == 0 } if _, err := review.ParseDiffMode(string(body.Scope)); err != nil || !validSelection || strings.TrimSpace(body.Body) == "" { - return review.ReviewComment{}, diffsource.Error(400, "Invalid comment") + return review.ReviewComment{}, review.Error(400, "Invalid comment") } if !service.session.Capabilities.Diff.Scopes.Allows(body.Scope) { return review.ReviewComment{}, session.NotEnabled(session.DiffScopes) } - snapshot, file, err := service.CurrentFile(ctx, body.Scope, body.DiffID, body.VersionID, body.FileID, body.FileVersion, true) + snapshot, file, err := service.CurrentFile(ctx, body.Scope, body.DiffID, body.VersionID, body.FileID, body.FileVersion) if err != nil { return review.ReviewComment{}, err } @@ -284,7 +229,7 @@ func (service *Service) CreateComment(ctx context.Context, body CreateCommentInp return review.ReviewComment{}, err } var ok bool - code, ok = diffsource.PatchContext(preview.Patch, body.Side, body.Start, body.End) + code, ok = review.PatchContext(preview.Patch, body.Side, body.Start, body.End) if !ok && preview.Contents != nil { contents := preview.Contents.After if body.Side == "deletions" { @@ -293,7 +238,7 @@ func (service *Service) CreateComment(ctx context.Context, body CreateCommentInp code, ok = contentContext(contents, body.Start, body.End) } if !ok { - return review.ReviewComment{}, diffsource.Error(400, "Select up to 200 visible lines on one side") + return review.ReviewComment{}, review.Error(400, "Select up to 200 visible lines on one side") } } start, end := body.Start, body.End @@ -304,9 +249,6 @@ func (service *Service) CreateComment(ctx context.Context, body CreateCommentInp if err != nil { return review.ReviewComment{}, err } - if err := service.pinSnapshot(ctx, snapshot); err != nil { - return review.ReviewComment{}, err - } comment := review.ReviewComment{ ID: id, DiffID: snapshot.ID, VersionID: snapshot.VersionID, Path: file.Path, Scope: body.Scope, Fingerprint: file.Fingerprint, Target: body.Target, Side: body.Side, Start: start, End: end, Code: code, Body: strings.TrimSpace(body.Body), Status: "open", CreatedAt: float64(time.Now().UnixMilli()), @@ -323,7 +265,7 @@ func (service *Service) UpdateComment(commentID string, body UpdateCommentInput) return review.ReviewComment{}, err } if body.Body == nil && body.Status == nil || body.Body != nil && strings.TrimSpace(*body.Body) == "" || body.Status != nil && *body.Status != "open" && *body.Status != "resolved" { - return review.ReviewComment{}, diffsource.Error(400, "Invalid comment update") + return review.ReviewComment{}, review.Error(400, "Invalid comment update") } comments, err := service.store.Comments(service.session.ContextID) if err != nil { @@ -344,7 +286,7 @@ func (service *Service) UpdateComment(commentID string, body UpdateCommentInput) } return comment, nil } - return review.ReviewComment{}, diffsource.Error(404, "Comment not found") + return review.ReviewComment{}, review.Error(404, "Comment not found") } func (service *Service) DeleteComments(ctx context.Context, selection string) (DeletedComments, error) { @@ -352,7 +294,7 @@ func (service *Service) DeleteComments(ctx context.Context, selection string) (D return DeletedComments{}, err } if selection != "all" && selection != "open" && selection != "resolved" && selection != "stale" { - return DeletedComments{}, diffsource.Error(400, "Invalid comment status") + return DeletedComments{}, review.Error(400, "Invalid comment status") } comments, err := service.store.Comments(service.session.ContextID) if err != nil { @@ -369,7 +311,7 @@ func (service *Service) DeleteComments(ctx context.Context, selection string) (D selected[comment.ID] = true } } - deleted, err := service.mutations.DeleteComments(service.session.ContextID, selected) + deleted, err := service.store.DeleteComments(service.session.ContextID, selected) if err != nil { return DeletedComments{}, err } @@ -383,23 +325,21 @@ func (service *Service) ImportComments(ctx context.Context, input []review.Revie } for _, comment := range input { if !comment.Valid() { - return nil, diffsource.Error(400, "Invalid comment import") + return nil, review.Error(400, "Invalid comment import") } - if service.strictContext { - if comment.DiffID != "" && comment.DiffID != service.session.DiffIDs[comment.Scope] { - return nil, diffsource.Error(404, "Comment diff not found") - } - if err := service.validateReference(ctx, comment.DiffID, comment.VersionID); err != nil { + if comment.DiffID != service.session.DiffIDs[comment.Scope] { + return nil, review.Error(404, "Comment diff not found") + } + if err := service.validateReference(ctx, comment.DiffID, comment.VersionID); err != nil { + return nil, err + } + if comment.Origin != nil { + if err := service.validateReference(ctx, comment.Origin.DiffID, comment.Origin.VersionID); err != nil { return nil, err } - if comment.Origin != nil { - if err := service.validateReference(ctx, comment.Origin.DiffID, comment.Origin.VersionID); err != nil { - return nil, err - } - } } } - comments, err := service.mutations.ImportComments(service.session.ContextID, input) + comments, err := service.store.ImportComments(service.session.ContextID, input) if err != nil { return nil, err } @@ -417,9 +357,9 @@ func (service *Service) ExportComments(ctx context.Context, input ExportComments var err error mode, err = review.ParseDiffMode(requestedScope) if err != nil { - return "", diffsource.Error(400, "Invalid diff scope") + return "", review.Error(400, "Invalid diff scope") } - snapshot, err := service.snapshot(ctx, mode, false) + snapshot, err := service.Snapshot(ctx, mode) if err != nil { return "", err } @@ -458,28 +398,25 @@ func (service *Service) PutMark(ctx context.Context, mode review.DiffMode, fileI if !service.session.Capabilities.Diff.Scopes.Allows(mode) { return review.ReviewMark{}, session.NotEnabled(session.DiffScopes) } - snapshot, err := service.snapshot(ctx, mode, true) + snapshot, err := service.Snapshot(ctx, mode) if err != nil { return review.ReviewMark{}, err } if snapshot.VersionID != versionID { - return review.ReviewMark{}, diffsource.Error(409, "Diff changed. Refresh to try again.") + return review.ReviewMark{}, review.Error(409, "Diff changed. Refresh to try again.") } for _, file := range snapshot.Files { if file.ID != fileID { continue } if file.Fingerprint != fileVersion { - return review.ReviewMark{}, diffsource.Error(409, "File changed. Refresh to try again.") - } - if err := service.pinSnapshot(ctx, snapshot); err != nil { - return review.ReviewMark{}, err + return review.ReviewMark{}, review.Error(409, "File changed. Refresh to try again.") } mark := review.ReviewMark{DiffID: snapshot.ID, VersionID: snapshot.VersionID, FileID: fileID, FileVersion: fileVersion, Scope: mode} - if err := service.mutations.PutMark(service.session.ContextID, mark); err != nil { + if err := service.store.PutMark(service.session.ContextID, mark); err != nil { return review.ReviewMark{}, err } return mark, nil } - return review.ReviewMark{}, diffsource.Error(404, "File is not in the current diff") + return review.ReviewMark{}, review.Error(404, "File is not in the current diff") } diff --git a/internal/reviewservice/service.go b/internal/reviewservice/service.go index 91f241a..fc72f4d 100644 --- a/internal/reviewservice/service.go +++ b/internal/reviewservice/service.go @@ -40,18 +40,12 @@ type Resolution struct { } type Service struct { - session session.Session - store CommentStore - mutations MutationStore - strictContext bool - snapshotLoader SnapshotLoader + session session.Session + store MutationStore } -func New(active session.Session, store CommentStore) *Service { +func New(active session.Session, store MutationStore) *Service { service := &Service{session: active, store: store} - if mutations, ok := store.(MutationStore); ok { - service.mutations = mutations - } return service } @@ -81,11 +75,10 @@ func (service *Service) ListComments(ctx context.Context, includeResolved bool) if _, exists := repositories[scope]; exists { continue } - repository, err := service.session.Source.Snapshot(ctx, scope) + repository, err := service.Snapshot(ctx, scope) if err != nil { return nil, err } - repository.ID = service.session.DiffIDs[scope] repositories[scope] = repository } diff --git a/internal/reviewservice/service_test.go b/internal/reviewservice/service_test.go index c8d520f..af9ec03 100644 --- a/internal/reviewservice/service_test.go +++ b/internal/reviewservice/service_test.go @@ -41,6 +41,7 @@ func (source *sourceStub) Contents(context.Context, review.DiffMode, review.Chan } type storeStub struct { + MutationStore comments []review.ReviewComment putCalls int putError error @@ -79,7 +80,7 @@ func TestListCommentsFiltersAndEnrichesInStoredOrder(t *testing.T) { comment("resolved", review.DiffStaged, "anchored.go", "same", "resolved"), comment("unknown", review.DiffAll, "unknown.go", "unknown", "open"), }} - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) got, err := service.ListComments(context.Background(), false) if err != nil { @@ -118,7 +119,7 @@ func TestListCommentsReturnsNonNilEmptySliceWithoutSnapshots(t *testing.T) { support: diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}}, snapshots: make(map[review.DiffMode]review.RepositoryDiff), } - service := New(session.Resolve(source, session.Policies{}), &storeStub{}) + service := New(boundSession(source, session.Policies{}), &storeStub{}) got, err := service.ListComments(context.Background(), false) if err != nil { @@ -140,7 +141,7 @@ func TestListCommentsPropagatesSnapshotFailure(t *testing.T) { errors: map[review.DiffMode]error{review.DiffAll: want}, } store := &storeStub{comments: []review.ReviewComment{comment("id", review.DiffAll, "file.go", "old", "open")}} - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) if _, err := service.ListComments(context.Background(), false); !errors.Is(err, want) { t.Fatalf("error = %v", err) @@ -153,7 +154,7 @@ func TestListCommentsPropagatesCancellation(t *testing.T) { snapshots: make(map[review.DiffMode]review.RepositoryDiff), } store := &storeStub{comments: []review.ReviewComment{comment("id", review.DiffAll, "file.go", "old", "open")}} - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) ctx, cancel := context.WithCancel(context.Background()) cancel() @@ -165,7 +166,7 @@ func TestListCommentsPropagatesCancellation(t *testing.T) { func TestResolveCommentIsIdempotentAndAllowsStaleIdentity(t *testing.T) { source := &sourceStub{support: diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}}} store := &storeStub{comments: []review.ReviewComment{comment("stale-id", review.DiffAll, "gone.go", "old", "open")}} - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) got, err := service.ResolveComment("stale-id") if err != nil { @@ -192,7 +193,7 @@ func TestResolveCommentIsIdempotentAndAllowsStaleIdentity(t *testing.T) { func TestResolveCommentReturnsTypedNotFoundError(t *testing.T) { source := &sourceStub{support: diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}}} - service := New(session.Resolve(source, session.Policies{}), &storeStub{}) + service := New(boundSession(source, session.Policies{}), &storeStub{}) _, err := service.ResolveComment("missing") if !errors.Is(err, ErrCommentNotFound) { @@ -211,7 +212,7 @@ func TestResolveCommentPropagatesStoreFailure(t *testing.T) { comments: []review.ReviewComment{comment("id", review.DiffAll, "file.go", "old", "open")}, putError: want, } - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) if _, err := service.ResolveComment("id"); !errors.Is(err, want) { t.Fatalf("error = %v", err) @@ -221,7 +222,7 @@ func TestResolveCommentPropagatesStoreFailure(t *testing.T) { func TestMethodsRejectDisabledCommentCapability(t *testing.T) { source := &sourceStub{support: diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}}} store := &storeStub{comments: []review.ReviewComment{comment("id", review.DiffAll, "file.go", "old", "open")}} - service := New(session.Resolve(source, session.Policies{Comments: session.DisablePolicy}), store) + service := New(boundSession(source, session.Policies{Comments: session.DisablePolicy}), store) if _, err := service.ListComments(context.Background(), false); !capabilityError(err) { t.Fatalf("list error = %v", err) @@ -241,14 +242,14 @@ func capabilityError(err error) bool { func comment(id string, scope review.DiffMode, path, fingerprint, status string) review.ReviewComment { return review.ReviewComment{ - ID: id, Path: path, Scope: scope, Fingerprint: fingerprint, + ID: id, DiffID: "diff-" + string(scope), Path: path, Scope: scope, Fingerprint: fingerprint, Side: "additions", Start: 1, End: 1, Code: "+code", Body: "Fix it", Status: status, CreatedAt: 1, } } func repository(mode review.DiffMode, files ...review.ChangedFile) review.RepositoryDiff { - return review.RepositoryDiff{Mode: mode, Files: files} + return review.RepositoryDiff{ID: "diff-" + string(mode), Mode: mode, Files: files} } func changedFile(path, fingerprint string) review.ChangedFile { @@ -267,7 +268,7 @@ func TestUpdateCommentPreservesAnchorAndValidatesBeforeWriting(t *testing.T) { source := &sourceStub{support: diffsource.Support{Scopes: []review.DiffMode{review.DiffAll}}} original := comment("id", review.DiffAll, "file.go", "fingerprint", "open") store := &storeStub{comments: []review.ReviewComment{original}} - service := New(session.Resolve(source, session.Policies{}), store) + service := New(boundSession(source, session.Policies{}), store) body, status := " revised concern ", "resolved" got, err := service.UpdateComment("id", UpdateCommentInput{Body: &body, Status: &status}) if err != nil { @@ -284,7 +285,7 @@ func TestUpdateCommentPreservesAnchorAndValidatesBeforeWriting(t *testing.T) { t.Fatalf("accepted invalid update: %#v", input) } } - disabled := New(session.Resolve(source, session.Policies{Comments: session.DisablePolicy}), store) + disabled := New(boundSession(source, session.Policies{Comments: session.DisablePolicy}), store) if _, err := disabled.UpdateComment("id", UpdateCommentInput{Body: &body}); !capabilityError(err) { t.Fatalf("disabled update: %v", err) } @@ -292,3 +293,9 @@ func TestUpdateCommentPreservesAnchorAndValidatesBeforeWriting(t *testing.T) { t.Fatalf("invalid/disabled update wrote %d times", store.putCalls) } } + +func boundSession(source review.Source, policies session.Policies) session.Session { + active := session.Resolve(source, policies) + active.DiffIDs = map[review.DiffMode]string{review.DiffAll: "diff-all", review.DiffStaged: "diff-staged", review.DiffUnstaged: "diff-unstaged"} + return active +} diff --git a/internal/reviewstore/boundaries_test.go b/internal/reviewstore/boundaries_test.go index 4b4ef58..34e1032 100644 --- a/internal/reviewstore/boundaries_test.go +++ b/internal/reviewstore/boundaries_test.go @@ -1,7 +1,6 @@ package reviewstore import ( - "errors" "path/filepath" "strings" "testing" @@ -184,7 +183,7 @@ func TestRetentionConfigurationPreservesExistingExpiryAndReplay(t *testing.T) { } user := testUser(t, store, "retention") request := observationRequest("source", "original") - request.ProtocolVersion = 1 + request.ProtocolVersion = ingestion.ProtocolVersion request.ContentHash = strings.Repeat("a", 64) binding, err := store.Ingest(user.ID, request) if err != nil { @@ -222,85 +221,11 @@ func TestRetentionConfigurationPreservesExistingExpiryAndReplay(t *testing.T) { if err := store.db.QueryRow(`SELECT COUNT(*) FROM observation_scopes s JOIN diffs d ON d.id=s.diff_id WHERE s.context_id=? AND d.expires_at=?`, binding.ContextID, *refreshed.ExpiresAt).Scan(&count); err != nil || count != 3 { t.Fatalf("scope expiry: %d %v", count, err) } - capture, err := store.Capture(user.ID, "patch", review.RepositoryDiff{Mode: review.DiffAll, Revision: "capture"}) - if err != nil { - t.Fatal(err) - } - context, err := store.Context(user.ID, capture.ContextID, time.Now()) - if err != nil || *context.ExpiresAt-context.CreatedAt != duration.Milliseconds() { - t.Fatalf("capture expiry: %#v %v", context, err) - } - live, err := store.RegisterGit(user.ID, "/repo", "/repo/.git", "checkout") - if err != nil { - t.Fatal(err) - } - var difference int64 - if err := store.db.QueryRow(`SELECT expires_at-created_at FROM diffs WHERE id=?`, live.DiffIDs[review.DiffAll]).Scan(&difference); err != nil || difference != duration.Milliseconds() { - t.Fatalf("live expiry: %d %v", difference, err) - } if _, err := OpenWithRetention(":memory:", 0); err == nil { t.Fatal("nonpositive retention accepted") } } -func TestSchemaSixMigrationPreservesReplaySessionAndDeletedHead(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "migration") - request := observationRequest("source", "original") - request.ContentHash = strings.Repeat("a", 64) - request.Metadata.Agent, request.Metadata.RunID = "codex", "legacy-session" - binding, err := store.Ingest(user.ID, request) - if err != nil { - t.Fatal(err) - } - newer := request - newer.SubmissionID = "deleted-head" - newer.ContentHash = strings.Repeat("b", 64) - newer.Metadata.CollectedAt++ - latest, err := store.Ingest(user.ID, newer) - if err != nil { - t.Fatal(err) - } - if err := store.DeleteContext(user.ID, latest.ContextID); err != nil { - t.Fatal(err) - } - for _, statement := range []string{ - `DROP TABLE observation_sessions`, `DROP TABLE agent_sessions`, - `ALTER TABLE observation_stream_heads RENAME TO new_heads`, - `CREATE TABLE observation_stream_heads (owner_id TEXT NOT NULL,source_id TEXT NOT NULL,repository_key TEXT NOT NULL,checkout_key TEXT NOT NULL,branch TEXT NOT NULL,context_id TEXT NOT NULL,collected_at INTEGER NOT NULL,PRIMARY KEY(owner_id,source_id,repository_key,checkout_key,branch))`, - `INSERT INTO observation_stream_heads SELECT owner_id,source_id,repository_key,checkout_key,branch,context_id,collected_at FROM new_heads`, - `DROP TABLE new_heads`, `PRAGMA user_version=6`, - } { - if _, err := store.db.Exec(statement); err != nil { - t.Fatal(err) - } - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - defer store.Close() - replay, err := store.Ingest(user.ID, request) - if err != nil || replay.ContextID != binding.ContextID { - t.Fatalf("migration replay: %#v %v", replay, err) - } - context, err := store.Context(user.ID, binding.ContextID, time.Now()) - if err != nil || !context.Stale || len(context.Sessions) != 1 || context.Sessions[0].ID != "legacy-session" { - t.Fatalf("migration provenance/head: %#v %v", context, err) - } - request.Metadata.Agent = "changed" - if _, err := store.Ingest(user.ID, request); !errors.Is(err, ErrSubmissionConflict) { - t.Fatalf("migration lost payload hash: %v", err) - } -} - // A container execution ID is provenance, not an agent session without a harness. func TestContainerRunWithoutHarnessRemainsSearchableWithoutSession(t *testing.T) { store := openTestStore(t) diff --git a/internal/reviewstore/branch_identity_test.go b/internal/reviewstore/branch_identity_test.go index 42828a3..02a429e 100644 --- a/internal/reviewstore/branch_identity_test.go +++ b/internal/reviewstore/branch_identity_test.go @@ -16,52 +16,6 @@ func branchIdentityRequest(submission, label, id, content string, collected int6 return request } -func TestBranchIdentityAdoptsLegacyReviewWithoutChangingReplay(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "branch-adoption") - legacy := branchIdentityRequest("legacy", "feature", "", "a", 100) - first, err := store.Ingest(user.ID, legacy) - if err != nil { - t.Fatal(err) - } - adopted := branchIdentityRequest("stable", "feature", "branch-id", "a", 200) - second, err := store.Ingest(user.ID, adopted) - if err != nil || second.ContextID != first.ContextID { - t.Fatalf("adoption lost review history: %#v, %v", second, err) - } - renamed := branchIdentityRequest("renamed", "new-name", "branch-id", "a", 300) - third, err := store.Ingest(user.ID, renamed) - if err != nil || third.ContextID != first.ContextID { - t.Fatalf("rename lost review history: %#v, %v", third, err) - } - metadata, err := store.Observation(user.ID, first.ContextID) - if err != nil || metadata.Branch != "feature" || metadata.BranchID != "" { - t.Fatalf("immutable observation changed: %#v, %v", metadata, err) - } - replayed, err := store.Ingest(user.ID, legacy) - if err != nil || replayed.ContextID != first.ContextID { - t.Fatalf("adoption broke immutable replay: %#v, %v", replayed, err) - } - newContent := branchIdentityRequest("new-content", "new-name", "branch-id", "b", 400) - latest, err := store.Ingest(user.ID, newContent) - if err != nil || latest.ContextID == first.ContextID { - t.Fatalf("new content did not advance stream: %#v, %v", latest, err) - } - oldContext, err := store.Context(user.ID, first.ContextID, time.Now()) - if err != nil || !oldContext.Stale { - t.Fatalf("legacy alias failed freshness: %#v, %v", oldContext, err) - } - current, err := store.Context(user.ID, latest.ContextID, time.Now()) - if err != nil || current.Stale { - t.Fatalf("renamed current context stale: %#v, %v", current, err) - } - // Restoring pre-adoption content after a rename must recover its review too. - restored, err := store.Ingest(user.ID, branchIdentityRequest("restored", "new-name", "branch-id", "a", 500)) - if err != nil || restored.ContextID != first.ContextID { - t.Fatalf("restored legacy content lost review: %#v, %v", restored, err) - } -} - func TestReusedBranchNameKeepsIndependentReviewAndFreshness(t *testing.T) { store := openTestStore(t) user := testUser(t, store, "branch-reuse") @@ -87,25 +41,3 @@ func TestReusedBranchNameKeepsIndependentReviewAndFreshness(t *testing.T) { } } } - -func TestLateBranchAdoptionPreservesNewerLegacyHead(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "late-branch-adoption") - newer, err := store.Ingest(user.ID, branchIdentityRequest("newer-legacy", "feature", "", "a", 300)) - if err != nil { - t.Fatal(err) - } - older, err := store.Ingest(user.ID, branchIdentityRequest("older-adoption", "feature", "branch-id", "b", 200)) - if err != nil { - t.Fatal(err) - } - for _, check := range []struct { - id string - stale bool - }{{newer.ContextID, false}, {older.ContextID, true}} { - context, err := store.Context(user.ID, check.id, time.Now()) - if err != nil || context.Stale != check.stale { - t.Fatalf("late adoption regressed stream: %#v, %v", context, err) - } - } -} diff --git a/internal/reviewstore/catalog.go b/internal/reviewstore/catalog.go index 01a5d9f..87d0119 100644 --- a/internal/reviewstore/catalog.go +++ b/internal/reviewstore/catalog.go @@ -7,12 +7,9 @@ import ( "time" "github.com/flexdinesh/servediff/internal/ingestion" - "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" ) -const SubmissionLifetime = 24 * time.Hour - var ( ErrExpired = reviewdata.ErrExpired ErrSubmissionConflict = reviewdata.ErrSubmissionConflict @@ -22,36 +19,8 @@ type ContextInfo = reviewdata.ContextInfo func initializeCatalog(transaction *sql.Tx) error { statements := []string{ - `CREATE TABLE IF NOT EXISTS contexts ( - id TEXT PRIMARY KEY, - owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, - kind TEXT NOT NULL CHECK(kind IN ('worktree','capture')), - location_id TEXT UNIQUE REFERENCES locations(id) ON DELETE CASCADE, - capture_id TEXT UNIQUE REFERENCES diffs(id) ON DELETE CASCADE, - created_at INTEGER NOT NULL, - last_submitted_at INTEGER NOT NULL, - submitted_from TEXT, - CHECK((kind='worktree' AND location_id IS NOT NULL AND location_id=id AND capture_id IS NULL) OR (kind='capture' AND capture_id IS NOT NULL AND capture_id=id AND location_id IS NULL)) - )`, + `CREATE TABLE IF NOT EXISTS contexts(id TEXT PRIMARY KEY,owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,kind TEXT NOT NULL CHECK(kind='observation'),anchor_diff_id TEXT NOT NULL UNIQUE REFERENCES diffs(id) ON DELETE CASCADE,created_at INTEGER NOT NULL,last_submitted_at INTEGER NOT NULL,submitted_from TEXT)`, `CREATE INDEX IF NOT EXISTS contexts_owner_order ON contexts(owner_id,last_submitted_at DESC,id DESC)`, - `CREATE TABLE IF NOT EXISTS submissions ( - owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, - id TEXT NOT NULL, - kind TEXT NOT NULL CHECK(kind IN ('worktree','capture')), - payload_hash TEXT NOT NULL, - context_id TEXT NOT NULL REFERENCES contexts(id) ON DELETE CASCADE, - created_at INTEGER NOT NULL, - PRIMARY KEY(owner_id,id) - )`, - `CREATE INDEX IF NOT EXISTS submissions_created ON submissions(created_at)`, - `INSERT INTO contexts(id,owner_id,kind,location_id,created_at,last_submitted_at) - SELECT l.id,l.owner_id,'worktree',l.id,MIN(d.created_at),MAX(d.created_at) - FROM locations l JOIN diffs d ON d.location_id=l.id - WHERE l.kind='git_worktree' GROUP BY l.id - ON CONFLICT(id) DO NOTHING`, - `INSERT INTO contexts(id,owner_id,kind,capture_id,created_at,last_submitted_at) - SELECT id,owner_id,'capture',id,created_at,created_at FROM diffs WHERE kind='capture' - ON CONFLICT(id) DO NOTHING`, } for _, statement := range statements { if _, err := transaction.Exec(statement); err != nil { @@ -61,106 +30,28 @@ func initializeCatalog(transaction *sql.Tx) error { return nil } -func putWorktreeContext(transaction *sql.Tx, ownerID, id string, now int64) error { - _, err := transaction.Exec(`INSERT INTO contexts(id,owner_id,kind,location_id,created_at,last_submitted_at) - VALUES(?,?,'worktree',?,?,?) ON CONFLICT(id) DO UPDATE SET last_submitted_at=excluded.last_submitted_at`, id, ownerID, id, now, now) - return err -} - -func putCaptureContext(transaction *sql.Tx, ownerID, id, submittedFrom string, now int64) error { +func putObservationContext(transaction *sql.Tx, ownerID, id, submittedFrom string, now int64) error { var provenance *string if submittedFrom != "" { provenance = &submittedFrom } - _, err := transaction.Exec(`INSERT INTO contexts(id,owner_id,kind,capture_id,created_at,last_submitted_at,submitted_from) - VALUES(?,?,'capture',?,?,?,?)`, id, ownerID, id, now, now, provenance) - return err -} - -// RegisterGitSubmission commits registration and retry identity atomically. -func (store *Store) RegisterGitSubmission(ownerID, requestID, payloadHash, root, commonDir, worktreeKey string) (Binding, error) { - transaction, err := store.db.Begin() - if err != nil { - return Binding{}, err - } - defer transaction.Rollback() - if id, err := findSubmission(transaction, ownerID, requestID, "worktree", payloadHash); err != nil { - return Binding{}, err - } else if id != "" { - return bindingFor(transaction, ownerID, id, time.Now()) - } - binding, err := registerGit(transaction, ownerID, root, commonDir, worktreeKey, store.retention) - if err != nil { - return Binding{}, err - } - if err := putSubmission(transaction, ownerID, requestID, "worktree", payloadHash, binding.ContextID); err != nil { - return Binding{}, err - } - return binding, transaction.Commit() -} - -func (store *Store) CaptureSubmission(ownerID, requestID, payloadHash, raw, submittedFrom string, snapshot review.RepositoryDiff) (Binding, error) { - transaction, err := store.db.Begin() - if err != nil { - return Binding{}, err - } - defer transaction.Rollback() - if id, err := findSubmission(transaction, ownerID, requestID, "capture", payloadHash); err != nil { - return Binding{}, err - } else if id != "" { - return bindingFor(transaction, ownerID, id, time.Now()) - } - binding, err := capture(transaction, ownerID, raw, snapshot, submittedFrom, store.retention) - if err != nil { - return Binding{}, err - } - if err := putSubmission(transaction, ownerID, requestID, "capture", payloadHash, binding.ContextID); err != nil { - return Binding{}, err - } - return binding, transaction.Commit() -} - -func findSubmission(transaction *sql.Tx, ownerID, id, kind, hash string) (string, error) { - if id == "" { - return "", errors.New("submission ID required") - } - var existingKind, existingHash, contextID string - err := transaction.QueryRow(`SELECT kind,payload_hash,context_id FROM submissions WHERE owner_id=? AND id=? AND created_at>?`, - ownerID, id, time.Now().Add(-SubmissionLifetime).UnixMilli()).Scan(&existingKind, &existingHash, &contextID) - if errors.Is(err, sql.ErrNoRows) { - _, err = transaction.Exec(`DELETE FROM submissions WHERE owner_id=? AND id=?`, ownerID, id) - return "", err - } - if err != nil { - return "", err - } - if existingKind != kind || existingHash != hash { - return "", ErrSubmissionConflict - } - return contextID, nil -} - -func putSubmission(transaction *sql.Tx, ownerID, id, kind, hash, contextID string) error { - _, err := transaction.Exec(`INSERT INTO submissions(owner_id,id,kind,payload_hash,context_id,created_at) VALUES(?,?,?,?,?,?)`, - ownerID, id, kind, hash, contextID, time.Now().UnixMilli()) + _, err := transaction.Exec(`INSERT INTO contexts(id,owner_id,kind,anchor_diff_id,created_at,last_submitted_at,submitted_from) + VALUES(?,?,'observation',?,?,?,?)`, id, ownerID, id, now, now, provenance) return err } -var contextSelect = `SELECT c.id,c.kind,COALESCE(l.root,json_extract(o.metadata,'$.root')),c.location_id,COALESCE(l.repository_id,o.repository_id),r.common_dir,COALESCE(l.worktree_key,json_extract(o.metadata,'$.checkoutKey')),c.submitted_from, +var contextSelect = `SELECT c.id,c.kind,json_extract(o.metadata,'$.root'),NULL,o.repository_id,NULL,json_extract(o.metadata,'$.checkoutKey'),c.submitted_from, c.created_at,c.last_submitted_at,d.expires_at, - (SELECT json_array_length(v.manifest, '$.files') FROM diff_versions v WHERE v.diff_id=c.capture_id LIMIT 1),o.metadata, + (SELECT json_array_length(v.manifest, '$.files') FROM diff_versions v WHERE v.diff_id=c.anchor_diff_id LIMIT 1),o.metadata, COALESCE(head.context_id<>c.id,0), (SELECT json_group_array(json_object('sourceId',s.source_id,'harness',s.harness,'id',s.session_id,'name',s.name,'firstObservedAt',a.first_observed_at,'lastObservedAt',a.last_observed_at)) FROM observation_sessions a JOIN agent_sessions s ON s.owner_id=a.owner_id AND s.source_id=a.source_id AND s.harness=a.harness AND s.session_id=a.session_id WHERE a.context_id=c.id) - FROM contexts c LEFT JOIN locations l ON l.id=c.location_id LEFT JOIN repositories r ON r.id=l.repository_id - LEFT JOIN diffs d ON d.id=c.capture_id LEFT JOIN observations o ON o.context_id=c.id - LEFT JOIN observation_branch_aliases branch_alias ON branch_alias.owner_id=o.owner_id AND branch_alias.source_id=o.source_id - AND branch_alias.repository_key=json_extract(o.metadata,'$.repositoryKey') AND branch_alias.checkout_key=json_extract(o.metadata,'$.checkoutKey') - AND branch_alias.branch=json_extract(o.metadata,'$.branch') + FROM contexts c + LEFT JOIN diffs d ON d.id=c.anchor_diff_id LEFT JOIN observations o ON o.context_id=c.id LEFT JOIN observation_stream_heads head ON head.owner_id=o.owner_id AND head.source_id=o.source_id AND head.repository_key=json_extract(o.metadata,'$.repositoryKey') AND head.checkout_key=json_extract(o.metadata,'$.checkoutKey') AND head.comparison_policy=` + comparisonPolicySQL("o.metadata") + ` - AND head.branch=COALESCE(NULLIF(json_extract(o.metadata,'$.branchId'),''),branch_alias.branch_id,json_extract(o.metadata,'$.branch'))` + AND head.branch=COALESCE(NULLIF(json_extract(o.metadata,'$.branchId'),''),json_extract(o.metadata,'$.branch'))` type scanner interface{ Scan(...any) error } @@ -208,27 +99,18 @@ func (store *Store) DeleteContext(ownerID, id string) error { return err } defer transaction.Rollback() - var locationID, captureID *string - err = transaction.QueryRow(`SELECT location_id,capture_id FROM contexts WHERE owner_id=? AND id=?`, ownerID, id).Scan(&locationID, &captureID) + var anchor string + err = transaction.QueryRow("SELECT anchor_diff_id FROM contexts WHERE owner_id=? AND id=?", ownerID, id).Scan(&anchor) if errors.Is(err, sql.ErrNoRows) { return ErrNotFound } if err != nil { return err } - if locationID != nil { - _, err = transaction.Exec(`DELETE FROM locations WHERE owner_id=? AND id=?`, ownerID, *locationID) - } else if captureID != nil { - // Delete extra scopes before the anchor cascades away their associations. - if _, err = transaction.Exec(`DELETE FROM diffs WHERE owner_id=? AND id<>? AND id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)`, ownerID, *captureID, id); err != nil { - return err - } - _, err = transaction.Exec(`DELETE FROM diffs WHERE owner_id=? AND id=?`, ownerID, *captureID) - } - if err != nil { + if _, err = transaction.Exec("DELETE FROM diffs WHERE owner_id=? AND id<>? AND id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)", ownerID, anchor, id); err != nil { return err } - if _, err := transaction.Exec("DELETE FROM ingestion_records WHERE owner_id=? AND context_id=? AND sequence NOT IN (SELECT sequence FROM ingestion_jobs)", ownerID, id); err != nil { + if _, err = transaction.Exec("DELETE FROM diffs WHERE owner_id=? AND id=?", ownerID, anchor); err != nil { return err } return transaction.Commit() @@ -260,56 +142,12 @@ func (store *Store) Contexts(ownerID string, limit int, beforeTime int64, before return items, rows.Err() } -func (store *Store) ContextCounts(ownerID string, now time.Time) (int, int, error) { - var worktrees, captures int - err := store.db.QueryRow(`SELECT COALESCE(SUM(c.kind='worktree'),0),COALESCE(SUM(c.kind='capture'),0) - FROM contexts c LEFT JOIN diffs d ON d.id=c.capture_id WHERE c.owner_id=? AND (d.expires_at IS NULL OR d.expires_at>?)`, - ownerID, now.UnixMilli()).Scan(&worktrees, &captures) - return worktrees, captures, err -} - -func (store *Store) WorktreeContexts(ownerID string) ([]ContextInfo, error) { - rows, err := store.db.Query(contextSelect+` WHERE c.owner_id=? AND c.kind='worktree' ORDER BY c.created_at,c.id`, ownerID) - if err != nil { - return nil, err - } - defer rows.Close() - items := make([]ContextInfo, 0) - for rows.Next() { - item, err := scanContext(rows) - if err != nil { - return nil, err - } - items = append(items, item) - } - return items, rows.Err() -} - -// DiscoverGit preserves submission order and review identity on rediscovery. -func (store *Store) DiscoverGit(ownerID, root, commonDir, worktreeKey string) (string, error) { - transaction, err := store.db.Begin() - if err != nil { - return "", err - } - defer transaction.Rollback() - var id string - err = transaction.QueryRow(`SELECT id FROM locations WHERE owner_id=? AND worktree_key=?`, ownerID, worktreeKey).Scan(&id) - if errors.Is(err, sql.ErrNoRows) { - binding, registerErr := registerGit(transaction, ownerID, root, commonDir, worktreeKey, store.retention) - if registerErr != nil { - return "", registerErr - } - id = binding.ContextID - // Discovery is not a submission; do not replace the CLI's selected context. - if _, err := transaction.Exec(`UPDATE contexts SET last_submitted_at=0 WHERE id=?`, id); err != nil { - return "", err - } - } else if err != nil { - return "", err - } else if _, err := transaction.Exec(`UPDATE locations SET root=? WHERE id=? AND owner_id=?`, root, id, ownerID); err != nil { - return "", err - } - return id, transaction.Commit() +func (store *Store) ContextCount(ownerID string, now time.Time) (int, error) { + var count int + err := store.db.QueryRow(`SELECT COUNT(*) + FROM contexts c LEFT JOIN diffs d ON d.id=c.anchor_diff_id WHERE c.owner_id=? AND (d.expires_at IS NULL OR d.expires_at>?)`, + ownerID, now.UnixMilli()).Scan(&count) + return count, err } type queryer interface { @@ -325,31 +163,7 @@ func bindingFor(db queryer, ownerID, id string, now time.Time) (Binding, error) if item.ExpiresAt != nil && *item.ExpiresAt <= now.UnixMilli() { return Binding{}, ErrExpired } - binding := Binding{ContextID: item.ID, LocationID: item.LocationID, RepositoryID: item.RepositoryID, DiffIDs: make(map[review.DiffMode]string)} - if item.Kind == "observation" { - return observationBinding(db, ownerID, id) - } - if item.Kind == "capture" { - if err := db.QueryRow(`SELECT id FROM diff_versions WHERE diff_id=?`, id).Scan(&binding.VersionID); err != nil { - return Binding{}, err - } - binding.DiffIDs[review.DiffAll] = id - return binding, nil - } - rows, err := db.Query(`SELECT mode,id FROM diffs WHERE location_id=? AND owner_id=?`, id, ownerID) - if err != nil { - return Binding{}, err - } - defer rows.Close() - for rows.Next() { - var mode review.DiffMode - var diffID string - if err := rows.Scan(&mode, &diffID); err != nil { - return Binding{}, err - } - binding.DiffIDs[mode] = diffID - } - return binding, rows.Err() + return observationBinding(db, ownerID, id) } func (store *Store) ContextBinding(ownerID, id string, now time.Time) (Binding, error) { diff --git a/internal/reviewstore/catalog_test.go b/internal/reviewstore/catalog_test.go index 7d666e7..64d9e75 100644 --- a/internal/reviewstore/catalog_test.go +++ b/internal/reviewstore/catalog_test.go @@ -5,133 +5,10 @@ import ( "os" "path/filepath" "testing" - "time" "github.com/flexdinesh/servediff/internal/processlock" - "github.com/flexdinesh/servediff/internal/review" ) -func TestSchemaTwoMigrationPreservesReviewIdentity(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "migration") - worktree, err := store.RegisterGit(user.ID, "/repo", "/repo/.git", "/repo/.git") - if err != nil { - t.Fatal(err) - } - capture, err := store.Capture(user.ID, "patch", review.RepositoryDiff{Source: "stdin", Mode: review.DiffAll, Revision: "revision", Files: []review.ChangedFile{}}) - if err != nil { - t.Fatal(err) - } - comment := review.ReviewComment{ID: "comment", DiffID: capture.ContextID, VersionID: capture.VersionID, Path: "file", Scope: review.DiffAll, Body: "keep me"} - if err := store.PutComment(capture.ContextID, comment); err != nil { - t.Fatal(err) - } - mark := review.ReviewMark{DiffID: worktree.DiffIDs[review.DiffStaged], FileID: "file", FileVersion: "fingerprint", Scope: review.DiffStaged} - if err := store.PutMark(worktree.ContextID, mark); err != nil { - t.Fatal(err) - } - for _, statement := range []string{"DROP TABLE submissions", "DROP TABLE contexts", "PRAGMA user_version = 2"} { - if _, err := store.db.Exec(statement); err != nil { - t.Fatal(err) - } - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - defer store.Close() - again := testUser(t, store, "migration") - if again.ID != user.ID { - t.Fatal("migration replaced user identity") - } - binding, err := store.ContextBinding(user.ID, worktree.ContextID, time.Now()) - if err != nil || binding.DiffIDs[review.DiffStaged] != worktree.DiffIDs[review.DiffStaged] { - t.Fatalf("worktree changed: %#v, %v", binding, err) - } - _, reopened, err := store.ReopenCapture(user.ID, capture.ContextID, time.Now()) - if err != nil || reopened.VersionID != capture.VersionID { - t.Fatalf("capture changed: %#v, %v", reopened, err) - } - comments, err := store.Comments(capture.ContextID) - if err != nil || len(comments) != 1 || comments[0].ID != comment.ID || comments[0].Body != comment.Body { - t.Fatalf("comments changed: %#v, %v", comments, err) - } - marks, err := store.Marks(worktree.ContextID, review.DiffStaged) - if err != nil || len(marks) != 1 || marks[0].FileVersion != mark.FileVersion { - t.Fatalf("marks changed: %#v, %v", marks, err) - } - contexts, err := store.Contexts(user.ID, 100, 0, "", time.Now()) - if err != nil || len(contexts) != 2 { - t.Fatalf("backfill: %#v, %v", contexts, err) - } - snapshot, err := store.StoredVersion(user.ID, capture.ContextID, capture.VersionID, time.Now()) - if err != nil || snapshot.Revision != "revision" { - t.Fatalf("version changed: %#v, %v", snapshot, err) - } -} - -func TestSubmissionRetrySurvivesReopen(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "dedup") - snapshot := review.RepositoryDiff{Mode: review.DiffAll, Revision: "r", Files: []review.ChangedFile{}} - first, err := store.CaptureSubmission(user.ID, "request", "hash", "raw", "/repo", snapshot) - if err != nil { - t.Fatal(err) - } - _ = store.Close() - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - defer store.Close() - retry, err := store.CaptureSubmission(user.ID, "request", "hash", "raw", "/repo", snapshot) - if err != nil || retry.ContextID != first.ContextID || retry.VersionID != first.VersionID { - t.Fatalf("retry: %#v, %v", retry, err) - } - if _, err := store.CaptureSubmission(user.ID, "request", "different", "other", "/repo", snapshot); !errors.Is(err, ErrSubmissionConflict) { - t.Fatalf("different payload accepted: %v", err) - } - if _, err := store.RegisterGitSubmission(user.ID, "request", "hash", "/repo", "/repo/.git", "/repo/.git"); !errors.Is(err, ErrSubmissionConflict) { - t.Fatalf("different kind accepted: %v", err) - } - second, err := store.CaptureSubmission(user.ID, "independent", "hash", "raw", "/repo", snapshot) - if err != nil || second.ContextID == first.ContextID { - t.Fatalf("independent capture deduplicated: %#v, %v", second, err) - } - item, err := store.Context(user.ID, first.ContextID, time.Now()) - if err != nil || item.SubmittedFrom == nil || *item.SubmittedFrom != "/repo" { - t.Fatalf("provenance: %#v, %v", item, err) - } -} - -func TestExpiredSubmissionCanBeReused(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "reuse") - snapshot := review.RepositoryDiff{Mode: review.DiffAll, Revision: "r", Files: []review.ChangedFile{}} - first, err := store.CaptureSubmission(user.ID, "request", "hash", "raw", "", snapshot) - if err != nil { - t.Fatal(err) - } - if _, err := store.db.Exec("UPDATE submissions SET created_at=?", time.Now().Add(-SubmissionLifetime-time.Minute).UnixMilli()); err != nil { - t.Fatal(err) - } - second, err := store.CaptureSubmission(user.ID, "request", "new", "other", "", snapshot) - if err != nil || second.ContextID == first.ContextID { - t.Fatalf("expired request not replaced: %#v, %v", second, err) - } -} - func TestDatabaseOwnershipLock(t *testing.T) { path := filepath.Join(t.TempDir(), "state.db") first, err := Open(path) @@ -151,74 +28,6 @@ func TestDatabaseOwnershipLock(t *testing.T) { _ = second.Close() } -func TestConcurrentCaptureRetriesCommitOneTarget(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "concurrent") - snapshot := review.RepositoryDiff{Mode: review.DiffAll, Revision: "r", Files: []review.ChangedFile{}} - const clients = 8 - results := make(chan Binding, clients) - failures := make(chan error, clients) - for range clients { - go func() { - binding, err := store.CaptureSubmission(user.ID, "request", "hash", "raw", "", snapshot) - if err != nil { - failures <- err - return - } - results <- binding - }() - } - var id string - for range clients { - select { - case err := <-failures: - t.Fatal(err) - case binding := <-results: - if id == "" { - id = binding.ContextID - } - if binding.ContextID != id { - t.Fatal("concurrent retries created different targets") - } - } - } - _, captures, err := store.ContextCounts(user.ID, time.Now()) - if err != nil || captures != 1 { - t.Fatalf("retry count %d, %v", captures, err) - } -} - -func TestExpiryRemovesCatalogAndRetryRecords(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "expiry") - snapshot := review.RepositoryDiff{Mode: review.DiffAll, Revision: "r", Files: []review.ChangedFile{}} - captured, err := store.CaptureSubmission(user.ID, "request", "hash", "raw", "", snapshot) - if err != nil { - t.Fatal(err) - } - now := time.Now() - if _, err := store.db.Exec("UPDATE diffs SET expires_at=? WHERE id=?", now.UnixMilli(), captured.ContextID); err != nil { - t.Fatal(err) - } - if _, err := store.Context(user.ID, captured.ContextID, now); !errors.Is(err, ErrExpired) { - t.Fatalf("expired context accessible: %v", err) - } - items, err := store.Contexts(user.ID, 100, 0, "", now) - if err != nil || len(items) != 0 { - t.Fatalf("expired capture listed: %#v, %v", items, err) - } - if err := store.PruneExpired(now); err != nil { - t.Fatal(err) - } - if _, err := store.Context(user.ID, captured.ContextID, now); !errors.Is(err, ErrNotFound) { - t.Fatalf("pruned context retained: %v", err) - } - var retries int - if err := store.db.QueryRow("SELECT COUNT(*) FROM submissions").Scan(&retries); err != nil || retries != 0 { - t.Fatalf("expired retry identity retained: %d, %v", retries, err) - } -} - func TestUnsupportedLegacyFilePreserved(t *testing.T) { path := filepath.Join(t.TempDir(), "state.db") raw := []byte(`{"version":1,"sessions":{"old":{}}}`) diff --git a/internal/reviewstore/comparison.go b/internal/reviewstore/comparison.go index 4d29e86..51fb0ce 100644 --- a/internal/reviewstore/comparison.go +++ b/internal/reviewstore/comparison.go @@ -1,8 +1,6 @@ package reviewstore import ( - "database/sql" - "github.com/flexdinesh/servediff/internal/ingestion" ) @@ -15,43 +13,3 @@ func comparisonPolicy(metadata ingestion.Metadata) string { func comparisonPolicySQL(metadata string) string { return `CASE WHEN COALESCE(json_extract(` + metadata + `,'$.comparison.kind'),'working-tree')='working-tree' THEN '' ELSE json_extract(` + metadata + `,'$.comparison.kind')||':'||json_extract(` + metadata + `,'$.comparison.baseRef') END` } - -func migrateObservationHeads(tx *sql.Tx) error { - rows, err := tx.Query(`PRAGMA table_info(observation_stream_heads)`) - if err != nil { - return err - } - existing, migrated := false, false - for rows.Next() { - var index, required, primary int - var name, kind string - var defaultValue *string - if err := rows.Scan(&index, &name, &kind, &required, &defaultValue, &primary); err != nil { - rows.Close() - return err - } - existing = true - migrated = migrated || name == "comparison_policy" - } - if err := rows.Err(); err != nil { - rows.Close() - return err - } - if err := rows.Close(); err != nil { - return err - } - if !existing || migrated { - return nil - } - for _, statement := range []string{ - `ALTER TABLE observation_stream_heads RENAME TO legacy_observation_stream_heads`, - `CREATE TABLE observation_stream_heads (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, repository_key TEXT NOT NULL, checkout_key TEXT NOT NULL, branch TEXT NOT NULL, comparison_policy TEXT NOT NULL DEFAULT '', context_id TEXT NOT NULL, collected_at INTEGER NOT NULL, PRIMARY KEY(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy))`, - `INSERT INTO observation_stream_heads SELECT owner_id,source_id,repository_key,checkout_key,branch,'',context_id,collected_at FROM legacy_observation_stream_heads`, - `DROP TABLE legacy_observation_stream_heads`, - } { - if _, err := tx.Exec(statement); err != nil { - return err - } - } - return nil -} diff --git a/internal/reviewstore/delete_test.go b/internal/reviewstore/delete_test.go index 7fcc653..fa77825 100644 --- a/internal/reviewstore/delete_test.go +++ b/internal/reviewstore/delete_test.go @@ -1,104 +1,10 @@ package reviewstore import ( - "errors" - "fmt" "testing" "time" - - "github.com/flexdinesh/servediff/internal/review" ) -func TestDeleteContextCascadesEveryScopeAndAllowsResubmission(t *testing.T) { - for _, kind := range []string{"observation", "capture", "worktree"} { - t.Run(kind, func(t *testing.T) { - store := openTestStore(t) - owner := testUser(t, store, "owner") - other := testUser(t, store, "other") - request := observationRequest("source", "request") - request.ContentHash = "content" - manifest := request.Scopes[0].Snapshot - submit := func(ownerID, requestID string) (Binding, error) { - switch kind { - case "observation": - input := request - input.SubmissionID = requestID - return store.Ingest(ownerID, input) - case "capture": - return store.CaptureSubmission(ownerID, requestID, "hash", "patch", "", manifest) - default: - return store.RegisterGitSubmission(ownerID, requestID, "hash", "/repo/"+requestID, "/repo/.git", "/repo/.git/worktrees/"+requestID) - } - } - otherBinding, err := submit(other.ID, "request") - if err != nil { - t.Fatal(err) - } - baseline := make(map[string]int) - for _, table := range []string{"contexts", "diffs", "diff_versions", "diff_files", "reviews", "comments", "marks", "locations", "submissions", "observations", "observation_scopes", "observation_submissions", "observation_identities"} { - var count int - if err := store.db.QueryRow(fmt.Sprintf(`SELECT COUNT(*) FROM %s`, table)).Scan(&count); err != nil { - t.Fatal(err) - } - baseline[table] = count - } - binding, err := submit(owner.ID, "request") - if err != nil { - t.Fatal(err) - } - for mode, diffID := range binding.DiffIDs { - snapshot := manifest - snapshot.ID, snapshot.Mode = diffID, mode - snapshot.VersionID = VersionID(diffID, snapshot.Revision) - if kind == "observation" { - snapshot, err = store.ObservationSnapshot(owner.ID, binding.ContextID, mode) - if err != nil { - t.Fatal(err) - } - } else if kind == "capture" { - snapshot.VersionID = binding.VersionID - } - if err := store.PinVersion(snapshot, map[string]review.FilePatch{"file": {Patch: "patch"}}); err != nil { - t.Fatal(err) - } - comment := review.ReviewComment{ID: "comment-" + string(mode), DiffID: diffID, VersionID: snapshot.VersionID, Scope: mode, Path: "file.txt", Body: "review"} - if err := store.PutComment(binding.ContextID, comment); err != nil { - t.Fatal(err) - } - mark := review.ReviewMark{DiffID: diffID, VersionID: snapshot.VersionID, Scope: mode, FileID: "file"} - if err := store.PutMark(binding.ContextID, mark); err != nil { - t.Fatal(err) - } - } - if err := store.DeleteContext(other.ID, binding.ContextID); !errors.Is(err, ErrNotFound) { - t.Fatalf("foreign delete: %v", err) - } - if _, err := store.Context(owner.ID, binding.ContextID, time.Now()); err != nil { - t.Fatalf("foreign delete changed context: %v", err) - } - if err := store.DeleteContext(owner.ID, binding.ContextID); err != nil { - t.Fatal(err) - } - if err := store.DeleteContext(owner.ID, binding.ContextID); !errors.Is(err, ErrNotFound) { - t.Fatalf("repeated delete: %v", err) - } - for table, expected := range baseline { - var count int - if err := store.db.QueryRow(fmt.Sprintf(`SELECT COUNT(*) FROM %s`, table)).Scan(&count); err != nil || count != expected { - t.Fatalf("%s retained %d rows; want %d: %v", table, count, expected, err) - } - } - if _, err := store.Context(other.ID, otherBinding.ContextID, time.Now()); err != nil { - t.Fatalf("other context deleted: %v", err) - } - resubmitted, err := submit(owner.ID, "request") - if err != nil || resubmitted.ContextID == binding.ContextID { - t.Fatalf("resubmit after deletion: %#v, %v", resubmitted, err) - } - }) - } -} - func TestDeleteLatestObservationKeepsOlderSnapshotsStale(t *testing.T) { store := openTestStore(t) owner := testUser(t, store, "owner") @@ -153,22 +59,23 @@ func TestDeleteContextRollsBackWhenAnchorDeletionFails(t *testing.T) { } } -func TestDeleteWorktreePreservesSiblingAndRepository(t *testing.T) { +func TestDirectReplayCannotResurrectDeletedObservation(t *testing.T) { store := openTestStore(t) owner := testUser(t, store, "owner") - first, err := store.RegisterGit(owner.ID, "/repo/one", "/repo/.git", "/repo/.git/worktrees/one") + input := observationRequest("source", "request") + binding, err := store.Ingest(owner.ID, input) if err != nil { t.Fatal(err) } - sibling, err := store.RegisterGit(owner.ID, "/repo/two", "/repo/.git", "/repo/.git/worktrees/two") - if err != nil { + if err := store.DeleteContext(owner.ID, binding.ContextID); err != nil { t.Fatal(err) } - if err := store.DeleteContext(owner.ID, first.ContextID); err != nil { - t.Fatal(err) + if _, err := store.Ingest(owner.ID, input); err == nil { + t.Fatal("exact replay resurrected deleted observation") } - remaining, err := store.ContextBinding(owner.ID, sibling.ContextID, time.Now()) - if err != nil || len(remaining.DiffIDs) != 3 || remaining.RepositoryID == nil || sibling.RepositoryID == nil || *remaining.RepositoryID != *sibling.RepositoryID { - t.Fatalf("sibling repository changed: %#v, %v", remaining, err) + input.SubmissionID = "fresh" + fresh, err := store.Ingest(owner.ID, input) + if err != nil || fresh.ContextID == binding.ContextID { + t.Fatalf("fresh submission: %+v %v", fresh, err) } } diff --git a/internal/reviewstore/ingestion.go b/internal/reviewstore/ingestion.go index 4a0b759..af2928e 100644 --- a/internal/reviewstore/ingestion.go +++ b/internal/reviewstore/ingestion.go @@ -13,25 +13,14 @@ import ( ) func initializeIngestion(tx *sql.Tx) error { - if err := migrateObservationHeads(tx); err != nil { - return err - } statements := []string{ `CREATE TABLE IF NOT EXISTS observation_repositories (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, repository_key TEXT NOT NULL, UNIQUE(owner_id,repository_key))`, `CREATE TABLE IF NOT EXISTS observations (context_id TEXT PRIMARY KEY REFERENCES contexts(id) ON DELETE CASCADE, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, submission_id TEXT NOT NULL, payload_hash TEXT NOT NULL, repository_id TEXT REFERENCES observation_repositories(id), metadata TEXT NOT NULL, UNIQUE(owner_id,source_id,submission_id))`, `CREATE TABLE IF NOT EXISTS observation_scopes (context_id TEXT NOT NULL REFERENCES observations(context_id) ON DELETE CASCADE, mode TEXT NOT NULL, diff_id TEXT NOT NULL UNIQUE REFERENCES diffs(id) ON DELETE CASCADE, version_id TEXT NOT NULL REFERENCES diff_versions(id) ON DELETE CASCADE, PRIMARY KEY(context_id,mode))`, `CREATE TABLE IF NOT EXISTS observation_submissions (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, submission_id TEXT NOT NULL, context_id TEXT NOT NULL REFERENCES observations(context_id) ON DELETE CASCADE, payload_hash TEXT NOT NULL, metadata TEXT NOT NULL, PRIMARY KEY(owner_id,source_id,submission_id))`, - `INSERT INTO observation_submissions(owner_id,source_id,submission_id,context_id,payload_hash,metadata) SELECT owner_id,source_id,submission_id,context_id,payload_hash,metadata FROM observations WHERE true ON CONFLICT DO NOTHING`, // Stream heads outlive snapshot retention. Backfill newest arrivals first; // an existing head must never regress when its snapshot has been pruned. - `CREATE TABLE IF NOT EXISTS observation_stream_heads (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, repository_key TEXT NOT NULL, checkout_key TEXT NOT NULL, branch TEXT NOT NULL, comparison_policy TEXT NOT NULL DEFAULT '', context_id TEXT NOT NULL, collected_at INTEGER NOT NULL, PRIMARY KEY(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy))`, - // Alias only the first stable branch adopting a legacy label. Reusing a - // deleted branch name must not attach its history to the new branch ID. - `CREATE TABLE IF NOT EXISTS observation_branch_aliases (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, repository_key TEXT NOT NULL, checkout_key TEXT NOT NULL, branch TEXT NOT NULL, branch_id TEXT NOT NULL, PRIMARY KEY(owner_id,source_id,repository_key,checkout_key,branch))`, - `INSERT INTO observation_stream_heads(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy,context_id,collected_at) - SELECT owner_id,source_id,json_extract(metadata,'$.repositoryKey'),json_extract(metadata,'$.checkoutKey'),COALESCE(NULLIF(json_extract(metadata,'$.branchId'),''),json_extract(metadata,'$.branch')),` + comparisonPolicySQL("metadata") + `,context_id,json_extract(metadata,'$.collectedAt') - FROM observation_submissions WHERE json_extract(metadata,'$.repositoryKey')<>'' AND json_extract(metadata,'$.checkoutKey')<>'' - ORDER BY json_extract(metadata,'$.collectedAt') DESC,rowid DESC ON CONFLICT DO NOTHING`, + `CREATE TABLE IF NOT EXISTS observation_stream_heads (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, repository_key TEXT NOT NULL, checkout_key TEXT NOT NULL, branch TEXT NOT NULL, comparison_policy TEXT NOT NULL DEFAULT '', context_id TEXT NOT NULL, collected_at INTEGER NOT NULL, arrival_sequence INTEGER NOT NULL DEFAULT 0, PRIMARY KEY(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy))`, `CREATE TABLE IF NOT EXISTS observation_identities (owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, identity_hash TEXT NOT NULL, context_id TEXT NOT NULL REFERENCES observations(context_id) ON DELETE CASCADE, PRIMARY KEY(owner_id,identity_hash))`, `CREATE INDEX IF NOT EXISTS observations_source ON observations(owner_id,source_id)`, `CREATE INDEX IF NOT EXISTS observations_branch ON observations(owner_id,json_extract(metadata,'$.branch'))`, @@ -77,10 +66,7 @@ func (store *Store) IngestContext(ctx context.Context, ownerID string, request i return binding, tx.Commit() } now := time.Now().UnixMilli() - branch, _, err := adoptObservationBranch(tx, ownerID, request.Metadata) - if err != nil { - return Binding{}, err - } + branch := branchIdentity(request.Metadata) identityRequest := request identityRequest.Metadata.BranchID = branch identity, err := observationIdentity(identityRequest) @@ -88,15 +74,8 @@ func (store *Store) IngestContext(ctx context.Context, ownerID string, request i return Binding{}, err } if identity != "" { - err = tx.QueryRow(`SELECT i.context_id FROM observation_identities i JOIN contexts c ON c.id=i.context_id JOIN diffs d ON d.id=c.capture_id WHERE i.owner_id=? AND i.identity_hash=? AND d.expires_at>?`, ownerID, identity, now).Scan(&id) - if errors.Is(err, sql.ErrNoRows) { - id, err = legacyObservationIdentity(tx, ownerID, request, branch, now) - if err == nil { - if _, err := tx.Exec(`INSERT INTO observation_identities(owner_id,identity_hash,context_id) VALUES(?,?,?) ON CONFLICT DO NOTHING`, ownerID, identity, id); err != nil { - return Binding{}, err - } - } - } + err = tx.QueryRow(`SELECT i.context_id FROM observation_identities i JOIN contexts c ON c.id=i.context_id JOIN diffs d ON d.id=c.anchor_diff_id WHERE i.owner_id=? AND i.identity_hash=? AND d.expires_at>?`, ownerID, identity, now).Scan(&id) + if err == nil { if _, err := tx.Exec(`UPDATE contexts SET last_submitted_at=? WHERE id=?`, now, id); err != nil { return Binding{}, err @@ -140,7 +119,7 @@ func (store *Store) IngestContext(ctx context.Context, ownerID string, request i repositoryID = &repoID } binding := Binding{ContextID: id, RepositoryID: repositoryID, DiffIDs: make(map[review.DiffMode]string)} - // The all-scope diff anchors the legacy capture context; extra scopes have + // The all-scope diff anchors the observation; extra scopes have // independent review identities associated through observation_scopes. seen := make(map[review.DiffMode]bool) for _, scope := range request.Scopes { @@ -181,10 +160,9 @@ func (store *Store) IngestContext(ctx context.Context, ownerID string, request i } binding.DiffIDs[snapshot.Mode] = diffID if len(request.Scopes) == 1 { - binding.VersionID = versionID } } - if err := putCaptureContext(tx, ownerID, id, request.Metadata.Root, now); err != nil { + if err := putObservationContext(tx, ownerID, id, request.Metadata.Root, now); err != nil { return Binding{}, err } metadata, err := json.Marshal(request.Metadata) @@ -233,10 +211,7 @@ func putObservationSubmission(tx *sql.Tx, ownerID, contextID, hash string, reque if request.Metadata.RepositoryKey == "" || request.Metadata.CheckoutKey == "" { return err } - branch, _, err := adoptObservationBranch(tx, ownerID, request.Metadata) - if err != nil { - return err - } + branch := branchIdentity(request.Metadata) // Equal collection times use arrival order. Retries bypass this write. _, err = tx.Exec(`INSERT INTO observation_stream_heads(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy,context_id,collected_at,arrival_sequence) VALUES(?,?,?,?,?,?,?,?,?) ON CONFLICT(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy) DO UPDATE SET context_id=excluded.context_id,collected_at=excluded.collected_at,arrival_sequence=excluded.arrival_sequence @@ -244,79 +219,6 @@ func putObservationSubmission(tx *sql.Tx, ownerID, contextID, hash string, reque return err } -// Adoption updates only indexes, never immutable observations or retry hashes. -func adoptObservationBranch(tx *sql.Tx, ownerID string, metadata ingestion.Metadata) (string, bool, error) { - arguments := []any{ownerID, metadata.SourceID, metadata.RepositoryKey, metadata.CheckoutKey, metadata.Branch} - var known string - err := tx.QueryRow(`SELECT branch_id FROM observation_branch_aliases WHERE owner_id=? AND source_id=? AND repository_key=? AND checkout_key=? AND branch=?`, arguments...).Scan(&known) - if err != nil && !errors.Is(err, sql.ErrNoRows) { - return "", false, err - } - if metadata.BranchID == "" { - if known != "" { - return known, false, nil - } - return metadata.Branch, false, nil - } - if known != "" { - return metadata.BranchID, false, nil - } - var existing int - if err := tx.QueryRow(`SELECT COUNT(*) FROM observation_branch_aliases WHERE owner_id=? AND source_id=? AND repository_key=? AND checkout_key=? AND branch_id=?`, ownerID, metadata.SourceID, metadata.RepositoryKey, metadata.CheckoutKey, metadata.BranchID).Scan(&existing); err != nil { - return "", false, err - } - if _, err := tx.Exec(`INSERT INTO observation_branch_aliases(owner_id,source_id,repository_key,checkout_key,branch,branch_id) VALUES(?,?,?,?,?,?)`, append(arguments, metadata.BranchID)...); err != nil { - return "", false, err - } - if existing == 0 { - // Merge the legacy head into the new stream without regressing a newer - // collection, including when a delayed snapshot triggers adoption. - if _, err := tx.Exec(`INSERT INTO observation_stream_heads(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy,context_id,collected_at,arrival_sequence) - SELECT owner_id,source_id,repository_key,checkout_key,?,comparison_policy,context_id,collected_at,arrival_sequence FROM observation_stream_heads WHERE owner_id=? AND source_id=? AND repository_key=? AND checkout_key=? AND branch=? - ON CONFLICT(owner_id,source_id,repository_key,checkout_key,branch,comparison_policy) DO UPDATE SET context_id=excluded.context_id,collected_at=excluded.collected_at,arrival_sequence=excluded.arrival_sequence WHERE excluded.collected_at>observation_stream_heads.collected_at OR (excluded.collected_at=observation_stream_heads.collected_at AND excluded.arrival_sequence>observation_stream_heads.arrival_sequence)`, append([]any{metadata.BranchID}, arguments...)...); err != nil { - return "", false, err - } - } - return metadata.BranchID, existing == 0, nil -} - -func legacyObservationIdentity(tx *sql.Tx, ownerID string, request ingestion.Request, branchID string, now int64) (string, error) { - metadata := request.Metadata - rows, err := tx.Query(`SELECT branch FROM observation_branch_aliases WHERE owner_id=? AND source_id=? AND repository_key=? AND checkout_key=? AND branch_id=?`, ownerID, metadata.SourceID, metadata.RepositoryKey, metadata.CheckoutKey, branchID) - if err != nil { - return "", err - } - labels := make([]string, 0) - for rows.Next() { - var label string - if err := rows.Scan(&label); err != nil { - rows.Close() - return "", err - } - labels = append(labels, label) - } - if err := errors.Join(rows.Err(), rows.Close()); err != nil { - return "", err - } - for _, label := range labels { - legacy := request - legacy.Metadata.BranchID, legacy.Metadata.Branch = "", label - identity, err := observationIdentity(legacy) - if err != nil { - return "", err - } - var id string - err = tx.QueryRow(`SELECT i.context_id FROM observation_identities i JOIN contexts c ON c.id=i.context_id JOIN diffs d ON d.id=c.capture_id WHERE i.owner_id=? AND i.identity_hash=? AND d.expires_at>?`, ownerID, identity, now).Scan(&id) - if err == nil { - return id, nil - } - if !errors.Is(err, sql.ErrNoRows) { - return "", err - } - } - return "", sql.ErrNoRows -} - func pinObservationVersion(tx *sql.Tx, snapshot review.RepositoryDiff, patches map[string]review.FilePatch, now int64) error { manifest, err := json.Marshal(snapshot) if err != nil { @@ -343,35 +245,31 @@ func pinObservationVersion(tx *sql.Tx, snapshot review.RepositoryDiff, patches m func observationBinding(db queryer, ownerID, contextID string) (Binding, error) { binding := Binding{ContextID: contextID, DiffIDs: make(map[review.DiffMode]string)} - if err := db.QueryRow(`SELECT o.repository_id FROM observations o JOIN contexts c ON c.id=o.context_id JOIN diffs d ON d.id=c.capture_id WHERE o.owner_id=? AND o.context_id=? AND d.expires_at>?`, ownerID, contextID, time.Now().UnixMilli()).Scan(&binding.RepositoryID); err != nil { + if err := db.QueryRow(`SELECT o.repository_id FROM observations o JOIN contexts c ON c.id=o.context_id JOIN diffs d ON d.id=c.anchor_diff_id WHERE o.owner_id=? AND o.context_id=? AND d.expires_at>?`, ownerID, contextID, time.Now().UnixMilli()).Scan(&binding.RepositoryID); err != nil { if errors.Is(err, sql.ErrNoRows) { return Binding{}, ErrNotFound } return Binding{}, err } - rows, err := db.Query(`SELECT mode,diff_id,version_id FROM observation_scopes WHERE context_id=?`, contextID) + rows, err := db.Query(`SELECT mode,diff_id FROM observation_scopes WHERE context_id=?`, contextID) if err != nil { return Binding{}, err } defer rows.Close() for rows.Next() { var mode review.DiffMode - var diffID, versionID string - if err := rows.Scan(&mode, &diffID, &versionID); err != nil { + var diffID string + if err := rows.Scan(&mode, &diffID); err != nil { return Binding{}, err } binding.DiffIDs[mode] = diffID - binding.VersionID = versionID - } - if len(binding.DiffIDs) != 1 { - binding.VersionID = "" } return binding, rows.Err() } func (store *Store) Observation(ownerID, contextID string) (ingestion.Metadata, error) { var raw string - err := store.db.QueryRow(`SELECT o.metadata FROM observations o JOIN contexts c ON c.id=o.context_id JOIN diffs d ON d.id=c.capture_id WHERE o.owner_id=? AND o.context_id=? AND d.expires_at>?`, ownerID, contextID, time.Now().UnixMilli()).Scan(&raw) + err := store.db.QueryRow(`SELECT o.metadata FROM observations o JOIN contexts c ON c.id=o.context_id JOIN diffs d ON d.id=c.anchor_diff_id WHERE o.owner_id=? AND o.context_id=? AND d.expires_at>?`, ownerID, contextID, time.Now().UnixMilli()).Scan(&raw) if errors.Is(err, sql.ErrNoRows) { return ingestion.Metadata{}, ErrNotFound } @@ -473,3 +371,10 @@ func (store *Store) ObservationContexts(ownerID string, limit int, beforeTime in } return result, rows.Err() } + +func branchIdentity(metadata ingestion.Metadata) string { + if metadata.BranchID != "" { + return metadata.BranchID + } + return metadata.Branch +} diff --git a/internal/reviewstore/ingestion_test.go b/internal/reviewstore/ingestion_test.go index bc0f900..61ccb21 100644 --- a/internal/reviewstore/ingestion_test.go +++ b/internal/reviewstore/ingestion_test.go @@ -34,7 +34,7 @@ func TestObservationRetryAndIndependentSources(t *testing.T) { t.Fatal(err) } retry, err := store.Ingest(user.ID, request) - if err != nil || retry.ContextID != first.ContextID || len(retry.DiffIDs) != 3 || retry.VersionID != "" { + if err != nil || retry.ContextID != first.ContextID || len(retry.DiffIDs) != 3 { t.Fatalf("retry: %#v, %v", retry, err) } request.Metadata.Branch = "other" @@ -415,39 +415,6 @@ func TestObservationReviewScopesAndMetadataSearch(t *testing.T) { } } -func TestSchemaThreeMigrationPreservesCaptures(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "schema3") - old, err := store.Capture(user.ID, "old patch", review.RepositoryDiff{Mode: review.DiffAll, Revision: "old", Files: []review.ChangedFile{}}) - if err != nil { - t.Fatal(err) - } - for _, statement := range []string{"DROP TABLE observation_scopes", "DROP TABLE observations", "DROP TABLE observation_repositories", "PRAGMA user_version = 3"} { - if _, err := store.db.Exec(statement); err != nil { - t.Fatal(err) - } - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - defer store.Close() - raw, reopened, err := store.ReopenCapture(user.ID, old.ContextID, time.Now()) - if err != nil || raw != "old patch" || reopened.VersionID != old.VersionID { - t.Fatalf("legacy capture: %#v, %v", reopened, err) - } - if _, err := store.Ingest(user.ID, observationRequest("source", "request")); err != nil { - t.Fatal(err) - } -} - func TestObservationDedupePreservesReviewAndRefreshesOnlyFreshSubmissions(t *testing.T) { store := openTestStore(t) user := testUser(t, store, "dedupe") @@ -495,7 +462,7 @@ func TestObservationDedupePreservesReviewAndRefreshesOnlyFreshSubmissions(t *tes t.Fatalf("dedupe: %#v %v", reused, err) } item, err = store.Context(user.ID, first.ContextID, time.Now()) - if err != nil || item.ExpiresAt == nil || *item.ExpiresAt-item.LastSubmittedAt != CaptureLifetime.Milliseconds() || *item.ExpiresAt <= oldExpiry { + if err != nil || item.ExpiresAt == nil || *item.ExpiresAt-item.LastSubmittedAt != DefaultRetention.Milliseconds() || *item.ExpiresAt <= oldExpiry { t.Fatalf("fresh TTL: %#v %v", item, err) } var scopes int @@ -695,125 +662,3 @@ func TestObservationExpiryHidesReadsAndPrunesEveryScope(t *testing.T) { } } } - -func TestSchemaFourMigrationPreservesObservationHistoryAndRetry(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "migration") - request := observationRequest("source", "original") - first, err := store.Ingest(user.ID, request) - if err != nil { - t.Fatal(err) - } - request.SubmissionID = "duplicate" - request.Metadata.CollectedAt++ - second, err := store.Ingest(user.ID, request) - if err != nil { - t.Fatal(err) - } - if first.ContextID == second.ContextID { - t.Fatal("legacy changed observations unexpectedly deduped") - } - if err := store.PutComment(first.ContextID, review.ReviewComment{ID: "first-comment", Scope: review.DiffAll, Path: "file.txt", Body: "retain", CreatedAt: 1}); err != nil { - t.Fatal(err) - } - lastSubmitted := time.Now().Add(-time.Hour).UnixMilli() - if _, err := store.db.Exec(`UPDATE contexts SET last_submitted_at=?`, lastSubmitted); err != nil { - t.Fatal(err) - } - for _, query := range []string{"DROP TABLE observation_stream_heads", "DROP TABLE observation_identities", "DROP TABLE observation_submissions", "UPDATE diffs SET expires_at=NULL", "PRAGMA user_version=4"} { - if _, err := store.db.Exec(query); err != nil { - t.Fatal(err) - } - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - defer store.Close() - for _, binding := range []Binding{first, second} { - item, err := store.Context(user.ID, binding.ContextID, time.Now()) - if err != nil || item.Stale != (binding.ContextID == first.ContextID) || item.ExpiresAt == nil || *item.ExpiresAt != lastSubmitted+CaptureLifetime.Milliseconds() { - t.Fatalf("migration TTL: %#v %v", item, err) - } - var scopes int - if err := store.db.QueryRow(`SELECT COUNT(*) FROM observation_scopes s JOIN diffs d ON d.id=s.diff_id WHERE s.context_id=? AND d.expires_at=?`, binding.ContextID, *item.ExpiresAt).Scan(&scopes); err != nil || scopes != 3 { - t.Fatalf("migration scopes: %d %v", scopes, err) - } - } - comments, err := store.Comments(first.ContextID) - if err != nil || len(comments) != 1 { - t.Fatalf("migration review: %#v %v", comments, err) - } - request.SubmissionID = "original" - request.Metadata.CollectedAt-- - retry, err := store.Ingest(user.ID, request) - if err != nil || retry.ContextID != first.ContextID { - t.Fatalf("migration replay: %#v %v", retry, err) - } -} - -func TestSchemaFiveMigrationBackfillsLatestDeduplicatedCollection(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - t.Cleanup(func() { _ = store.Close() }) - user := testUser(t, store, "schema5-freshness") - requests := make([]ingestion.Request, 0, 5) - contexts := make(map[string]string) - for _, step := range []struct { - id, content string - collectedAt int64 - }{{"a-first", "a", 100}, {"b-first", "b", 200}, {"a-fresh", "a", 300}, {"b-equal", "b", 300}, {"a-late", "a", 250}} { - request := observationRequest("source", step.id) - request.ContentHash = strings.Repeat(step.content, 64) - request.Metadata.CollectedAt = step.collectedAt - binding, err := store.Ingest(user.ID, request) - if err != nil { - t.Fatal(err) - } - contexts[step.content] = binding.ContextID - requests = append(requests, request) - } - before, err := store.Context(user.ID, contexts["b"], time.Now()) - if err != nil || before.ExpiresAt == nil { - t.Fatalf("original retention: %#v, %v", before, err) - } - for _, query := range []string{"DROP TABLE observation_stream_heads", "PRAGMA user_version=5"} { - if _, err := store.db.Exec(query); err != nil { - t.Fatal(err) - } - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - reopened, err := Open(path) - if err != nil { - t.Fatal(err) - } - store = reopened - for content, id := range contexts { - item, err := store.Context(user.ID, id, time.Now()) - if err != nil || item.Stale != (content == "a") || item.ExpiresAt == nil || (content == "b" && *item.ExpiresAt != *before.ExpiresAt) { - t.Fatalf("migrated freshness or retention for %s: %#v, %v", content, item, err) - } - } - // Backfill uses fresh aliases, not immutable initial observation metadata; - // replaying an earlier equal-time alias cannot replace the winner. - retry, err := store.Ingest(user.ID, requests[2]) - if err != nil || retry.ContextID != contexts["a"] { - t.Fatalf("migrated retry: %#v, %v", retry, err) - } - item, err := store.Context(user.ID, contexts["a"], time.Now()) - if err != nil || !item.Stale { - t.Fatalf("retry replaced migrated head: %#v, %v", item, err) - } -} diff --git a/internal/reviewstore/queue.go b/internal/reviewstore/queue.go index 715f8a3..e9a0f19 100644 --- a/internal/reviewstore/queue.go +++ b/internal/reviewstore/queue.go @@ -17,7 +17,6 @@ import ( func initializeQueue(tx *sql.Tx) error { for _, statement := range []string{ `CREATE TABLE IF NOT EXISTS ingestion_records (sequence INTEGER PRIMARY KEY AUTOINCREMENT, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, source_id TEXT NOT NULL, submission_id TEXT NOT NULL, payload_hash TEXT NOT NULL, context_id TEXT NOT NULL DEFAULT '', UNIQUE(owner_id,source_id,submission_id))`, - `INSERT INTO ingestion_records(owner_id,source_id,submission_id,payload_hash,context_id) SELECT owner_id,source_id,submission_id,payload_hash,context_id FROM observation_submissions WHERE true ORDER BY rowid ON CONFLICT DO NOTHING`, `CREATE TABLE IF NOT EXISTS ingestion_jobs (id TEXT PRIMARY KEY, sequence INTEGER NOT NULL UNIQUE REFERENCES ingestion_records(sequence), payload TEXT NOT NULL, state TEXT NOT NULL, attempt INTEGER NOT NULL DEFAULT 0, available_at INTEGER NOT NULL, lease_until INTEGER NOT NULL DEFAULT 0, lease_token TEXT NOT NULL DEFAULT '', detail TEXT NOT NULL DEFAULT '', context_id TEXT NOT NULL DEFAULT '')`, `CREATE INDEX IF NOT EXISTS ingestion_jobs_ready ON ingestion_jobs(state,available_at,lease_until)`, } { @@ -25,16 +24,6 @@ func initializeQueue(tx *sql.Tx) error { return err } } - var columns int - if err := tx.QueryRow("SELECT COUNT(*) FROM pragma_table_info('observation_stream_heads') WHERE name='arrival_sequence'").Scan(&columns); err != nil { - return err - } - if columns == 0 { - // Heads from the old synchronous path precede every newly accepted submission. - if _, err := tx.Exec(`ALTER TABLE observation_stream_heads ADD COLUMN arrival_sequence INTEGER NOT NULL DEFAULT 0`); err != nil { - return err - } - } return nil } diff --git a/internal/reviewstore/reset_test.go b/internal/reviewstore/reset_test.go new file mode 100644 index 0000000..c7e99a9 --- /dev/null +++ b/internal/reviewstore/reset_test.go @@ -0,0 +1,58 @@ +package reviewstore + +import ( + "database/sql" + "path/filepath" + "testing" +) + +func TestSchemaResetOnceAndFutureVersionRefused(t *testing.T) { + path := filepath.Join(t.TempDir(), "state.db") + db, err := sql.Open("sqlite", path) + if err != nil { + t.Fatal(err) + } + _, err = db.Exec("CREATE TABLE legacy(value TEXT); INSERT INTO legacy VALUES('discard'); PRAGMA user_version=8") + if err != nil { + t.Fatal(err) + } + db.Close() + store, err := Open(path) + if err != nil { + t.Fatal(err) + } + var name string + if err := store.db.QueryRow("SELECT name FROM sqlite_master WHERE name='legacy'").Scan(&name); err != sql.ErrNoRows { + t.Fatalf("legacy table survived: %v", err) + } + user, err := store.User("owner", "owner") + if err != nil { + t.Fatal(err) + } + store.Close() + store, err = Open(path) + if err != nil { + t.Fatal(err) + } + retained, err := store.User("owner", "owner") + if err != nil || retained.ID != user.ID { + t.Fatalf("current schema reset on reopen: %+v %v", retained, err) + } + if _, err := store.db.Exec("PRAGMA user_version=999"); err != nil { + t.Fatal(err) + } + store.Close() + if newer, err := Open(path); err == nil { + newer.Close() + t.Fatal("accepted future schema") + } + db, err = sql.Open("sqlite", path) + if err != nil { + t.Fatal(err) + } + defer db.Close() + var count int + if err := db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count); err != nil || count != 1 { + t.Fatalf("future state changed: %d %v", count, err) + } +} diff --git a/internal/reviewstore/reviews.go b/internal/reviewstore/reviews.go index a392795..0a44a2f 100644 --- a/internal/reviewstore/reviews.go +++ b/internal/reviewstore/reviews.go @@ -11,47 +11,9 @@ import ( "github.com/flexdinesh/servediff/internal/reviewdata" ) -func (store *Store) PinVersion(snapshot review.RepositoryDiff, previews map[string]review.FilePatch) error { - if snapshot.ID == "" || snapshot.VersionID == "" { - return errors.New("diff identity is missing") - } - manifest, err := json.Marshal(snapshot) - if err != nil { - return err - } - transaction, err := store.db.Begin() - if err != nil { - return err - } - defer transaction.Rollback() - if _, err := transaction.Exec(`INSERT INTO diff_versions(id, diff_id, revision, manifest, created_at) VALUES(?, ?, ?, ?, ?) ON CONFLICT(id) DO NOTHING`, snapshot.VersionID, snapshot.ID, snapshot.Revision, string(manifest), time.Now().UnixMilli()); err != nil { - return err - } - for _, file := range snapshot.Files { - preview, ok := previews[file.ID] - if !ok { - continue - } - encoded, err := json.Marshal(preview) - if err != nil { - return err - } - if _, err := transaction.Exec(`INSERT INTO diff_files(version_id, file_id, path, fingerprint, patch) VALUES(?, ?, ?, ?, ?) ON CONFLICT(version_id, file_id) DO NOTHING`, snapshot.VersionID, file.ID, file.Path, file.Fingerprint, string(encoded)); err != nil { - return err - } - } - return transaction.Commit() -} - -func (store *Store) VersionComplete(versionID string, fileCount int) (bool, error) { - var count, exists int - err := store.db.QueryRow(`SELECT (SELECT COUNT(*) FROM diff_files WHERE version_id=?), (SELECT COUNT(*) FROM diff_versions WHERE id=?)`, versionID, versionID).Scan(&count, &exists) - return exists == 1 && count == fileCount, err -} - func (store *Store) reviewFor(transaction *sql.Tx, contextID string, mode review.DiffMode) (string, string, error) { var diffID, reviewID string - err := transaction.QueryRow(`SELECT d.id, r.id FROM diffs d JOIN reviews r ON r.diff_id=d.id WHERE (d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=? AND (d.expires_at IS NULL OR d.expires_at>?)`, contextID, contextID, contextID, mode, time.Now().UnixMilli()).Scan(&diffID, &reviewID) + err := transaction.QueryRow(`SELECT d.id, r.id FROM diffs d JOIN reviews r ON r.diff_id=d.id WHERE (d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=? AND (d.expires_at IS NULL OR d.expires_at>?)`, contextID, mode, time.Now().UnixMilli()).Scan(&diffID, &reviewID) if errors.Is(err, sql.ErrNoRows) { return "", "", ErrNotFound } @@ -73,7 +35,7 @@ func versionFor(transaction *sql.Tx, diffID, versionID string) error { } func (store *Store) Comments(contextID string) ([]review.ReviewComment, error) { - rows, err := store.db.Query(`SELECT c.data FROM comments c JOIN reviews r ON r.id=c.review_id JOIN diffs d ON d.id=r.diff_id WHERE (d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND (d.expires_at IS NULL OR d.expires_at>?) ORDER BY c.created_at, c.id`, contextID, contextID, contextID, time.Now().UnixMilli()) + rows, err := store.db.Query(`SELECT c.data FROM comments c JOIN reviews r ON r.id=c.review_id JOIN diffs d ON d.id=r.diff_id WHERE (d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND (d.expires_at IS NULL OR d.expires_at>?) ORDER BY c.created_at, c.id`, contextID, time.Now().UnixMilli()) if err != nil { return nil, err } @@ -169,7 +131,7 @@ func (store *Store) DeleteComments(contextID string, selected map[string]bool) ( if !include { continue } - result, err := transaction.Exec(`DELETE FROM comments WHERE id=? AND review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?))`, id, contextID, contextID, contextID) + result, err := transaction.Exec(`DELETE FROM comments WHERE id=? AND review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?))`, id, contextID) if err != nil { return 0, err } @@ -188,7 +150,7 @@ func (store *Store) DeleteComment(contextID, commentID string) (bool, error) { } func (store *Store) Marks(contextID string, scope review.DiffMode) ([]review.ReviewMark, error) { - rows, err := store.db.Query(`SELECT m.data FROM marks m JOIN reviews r ON r.id=m.review_id JOIN diffs d ON d.id=r.diff_id WHERE (d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=? AND (d.expires_at IS NULL OR d.expires_at>?) ORDER BY m.file_id`, contextID, contextID, contextID, scope, time.Now().UnixMilli()) + rows, err := store.db.Query(`SELECT m.data FROM marks m JOIN reviews r ON r.id=m.review_id JOIN diffs d ON d.id=r.diff_id WHERE (d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=? AND (d.expires_at IS NULL OR d.expires_at>?) ORDER BY m.file_id`, contextID, scope, time.Now().UnixMilli()) if err != nil { return nil, err } @@ -241,31 +203,15 @@ func (store *Store) PutMark(contextID string, mark review.ReviewMark) error { } func (store *Store) DeleteMark(contextID string, scope review.DiffMode, fileID string) error { - _, err := store.db.Exec(`DELETE FROM marks WHERE file_id=? AND review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE (d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=?)`, fileID, contextID, contextID, contextID, scope) + _, err := store.db.Exec(`DELETE FROM marks WHERE file_id=? AND review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE (d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=?)`, fileID, contextID, scope) return err } func (store *Store) ClearMarks(contextID string, scope review.DiffMode) error { - _, err := store.db.Exec(`DELETE FROM marks WHERE review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE (d.location_id=? OR d.id=? OR d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=?)`, contextID, contextID, contextID, scope) + _, err := store.db.Exec(`DELETE FROM marks WHERE review_id IN (SELECT r.id FROM reviews r JOIN diffs d ON d.id=r.diff_id WHERE (d.id IN (SELECT diff_id FROM observation_scopes WHERE context_id=?)) AND d.mode=?)`, contextID, scope) return err } -func (store *Store) StoredPatch(versionID, fileID, fileVersion string) (review.FilePatch, error) { - var raw string - err := store.db.QueryRow(`SELECT f.patch FROM diff_files f JOIN diff_versions v ON v.id=f.version_id JOIN diffs d ON d.id=v.diff_id WHERE f.version_id=? AND f.file_id=? AND f.fingerprint=? AND (d.expires_at IS NULL OR d.expires_at>?)`, versionID, fileID, fileVersion, time.Now().UnixMilli()).Scan(&raw) - if errors.Is(err, sql.ErrNoRows) { - return review.FilePatch{}, ErrNotFound - } - if err != nil { - return review.FilePatch{}, err - } - var patch review.FilePatch - if err := json.Unmarshal([]byte(raw), &patch); err != nil { - return review.FilePatch{}, err - } - return patch, nil -} - func (store *Store) StoredVersion(ownerID, diffID, versionID string, now time.Time) (review.RepositoryDiff, error) { var raw string err := store.db.QueryRow(`SELECT v.manifest FROM diff_versions v JOIN diffs d ON d.id=v.diff_id WHERE d.owner_id=? AND d.id=? AND v.id=? AND (d.expires_at IS NULL OR d.expires_at>?)`, ownerID, diffID, versionID, now.UnixMilli()).Scan(&raw) diff --git a/internal/reviewstore/sessions.go b/internal/reviewstore/sessions.go index 1fe02a3..12b0627 100644 --- a/internal/reviewstore/sessions.go +++ b/internal/reviewstore/sessions.go @@ -2,7 +2,6 @@ package reviewstore import ( "database/sql" - "encoding/json" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/reviewdata" @@ -24,41 +23,6 @@ func initializeSessions(tx *sql.Tx) error { return err } } - // Backfill only missing associations. Existing mutable names must survive restarts. - rows, err := tx.Query(`SELECT p.owner_id,p.context_id,p.metadata FROM observation_submissions p WHERE COALESCE(json_extract(p.metadata,'$.agentSession.id'),json_extract(p.metadata,'$.runId'),'')<>'' AND NOT EXISTS (SELECT 1 FROM observation_sessions a WHERE a.context_id=p.context_id AND a.source_id=p.source_id AND a.harness=COALESCE(json_extract(p.metadata,'$.agentSession.harness'),json_extract(p.metadata,'$.agent')) AND a.session_id=COALESCE(json_extract(p.metadata,'$.agentSession.id'),json_extract(p.metadata,'$.runId'))) ORDER BY json_extract(p.metadata,'$.collectedAt'),p.rowid`) - if err != nil { - return err - } - type entry struct { - owner, context string - metadata ingestion.Metadata - } - entries := []entry{} - for rows.Next() { - var item entry - var raw string - if err := rows.Scan(&item.owner, &item.context, &raw); err != nil { - rows.Close() - return err - } - if err := json.Unmarshal([]byte(raw), &item.metadata); err != nil { - rows.Close() - return err - } - entries = append(entries, item) - } - if err := rows.Err(); err != nil { - rows.Close() - return err - } - if err := rows.Close(); err != nil { - return err - } - for _, item := range entries { - if err := putSessionAssociation(tx, item.owner, item.context, item.metadata); err != nil { - return err - } - } return nil } diff --git a/internal/reviewstore/store.go b/internal/reviewstore/store.go index 0b29bd3..fdbbf7b 100644 --- a/internal/reviewstore/store.go +++ b/internal/reviewstore/store.go @@ -4,7 +4,6 @@ import ( "crypto/rand" "database/sql" "encoding/hex" - "encoding/json" "errors" "fmt" "io" @@ -14,13 +13,12 @@ import ( "time" "github.com/flexdinesh/servediff/internal/processlock" - "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewdata" _ "modernc.org/sqlite" ) -const schemaVersion = 8 -const CaptureLifetime = 7 * 24 * time.Hour +const schemaVersion = 9 +const DefaultRetention = 7 * 24 * time.Hour var ErrNotFound = reviewdata.ErrNotFound @@ -28,8 +26,6 @@ type User = reviewdata.User type Binding = reviewdata.Binding -type CaptureInfo = reviewdata.CaptureInfo - type Store struct { db *sql.DB lock *processlock.Lock @@ -57,10 +53,10 @@ func newID() (string, error) { } func Open(path string) (*Store, error) { - return OpenWithRetention(path, CaptureLifetime) + return OpenWithRetention(path, DefaultRetention) } -// OpenWithRetention configures expiry for new captures and fresh observations. +// OpenWithRetention configures expiry for new observations. // Existing expiry and replay identities remain unchanged. func OpenWithRetention(path string, retention time.Duration) (*Store, error) { if retention <= 0 { @@ -155,6 +151,10 @@ func (store *Store) initialize() error { if version > schemaVersion { return fmt.Errorf("servediff state schema %d is newer than supported schema %d", version, schemaVersion) } + if _, err := store.db.Exec("PRAGMA foreign_keys=OFF"); err != nil { + return err + } + defer store.db.Exec("PRAGMA foreign_keys=ON") transaction, err := store.db.Begin() if err != nil { return err @@ -170,16 +170,34 @@ func (store *Store) initialize() error { return err } } - if version > 0 && version != 2 && version != 3 && version != 4 && version != 5 && version != 6 && version != 7 && version != schemaVersion { - return fmt.Errorf("servediff state schema %d is unsupported; existing data preserved", version) + if version > 0 && version < schemaVersion { + rows, err := transaction.Query("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'") + if err != nil { + return err + } + var tables []string + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + rows.Close() + return err + } + tables = append(tables, name) + } + if err := errors.Join(rows.Err(), rows.Close()); err != nil { + return err + } + for _, name := range tables { + if _, err := transaction.Exec("DROP TABLE \"" + strings.ReplaceAll(name, "\"", "\"\"") + "\""); err != nil { + return err + } + } } statements := []string{ `CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, os_uid TEXT NOT NULL UNIQUE, name TEXT NOT NULL, created_at INTEGER NOT NULL)`, - `CREATE TABLE IF NOT EXISTS repositories (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, common_dir TEXT NOT NULL, UNIQUE(owner_id, common_dir))`, - `CREATE TABLE IF NOT EXISTS locations (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, repository_id TEXT REFERENCES repositories(id) ON DELETE CASCADE, kind TEXT NOT NULL, root TEXT NOT NULL, worktree_key TEXT NOT NULL, UNIQUE(owner_id, worktree_key))`, - `CREATE TABLE IF NOT EXISTS diffs (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, location_id TEXT REFERENCES locations(id) ON DELETE CASCADE, kind TEXT NOT NULL, mode TEXT NOT NULL, created_at INTEGER NOT NULL, expires_at INTEGER, UNIQUE(location_id, mode))`, - `CREATE INDEX IF NOT EXISTS diffs_owner_capture ON diffs(owner_id, kind, expires_at)`, - `CREATE TABLE IF NOT EXISTS diff_versions (id TEXT PRIMARY KEY, diff_id TEXT NOT NULL REFERENCES diffs(id) ON DELETE CASCADE, revision TEXT NOT NULL, manifest TEXT NOT NULL, raw_patch TEXT, created_at INTEGER NOT NULL, UNIQUE(diff_id, revision))`, + `CREATE TABLE IF NOT EXISTS diffs (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, kind TEXT NOT NULL, mode TEXT NOT NULL, created_at INTEGER NOT NULL, expires_at INTEGER)`, + `CREATE INDEX IF NOT EXISTS diffs_owner_expiry ON diffs(owner_id, kind, expires_at)`, + `CREATE TABLE IF NOT EXISTS diff_versions (id TEXT PRIMARY KEY, diff_id TEXT NOT NULL REFERENCES diffs(id) ON DELETE CASCADE, revision TEXT NOT NULL, manifest TEXT NOT NULL, created_at INTEGER NOT NULL, UNIQUE(diff_id, revision))`, `CREATE TABLE IF NOT EXISTS diff_files (version_id TEXT NOT NULL REFERENCES diff_versions(id) ON DELETE CASCADE, file_id TEXT NOT NULL, path TEXT NOT NULL, fingerprint TEXT NOT NULL, patch TEXT NOT NULL, PRIMARY KEY(version_id, file_id))`, `CREATE TABLE IF NOT EXISTS reviews (id TEXT PRIMARY KEY, diff_id TEXT NOT NULL UNIQUE REFERENCES diffs(id) ON DELETE CASCADE, owner_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE)`, `CREATE TABLE IF NOT EXISTS comments (id TEXT PRIMARY KEY, review_id TEXT NOT NULL REFERENCES reviews(id) ON DELETE CASCADE, version_id TEXT REFERENCES diff_versions(id) ON DELETE SET NULL, file_id TEXT NOT NULL, data TEXT NOT NULL, created_at INTEGER NOT NULL)`, @@ -203,15 +221,6 @@ func (store *Store) initialize() error { if err := initializeAuthentication(transaction); err != nil { return err } - if version < 5 { - // Preserve histories; begin retention from each context's last submission. - if _, err := transaction.Exec(`UPDATE diffs SET expires_at=COALESCE( - (SELECT c.last_submitted_at FROM contexts c WHERE c.capture_id=diffs.id OR c.location_id=diffs.location_id), - (SELECT c.last_submitted_at FROM observation_scopes s JOIN contexts c ON c.id=s.context_id WHERE s.diff_id=diffs.id), - created_at)+?`, CaptureLifetime.Milliseconds()); err != nil { - return err - } - } if _, err := transaction.Exec(fmt.Sprintf("PRAGMA user_version = %d", schemaVersion)); err != nil { return err } @@ -243,63 +252,6 @@ func (store *Store) User(osUID, name string) (User, error) { return result, err } -func (store *Store) RegisterGit(ownerID, root, commonDir, worktreeKey string) (Binding, error) { - transaction, err := store.db.Begin() - if err != nil { - return Binding{}, err - } - defer transaction.Rollback() - binding, err := registerGit(transaction, ownerID, root, commonDir, worktreeKey, store.retention) - if err != nil { - return Binding{}, err - } - return binding, transaction.Commit() -} - -func registerGit(transaction *sql.Tx, ownerID, root, commonDir, worktreeKey string, retention time.Duration) (Binding, error) { - repoID, err := newID() - if err != nil { - return Binding{}, err - } - if _, err := transaction.Exec(`INSERT INTO repositories(id, owner_id, common_dir) VALUES(?, ?, ?) ON CONFLICT(owner_id, common_dir) DO NOTHING`, repoID, ownerID, commonDir); err != nil { - return Binding{}, err - } - if err := transaction.QueryRow(`SELECT id FROM repositories WHERE owner_id=? AND common_dir=?`, ownerID, commonDir).Scan(&repoID); err != nil { - return Binding{}, err - } - locationID, err := newID() - if err != nil { - return Binding{}, err - } - if _, err := transaction.Exec(`INSERT INTO locations(id, owner_id, repository_id, kind, root, worktree_key) VALUES(?, ?, ?, 'git_worktree', ?, ?) ON CONFLICT(owner_id, worktree_key) DO UPDATE SET root=excluded.root`, locationID, ownerID, repoID, root, worktreeKey); err != nil { - return Binding{}, err - } - if err := transaction.QueryRow(`SELECT id FROM locations WHERE owner_id=? AND worktree_key=?`, ownerID, worktreeKey).Scan(&locationID); err != nil { - return Binding{}, err - } - binding := Binding{ContextID: locationID, LocationID: &locationID, RepositoryID: &repoID, DiffIDs: make(map[review.DiffMode]string)} - for _, mode := range []review.DiffMode{review.DiffAll, review.DiffStaged, review.DiffUnstaged} { - diffID, idError := newID() - if idError != nil { - return Binding{}, idError - } - if _, err := transaction.Exec(`INSERT INTO diffs(id, owner_id, location_id, kind, mode, created_at, expires_at) VALUES(?, ?, ?, 'live', ?, ?, ?) ON CONFLICT(location_id, mode) DO UPDATE SET expires_at=excluded.expires_at`, diffID, ownerID, locationID, mode, time.Now().UnixMilli(), time.Now().Add(retention).UnixMilli()); err != nil { - return Binding{}, err - } - if err := transaction.QueryRow(`SELECT id FROM diffs WHERE location_id=? AND mode=?`, locationID, mode).Scan(&diffID); err != nil { - return Binding{}, err - } - binding.DiffIDs[mode] = diffID - if err := ensureReview(transaction, ownerID, diffID); err != nil { - return Binding{}, err - } - } - if err := putWorktreeContext(transaction, ownerID, locationID, time.Now().UnixMilli()); err != nil { - return Binding{}, err - } - return binding, nil -} - func ensureReview(transaction *sql.Tx, ownerID, diffID string) error { id, err := newID() if err != nil { @@ -309,137 +261,18 @@ func ensureReview(transaction *sql.Tx, ownerID, diffID string) error { return err } -func (store *Store) Capture(ownerID, raw string, snapshot review.RepositoryDiff) (Binding, error) { - transaction, err := store.db.Begin() - if err != nil { - return Binding{}, err - } - defer transaction.Rollback() - binding, err := capture(transaction, ownerID, raw, snapshot, "", store.retention) - if err != nil { - return Binding{}, err - } - return binding, transaction.Commit() -} - -func capture(transaction *sql.Tx, ownerID, raw string, snapshot review.RepositoryDiff, submittedFrom string, retention time.Duration) (Binding, error) { - diffID, err := newID() - if err != nil { - return Binding{}, err - } - versionID, err := newID() - if err != nil { - return Binding{}, err - } - now := time.Now() - if _, err := transaction.Exec(`INSERT INTO diffs(id, owner_id, kind, mode, created_at, expires_at) VALUES(?, ?, 'capture', 'all', ?, ?)`, diffID, ownerID, now.UnixMilli(), now.Add(retention).UnixMilli()); err != nil { - return Binding{}, err - } - snapshot.ID, snapshot.VersionID = diffID, versionID - manifest, err := json.Marshal(snapshot) - if err != nil { - return Binding{}, err - } - if _, err := transaction.Exec(`INSERT INTO diff_versions(id, diff_id, revision, manifest, raw_patch, created_at) VALUES(?, ?, ?, ?, ?, ?)`, versionID, diffID, snapshot.Revision, string(manifest), raw, now.UnixMilli()); err != nil { - return Binding{}, err - } - if err := ensureReview(transaction, ownerID, diffID); err != nil { - return Binding{}, err - } - if err := putCaptureContext(transaction, ownerID, diffID, submittedFrom, now.UnixMilli()); err != nil { - return Binding{}, err - } - return Binding{ContextID: diffID, DiffIDs: map[review.DiffMode]string{review.DiffAll: diffID}, VersionID: versionID}, nil -} - -func (store *Store) ReopenCapture(ownerID, diffID string, now time.Time) (string, Binding, error) { - var raw, versionID string - err := store.db.QueryRow(`SELECT v.raw_patch, v.id FROM diffs d JOIN diff_versions v ON v.diff_id=d.id WHERE d.id=? AND d.owner_id=? AND d.kind='capture' AND d.expires_at>?`, diffID, ownerID, now.UnixMilli()).Scan(&raw, &versionID) - if errors.Is(err, sql.ErrNoRows) { - return "", Binding{}, ErrNotFound - } - if err != nil { - return "", Binding{}, err - } - return raw, Binding{ContextID: diffID, DiffIDs: map[review.DiffMode]string{review.DiffAll: diffID}, VersionID: versionID}, nil -} - -func (store *Store) ListCaptures(ownerID string, now time.Time) ([]CaptureInfo, error) { - rows, err := store.db.Query(`SELECT d.id, v.id, d.created_at, d.expires_at FROM diffs d JOIN diff_versions v ON v.diff_id=d.id WHERE d.owner_id=? AND d.kind='capture' AND d.expires_at>? ORDER BY d.created_at DESC`, ownerID, now.UnixMilli()) - if err != nil { - return nil, err - } - defer rows.Close() - result := make([]CaptureInfo, 0) - for rows.Next() { - var item CaptureInfo - if err := rows.Scan(&item.ID, &item.VersionID, &item.CreatedAt, &item.ExpiresAt); err != nil { - return nil, err - } - result = append(result, item) - } - return result, rows.Err() -} - func (store *Store) PruneExpired(now time.Time) error { transaction, err := store.db.Begin() if err != nil { return err } defer transaction.Rollback() - if _, err := transaction.Exec(`DELETE FROM diffs WHERE id IN (SELECT s.diff_id FROM observation_scopes s JOIN contexts c ON c.id=s.context_id JOIN diffs d ON d.id=c.capture_id WHERE d.expires_at<=?)`, now.UnixMilli()); err != nil { + if _, err := transaction.Exec(`DELETE FROM diffs WHERE id IN (SELECT s.diff_id FROM observation_scopes s JOIN contexts c ON c.id=s.context_id JOIN diffs d ON d.id=c.anchor_diff_id WHERE d.expires_at<=?)`, now.UnixMilli()); err != nil { return err } if _, err := transaction.Exec(`DELETE FROM diffs WHERE expires_at<=?`, now.UnixMilli()); err != nil { return err } - if _, err := transaction.Exec(`DELETE FROM submissions WHERE created_at<=?`, now.Add(-SubmissionLifetime).UnixMilli()); err != nil { - return err - } - if _, err := transaction.Exec(`DELETE FROM ingestion_records WHERE context_id<>'' AND context_id NOT IN (SELECT context_id FROM observations) AND sequence NOT IN (SELECT sequence FROM ingestion_jobs)`); err != nil { - return err - } - return transaction.Commit() -} - -func (store *Store) CaptureAlive(ownerID, diffID string, now time.Time) (bool, error) { - var count int - err := store.db.QueryRow(`SELECT COUNT(*) FROM diffs WHERE owner_id=? AND id=? AND kind='capture' AND expires_at>?`, ownerID, diffID, now.UnixMilli()).Scan(&count) - return count == 1, err -} -// RemoveLegacyReviews discards only files matching the previous per-session format. -func RemoveLegacyReviews(databasePath string) error { - if databasePath == "" { - return nil - } - directory := filepath.Join(filepath.Dir(databasePath), "reviews") - entries, err := os.ReadDir(directory) - if errors.Is(err, os.ErrNotExist) { - return nil - } - if err != nil { - return err - } - for _, entry := range entries { - if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".json") { - continue - } - path := filepath.Join(directory, entry.Name()) - raw, err := os.ReadFile(path) - if err != nil { - return err - } - var envelope struct { - Version int `json:"version"` - Sessions map[string]json.RawMessage `json:"sessions"` - } - if json.Unmarshal(raw, &envelope) != nil || envelope.Version != 1 || envelope.Sessions == nil { - continue - } - if err := os.Remove(path); err != nil { - return err - } - } - return nil + return transaction.Commit() } diff --git a/internal/reviewstore/store_test.go b/internal/reviewstore/store_test.go index a72a6e5..2efa7a9 100644 --- a/internal/reviewstore/store_test.go +++ b/internal/reviewstore/store_test.go @@ -1,16 +1,8 @@ package reviewstore import ( - "database/sql" - "errors" - "fmt" - "os" "path/filepath" - "runtime" "testing" - "time" - - "github.com/flexdinesh/servediff/internal/review" ) func openTestStore(t *testing.T) *Store { @@ -31,169 +23,3 @@ func testUser(t *testing.T, store *Store, uid string) User { } return user } - -func TestUserAndWorktreeIdentity(t *testing.T) { - store := openTestStore(t) - first := testUser(t, store, "1001") - renamed, err := store.User("1001", "new-name") - if err != nil || renamed.ID != first.ID || renamed.Name != "new-name" { - t.Fatalf("renamed user = %#v, %v", renamed, err) - } - other := testUser(t, store, "1002") - if other.ID == first.ID { - t.Fatal("different OS users share an ID") - } - a, err := store.RegisterGit(first.ID, "/repo/one", "/repo/.git", "/repo/.git/worktrees/one") - if err != nil { - t.Fatal(err) - } - b, err := store.RegisterGit(first.ID, "/repo/two", "/repo/.git", "/repo/.git/worktrees/two") - if err != nil { - t.Fatal(err) - } - again, err := store.RegisterGit(first.ID, "/repo/one", "/repo/.git", "/repo/.git/worktrees/one") - if err != nil { - t.Fatal(err) - } - if a.RepositoryID == nil || b.RepositoryID == nil || *a.RepositoryID != *b.RepositoryID || a.ContextID == b.ContextID || a.DiffIDs[review.DiffAll] == b.DiffIDs[review.DiffAll] || again.ContextID != a.ContextID { - t.Fatalf("worktree grouping: %#v %#v %#v", a, b, again) - } - comment := review.ReviewComment{ID: "c1", DiffID: a.DiffIDs[review.DiffAll], Path: "file", Scope: review.DiffAll, Fingerprint: "f", Side: "additions", Start: 1, End: 1, Body: "review", Status: "open", CreatedAt: 1} - if err := store.PutComment(a.ContextID, comment); err != nil { - t.Fatal(err) - } - visible, err := store.Comments(a.ContextID) - if err != nil || len(visible) != 1 { - t.Fatalf("first worktree comments: %v, %v", visible, err) - } - isolated, err := store.Comments(b.ContextID) - if err != nil || len(isolated) != 0 { - t.Fatalf("second worktree comments: %v, %v", isolated, err) - } - if err := store.PutComment(b.ContextID, comment); err == nil { - t.Fatal("cross-worktree comment accepted") - } -} - -func TestCaptureIdentityRetentionAndCascade(t *testing.T) { - store := openTestStore(t) - user := testUser(t, store, "1001") - manifest := review.RepositoryDiff{Source: "stdin", Mode: review.DiffAll, Revision: "same-content", Files: []review.ChangedFile{}} - a, err := store.Capture(user.ID, "patch", manifest) - if err != nil { - t.Fatal(err) - } - b, err := store.Capture(user.ID, "patch", manifest) - if err != nil { - t.Fatal(err) - } - if a.ContextID == b.ContextID || a.VersionID == b.VersionID { - t.Fatal("identical captures share identity") - } - listed, err := store.ListCaptures(user.ID, time.Now()) - if err != nil || len(listed) != 2 || listed[0].ExpiresAt-listed[0].CreatedAt != CaptureLifetime.Milliseconds() { - t.Fatalf("capture retention: %#v, %v", listed, err) - } - raw, reopened, err := store.ReopenCapture(user.ID, a.ContextID, time.Now()) - if err != nil || raw != "patch" || reopened.VersionID != a.VersionID { - t.Fatalf("reopen = %q, %#v, %v", raw, reopened, err) - } - other := testUser(t, store, "1002") - if _, _, err := store.ReopenCapture(other.ID, a.ContextID, time.Now()); !errors.Is(err, ErrNotFound) { - t.Fatalf("cross-user capture lookup: %v", err) - } - comment := review.ReviewComment{ID: "capture-comment", DiffID: a.ContextID, VersionID: a.VersionID, Path: "file", Scope: review.DiffAll, Fingerprint: "f", Side: "additions", Start: 1, End: 1, Body: "review", Status: "open", CreatedAt: 1} - wrongVersion := comment - wrongVersion.VersionID = b.VersionID - if err := store.PutComment(a.ContextID, wrongVersion); err == nil { - t.Fatal("cross-diff version accepted") - } - if err := store.PutComment(a.ContextID, comment); err != nil { - t.Fatal(err) - } - cutoffTime := time.Now() - cutoff := cutoffTime.UnixMilli() - if _, err := store.db.Exec(`UPDATE diffs SET expires_at=? WHERE id=?`, cutoff, a.ContextID); err != nil { - t.Fatal(err) - } - if _, _, err := store.ReopenCapture(user.ID, a.ContextID, cutoffTime); !errors.Is(err, ErrNotFound) { - t.Fatalf("expired capture still readable: %v", err) - } - if err := store.PruneExpired(cutoffTime); err != nil { - t.Fatal(err) - } - comments, err := store.Comments(a.ContextID) - if err != nil || len(comments) != 0 { - t.Fatalf("expired review survived: %v, %v", comments, err) - } - if _, _, err := store.ReopenCapture(user.ID, b.ContextID, time.Now()); err != nil { - t.Fatalf("unexpired capture removed: %v", err) - } -} - -func TestStateFileVersionAndPermissions(t *testing.T) { - path := filepath.Join(t.TempDir(), "state.db") - store, err := Open(path) - if err != nil { - t.Fatal(err) - } - if err := store.Close(); err != nil { - t.Fatal(err) - } - stat, err := os.Stat(path) - if err != nil || !stat.Mode().IsRegular() || (runtime.GOOS != "windows" && stat.Mode().Perm() != 0o600) { - t.Fatalf("state permissions = %v, %v", stat, err) - } - store, err = Open(path) - if err != nil { - t.Fatal(err) - } - user := testUser(t, store, "old") - if _, err := store.db.Exec(`PRAGMA user_version = 1`); err != nil { - t.Fatal(err) - } - _ = store.Close() - if _, err := Open(path); err == nil { - t.Fatal("unsupported older schema was opened") - } - // Failure must release the ownership lock and preserve existing rows. - db, err := sql.Open("sqlite", path) - if err != nil { - t.Fatal(err) - } - var preservedID string - if err := db.QueryRow("SELECT id FROM users WHERE os_uid='old'").Scan(&preservedID); err != nil || preservedID != user.ID { - t.Fatalf("existing user changed: %s, %v", preservedID, err) - } - if _, err := db.Exec(fmt.Sprintf("PRAGMA user_version = %d", schemaVersion+1)); err != nil { - t.Fatal(err) - } - _ = db.Close() - if _, err := Open(path); err == nil { - t.Fatal("newer schema was silently reset") - } - -} - -func TestLegacyReviewFilesAreDiscarded(t *testing.T) { - directory := t.TempDir() - legacy := filepath.Join(directory, "reviews", "old.json") - if err := os.MkdirAll(filepath.Dir(legacy), 0o700); err != nil { - t.Fatal(err) - } - if err := os.WriteFile(legacy, []byte(`{"version":1,"sessions":{"old":{}}}`), 0o600); err != nil { - t.Fatal(err) - } - if err := os.WriteFile(filepath.Join(directory, "reviews", "other.json"), []byte(`{"unrelated":true}`), 0o600); err != nil { - t.Fatal(err) - } - if err := RemoveLegacyReviews(filepath.Join(directory, "state.db")); err != nil { - t.Fatal(err) - } - if _, err := os.Stat(legacy); !errors.Is(err, os.ErrNotExist) { - t.Fatalf("legacy review remains: %v", err) - } - if _, err := os.Stat(filepath.Join(directory, "reviews", "other.json")); err != nil { - t.Fatalf("unrelated file removed: %v", err) - } -} diff --git a/internal/serverapp/capabilities_test.go b/internal/serverapp/capabilities_test.go index eb97aea..04a465c 100644 --- a/internal/serverapp/capabilities_test.go +++ b/internal/serverapp/capabilities_test.go @@ -18,14 +18,13 @@ import ( func TestAdmissionCapabilitiesMatchHealthAndRoutes(t *testing.T) { for _, test := range []struct { - name string - disabled, queue bool - want serverapp.Capabilities + name string + queue bool + want serverapp.Capabilities }{ - {"foreground", true, false, serverapp.Capabilities{}}, - {"legacy direct", false, false, serverapp.Capabilities{IngestionEnabled: true}}, - {"remote queued", false, true, serverapp.Capabilities{IngestionEnabled: true, QueuedIngestion: true}}, - {"disabled with queue", true, true, serverapp.Capabilities{}}, + {"foreground", false, serverapp.Capabilities{}}, + + {"remote queued", true, serverapp.Capabilities{IngestionEnabled: true, QueuedIngestion: true}}, } { t.Run(test.name, func(t *testing.T) { store, err := reviewstore.Open(":memory:") @@ -39,7 +38,7 @@ func TestAdmissionCapabilitiesMatchHealthAndRoutes(t *testing.T) { } service := contextservice.NewWithContext(t.Context(), store, user) defer service.Close() - options := serverapp.Options{IngestionDisabled: test.disabled} + options := serverapp.Options{} if test.queue { options.Queue = store.Queue() } @@ -50,7 +49,7 @@ func TestAdmissionCapabilitiesMatchHealthAndRoutes(t *testing.T) { if health.IngestionEnabled != test.want.IngestionEnabled || health.QueuedIngestion != test.want.QueuedIngestion { t.Fatalf("health capabilities: %+v, want %+v", health, test.want) } - for path, enabled := range map[string]bool{"/api/v2/ingestions": test.want.IngestionEnabled, "/api/v2/ingestion-jobs": test.want.QueuedIngestion} { + for path, enabled := range map[string]bool{"/api/v2/ingestions": false, "/api/v2/ingestion-jobs": test.want.QueuedIngestion} { response := request(t, d, "POST", path, bytes.NewBufferString("{}")) response.Body.Close() want := http.StatusNotFound @@ -83,7 +82,7 @@ func TestLocalAndQueuedRemoteShareSnapshotContract(t *testing.T) { if err != nil { t.Fatal(err) } - local := httptest.NewServer(serverapp.Handler(t.Context(), service, store, fstest.MapFS{}, submitted.Context.ID, serverapp.Options{IngestionDisabled: true})) + local := httptest.NewServer(serverapp.Handler(t.Context(), service, store, fstest.MapFS{}, submitted.Context.ID, serverapp.Options{})) defer local.Close() remote := start(t, ":memory:", true) plugin := input diff --git a/internal/serverapp/handler.go b/internal/serverapp/handler.go index 1609515..b6912e3 100644 --- a/internal/serverapp/handler.go +++ b/internal/serverapp/handler.go @@ -13,18 +13,17 @@ import ( "time" "github.com/flexdinesh/servediff/internal/contextservice" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/httpapi" "github.com/flexdinesh/servediff/internal/ingestion" "github.com/flexdinesh/servediff/internal/ingestionqueue" "github.com/flexdinesh/servediff/internal/mcpapi" + "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewservice" buildversion "github.com/flexdinesh/servediff/internal/version" ) type Options struct { - Queue ingestionqueue.Queue - IngestionDisabled bool + Queue ingestionqueue.Queue } // Capabilities are resolved once by the transport composition. Both admission @@ -36,8 +35,8 @@ type Capabilities struct { func (options Options) Capabilities() Capabilities { return Capabilities{ - IngestionEnabled: !options.IngestionDisabled, - QueuedIngestion: !options.IngestionDisabled && options.Queue != nil, + IngestionEnabled: options.Queue != nil, + QueuedIngestion: options.Queue != nil, } } @@ -65,15 +64,12 @@ func Handler(ctx context.Context, service *contextservice.Service, store httpapi w.Header().Set("Content-Type", "application/json; charset=utf-8") _ = json.NewEncoder(w).Encode(ingestion.Health{IngestionEnabled: capabilities.IngestionEnabled, QueuedIngestion: capabilities.QueuedIngestion, StateID: service.UserID(), ProtocolVersion: ingestion.ProtocolVersion}) }) - if capabilities.IngestionEnabled { - mux.HandleFunc("/api/v2/ingestions", func(w http.ResponseWriter, r *http.Request) { ingest(service, w, r) }) - } if capabilities.QueuedIngestion { mux.HandleFunc("/api/v2/ingestion-jobs", func(w http.ResponseWriter, r *http.Request) { acceptJob(service, configuration.Queue, w, r) }) mux.HandleFunc("/api/v2/ingestion-jobs/", func(w http.ResponseWriter, r *http.Request) { getJob(service, configuration.Queue, w, r) }) } mux.HandleFunc("/api/v2/events", func(w http.ResponseWriter, r *http.Request) { stream(ctx, service, w, r) }) - mux.Handle("/", httpapi.NewMultiWithContext(ctx, service, store, assets, defaultID)) + mux.Handle("/", httpapi.NewMulti(service, store, assets)) return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-store") w.Header().Set("X-Content-Type-Options", "nosniff") @@ -127,22 +123,6 @@ func decodeIngestion(service *contextservice.Service, w http.ResponseWriter, r * } return input, true } -func ingest(service *contextservice.Service, w http.ResponseWriter, r *http.Request) { - input, ok := decodeIngestion(service, w, r) - if !ok { - return - } - result, err := service.Ingest(r.Context(), input) - if err != nil { - applicationError(w, err) - return - } - id := result.Context.ID - w.Header().Set("Content-Type", "application/json; charset=utf-8") - w.WriteHeader(http.StatusOK) - _ = json.NewEncoder(w).Encode(ingestion.Receipt{ContextID: id, ReviewURL: "/contexts/" + id, MCPURL: "/mcp/contexts/" + id, Snapshot: result.Snapshot}) -} - func stream(ctx context.Context, service *contextservice.Service, w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { problem(w, 405, "Method not allowed") @@ -216,7 +196,7 @@ func contextMCP(service *contextservice.Service, store httpapi.Store, defaultID } func applicationError(w http.ResponseWriter, err error) { - var request *diffsource.RequestError + var request *review.RequestError if errors.As(err, &request) { problem(w, request.Status, request.Detail) return diff --git a/internal/serverapp/handler_test.go b/internal/serverapp/handler_test.go index 3c1117d..947ff60 100644 --- a/internal/serverapp/handler_test.go +++ b/internal/serverapp/handler_test.go @@ -23,11 +23,13 @@ import ( "github.com/flexdinesh/servediff/internal/collector" "github.com/flexdinesh/servediff/internal/contextservice" "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/ingestionqueue" "github.com/flexdinesh/servediff/internal/mcpapi" "github.com/flexdinesh/servediff/internal/remoteserver" "github.com/flexdinesh/servediff/internal/review" "github.com/flexdinesh/servediff/internal/reviewstore" "github.com/flexdinesh/servediff/internal/serverapp" + "github.com/flexdinesh/servediff/internal/testsupport" "github.com/modelcontextprotocol/go-sdk/mcp" ) @@ -65,7 +67,16 @@ func start(t *testing.T, state string, remote bool) deployment { } } else { service := contextservice.NewWithContext(t.Context(), store, user) - handler, closeService = serverapp.Handler(t.Context(), service, store, assets, ""), service.Close + ctx, cancel := context.WithCancel(t.Context()) + done := make(chan error, 1) + go func() { + done <- ingestionqueue.Run(ctx, store.Queue(), func(ctx context.Context, _ string, input ingestion.Request) (string, error) { + result, err := service.Ingest(ctx, input) + return result.Context.ID, err + }) + }() + handler = serverapp.Handler(ctx, service, store, assets, "", serverapp.Options{Queue: store.Queue()}) + closeService = func() error { cancel(); return errors.Join(<-done, service.Close()) } } server := httptest.NewServer(handler) var once sync.Once @@ -147,7 +158,7 @@ func TestPublicIngestionSurvivesProducerRemovalAndServerRestart(t *testing.T) { t.Run(fmt.Sprintf("remote=%v", remote), func(t *testing.T) { state := filepath.Join(t.TempDir(), "reviews.sqlite") d := start(t, state, remote) - client := ingestion.NewClient(d.server.URL, d.token) + client := testsupport.NewClient(d.server.URL, d.token) first, err := client.Submit(t.Context(), input) if err != nil { t.Fatal(err) @@ -295,7 +306,7 @@ func TestIngestionHTTPRejectsMalformedAndAmbiguousInput(t *testing.T) { } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { - r := httptest.NewRequest(tc.method, "/api/v2/ingestions", strings.NewReader(tc.body)) + r := httptest.NewRequest(tc.method, "/api/v2/ingestion-jobs", strings.NewReader(tc.body)) r.Header.Set("Content-Type", tc.contentType) w := httptest.NewRecorder() d.server.Config.Handler.ServeHTTP(w, r) @@ -306,7 +317,7 @@ func TestIngestionHTTPRejectsMalformedAndAmbiguousInput(t *testing.T) { } // One giant field tests the body bound rather than merely a validation bound. oversize := io.MultiReader(strings.NewReader(`{"submissionId":"`), strings.NewReader(strings.Repeat("x", ingestion.MaxRequestBytes)), strings.NewReader(`"}`)) - r := httptest.NewRequest("POST", "/api/v2/ingestions", oversize) + r := httptest.NewRequest("POST", "/api/v2/ingestion-jobs", oversize) r.Header.Set("Content-Type", "application/json") w := httptest.NewRecorder() d.server.Config.Handler.ServeHTTP(w, r) @@ -327,7 +338,7 @@ func TestSameOrigin(t *testing.T) { {"", "", true}, {"http://reviews.example", "same-origin", true}, {"https://reviews.example", "same-origin", true}, {"https://other.example", "", false}, {"https://reviews.example.evil", "", false}, {"", "cross-site", false}, {"https://reviews.example", "cross-site", false}, } { - r := httptest.NewRequest("POST", "http://reviews.example/api/v2/ingestions", nil) + r := httptest.NewRequest("POST", "http://reviews.example/api/v2/ingestion-jobs", nil) r.Header.Set("Origin", tc.origin) r.Header.Set("Sec-Fetch-Site", tc.fetch) if got := serverapp.SameOrigin(r); got != tc.allow { @@ -356,7 +367,7 @@ func TestIngestionNotificationReferencesCommittedObservation(t *testing.T) { if _, err := reader.ReadString('\n'); err != nil { t.Fatal(err) } - receipt, err := ingestion.NewClient(d.server.URL, "").Submit(t.Context(), emptyRequest()) + receipt, err := testsupport.NewClient(d.server.URL, "").Submit(t.Context(), emptyRequest()) if err != nil { t.Fatal(err) } @@ -387,7 +398,7 @@ func TestCrossOriginSubmissionCannotCommit(t *testing.T) { if err != nil { t.Fatal(err) } - r := httptest.NewRequest("POST", "http://reviews.example/api/v2/ingestions", bytes.NewReader(raw)) + r := httptest.NewRequest("POST", "http://reviews.example/api/v2/ingestion-jobs", bytes.NewReader(raw)) r.Header.Set("Content-Type", "application/json") r.Header.Set("Origin", "https://foreign.example") w := httptest.NewRecorder() @@ -401,7 +412,7 @@ func TestGlobalMCPDiscoversStoredReviewsAndRejectsForeignContexts(t *testing.T) input := collectGit(t) // Producer checkout removed before queries. t.Setenv("PATH", t.TempDir()) d := start(t, "", false) - client := ingestion.NewClient(d.server.URL, "") + client := testsupport.NewClient(d.server.URL, "") first, err := client.Submit(t.Context(), input) if err != nil { t.Fatal(err) diff --git a/internal/serverapp/health_test.go b/internal/serverapp/health_test.go index 6a7a049..0d0fe0e 100644 --- a/internal/serverapp/health_test.go +++ b/internal/serverapp/health_test.go @@ -6,26 +6,27 @@ import ( "testing" "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/testsupport" ) func TestHealthIdentitySurvivesRestartAndRequiresAuthentication(t *testing.T) { path := filepath.Join(t.TempDir(), "state.db") first := start(t, path, true) - if _, err := ingestion.NewClient(first.server.URL, "wrong").Health(t.Context()); err == nil { + if _, err := testsupport.NewClient(first.server.URL, "wrong").Health(t.Context()); err == nil { t.Fatal("unauthenticated health accepted") } - health, err := ingestion.NewClient(first.server.URL, first.token).Health(t.Context()) + health, err := testsupport.NewClient(first.server.URL, first.token).Health(t.Context()) if err != nil || health.StateID != first.owner { t.Fatalf("health %#v, %v", health, err) } first.close() second := start(t, path, true) - restarted, err := ingestion.NewClient(second.server.URL, second.token).Health(t.Context()) + restarted, err := testsupport.NewClient(second.server.URL, second.token).Health(t.Context()) if err != nil || restarted != health { t.Fatalf("persistent identity changed on restart: %#v, %v", restarted, err) } replacement := start(t, ":memory:", true) - replaced, err := ingestion.NewClient(replacement.server.URL, replacement.token).Health(t.Context()) + replaced, err := testsupport.NewClient(replacement.server.URL, replacement.token).Health(t.Context()) if err != nil || replaced.StateID == health.StateID { t.Fatalf("replacement retained old identity: %#v, %v", replaced, err) } @@ -34,7 +35,7 @@ func TestHealthIdentitySurvivesRestartAndRequiresAuthentication(t *testing.T) { func TestIngestionRejectsChangedDestinationBeforeSaving(t *testing.T) { input := collectGit(t) destination := start(t, ":memory:", true) - client := ingestion.NewClient(destination.server.URL, destination.token) + client := testsupport.NewClient(destination.server.URL, destination.token) _, err := client.SubmitTo(t.Context(), input, "old-database") var problem *ingestion.Problem if !errors.As(err, &problem) || problem.Status != 409 { diff --git a/internal/session/session.go b/internal/session/session.go index aa0436f..acc38cf 100644 --- a/internal/session/session.go +++ b/internal/session/session.go @@ -3,7 +3,6 @@ package session import ( "crypto/rand" - "github.com/flexdinesh/servediff/internal/diffsource" "github.com/flexdinesh/servediff/internal/review" ) @@ -78,15 +77,13 @@ type Policies struct { } type Session struct { - Stored bool ID string User User ContextID string LocationID *string RepositoryID *string DiffIDs map[review.DiffMode]string - VersionID string - Source diffsource.Source + Source review.Source Capabilities Capabilities } @@ -103,13 +100,13 @@ func (err *CapabilityError) Error() string { return "Capability " + err.Capability + " is not enabled for this session" } -func Resolve(source diffsource.Source, policies Policies) Session { +func Resolve(source review.Source, policies Policies) Session { return Session{ID: rand.Text(), Source: source, Capabilities: ResolveCapabilities(source.Support(), policies)} } // ResolveCapabilities is shared by catalog metadata and resolved review sessions. // Capabilities describe source support and policy, never the deployment mode. -func ResolveCapabilities(support diffsource.Support, policies Policies) Capabilities { +func ResolveCapabilities(support review.Support, policies Policies) Capabilities { capabilities := Capabilities{} capabilities.Diff.Scopes = ScopesCapability{ State: supported(len(support.Scopes) > 0), diff --git a/internal/submission/destination.go b/internal/submission/destination.go new file mode 100644 index 0000000..b29627a --- /dev/null +++ b/internal/submission/destination.go @@ -0,0 +1,135 @@ +package submission + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strings" + "time" + + "github.com/flexdinesh/servediff/internal/ingestion" +) + +type Target struct{ Destination, Identity, SourceID string } +type Destination struct { + Target Target + Endpoint, Token string + client *ingestion.Client + Progress func(ingestion.Job) +} + +func Resolve(ctx context.Context, endpoint, token string) (*Destination, error) { + client := ingestion.NewClient(endpoint, token) + health, err := client.Health(ctx) + if err != nil { + return nil, err + } + if !health.QueuedIngestion { + return nil, errors.New("server requires queued ingestion") + } + digest := sha256.Sum256([]byte(token)) + return &Destination{Endpoint: endpoint, Token: token, client: client, Target: Target{Destination: "remote:" + strings.TrimRight(endpoint, "/") + ":" + hex.EncodeToString(digest[:]), Identity: health.StateID}}, nil +} +func (target *Destination) Current(ctx context.Context, id string) (bool, error) { + return target.client.ObservationCurrent(ctx, id) +} +func (target *Destination) Deliver(ctx context.Context, request ingestion.Request) (result ingestion.Receipt, failure error) { + defer func() { + if failure != nil && target.Token != "" { + failure = redactedError{cause: failure, secret: target.Token} + } + }() + for attempt := 0; attempt < 2; attempt++ { + result, failure = target.client.SyncTo(ctx, request, target.Target.Identity, target.Progress) + if failure == nil { + return result, nil + } + var transport *url.Error + var problem *ingestion.Problem + retry := errors.As(failure, &transport) || (errors.As(failure, &problem) && (problem.Status == 429 || problem.Status >= 500)) + if !retry || ctx.Err() != nil { + return result, failure + } + } + return result, fmt.Errorf("submission %s retained for retry: %w", request.SubmissionID, failure) +} +func (target *Destination) SuppressInitialEmpty(ctx context.Context, request ingestion.Request) (bool, error) { + metadata := request.Metadata + query := url.Values{"sourceId": {metadata.SourceID}, "limit": {"500"}} + client := &http.Client{Timeout: 5 * time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }} + for pageNumber := 0; pageNumber < 8; pageNumber++ { + httpRequest, err := http.NewRequestWithContext(ctx, http.MethodGet, target.Endpoint+"/api/v2/contexts?"+query.Encode(), nil) + if err != nil { + return false, err + } + if target.Token != "" { + httpRequest.Header.Set("Authorization", "Bearer "+target.Token) + } + response, err := client.Do(httpRequest) + if err != nil { + return false, err + } + if response.StatusCode != http.StatusOK { + response.Body.Close() + return false, errors.New("cannot reconcile retained captures") + } + var page struct { + Contexts []struct { + Observation *ingestion.Metadata `json:"observation"` + } `json:"contexts"` + NextCursor *string `json:"nextCursor"` + } + decoder := json.NewDecoder(io.LimitReader(response.Body, 16<<20)) + err = decoder.Decode(&page) + valid := decoder.Decode(&struct{}{}) == io.EOF + response.Body.Close() + if err != nil || !valid || page.Contexts == nil { + return false, errors.New("invalid retained capture response") + } + for _, item := range page.Contexts { + existing := item.Observation + if existing != nil && existing.SourceID == metadata.SourceID && existing.RepositoryKey == metadata.RepositoryKey && existing.CheckoutKey == metadata.CheckoutKey && existing.BranchID == metadata.BranchID && sameComparison(existing.Comparison, metadata.Comparison) { + return false, nil + } + } + if page.NextCursor == nil { + return true, nil + } + query.Set("cursor", *page.NextCursor) + } + return false, errors.New("retained capture reconciliation exceeded page limit") +} + +func sameComparison(left, right *ingestion.Comparison) bool { + kind, base := func(value *ingestion.Comparison) (string, string) { + if value == nil { + return "working-tree", "HEAD" + } + return value.Kind, value.BaseRef + }(left) + otherKind, otherBase := func(value *ingestion.Comparison) (string, string) { + if value == nil { + return "working-tree", "HEAD" + } + return value.Kind, value.BaseRef + }(right) + return kind == otherKind && base == otherBase +} + +// Keep error identity for retry decisions while preventing persisted credentials +// echoed by a server from reaching activity logs or CLI output. +type redactedError struct { + cause error + secret string +} + +func (failure redactedError) Error() string { + return strings.ReplaceAll(failure.cause.Error(), failure.secret, "[redacted]") +} +func (failure redactedError) Unwrap() error { return failure.cause } diff --git a/internal/submission/destination_test.go b/internal/submission/destination_test.go new file mode 100644 index 0000000..95a8eaa --- /dev/null +++ b/internal/submission/destination_test.go @@ -0,0 +1,58 @@ +package submission + +import ( + "bytes" + "encoding/json" + "github.com/flexdinesh/servediff/internal/ingestion" + "io" + "net/http" + "net/http/httptest" + "testing" +) + +func TestDeliveryRetriesExactPayloadAtPinnedDestination(t *testing.T) { + var bodies [][]byte + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("Authorization") != "Bearer secret" { + t.Error("missing credential") + } + if r.URL.Path == "/api/v2/health" { + json.NewEncoder(w).Encode(ingestion.Health{ProtocolVersion: ingestion.ProtocolVersion, StateID: "database", QueuedIngestion: true, IngestionEnabled: true}) + return + } + if r.URL.Path != "/api/v2/ingestion-jobs" || r.Header.Get("X-Servediff-State") != "database" { + t.Error("delivery lost destination identity") + } + raw, err := io.ReadAll(r.Body) + if err != nil { + t.Error(err) + } + bodies = append(bodies, raw) + if len(bodies) == 1 { + http.Error(w, "unavailable", 503) + return + } + json.NewEncoder(w).Encode(ingestion.Job{ID: "job", SubmissionID: "submission", State: "succeeded", ContextID: "context"}) + })) + defer server.Close() + destination, err := Resolve(t.Context(), server.URL, "secret") + if err != nil { + t.Fatal(err) + } + receipt, err := destination.Deliver(t.Context(), ingestion.Request{ProtocolVersion: ingestion.ProtocolVersion, SubmissionID: "submission"}) + if err != nil || receipt.ContextID != "context" { + t.Fatalf("receipt=%+v err=%v", receipt, err) + } + if len(bodies) != 2 || !bytes.Equal(bodies[0], bodies[1]) { + t.Fatal("retry changed immutable payload") + } +} +func TestDeliveryRejectsMissingQueue(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + json.NewEncoder(w).Encode(ingestion.Health{ProtocolVersion: ingestion.ProtocolVersion, StateID: "local"}) + })) + defer server.Close() + if _, err := Resolve(t.Context(), server.URL, "token"); err == nil { + t.Fatal("accepted non-queue server") + } +} diff --git a/internal/submission/outbox.go b/internal/submission/outbox.go index 6ea9301..44d3408 100644 --- a/internal/submission/outbox.go +++ b/internal/submission/outbox.go @@ -27,7 +27,7 @@ type Outbox struct { func Open(ctx context.Context, root, route string) (*Outbox, error) { sum := sha256.Sum256([]byte(route)) - directory := filepath.Join(root, "sync", hex.EncodeToString(sum[:])) + directory := filepath.Join(root, "sync-v3", hex.EncodeToString(sum[:])) if err := os.MkdirAll(directory, 0700); err != nil { return nil, err } diff --git a/internal/testsupport/client.go b/internal/testsupport/client.go new file mode 100644 index 0000000..811ed93 --- /dev/null +++ b/internal/testsupport/client.go @@ -0,0 +1,50 @@ +package testsupport + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + + "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/review" +) + +type Client struct { + *ingestion.Client + endpoint, token string +} + +func NewClient(endpoint, token string) *Client { + return &Client{ingestion.NewClient(endpoint, token), endpoint, token} +} +func (client *Client) Submit(ctx context.Context, input ingestion.Request) (Receipt, error) { + return client.SubmitTo(ctx, input, "") +} +func (client *Client) SubmitTo(ctx context.Context, input ingestion.Request, state string) (Receipt, error) { + receipt, err := client.SyncTo(ctx, input, state, nil) + result := Receipt{Receipt: receipt} + if err != nil { + return result, err + } + req, err := http.NewRequestWithContext(ctx, "GET", client.endpoint+"/api/v2/contexts/"+result.ContextID+"/diffs/current?scope=all", nil) + if err != nil { + return result, err + } + req.Header.Set("Authorization", "Bearer "+client.token) + response, err := http.DefaultClient.Do(req) + if err != nil { + return result, err + } + defer response.Body.Close() + if response.StatusCode != 200 { + return result, fmt.Errorf("snapshot status %d", response.StatusCode) + } + err = json.NewDecoder(response.Body).Decode(&result.Snapshot) + return result, err +} + +type Receipt struct { + ingestion.Receipt + Snapshot review.RepositoryDiff +} diff --git a/internal/testsupport/server.go b/internal/testsupport/server.go new file mode 100644 index 0000000..7155076 --- /dev/null +++ b/internal/testsupport/server.go @@ -0,0 +1,41 @@ +package testsupport + +import ( + "context" + "net/http/httptest" + "testing" + + "github.com/flexdinesh/servediff/internal/contextservice" + "github.com/flexdinesh/servediff/internal/ingestion" + "github.com/flexdinesh/servediff/internal/ingestionqueue" + "github.com/flexdinesh/servediff/internal/reviewstore" + "github.com/flexdinesh/servediff/internal/serverapp" + "github.com/flexdinesh/servediff/internal/webui" +) + +type TestServer struct { + *httptest.Server + stop func() +} + +func (server *TestServer) Close() { server.Server.Close(); server.stop() } + +// Server composes an unauthenticated queue and worker for producer integration tests. +func Server(t *testing.T, service *contextservice.Service, store *reviewstore.Store) *TestServer { + t.Helper() + ctx, cancel := context.WithCancel(t.Context()) + done := make(chan error, 1) + go func() { + done <- ingestionqueue.Run(ctx, store.Queue(), func(ctx context.Context, _ string, input ingestion.Request) (string, error) { + result, err := service.Ingest(ctx, input) + return result.Context.ID, err + }) + }() + server := httptest.NewServer(serverapp.Handler(ctx, service, store, webui.Assets(), "", serverapp.Options{Queue: store.Queue()})) + return &TestServer{server, func() { + cancel() + if err := <-done; err != nil { + t.Error(err) + } + }} +} diff --git a/internal/webui/dist/assets/angular-html-DI9Gnh-6.js b/internal/webui/dist/assets/angular-html-CLXnbU8d.js similarity index 99% rename from internal/webui/dist/assets/angular-html-DI9Gnh-6.js rename to internal/webui/dist/assets/angular-html-CLXnbU8d.js index b878bce..647e637 100644 --- a/internal/webui/dist/assets/angular-html-DI9Gnh-6.js +++ b/internal/webui/dist/assets/angular-html-CLXnbU8d.js @@ -1 +1 @@ -import{t as e}from"./index-B2lg52VZ.js";import{t}from"./html-CQSL4Rts.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"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":"!|&&|\\\\?\\\\?|\\\\|\\\\|","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"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\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"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"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":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(\\\\s]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t}; \ No newline at end of file +import{t as e}from"./index-Bwvh_IHd.js";import{t}from"./html-rbi5PgIL.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"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":"!|&&|\\\\?\\\\?|\\\\|\\\\|","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"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\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"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"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":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(\\\\s]*)(?)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t}; \ No newline at end of file diff --git a/internal/webui/dist/assets/angular-ts-D0oJNn_5.js b/internal/webui/dist/assets/angular-ts-DBfR-Atp.js similarity index 99% rename from internal/webui/dist/assets/angular-ts-D0oJNn_5.js rename to internal/webui/dist/assets/angular-ts-DBfR-Atp.js index 8b856c5..53f102e 100644 --- a/internal/webui/dist/assets/angular-ts-D0oJNn_5.js +++ b/internal/webui/dist/assets/angular-ts-DBfR-Atp.js @@ -1 +1 @@ -import{a as e,i as t,o as n,r,t as i}from"./angular-html-DI9Gnh-6.js";import{t as a}from"./scss-B8r4RXCT.js";var o=Object.freeze(JSON.parse(`{"injectTo":["source.ts.ng"],"injectionSelector":"L:source.ts#meta.decorator.ts -comment","name":"angular-inline-style","patterns":[{"include":"#inlineStyles"}],"repository":{"inlineStyles":{"begin":"(styles)\\\\s*(:)","beginCaptures":{"1":{"name":"meta.object-literal.key.ts"},"2":{"name":"meta.object-literal.key.ts punctuation.separator.key-value.ts"}},"end":"(?=[,}])","patterns":[{"include":"#tsParenExpression"},{"include":"#tsBracketExpression"},{"include":"#style"}]},"style":{"begin":"\\\\s*([\\"'\`|])","beginCaptures":{"1":{"name":"string"}},"contentName":"source.css.scss","end":"\\\\1","endCaptures":{"0":{"name":"string"}},"patterns":[{"include":"source.css.scss"}]},"tsBracketExpression":{"begin":"\\\\G\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.array.literal.ts meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.array.literal.ts meta.brace.square.ts"}},"patterns":[{"include":"#style"}]},"tsParenExpression":{"begin":"\\\\G\\\\s*(\\\\()","beginCaptures":{"1":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"$self"},{"include":"#tsBracketExpression"},{"include":"#style"}]}},"scopeName":"inline-styles.ng","embeddedLangs":["scss"]}`)),s=[...a,o],c=Object.freeze(JSON.parse(`{"injectTo":["source.ts.ng"],"injectionSelector":"L:meta.decorator.ts -comment -text.html","name":"angular-inline-template","patterns":[{"include":"#inlineTemplate"}],"repository":{"inlineTemplate":{"begin":"(template)\\\\s*(:)","beginCaptures":{"1":{"name":"meta.object-literal.key.ts"},"2":{"name":"meta.object-literal.key.ts punctuation.separator.key-value.ts"}},"end":"(?=[,}])","patterns":[{"include":"#tsParenExpression"},{"include":"#ngTemplate"}]},"ngTemplate":{"begin":"\\\\G\\\\s*([\\"'\`|])","beginCaptures":{"1":{"name":"string"}},"contentName":"text.html.derivative.ng","end":"\\\\1","endCaptures":{"0":{"name":"string"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"tsParenExpression":{"begin":"\\\\G\\\\s*(\\\\()","beginCaptures":{"1":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#tsParenExpression"},{"include":"#ngTemplate"}]}},"scopeName":"inline-template.ng","embeddedLangs":["angular-html","angular-template"]}`)),l=[...i,...t,c],u=Object.freeze(JSON.parse('{"displayName":"Angular TypeScript","name":"angular-ts","patterns":[{"include":"#directives"},{"include":"#statements"},{"include":"#shebang"}],"repository":{"access-modifier":{"match":"(??\\\\[]|^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"}},"name":"meta.objectliteral.ts","patterns":[{"include":"#object-member"}]},"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"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"variable.parameter.ts"}},"match":"(?:(?)","name":"meta.arrow.ts"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","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+))","name":"meta.arrow.ts","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.ts","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"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+))","name":"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"}]},"async-modifier":{"match":"(?)","name":"cast.expr.ts"},{"begin":"(??^|]|[^$_[:alnum:]](?:\\\\+\\\\+|--)|[^+]\\\\+|[^-]-)\\\\s*(<)(?!)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]},{"begin":"(?<=^)\\\\s*(<)(?=[$_[:alpha:]][$_[:alnum:]]*\\\\s*>)","beginCaptures":{"1":{"name":"meta.brace.angle.ts"}},"end":"(>)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]}]},"class-declaration":{"begin":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.ts"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.ts","patterns":[{"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"}},"name":"meta.tag.ts","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"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":"((@)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":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"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"}},"contentName":"constant.other.description.jsdoc","end":"()|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.ts"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)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":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"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-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"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"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?: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-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?: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]|\\\\*[^/])+)"},{"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"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?: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","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\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"}},"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"},{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"keyword.operator.assignment.compound.ts"},"3":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","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"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"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"}]},"field-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.ts variable.object.property.ts"},{"match":"\\\\?","name":"keyword.operator.optional.ts"},{"match":"!","name":"keyword.operator.definiteassignment.ts"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\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":[{"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*)?\\\\())","name":"meta.function-call.ts","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":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.ts","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.ts punctuation.accessor.optional.ts"},{"match":"!","name":"meta.function-call.ts keyword.operator.definiteassignment.ts"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"}]},"function-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.constant.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.ts"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?]|=[^<]|<\\\\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":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\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":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\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":"(?=[,;}])|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\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"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.ts"},{"captures":{"0":{"name":"meta.object-literal.key.ts"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.ts"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.ts"}},"end":"(?=[,}])","name":"meta.object.member.ts","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.ts"},{"captures":{"1":{"name":"keyword.control.as.ts"},"2":{"name":"storage.modifier.ts"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\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"}]},"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"}]},"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"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"}},"match":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\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"}},"match":"(?:(?])","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression"}]},"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"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts"}},"contentName":"meta.arrow.ts meta.return.type.arrow.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"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.ts"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"keyword.other.ts"}},"name":"string.regexp.ts","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","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"}},"name":"meta.group.regexp","patterns":[{"include":"#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"}},"name":"constant.other.character-class.set.regexp","patterns":[{"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"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?]|=[^<]|<\\\\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":"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"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\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"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"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":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.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":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.ts","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.ts","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-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.ts"},"2":{"name":"entity.name.type.ts"},"3":{"name":"keyword.operator.expression.extends.ts"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.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"}},"contentName":"meta.type.parameters.ts","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.ts"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"},"3":{"name":"punctuation.accessor.optional.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.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-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)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.ts"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"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":"(?:(?)))))))|(:\\\\s*(?]|=[^<]|<\\\\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":"variable.parameter.ts variable.language.this.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(??{|}]|(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"}]},"undefined-literal":{"match":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts"}},"end":"(?=$|^|[,;=}]|((?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts entity.name.function.ts"},"2":{"name":"keyword.operator.definiteassignment.ts"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|^|[]),;}]|((??\\\\[]|^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"}},"name":"meta.objectliteral.ts","patterns":[{"include":"#object-member"}]},"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"}]},"array-literal":{"begin":"\\\\s*(\\\\[)","beginCaptures":{"1":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"arrow-function":{"patterns":[{"captures":{"1":{"name":"storage.modifier.async.ts"},"2":{"name":"variable.parameter.ts"}},"match":"(?:(?)","name":"meta.arrow.ts"},{"begin":"(?:(?]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))","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+))","name":"meta.arrow.ts","patterns":[{"include":"#comment"},{"include":"#type-parameters"},{"include":"#function-parameters"},{"include":"#arrow-return-type"},{"include":"#possibly-arrow-return-type"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"((?<=[}\\\\S])(?)|((?!\\\\{)(?=\\\\S)))(?!/[*/])","name":"meta.arrow.ts","patterns":[{"include":"#single-line-comment-consuming-line-ending"},{"include":"#decl-block"},{"include":"#expression"}]}]},"arrow-return-type":{"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+))","name":"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"}]},"async-modifier":{"match":"(?)","name":"cast.expr.ts"},{"begin":"(??^|]|[^$_[:alnum:]](?:\\\\+\\\\+|--)|[^+]\\\\+|[^-]-)\\\\s*(<)(?!)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]},{"begin":"(?<=^)\\\\s*(<)(?=[$_[:alpha:]][$_[:alnum:]]*\\\\s*>)","beginCaptures":{"1":{"name":"meta.brace.angle.ts"}},"end":"(>)","endCaptures":{"1":{"name":"meta.brace.angle.ts"}},"name":"cast.expr.ts","patterns":[{"include":"#type"}]}]},"class-declaration":{"begin":"(?\\\\s*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.ts"}},"end":"(?=$)","name":"comment.line.triple-slash.directive.ts","patterns":[{"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"}},"name":"meta.tag.ts","patterns":[{"match":"path|types|no-default-lib|lib|name|resolution-mode","name":"entity.other.attribute-name.directive.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"include":"#string"}]}]},"docblock":{"patterns":[{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.access-type.jsdoc"}},"match":"((@)a(?:ccess|pi))\\\\s+(p(?:rivate|rotected|ublic))\\\\b"},{"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":"((@)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":"keyword.operator.control.jsdoc"},"5":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)borrows)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)\\\\s+(as)\\\\s+((?:[^*/@\\\\s]|\\\\*[^/])+)"},{"begin":"((@)example)\\\\s+","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=@|\\\\*/)","name":"meta.example.jsdoc","patterns":[{"match":"^\\\\s\\\\*\\\\s+"},{"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"}},"contentName":"constant.other.description.jsdoc","end":"()|(?=\\\\*/)","endCaptures":{"0":{"name":"entity.name.tag.inline.jsdoc"},"1":{"name":"punctuation.definition.bracket.angle.begin.jsdoc"},"2":{"name":"punctuation.definition.bracket.angle.end.jsdoc"}}},{"captures":{"0":{"name":"source.embedded.ts"}},"match":"[^*@\\\\s](?:[^*]|\\\\*[^/])*"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"constant.language.symbol-type.jsdoc"}},"match":"((@)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":"variable.other.link.underline.jsdoc"},"4":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)see)\\\\s+(?:((?=https?://)(?:[^*\\\\s]|\\\\*[^/])+)|((?!https?://|(?:\\\\[[^]\\\\[]*])?\\\\{@(?:link|linkcode|linkplain|tutorial)\\\\b)(?:[^*/@\\\\s]|\\\\*[^/])+))"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)template)\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*(?:\\\\s*,\\\\s*[$A-Z_a-z][]$.\\\\[\\\\w]*)*)"},{"begin":"((@)template)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:arg|argument|const|constant|member|namespace|param|var))\\\\s+([$A-Z_a-z][]$.\\\\[\\\\w]*)"},{"begin":"((@)typedef)\\\\s+(?=\\\\{)","beginCaptures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"end":"(?=\\\\s|\\\\*/|[^]$A-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"(?:[^*/@\\\\s]|\\\\*[^/])+","name":"entity.name.type.instance.jsdoc"}]},{"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-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"},{"match":"([$A-Z_a-z][]$.\\\\[\\\\w]*)","name":"variable.other.jsdoc"},{"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"}},"match":"(\\\\[)\\\\s*[$\\\\w]+(?:(?:\\\\[])?\\\\.[$\\\\w]+)*(?:\\\\s*(=)\\\\s*((?>\\"(?:\\\\*(?!/)|\\\\\\\\(?!\\")|[^*\\\\\\\\])*?\\"|\'(?:\\\\*(?!/)|\\\\\\\\(?!\')|[^*\\\\\\\\])*?\'|\\\\[(?:\\\\*(?!/)|[^*])*?]|(?:\\\\*(?!/)|\\\\s(?!\\\\s*])|\\\\[.*?(?:]|(?=\\\\*/))|[^]*\\\\[\\\\s])*)*))?\\\\s*(?:(])((?:[^*\\\\s]|\\\\*[^/\\\\s])+)?|(?=\\\\*/))","name":"variable.other.jsdoc"}]},{"begin":"((@)(?: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-\\\\[_a-{}])","patterns":[{"include":"#jsdoctype"}]},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"entity.name.type.instance.jsdoc"}},"match":"((@)(?: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]|\\\\*[^/])+)"},{"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"}},"contentName":"variable.other.jsdoc","end":"(\\\\3)|(?=$|\\\\*/)","endCaptures":{"0":{"name":"variable.other.jsdoc"},"1":{"name":"punctuation.definition.string.end.jsdoc"}}},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"},"3":{"name":"variable.other.jsdoc"}},"match":"((@)(?:default(?:value)?|license|tutorial|variation|version))\\\\s+([^*\\\\s]+)"},{"captures":{"1":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"(@)(?: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","name":"storage.type.class.jsdoc"},{"include":"#inline-tags"},{"captures":{"1":{"name":"storage.type.class.jsdoc"},"2":{"name":"punctuation.definition.block.tag.jsdoc"}},"match":"((@)[$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s+)"}]},"enum-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\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"}},"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"},{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"keyword.operator.assignment.compound.ts"},"3":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])(!)\\\\s*(?:(/=)|(/)(?![*/]))"},{"match":"!|&&|\\\\|\\\\||\\\\?\\\\?","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"},{"begin":"(?<=[]$)_[:alnum:]])\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)+(?:(/=)|(/)(?![*/])))","end":"(/=)|(/)(?!\\\\*([^*]|(\\\\*[^/]))*\\\\*/)","endCaptures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"patterns":[{"include":"#comment"}]},{"captures":{"1":{"name":"keyword.operator.assignment.compound.ts"},"2":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[]$)_[:alnum:]])\\\\s*(?:(/=)|(/)(?![*/]))"}]},"expressionPunctuations":{"patterns":[{"include":"#punctuation-comma"},{"include":"#punctuation-accessor"}]},"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"}]},"field-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))"},{"match":"#?[$_[:alpha:]][$_[:alnum:]]*","name":"meta.definition.property.ts variable.object.property.ts"},{"match":"\\\\?","name":"keyword.operator.optional.ts"},{"match":"!","name":"keyword.operator.definiteassignment.ts"}]},"for-loop":{"begin":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\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":[{"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*)?\\\\())","name":"meta.function-call.ts","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":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*)(\\\\s*\\\\??\\\\.\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*))*)|(\\\\??\\\\.\\\\s*#?[$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*[(\\\\[{]\\\\s*)$)","name":"meta.function-call.ts","patterns":[{"include":"#function-call-target"}]},{"include":"#comment"},{"include":"#function-call-optionals"},{"include":"#type-arguments"}]}]},"function-call-optionals":{"patterns":[{"match":"\\\\?\\\\.","name":"meta.function-call.ts punctuation.accessor.optional.ts"},{"match":"!","name":"meta.function-call.ts keyword.operator.definiteassignment.ts"}]},"function-call-target":{"patterns":[{"include":"#support-function-call-identifiers"},{"match":"(#?[$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"}]},"function-declaration":{"begin":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.constant.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"punctuation.accessor.optional.ts"},"3":{"name":"variable.other.property.ts"}},"match":"(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))\\\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"variable.other.constant.ts"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"if-statement":{"patterns":[{"begin":"(??}]|\\\\|\\\\||&&|!==|$|([!=]==?)|(([\\\\&^|~]\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s+instanceof(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.)))|((?]|=[^<]|<\\\\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":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]},{"begin":"(?]|=[^<]|<\\\\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":"(?=[,;}]|$)|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"}]}]},"method-declaration-name":{"begin":"(?=(\\\\b((??}]|\\\\|\\\\||&&|!==|$|((?]|=[^<]|<\\\\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":"(?=[,;}])|(?<=})","name":"meta.method.declaration.ts","patterns":[{"include":"#method-declaration-name"},{"include":"#function-body"},{"begin":"(?]|=[^<]|<\\\\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"}]}]},"object-member":{"patterns":[{"include":"#comment"},{"include":"#object-literal-method-declaration"},{"begin":"(?=\\\\[)","end":"(?=:)|((?<=])(?=\\\\s*[(<]))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#array-literal"}]},{"begin":"(?=[\\"\'`])","end":"(?=:)|((?<=[\\"\'`])(?=((\\\\s*[(,<}])|(\\\\s+(as|satisifies)\\\\s+))))","name":"meta.object.member.ts meta.object-literal.key.ts","patterns":[{"include":"#comment"},{"include":"#string"}]},{"begin":"(?=\\\\b((?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))","name":"meta.object.member.ts"},{"captures":{"0":{"name":"meta.object-literal.key.ts"}},"match":"[$_[:alpha:]][$_[:alnum:]]*\\\\s*(?=(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*:)","name":"meta.object.member.ts"},{"begin":"\\\\.\\\\.\\\\.","beginCaptures":{"0":{"name":"keyword.operator.spread.ts"}},"end":"(?=[,}])","name":"meta.object.member.ts","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"variable.other.readwrite.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?=[,}]|$|//|/\\\\*)","name":"meta.object.member.ts"},{"captures":{"1":{"name":"keyword.control.as.ts"},"2":{"name":"storage.modifier.ts"}},"match":"(??}]|\\\\|\\\\||&&|!==|$|^|((?]|=[^<]|<\\\\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"}]},"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"}]},"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"}]},"parameter-name":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"}},"match":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\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"}},"match":"(?:(?])","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"paren-expression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#expression"}]},"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"}]}]},"possibly-arrow-return-type":{"begin":"(?<=\\\\)|^)\\\\s*(:)(?=\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+\\\\s*=>)","beginCaptures":{"1":{"name":"meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts"}},"contentName":"meta.arrow.ts meta.return.type.arrow.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"}]},"property-accessor":{"match":"(?|&&|\\\\|\\\\||\\\\*/)\\\\s*(/)(?![*/])(?=(?:[^()/\\\\[\\\\\\\\]|\\\\\\\\.|\\\\[([^]\\\\\\\\]|\\\\\\\\.)+]|\\\\(([^)\\\\\\\\]|\\\\\\\\.)+\\\\))+/([dgimsuvy]+|(?![*/])|(?=/\\\\*))(?!\\\\s*[$0-9A-Z_a-z]))","beginCaptures":{"1":{"name":"punctuation.definition.string.begin.ts"}},"end":"(/)([dgimsuvy]*)","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"keyword.other.ts"}},"name":"string.regexp.ts","patterns":[{"include":"#regexp"}]},{"begin":"((?)"},{"match":"[*+?]|\\\\{(\\\\d+,\\\\d+|\\\\d+,|,\\\\d+|\\\\d+)}\\\\??","name":"keyword.operator.quantifier.regexp"},{"match":"\\\\|","name":"keyword.operator.or.regexp"},{"begin":"(\\\\()((\\\\?=)|(\\\\?!)|(\\\\?<=)|(\\\\?)?","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"}},"name":"meta.group.regexp","patterns":[{"include":"#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"}},"name":"constant.other.character-class.set.regexp","patterns":[{"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"}},"match":"(?:.|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))-(?:[^]\\\\\\\\]|(\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u\\\\h{4}))|(\\\\\\\\c[A-Z])|(\\\\\\\\.))","name":"constant.other.character-class.range.regexp"},{"include":"#regex-character-class"}]},{"include":"#regex-character-class"}]},"return-type":{"patterns":[{"begin":"(?<=\\\\))\\\\s*(:)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?]|=[^<]|<\\\\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":"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"}},"match":"(?\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\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"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"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":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#expression"}]},"template-type":{"patterns":[{"include":"#template-call"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.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":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#type"}]},"ternary-expression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#expression"}]},"this-literal":{"match":"(?])|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?])|(?=^\\\\s*$)|((?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)))","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type-arguments-body"}]},"type-arguments-body":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?)","patterns":[{"include":"#comment"},{"include":"#type-parameters"}]},{"begin":"(?))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#function-parameters"}]}]},"type-function-return-type":{"patterns":[{"begin":"(=>)(?=\\\\s*\\\\S)","beginCaptures":{"1":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|$)","name":"meta.type.function.return.ts","patterns":[{"include":"#type-function-return-type-core"}]},{"begin":"=>","beginCaptures":{"0":{"name":"storage.type.function.arrow.ts"}},"end":"(?)(??{}]|//|^\\\\s*$)|((?<=\\\\S)(?=\\\\s*$)))","name":"meta.type.function.return.ts","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-infer":{"patterns":[{"captures":{"1":{"name":"keyword.operator.expression.infer.ts"},"2":{"name":"entity.name.type.ts"},"3":{"name":"keyword.operator.expression.extends.ts"}},"match":"(?)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.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"}},"contentName":"meta.type.parameters.ts","end":"(>)","endCaptures":{"1":{"name":"meta.type.parameters.ts punctuation.definition.typeparameters.end.ts"}},"patterns":[{"include":"#type-arguments-body"}]},{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"},"3":{"name":"punctuation.accessor.optional.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(?:(\\\\.)|(\\\\?\\\\.(?!\\\\s*\\\\d)))"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"type-object":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.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-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)"},{"match":"(?)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#comment"},{"match":"(?)","name":"keyword.operator.assignment.ts"}]},"type-paren-or-function-parameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"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":"(?:(?)))))))|(:\\\\s*(?]|=[^<]|<\\\\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":"variable.parameter.ts variable.language.this.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:(??{|}]|(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"}]},"undefined-literal":{"match":"(?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts"}},"end":"(?=$|^|[,;=}]|((?)))|((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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>)))))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>)))))))|(:\\\\s*(?]|=[^<]|<\\\\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*))))))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*((\\\\)\\\\s*:)|((\\\\.\\\\.\\\\.\\\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\\\s*:)))|((<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<]|<\\\\s*(((const\\\\s+)?[$_[:alpha:]])|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\\\s*)?\\\\(\\\\s*(/\\\\*([^*]|(\\\\*[^/]))*\\\\*/\\\\s*)*(([$_[:alpha:]]|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\\\\.\\\\.\\\\.\\\\s*[$_[:alpha:]]))([^\\"\'()`]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))*)?\\\\)(\\\\s*:\\\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\\\([^()]+\\\\)|\\\\{[^{}]+})+)?\\\\s*=>))))))","beginCaptures":{"1":{"name":"meta.definition.variable.ts entity.name.function.ts"},"2":{"name":"keyword.operator.definiteassignment.ts"}},"end":"(?=$|^|[,;=}]|((?\\\\s*$)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|^|[]),;}]|((?]?\\\\d+|))?|\\\\sex)(?=:(?:(?=\\\\s*set?\\\\s[^\\\\n:]+:)|(?!\\\\s*set?\\\\s)))(?:(?:\\\\s|\\\\s*:\\\\s*)\\\\w*(?:\\\\s*=(?:[^\\\\n\\\\\\\\\\\\s]|\\\\\\\\.)*)?)*[:\\\\s](?:filetype|ft|syntax)\\\\s*=apl(?=[:\\\\s]|$))","foldingStartMarker":"\\\\{","foldingStopMarker":"}","name":"apl","patterns":[{"match":"\\\\A#!.*$","name":"comment.line.shebang.apl"},{"include":"#heredocs"},{"include":"#main"},{"begin":"^\\\\s*((\\\\))OFF|(])NEXTFILE)\\\\b(.*)$","beginCaptures":{"1":{"name":"entity.name.command.eof.apl"},"2":{"name":"punctuation.definition.command.apl"},"3":{"name":"punctuation.definition.command.apl"},"4":{"patterns":[{"include":"#comment"}]}},"contentName":"text.embedded.apl","end":"(?=N)A"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.round.bracket.begin.apl"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.round.bracket.end.apl"}},"name":"meta.round.bracketed.group.apl","patterns":[{"include":"#main"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.square.bracket.begin.apl"}},"end":"]","endCaptures":{"0":{"name":"punctuation.square.bracket.end.apl"}},"name":"meta.square.bracketed.group.apl","patterns":[{"include":"#main"}]},{"begin":"^\\\\s*((\\\\))\\\\S+)","beginCaptures":{"1":{"name":"entity.name.command.apl"},"2":{"name":"punctuation.definition.command.apl"}},"end":"$","name":"meta.system.command.apl","patterns":[{"include":"#command-arguments"},{"include":"#command-switches"},{"include":"#main"}]},{"begin":"^\\\\s*((])\\\\S+)","beginCaptures":{"1":{"name":"entity.name.command.apl"},"2":{"name":"punctuation.definition.command.apl"}},"end":"$","name":"meta.user.command.apl","patterns":[{"include":"#command-arguments"},{"include":"#command-switches"},{"include":"#main"}]}],"repository":{"class":{"patterns":[{"begin":"(?<=\\\\s|^)((:)Class)\\\\s+('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((:)\\\\s*(?:('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*)?)?(.*?)$","beginCaptures":{"0":{"name":"meta.class.apl"},"1":{"name":"keyword.control.class.apl"},"2":{"name":"punctuation.definition.class.apl"},"3":{"name":"entity.name.type.class.apl","patterns":[{"include":"#strings"}]},"4":{"name":"entity.other.inherited-class.apl"},"5":{"name":"punctuation.separator.inheritance.apl"},"6":{"patterns":[{"include":"#strings"}]},"7":{"name":"entity.other.class.interfaces.apl","patterns":[{"include":"#csv"}]}},"end":"(?<=\\\\s|^)((:)EndClass)(?=\\\\b)","endCaptures":{"1":{"name":"keyword.control.class.apl"},"2":{"name":"punctuation.definition.class.apl"}},"patterns":[{"begin":"(?<=\\\\s|^)(:)Field(?=\\\\s)","beginCaptures":{"0":{"name":"keyword.control.field.apl"},"1":{"name":"punctuation.definition.field.apl"}},"end":"\\\\s*(←.*)?(?:$|(?=⍝))","endCaptures":{"0":{"name":"entity.other.initial-value.apl"},"1":{"patterns":[{"include":"#main"}]}},"name":"meta.field.apl","patterns":[{"match":"(?<=\\\\s|^)Public(?=\\\\s|$)","name":"storage.modifier.access.public.apl"},{"match":"(?<=\\\\s|^)Private(?=\\\\s|$)","name":"storage.modifier.access.private.apl"},{"match":"(?<=\\\\s|^)Shared(?=\\\\s|$)","name":"storage.modifier.shared.apl"},{"match":"(?<=\\\\s|^)Instance(?=\\\\s|$)","name":"storage.modifier.instance.apl"},{"match":"(?<=\\\\s|^)ReadOnly(?=\\\\s|$)","name":"storage.modifier.readonly.apl"},{"captures":{"1":{"patterns":[{"include":"#strings"}]}},"match":"('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)","name":"entity.name.type.apl"}]},{"include":"$self"}]}]},"command-arguments":{"patterns":[{"begin":"\\\\b(?=\\\\S)","end":"\\\\b(?=\\\\s)","name":"variable.parameter.argument.apl","patterns":[{"include":"#main"}]}]},"command-switches":{"patterns":[{"begin":"(?<=\\\\s)(-)([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(=)","beginCaptures":{"1":{"name":"punctuation.delimiter.switch.apl"},"2":{"name":"entity.name.switch.apl"},"3":{"name":"punctuation.assignment.switch.apl"}},"end":"\\\\b(?=\\\\s)","name":"variable.parameter.switch.apl","patterns":[{"include":"#main"}]},{"captures":{"1":{"name":"punctuation.delimiter.switch.apl"},"2":{"name":"entity.name.switch.apl"}},"match":"(?<=\\\\s)(-)([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(?!=)","name":"variable.parameter.switch.apl"}]},"comment":{"patterns":[{"begin":"⍝","captures":{"0":{"name":"punctuation.definition.comment.apl"}},"end":"$","name":"comment.line.apl"}]},"csv":{"patterns":[{"match":",","name":"punctuation.separator.apl"},{"include":"$self"}]},"definition":{"patterns":[{"begin":"^\\\\s*?(∇)(?:\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)|\\\\s*((\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(})|(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\))|(\\\\(\\\\s*\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(}\\\\s*\\\\))|(\\\\{\\\\s*\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)\\\\s*}))\\\\s*)\\\\s*(←))?\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?\\\\s*?((?<=[]\\\\s])[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*|(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)))\\\\s*(?=;|$)|(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s+)|((\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(})|(\\\\(\\\\s*\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(}\\\\s*\\\\))|(\\\\{\\\\s*\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)\\\\s*})))?\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?|((\\\\()(\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)?\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*?((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)?(\\\\))))\\\\s*((?<=[]\\\\s])[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*|\\\\s*(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)))?)\\\\s*([^;]+)?(((?>\\\\s*;(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙⎕Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)+)+)|([^⍝]+))?\\\\s*(⍝.*)?$","beginCaptures":{"0":{"name":"entity.function.definition.apl"},"1":{"name":"keyword.operator.nabla.apl"},"2":{"name":"entity.function.return-value.apl"},"3":{"name":"entity.function.return-value.shy.apl"},"4":{"name":"punctuation.definition.return-value.begin.apl"},"5":{"name":"punctuation.definition.return-value.end.apl"},"6":{"name":"punctuation.definition.return-value.begin.apl"},"7":{"name":"punctuation.definition.return-value.end.apl"},"8":{"name":"punctuation.definition.return-value.begin.apl"},"9":{"name":"punctuation.definition.return-value.end.apl"},"10":{"name":"punctuation.definition.return-value.begin.apl"},"11":{"name":"punctuation.definition.return-value.end.apl"},"12":{"name":"keyword.operator.assignment.apl"},"13":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"14":{"name":"entity.function.axis.apl"},"15":{"name":"punctuation.definition.axis.begin.apl"},"16":{"name":"invalid.illegal.extra-characters.apl"},"17":{"name":"invalid.illegal.apl"},"18":{"name":"punctuation.definition.axis.end.apl"},"19":{"name":"entity.function.arguments.right.apl"},"20":{"name":"punctuation.definition.arguments.begin.apl"},"21":{"name":"punctuation.definition.arguments.end.apl"},"22":{"name":"entity.function.arguments.left.apl"},"23":{"name":"entity.function.arguments.left.optional.apl"},"24":{"name":"punctuation.definition.arguments.begin.apl"},"25":{"name":"punctuation.definition.arguments.end.apl"},"26":{"name":"punctuation.definition.arguments.begin.apl"},"27":{"name":"punctuation.definition.arguments.end.apl"},"28":{"name":"punctuation.definition.arguments.begin.apl"},"29":{"name":"punctuation.definition.arguments.end.apl"},"30":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"31":{"name":"entity.function.axis.apl"},"32":{"name":"punctuation.definition.axis.begin.apl"},"33":{"name":"invalid.illegal.extra-characters.apl"},"34":{"name":"invalid.illegal.apl"},"35":{"name":"punctuation.definition.axis.end.apl"},"36":{"name":"entity.function.operands.apl"},"37":{"name":"punctuation.definition.operands.begin.apl"},"38":{"name":"entity.function.operands.left.apl"},"39":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"40":{"name":"entity.function.axis.apl"},"41":{"name":"punctuation.definition.axis.begin.apl"},"42":{"name":"invalid.illegal.extra-characters.apl"},"43":{"name":"invalid.illegal.apl"},"44":{"name":"punctuation.definition.axis.end.apl"},"45":{"name":"entity.function.operands.right.apl"},"46":{"name":"punctuation.definition.operands.end.apl"},"47":{"name":"entity.function.arguments.right.apl"},"48":{"name":"punctuation.definition.arguments.begin.apl"},"49":{"name":"punctuation.definition.arguments.end.apl"},"50":{"name":"invalid.illegal.arguments.right.apl"},"51":{"name":"entity.function.local-variables.apl"},"52":{"patterns":[{"match":";","name":"punctuation.separator.apl"}]},"53":{"name":"invalid.illegal.local-variables.apl"},"54":{"name":"comment.line.apl"}},"end":"^\\\\s*?(?:(∇)|(⍫))\\\\s*?(⍝.*?)?$","endCaptures":{"1":{"name":"keyword.operator.nabla.apl"},"2":{"name":"keyword.operator.lock.apl"},"3":{"name":"comment.line.apl"}},"name":"meta.function.apl","patterns":[{"captures":{"0":{"name":"entity.function.local-variables.apl"},"1":{"patterns":[{"match":";","name":"punctuation.separator.apl"}]}},"match":"^\\\\s*((?>;(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙⎕Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)+)+)","name":"entity.function.definition.apl"},{"include":"$self"}]}]},"embedded-apl":{"patterns":[{"begin":"(?i)(<([%?])(?:apl(?=\\\\s+)|=))","beginCaptures":{"1":{"name":"punctuation.section.embedded.begin.apl"}},"end":"(?<=\\\\s)(\\\\2>)","endCaptures":{"1":{"name":"punctuation.section.embedded.end.apl"}},"name":"meta.embedded.block.apl","patterns":[{"include":"#main"}]}]},"embolden":{"patterns":[{"match":".+","name":"markup.bold.identifier.apl"}]},"heredocs":{"patterns":[{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?HTML?.*?|END-OF-⎕INP)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.html.basic","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"text.html.basic"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:XML|XSLT|SVG|RSS).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.xml","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"text.xml"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:CSS|stylesheet).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.css","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.css"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:JS(?!ON)|(?:ECMA|J|Java).?Script).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.js","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.js"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?JSON.*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.json","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.json"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])(?i)((?:Raw|Plain)?\\\\s*Te?xt)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.plain","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])(.*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"$self"}]}]},"label":{"patterns":[{"captures":{"1":{"name":"entity.label.name.apl"},"2":{"name":"punctuation.definition.label.end.apl"}},"match":"^\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(:)","name":"meta.label.apl"}]},"lambda":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.lambda.begin.apl"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.lambda.end.apl"}},"name":"meta.lambda.function.apl","patterns":[{"include":"#main"},{"include":"#lambda-variables"}]},"lambda-variables":{"patterns":[{"match":"⍺⍺","name":"constant.language.lambda.operands.left.apl"},{"match":"⍵⍵","name":"constant.language.lambda.operands.right.apl"},{"match":"[⍶⍺]","name":"constant.language.lambda.arguments.left.apl"},{"match":"[⍵⍹]","name":"constant.language.lambda.arguments.right.apl"},{"match":"χ","name":"constant.language.lambda.arguments.axis.apl"},{"match":"∇∇","name":"constant.language.lambda.operands.self.operator.apl"},{"match":"∇","name":"constant.language.lambda.operands.self.function.apl"},{"match":"λ","name":"constant.language.lambda.symbol.apl"}]},"main":{"patterns":[{"include":"#class"},{"include":"#definition"},{"include":"#comment"},{"include":"#label"},{"include":"#sck"},{"include":"#strings"},{"include":"#number"},{"include":"#lambda"},{"include":"#sysvars"},{"include":"#symbols"},{"include":"#name"}]},"name":{"patterns":[{"match":"[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*","name":"variable.other.readwrite.apl"}]},"number":{"patterns":[{"match":"¯?[0-9][0-9A-Za-z¯]*(?:\\\\.[0-9Ee¯][0-9A-Za-z¯]*)*|¯?\\\\.[0-9Ee][0-9A-Za-z¯]*","name":"constant.numeric.apl"}]},"sck":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.sck.begin.apl"}},"match":"(?<=\\\\s|^)(:)[A-Za-z]+","name":"keyword.control.sck.apl"}]},"strings":{"patterns":[{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apl"}},"end":"'|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.apl"}},"name":"string.quoted.single.apl","patterns":[{"match":"[^']*[^\\\\n\\\\r'\\\\\\\\]$","name":"invalid.illegal.string.apl"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apl"}},"end":"\\"|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.apl"}},"name":"string.quoted.double.apl","patterns":[{"match":"[^\\"]*[^\\\\n\\\\r\\"\\\\\\\\]$","name":"invalid.illegal.string.apl"}]}]},"symbols":{"patterns":[{"match":"(?<=\\\\s)←(?=\\\\s|$)","name":"keyword.spaced.operator.assignment.apl"},{"match":"(?<=\\\\s)→(?=\\\\s|$)","name":"keyword.spaced.control.goto.apl"},{"match":"(?<=\\\\s)≡(?=\\\\s|$)","name":"keyword.spaced.operator.identical.apl"},{"match":"(?<=\\\\s)≢(?=\\\\s|$)","name":"keyword.spaced.operator.not-identical.apl"},{"match":"\\\\+","name":"keyword.operator.plus.apl"},{"match":"[-−]","name":"keyword.operator.minus.apl"},{"match":"×","name":"keyword.operator.times.apl"},{"match":"÷","name":"keyword.operator.divide.apl"},{"match":"⌊","name":"keyword.operator.floor.apl"},{"match":"⌈","name":"keyword.operator.ceiling.apl"},{"match":"[|∣]","name":"keyword.operator.absolute.apl"},{"match":"[*⋆]","name":"keyword.operator.exponent.apl"},{"match":"⍟","name":"keyword.operator.logarithm.apl"},{"match":"○","name":"keyword.operator.circle.apl"},{"match":"!","name":"keyword.operator.factorial.apl"},{"match":"∧","name":"keyword.operator.and.apl"},{"match":"∨","name":"keyword.operator.or.apl"},{"match":"⍲","name":"keyword.operator.nand.apl"},{"match":"⍱","name":"keyword.operator.nor.apl"},{"match":"<","name":"keyword.operator.less.apl"},{"match":"≤","name":"keyword.operator.less-or-equal.apl"},{"match":"=","name":"keyword.operator.equal.apl"},{"match":"≥","name":"keyword.operator.greater-or-equal.apl"},{"match":">","name":"keyword.operator.greater.apl"},{"match":"≠","name":"keyword.operator.not-equal.apl"},{"match":"[~∼]","name":"keyword.operator.tilde.apl"},{"match":"\\\\?","name":"keyword.operator.random.apl"},{"match":"[∈∊]","name":"keyword.operator.member-of.apl"},{"match":"⍷","name":"keyword.operator.find.apl"},{"match":",","name":"keyword.operator.comma.apl"},{"match":"⍪","name":"keyword.operator.comma-bar.apl"},{"match":"⌷","name":"keyword.operator.squad.apl"},{"match":"⍳","name":"keyword.operator.iota.apl"},{"match":"⍴","name":"keyword.operator.rho.apl"},{"match":"↑","name":"keyword.operator.take.apl"},{"match":"↓","name":"keyword.operator.drop.apl"},{"match":"⊣","name":"keyword.operator.left.apl"},{"match":"⊢","name":"keyword.operator.right.apl"},{"match":"⊤","name":"keyword.operator.encode.apl"},{"match":"⊥","name":"keyword.operator.decode.apl"},{"match":"/","name":"keyword.operator.slash.apl"},{"match":"⌿","name":"keyword.operator.slash-bar.apl"},{"match":"\\\\\\\\","name":"keyword.operator.backslash.apl"},{"match":"⍀","name":"keyword.operator.backslash-bar.apl"},{"match":"⌽","name":"keyword.operator.rotate-last.apl"},{"match":"⊖","name":"keyword.operator.rotate-first.apl"},{"match":"⍉","name":"keyword.operator.transpose.apl"},{"match":"⍋","name":"keyword.operator.grade-up.apl"},{"match":"⍒","name":"keyword.operator.grade-down.apl"},{"match":"⌹","name":"keyword.operator.quad-divide.apl"},{"match":"≡","name":"keyword.operator.identical.apl"},{"match":"≢","name":"keyword.operator.not-identical.apl"},{"match":"⊂","name":"keyword.operator.enclose.apl"},{"match":"⊃","name":"keyword.operator.pick.apl"},{"match":"∩","name":"keyword.operator.intersection.apl"},{"match":"∪","name":"keyword.operator.union.apl"},{"match":"⍎","name":"keyword.operator.hydrant.apl"},{"match":"⍕","name":"keyword.operator.thorn.apl"},{"match":"⊆","name":"keyword.operator.underbar-shoe-left.apl"},{"match":"⍸","name":"keyword.operator.underbar-iota.apl"},{"match":"¨","name":"keyword.operator.each.apl"},{"match":"⍤","name":"keyword.operator.rank.apl"},{"match":"⌸","name":"keyword.operator.quad-equal.apl"},{"match":"⍨","name":"keyword.operator.commute.apl"},{"match":"⍣","name":"keyword.operator.power.apl"},{"match":"\\\\.","name":"keyword.operator.dot.apl"},{"match":"∘","name":"keyword.operator.jot.apl"},{"match":"⍠","name":"keyword.operator.quad-colon.apl"},{"match":"&","name":"keyword.operator.ampersand.apl"},{"match":"⌶","name":"keyword.operator.i-beam.apl"},{"match":"⌺","name":"keyword.operator.quad-diamond.apl"},{"match":"@","name":"keyword.operator.at.apl"},{"match":"◊","name":"keyword.operator.lozenge.apl"},{"match":";","name":"keyword.operator.semicolon.apl"},{"match":"¯","name":"keyword.operator.high-minus.apl"},{"match":"←","name":"keyword.operator.assignment.apl"},{"match":"→","name":"keyword.control.goto.apl"},{"match":"⍬","name":"constant.language.zilde.apl"},{"match":"⋄","name":"keyword.operator.diamond.apl"},{"match":"⍫","name":"keyword.operator.lock.apl"},{"match":"⎕","name":"keyword.operator.quad.apl"},{"match":"##","name":"constant.language.namespace.parent.apl"},{"match":"#","name":"constant.language.namespace.root.apl"},{"match":"⌻","name":"keyword.operator.quad-jot.apl"},{"match":"⌼","name":"keyword.operator.quad-circle.apl"},{"match":"⌾","name":"keyword.operator.circle-jot.apl"},{"match":"⍁","name":"keyword.operator.quad-slash.apl"},{"match":"⍂","name":"keyword.operator.quad-backslash.apl"},{"match":"⍃","name":"keyword.operator.quad-less.apl"},{"match":"⍄","name":"keyword.operator.greater.apl"},{"match":"⍅","name":"keyword.operator.vane-left.apl"},{"match":"⍆","name":"keyword.operator.vane-right.apl"},{"match":"⍇","name":"keyword.operator.quad-arrow-left.apl"},{"match":"⍈","name":"keyword.operator.quad-arrow-right.apl"},{"match":"⍊","name":"keyword.operator.tack-down.apl"},{"match":"⍌","name":"keyword.operator.quad-caret-down.apl"},{"match":"⍍","name":"keyword.operator.quad-del-up.apl"},{"match":"⍏","name":"keyword.operator.vane-up.apl"},{"match":"⍐","name":"keyword.operator.quad-arrow-up.apl"},{"match":"⍑","name":"keyword.operator.tack-up.apl"},{"match":"⍓","name":"keyword.operator.quad-caret-up.apl"},{"match":"⍔","name":"keyword.operator.quad-del-down.apl"},{"match":"⍖","name":"keyword.operator.vane-down.apl"},{"match":"⍗","name":"keyword.operator.quad-arrow-down.apl"},{"match":"⍘","name":"keyword.operator.underbar-quote.apl"},{"match":"⍚","name":"keyword.operator.underbar-diamond.apl"},{"match":"⍛","name":"keyword.operator.underbar-jot.apl"},{"match":"⍜","name":"keyword.operator.underbar-circle.apl"},{"match":"⍞","name":"keyword.operator.quad-quote.apl"},{"match":"⍡","name":"keyword.operator.dotted-tack-up.apl"},{"match":"⍢","name":"keyword.operator.dotted-del.apl"},{"match":"⍥","name":"keyword.operator.dotted-circle.apl"},{"match":"⍦","name":"keyword.operator.stile-shoe-up.apl"},{"match":"⍧","name":"keyword.operator.stile-shoe-left.apl"},{"match":"⍩","name":"keyword.operator.dotted-greater.apl"},{"match":"⍭","name":"keyword.operator.stile-tilde.apl"},{"match":"⍮","name":"keyword.operator.underbar-semicolon.apl"},{"match":"⍯","name":"keyword.operator.quad-not-equal.apl"},{"match":"⍰","name":"keyword.operator.quad-question.apl"}]},"sysvars":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.quad.apl"},"2":{"name":"punctuation.definition.quad-quote.apl"}},"match":"(?:(⎕)|(⍞))[A-Za-z]*","name":"support.system.variable.apl"}]}},"scopeName":"source.apl","embeddedLangs":["html","xml","css","javascript","json"]}`)),o=[...n,...r,...t,...e,...i,a];export{o as default}; \ No newline at end of file +import{t as e}from"./javascript-CR5GavSE.js";import{t}from"./css-EYEy3Xlb.js";import{t as n}from"./html-rbi5PgIL.js";import{t as r}from"./xml-DpeacbYS.js";import{t as i}from"./json-I28f8KUm.js";var a=Object.freeze(JSON.parse(`{"displayName":"APL","fileTypes":["apl","apla","aplc","aplf","apli","apln","aplo","dyalog","dyapp","mipage"],"firstLineMatch":"[⌶-⍺]|^#!.*(?:[/\\\\s]|(?<=!)\\\\b)(?:gnu[-._]?apl|aplx?|dyalog)(?:$|\\\\s)|(?i:-\\\\*-(?:\\\\s*(?=[^:;\\\\s]+\\\\s*-\\\\*-)|(?:.*?[;\\\\s]|(?<=-\\\\*-))mode\\\\s*:\\\\s*)apl(?=[;\\\\s]|(?]?\\\\d+|))?|\\\\sex)(?=:(?:(?=\\\\s*set?\\\\s[^\\\\n:]+:)|(?!\\\\s*set?\\\\s)))(?:(?:\\\\s|\\\\s*:\\\\s*)\\\\w*(?:\\\\s*=(?:[^\\\\n\\\\\\\\\\\\s]|\\\\\\\\.)*)?)*[:\\\\s](?:filetype|ft|syntax)\\\\s*=apl(?=[:\\\\s]|$))","foldingStartMarker":"\\\\{","foldingStopMarker":"}","name":"apl","patterns":[{"match":"\\\\A#!.*$","name":"comment.line.shebang.apl"},{"include":"#heredocs"},{"include":"#main"},{"begin":"^\\\\s*((\\\\))OFF|(])NEXTFILE)\\\\b(.*)$","beginCaptures":{"1":{"name":"entity.name.command.eof.apl"},"2":{"name":"punctuation.definition.command.apl"},"3":{"name":"punctuation.definition.command.apl"},"4":{"patterns":[{"include":"#comment"}]}},"contentName":"text.embedded.apl","end":"(?=N)A"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.round.bracket.begin.apl"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.round.bracket.end.apl"}},"name":"meta.round.bracketed.group.apl","patterns":[{"include":"#main"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.square.bracket.begin.apl"}},"end":"]","endCaptures":{"0":{"name":"punctuation.square.bracket.end.apl"}},"name":"meta.square.bracketed.group.apl","patterns":[{"include":"#main"}]},{"begin":"^\\\\s*((\\\\))\\\\S+)","beginCaptures":{"1":{"name":"entity.name.command.apl"},"2":{"name":"punctuation.definition.command.apl"}},"end":"$","name":"meta.system.command.apl","patterns":[{"include":"#command-arguments"},{"include":"#command-switches"},{"include":"#main"}]},{"begin":"^\\\\s*((])\\\\S+)","beginCaptures":{"1":{"name":"entity.name.command.apl"},"2":{"name":"punctuation.definition.command.apl"}},"end":"$","name":"meta.user.command.apl","patterns":[{"include":"#command-arguments"},{"include":"#command-switches"},{"include":"#main"}]}],"repository":{"class":{"patterns":[{"begin":"(?<=\\\\s|^)((:)Class)\\\\s+('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((:)\\\\s*(?:('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*)?)?(.*?)$","beginCaptures":{"0":{"name":"meta.class.apl"},"1":{"name":"keyword.control.class.apl"},"2":{"name":"punctuation.definition.class.apl"},"3":{"name":"entity.name.type.class.apl","patterns":[{"include":"#strings"}]},"4":{"name":"entity.other.inherited-class.apl"},"5":{"name":"punctuation.separator.inheritance.apl"},"6":{"patterns":[{"include":"#strings"}]},"7":{"name":"entity.other.class.interfaces.apl","patterns":[{"include":"#csv"}]}},"end":"(?<=\\\\s|^)((:)EndClass)(?=\\\\b)","endCaptures":{"1":{"name":"keyword.control.class.apl"},"2":{"name":"punctuation.definition.class.apl"}},"patterns":[{"begin":"(?<=\\\\s|^)(:)Field(?=\\\\s)","beginCaptures":{"0":{"name":"keyword.control.field.apl"},"1":{"name":"punctuation.definition.field.apl"}},"end":"\\\\s*(←.*)?(?:$|(?=⍝))","endCaptures":{"0":{"name":"entity.other.initial-value.apl"},"1":{"patterns":[{"include":"#main"}]}},"name":"meta.field.apl","patterns":[{"match":"(?<=\\\\s|^)Public(?=\\\\s|$)","name":"storage.modifier.access.public.apl"},{"match":"(?<=\\\\s|^)Private(?=\\\\s|$)","name":"storage.modifier.access.private.apl"},{"match":"(?<=\\\\s|^)Shared(?=\\\\s|$)","name":"storage.modifier.shared.apl"},{"match":"(?<=\\\\s|^)Instance(?=\\\\s|$)","name":"storage.modifier.instance.apl"},{"match":"(?<=\\\\s|^)ReadOnly(?=\\\\s|$)","name":"storage.modifier.readonly.apl"},{"captures":{"1":{"patterns":[{"include":"#strings"}]}},"match":"('[^']*'?|[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)","name":"entity.name.type.apl"}]},{"include":"$self"}]}]},"command-arguments":{"patterns":[{"begin":"\\\\b(?=\\\\S)","end":"\\\\b(?=\\\\s)","name":"variable.parameter.argument.apl","patterns":[{"include":"#main"}]}]},"command-switches":{"patterns":[{"begin":"(?<=\\\\s)(-)([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(=)","beginCaptures":{"1":{"name":"punctuation.delimiter.switch.apl"},"2":{"name":"entity.name.switch.apl"},"3":{"name":"punctuation.assignment.switch.apl"}},"end":"\\\\b(?=\\\\s)","name":"variable.parameter.switch.apl","patterns":[{"include":"#main"}]},{"captures":{"1":{"name":"punctuation.delimiter.switch.apl"},"2":{"name":"entity.name.switch.apl"}},"match":"(?<=\\\\s)(-)([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(?!=)","name":"variable.parameter.switch.apl"}]},"comment":{"patterns":[{"begin":"⍝","captures":{"0":{"name":"punctuation.definition.comment.apl"}},"end":"$","name":"comment.line.apl"}]},"csv":{"patterns":[{"match":",","name":"punctuation.separator.apl"},{"include":"$self"}]},"definition":{"patterns":[{"begin":"^\\\\s*?(∇)(?:\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)|\\\\s*((\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(})|(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\))|(\\\\(\\\\s*\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(}\\\\s*\\\\))|(\\\\{\\\\s*\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)\\\\s*}))\\\\s*)\\\\s*(←))?\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?\\\\s*?((?<=[]\\\\s])[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*|(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)))\\\\s*(?=;|$)|(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s+)|((\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(})|(\\\\(\\\\s*\\\\{)(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(}\\\\s*\\\\))|(\\\\{\\\\s*\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)\\\\s*})))?\\\\s*(?:([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?|((\\\\()(\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)?\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)\\\\s*?((\\\\[)\\\\s*(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*(.*?)|([^]]*))\\\\s*(]))?\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)?(\\\\))))\\\\s*((?<=[]\\\\s])[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*|\\\\s*(\\\\()(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)*(\\\\)))?)\\\\s*([^;]+)?(((?>\\\\s*;(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙⎕Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)+)+)|([^⍝]+))?\\\\s*(⍝.*)?$","beginCaptures":{"0":{"name":"entity.function.definition.apl"},"1":{"name":"keyword.operator.nabla.apl"},"2":{"name":"entity.function.return-value.apl"},"3":{"name":"entity.function.return-value.shy.apl"},"4":{"name":"punctuation.definition.return-value.begin.apl"},"5":{"name":"punctuation.definition.return-value.end.apl"},"6":{"name":"punctuation.definition.return-value.begin.apl"},"7":{"name":"punctuation.definition.return-value.end.apl"},"8":{"name":"punctuation.definition.return-value.begin.apl"},"9":{"name":"punctuation.definition.return-value.end.apl"},"10":{"name":"punctuation.definition.return-value.begin.apl"},"11":{"name":"punctuation.definition.return-value.end.apl"},"12":{"name":"keyword.operator.assignment.apl"},"13":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"14":{"name":"entity.function.axis.apl"},"15":{"name":"punctuation.definition.axis.begin.apl"},"16":{"name":"invalid.illegal.extra-characters.apl"},"17":{"name":"invalid.illegal.apl"},"18":{"name":"punctuation.definition.axis.end.apl"},"19":{"name":"entity.function.arguments.right.apl"},"20":{"name":"punctuation.definition.arguments.begin.apl"},"21":{"name":"punctuation.definition.arguments.end.apl"},"22":{"name":"entity.function.arguments.left.apl"},"23":{"name":"entity.function.arguments.left.optional.apl"},"24":{"name":"punctuation.definition.arguments.begin.apl"},"25":{"name":"punctuation.definition.arguments.end.apl"},"26":{"name":"punctuation.definition.arguments.begin.apl"},"27":{"name":"punctuation.definition.arguments.end.apl"},"28":{"name":"punctuation.definition.arguments.begin.apl"},"29":{"name":"punctuation.definition.arguments.end.apl"},"30":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"31":{"name":"entity.function.axis.apl"},"32":{"name":"punctuation.definition.axis.begin.apl"},"33":{"name":"invalid.illegal.extra-characters.apl"},"34":{"name":"invalid.illegal.apl"},"35":{"name":"punctuation.definition.axis.end.apl"},"36":{"name":"entity.function.operands.apl"},"37":{"name":"punctuation.definition.operands.begin.apl"},"38":{"name":"entity.function.operands.left.apl"},"39":{"name":"entity.function.name.apl","patterns":[{"include":"#embolden"}]},"40":{"name":"entity.function.axis.apl"},"41":{"name":"punctuation.definition.axis.begin.apl"},"42":{"name":"invalid.illegal.extra-characters.apl"},"43":{"name":"invalid.illegal.apl"},"44":{"name":"punctuation.definition.axis.end.apl"},"45":{"name":"entity.function.operands.right.apl"},"46":{"name":"punctuation.definition.operands.end.apl"},"47":{"name":"entity.function.arguments.right.apl"},"48":{"name":"punctuation.definition.arguments.begin.apl"},"49":{"name":"punctuation.definition.arguments.end.apl"},"50":{"name":"invalid.illegal.arguments.right.apl"},"51":{"name":"entity.function.local-variables.apl"},"52":{"patterns":[{"match":";","name":"punctuation.separator.apl"}]},"53":{"name":"invalid.illegal.local-variables.apl"},"54":{"name":"comment.line.apl"}},"end":"^\\\\s*?(?:(∇)|(⍫))\\\\s*?(⍝.*?)?$","endCaptures":{"1":{"name":"keyword.operator.nabla.apl"},"2":{"name":"keyword.operator.lock.apl"},"3":{"name":"comment.line.apl"}},"name":"meta.function.apl","patterns":[{"captures":{"0":{"name":"entity.function.local-variables.apl"},"1":{"patterns":[{"match":";","name":"punctuation.separator.apl"}]}},"match":"^\\\\s*((?>;(?:\\\\s*[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙⎕Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*\\\\s*)+)+)","name":"entity.function.definition.apl"},{"include":"$self"}]}]},"embedded-apl":{"patterns":[{"begin":"(?i)(<([%?])(?:apl(?=\\\\s+)|=))","beginCaptures":{"1":{"name":"punctuation.section.embedded.begin.apl"}},"end":"(?<=\\\\s)(\\\\2>)","endCaptures":{"1":{"name":"punctuation.section.embedded.end.apl"}},"name":"meta.embedded.block.apl","patterns":[{"include":"#main"}]}]},"embolden":{"patterns":[{"match":".+","name":"markup.bold.identifier.apl"}]},"heredocs":{"patterns":[{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?HTML?.*?|END-OF-⎕INP)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.html.basic","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"text.html.basic"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:XML|XSLT|SVG|RSS).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.xml","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"text.xml"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:CSS|stylesheet).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.css","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.css"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?(?:JS(?!ON)|(?:ECMA|J|Java).?Script).*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.js","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.js"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])((?i).*?JSON.*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"source.embedded.json","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"source.json"},{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])(?i)((?:Raw|Plain)?\\\\s*Te?xt)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"contentName":"text.embedded.plain","end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"#embedded-apl"}]},{"begin":"^.*?⎕INP\\\\s+([\\"'])(.*?)\\\\1.*$","beginCaptures":{"0":{"patterns":[{"include":"#main"}]}},"end":"^.*?\\\\2.*?$","endCaptures":{"0":{"name":"constant.other.apl"}},"name":"meta.heredoc.apl","patterns":[{"include":"$self"}]}]},"label":{"patterns":[{"captures":{"1":{"name":"entity.label.name.apl"},"2":{"name":"punctuation.definition.label.end.apl"}},"match":"^\\\\s*([A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*)(:)","name":"meta.label.apl"}]},"lambda":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.lambda.begin.apl"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.lambda.end.apl"}},"name":"meta.lambda.function.apl","patterns":[{"include":"#main"},{"include":"#lambda-variables"}]},"lambda-variables":{"patterns":[{"match":"⍺⍺","name":"constant.language.lambda.operands.left.apl"},{"match":"⍵⍵","name":"constant.language.lambda.operands.right.apl"},{"match":"[⍶⍺]","name":"constant.language.lambda.arguments.left.apl"},{"match":"[⍵⍹]","name":"constant.language.lambda.arguments.right.apl"},{"match":"χ","name":"constant.language.lambda.arguments.axis.apl"},{"match":"∇∇","name":"constant.language.lambda.operands.self.operator.apl"},{"match":"∇","name":"constant.language.lambda.operands.self.function.apl"},{"match":"λ","name":"constant.language.lambda.symbol.apl"}]},"main":{"patterns":[{"include":"#class"},{"include":"#definition"},{"include":"#comment"},{"include":"#label"},{"include":"#sck"},{"include":"#strings"},{"include":"#number"},{"include":"#lambda"},{"include":"#sysvars"},{"include":"#symbols"},{"include":"#name"}]},"name":{"patterns":[{"match":"[A-Z_a-zÀ-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ][0-9A-Z_a-z¯À-ÖØ-Ýß-öø-üþ∆⍙Ⓐ-Ⓩ]*","name":"variable.other.readwrite.apl"}]},"number":{"patterns":[{"match":"¯?[0-9][0-9A-Za-z¯]*(?:\\\\.[0-9Ee¯][0-9A-Za-z¯]*)*|¯?\\\\.[0-9Ee][0-9A-Za-z¯]*","name":"constant.numeric.apl"}]},"sck":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.sck.begin.apl"}},"match":"(?<=\\\\s|^)(:)[A-Za-z]+","name":"keyword.control.sck.apl"}]},"strings":{"patterns":[{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apl"}},"end":"'|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.apl"}},"name":"string.quoted.single.apl","patterns":[{"match":"[^']*[^\\\\n\\\\r'\\\\\\\\]$","name":"invalid.illegal.string.apl"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apl"}},"end":"\\"|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.apl"}},"name":"string.quoted.double.apl","patterns":[{"match":"[^\\"]*[^\\\\n\\\\r\\"\\\\\\\\]$","name":"invalid.illegal.string.apl"}]}]},"symbols":{"patterns":[{"match":"(?<=\\\\s)←(?=\\\\s|$)","name":"keyword.spaced.operator.assignment.apl"},{"match":"(?<=\\\\s)→(?=\\\\s|$)","name":"keyword.spaced.control.goto.apl"},{"match":"(?<=\\\\s)≡(?=\\\\s|$)","name":"keyword.spaced.operator.identical.apl"},{"match":"(?<=\\\\s)≢(?=\\\\s|$)","name":"keyword.spaced.operator.not-identical.apl"},{"match":"\\\\+","name":"keyword.operator.plus.apl"},{"match":"[-−]","name":"keyword.operator.minus.apl"},{"match":"×","name":"keyword.operator.times.apl"},{"match":"÷","name":"keyword.operator.divide.apl"},{"match":"⌊","name":"keyword.operator.floor.apl"},{"match":"⌈","name":"keyword.operator.ceiling.apl"},{"match":"[|∣]","name":"keyword.operator.absolute.apl"},{"match":"[*⋆]","name":"keyword.operator.exponent.apl"},{"match":"⍟","name":"keyword.operator.logarithm.apl"},{"match":"○","name":"keyword.operator.circle.apl"},{"match":"!","name":"keyword.operator.factorial.apl"},{"match":"∧","name":"keyword.operator.and.apl"},{"match":"∨","name":"keyword.operator.or.apl"},{"match":"⍲","name":"keyword.operator.nand.apl"},{"match":"⍱","name":"keyword.operator.nor.apl"},{"match":"<","name":"keyword.operator.less.apl"},{"match":"≤","name":"keyword.operator.less-or-equal.apl"},{"match":"=","name":"keyword.operator.equal.apl"},{"match":"≥","name":"keyword.operator.greater-or-equal.apl"},{"match":">","name":"keyword.operator.greater.apl"},{"match":"≠","name":"keyword.operator.not-equal.apl"},{"match":"[~∼]","name":"keyword.operator.tilde.apl"},{"match":"\\\\?","name":"keyword.operator.random.apl"},{"match":"[∈∊]","name":"keyword.operator.member-of.apl"},{"match":"⍷","name":"keyword.operator.find.apl"},{"match":",","name":"keyword.operator.comma.apl"},{"match":"⍪","name":"keyword.operator.comma-bar.apl"},{"match":"⌷","name":"keyword.operator.squad.apl"},{"match":"⍳","name":"keyword.operator.iota.apl"},{"match":"⍴","name":"keyword.operator.rho.apl"},{"match":"↑","name":"keyword.operator.take.apl"},{"match":"↓","name":"keyword.operator.drop.apl"},{"match":"⊣","name":"keyword.operator.left.apl"},{"match":"⊢","name":"keyword.operator.right.apl"},{"match":"⊤","name":"keyword.operator.encode.apl"},{"match":"⊥","name":"keyword.operator.decode.apl"},{"match":"/","name":"keyword.operator.slash.apl"},{"match":"⌿","name":"keyword.operator.slash-bar.apl"},{"match":"\\\\\\\\","name":"keyword.operator.backslash.apl"},{"match":"⍀","name":"keyword.operator.backslash-bar.apl"},{"match":"⌽","name":"keyword.operator.rotate-last.apl"},{"match":"⊖","name":"keyword.operator.rotate-first.apl"},{"match":"⍉","name":"keyword.operator.transpose.apl"},{"match":"⍋","name":"keyword.operator.grade-up.apl"},{"match":"⍒","name":"keyword.operator.grade-down.apl"},{"match":"⌹","name":"keyword.operator.quad-divide.apl"},{"match":"≡","name":"keyword.operator.identical.apl"},{"match":"≢","name":"keyword.operator.not-identical.apl"},{"match":"⊂","name":"keyword.operator.enclose.apl"},{"match":"⊃","name":"keyword.operator.pick.apl"},{"match":"∩","name":"keyword.operator.intersection.apl"},{"match":"∪","name":"keyword.operator.union.apl"},{"match":"⍎","name":"keyword.operator.hydrant.apl"},{"match":"⍕","name":"keyword.operator.thorn.apl"},{"match":"⊆","name":"keyword.operator.underbar-shoe-left.apl"},{"match":"⍸","name":"keyword.operator.underbar-iota.apl"},{"match":"¨","name":"keyword.operator.each.apl"},{"match":"⍤","name":"keyword.operator.rank.apl"},{"match":"⌸","name":"keyword.operator.quad-equal.apl"},{"match":"⍨","name":"keyword.operator.commute.apl"},{"match":"⍣","name":"keyword.operator.power.apl"},{"match":"\\\\.","name":"keyword.operator.dot.apl"},{"match":"∘","name":"keyword.operator.jot.apl"},{"match":"⍠","name":"keyword.operator.quad-colon.apl"},{"match":"&","name":"keyword.operator.ampersand.apl"},{"match":"⌶","name":"keyword.operator.i-beam.apl"},{"match":"⌺","name":"keyword.operator.quad-diamond.apl"},{"match":"@","name":"keyword.operator.at.apl"},{"match":"◊","name":"keyword.operator.lozenge.apl"},{"match":";","name":"keyword.operator.semicolon.apl"},{"match":"¯","name":"keyword.operator.high-minus.apl"},{"match":"←","name":"keyword.operator.assignment.apl"},{"match":"→","name":"keyword.control.goto.apl"},{"match":"⍬","name":"constant.language.zilde.apl"},{"match":"⋄","name":"keyword.operator.diamond.apl"},{"match":"⍫","name":"keyword.operator.lock.apl"},{"match":"⎕","name":"keyword.operator.quad.apl"},{"match":"##","name":"constant.language.namespace.parent.apl"},{"match":"#","name":"constant.language.namespace.root.apl"},{"match":"⌻","name":"keyword.operator.quad-jot.apl"},{"match":"⌼","name":"keyword.operator.quad-circle.apl"},{"match":"⌾","name":"keyword.operator.circle-jot.apl"},{"match":"⍁","name":"keyword.operator.quad-slash.apl"},{"match":"⍂","name":"keyword.operator.quad-backslash.apl"},{"match":"⍃","name":"keyword.operator.quad-less.apl"},{"match":"⍄","name":"keyword.operator.greater.apl"},{"match":"⍅","name":"keyword.operator.vane-left.apl"},{"match":"⍆","name":"keyword.operator.vane-right.apl"},{"match":"⍇","name":"keyword.operator.quad-arrow-left.apl"},{"match":"⍈","name":"keyword.operator.quad-arrow-right.apl"},{"match":"⍊","name":"keyword.operator.tack-down.apl"},{"match":"⍌","name":"keyword.operator.quad-caret-down.apl"},{"match":"⍍","name":"keyword.operator.quad-del-up.apl"},{"match":"⍏","name":"keyword.operator.vane-up.apl"},{"match":"⍐","name":"keyword.operator.quad-arrow-up.apl"},{"match":"⍑","name":"keyword.operator.tack-up.apl"},{"match":"⍓","name":"keyword.operator.quad-caret-up.apl"},{"match":"⍔","name":"keyword.operator.quad-del-down.apl"},{"match":"⍖","name":"keyword.operator.vane-down.apl"},{"match":"⍗","name":"keyword.operator.quad-arrow-down.apl"},{"match":"⍘","name":"keyword.operator.underbar-quote.apl"},{"match":"⍚","name":"keyword.operator.underbar-diamond.apl"},{"match":"⍛","name":"keyword.operator.underbar-jot.apl"},{"match":"⍜","name":"keyword.operator.underbar-circle.apl"},{"match":"⍞","name":"keyword.operator.quad-quote.apl"},{"match":"⍡","name":"keyword.operator.dotted-tack-up.apl"},{"match":"⍢","name":"keyword.operator.dotted-del.apl"},{"match":"⍥","name":"keyword.operator.dotted-circle.apl"},{"match":"⍦","name":"keyword.operator.stile-shoe-up.apl"},{"match":"⍧","name":"keyword.operator.stile-shoe-left.apl"},{"match":"⍩","name":"keyword.operator.dotted-greater.apl"},{"match":"⍭","name":"keyword.operator.stile-tilde.apl"},{"match":"⍮","name":"keyword.operator.underbar-semicolon.apl"},{"match":"⍯","name":"keyword.operator.quad-not-equal.apl"},{"match":"⍰","name":"keyword.operator.quad-question.apl"}]},"sysvars":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.quad.apl"},"2":{"name":"punctuation.definition.quad-quote.apl"}},"match":"(?:(⎕)|(⍞))[A-Za-z]*","name":"support.system.variable.apl"}]}},"scopeName":"source.apl","embeddedLangs":["html","xml","css","javascript","json"]}`)),o=[...n,...r,...t,...e,...i,a];export{o as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/astro-DPheOMp2.js b/internal/webui/dist/assets/astro-BdYFGcnW.js similarity index 98% rename from internal/webui/dist/assets/astro-DPheOMp2.js rename to internal/webui/dist/assets/astro-BdYFGcnW.js index a83c11b..ae7e138 100644 --- a/internal/webui/dist/assets/astro-DPheOMp2.js +++ b/internal/webui/dist/assets/astro-BdYFGcnW.js @@ -1 +1 @@ -import{t as e}from"./javascript-cZ915vnh.js";import{t}from"./css-D_sUZuNy.js";import{t as n}from"./json-xe-_kEqr.js";import{t as r}from"./typescript-Dxzp_mdn.js";import i from"./postcss-BXeXVLqQ.js";import{t as a}from"./tsx-C7U7cVa6.js";var o=Object.freeze(JSON.parse(`{"displayName":"Astro","fileTypes":["astro"],"injections":{"L:(meta.script.astro) (meta.lang.js | meta.lang.javascript | meta.lang.partytown | meta.lang.node) - (meta source)":{"patterns":[{"begin":"(?<=>)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)","patterns":[{"include":"#interpolation"},{"include":"#attribute-literal"},{"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.astro"},{"begin":"(\\")","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","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.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","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"}]}]}]}]},"attributes-interpolated":{"begin":"(?)","patterns":[{"include":"#attributes-value"}]}]},"attributes-value":{"patterns":[{"include":"#interpolation"},{"match":"([^\\"'/<=>\`\\\\s]|/(?!>))+","name":"string.unquoted.astro"},{"begin":"([\\"'])","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro"},{"include":"#attribute-literal"}]},"comments":{"begin":"","name":"comment.block.astro","patterns":[{"match":"\\\\G-?>|)|--!>","name":"invalid.illegal.characters-not-allowed-here.astro"}]},"entities":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"912":{"name":"punctuation.definition.entity.astro"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)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([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|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([24])|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([lr])|p(s|c([au]p)|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((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|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((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|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((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)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([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|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([34]))?|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((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|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([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?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([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|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|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|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([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|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((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?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([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|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((?:lti|)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|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|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([abc]))?|in(dot|v([abc])|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([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|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((?:Slant|)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((?:n|ck)Space)|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)?|[fm])?|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((?:Double|)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([ou])|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(d??il)|aron)|Barr|t(hree|imes|ri([ef]|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([de]|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([du])|e)|ac([ek]))|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([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|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([ef]))?)|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((?:Right|Down|Up|Left)Arrow)|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([ry])|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((?:lef|righ)tarrow))|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((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|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((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|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([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|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(n?j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute)))(;)","name":"constant.character.entity.named.$2.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[0-9]+(;)","name":"constant.character.entity.numeric.decimal.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[Xx]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.astro"},{"match":"&(?=[0-9A-Za-z]+;)","name":"invalid.illegal.ambiguous-ampersand.astro"}]},"frontmatter":{"begin":"\\\\A(-{3})\\\\s*$","beginCaptures":{"1":{"name":"comment"}},"contentName":"source.ts","end":"(^|\\\\G)(-{3})|\\\\.{3}\\\\s*$","endCaptures":{"2":{"name":"comment"}},"patterns":[{"include":"source.ts"}]},"interpolation":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.astro"}},"contentName":"meta.embedded.expression.astro source.tsx","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.astro"}},"patterns":[{"begin":"\\\\G\\\\s*(?=\\\\{)","end":"(?<=})","patterns":[{"include":"source.tsx#object-literal"}]},{"include":"source.tsx"}]}]},"scope":{"patterns":[{"include":"#comments"},{"include":"#tags"},{"include":"#interpolation"},{"include":"#entities"}]},"tags":{"patterns":[{"include":"#tags-raw"},{"include":"#tags-lang"},{"include":"#tags-void"},{"include":"#tags-general-end"},{"include":"#tags-general-start"}]},"tags-end-node":{"captures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]},"3":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"},"4":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"match":"()|(/>)"},"tags-general-end":{"begin":"(\\\\s]*)","beginCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]}},"end":"(>)","endCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro"},"tags-general-start":{"begin":"(<)([^/>\\\\s]*)","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"(/?>)","endCaptures":{"1":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro","patterns":[{"include":"#tags-start-attributes"}]},"tags-lang":{"begin":"<(s(?:cript|tyle))","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.$1.astro","patterns":[{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/)?(application/ld\\\\+json)\\\\2)","end":"(?=)","name":"meta.lang.json.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(module)\\\\2)","end":"(?=)","name":"meta.lang.javascript.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/|application/)?([+/\\\\w]+)\\\\2)","end":"(?=)","name":"meta.lang.$3.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"include":"#tags-lang-start-attributes"}]},"tags-lang-start-attributes":{"begin":"\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.astro"}},"name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-name":{"patterns":[{"match":"[A-Z][0-9A-Z_a-z]*","name":"support.class.component.astro"},{"match":"[a-z][0-:\\\\w]*-[-0-:\\\\w]*","name":"meta.tag.custom.astro entity.name.tag.astro"},{"match":"[a-z][-0-:\\\\w]*","name":"entity.name.tag.astro"}]},"tags-raw":{"begin":"<([^!/<>?\\\\s]+)(?=[^>]+is:raw).*?","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"contentName":"source.unknown","end":"|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.raw.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},"tags-start-attributes":{"begin":"\\\\G","end":"(?=/?>)","name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-start-node":{"captures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"patterns":[{"include":"#tags-name"}]}},"match":"(<)([^/>\\\\s]*)","name":"meta.tag.start.astro"},"tags-void":{"begin":"(<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"name":"entity.name.tag.astro"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.begin.astro"}},"name":"meta.tag.void.astro","patterns":[{"include":"#attributes"}]},"text":{"patterns":[{"begin":"(?<=^|---|[>}])","end":"(?=[<{]|$)","name":"text.astro","patterns":[{"include":"#entities"}]}]}},"scopeName":"source.astro","embeddedLangs":["json","javascript","typescript","css","postcss","tsx"],"embeddedLangsLazy":["sass","scss","stylus","less"]}`)),s=[...n,...e,...r,...t,...i,...a,o];export{s as default}; \ No newline at end of file +import{t as e}from"./javascript-CR5GavSE.js";import{t}from"./css-EYEy3Xlb.js";import{t as n}from"./json-I28f8KUm.js";import{t as r}from"./typescript-DeMv-M_d.js";import i from"./postcss-BXeXVLqQ.js";import{t as a}from"./tsx-B01kvZiV.js";var o=Object.freeze(JSON.parse(`{"displayName":"Astro","fileTypes":["astro"],"injections":{"L:(meta.script.astro) (meta.lang.js | meta.lang.javascript | meta.lang.partytown | meta.lang.node) - (meta source)":{"patterns":[{"begin":"(?<=>)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)","patterns":[{"include":"#interpolation"},{"include":"#attribute-literal"},{"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.astro"},{"begin":"(\\")","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","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.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro","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"}]}]}]}]},"attributes-interpolated":{"begin":"(?)","patterns":[{"include":"#attributes-value"}]}]},"attributes-value":{"patterns":[{"include":"#interpolation"},{"match":"([^\\"'/<=>\`\\\\s]|/(?!>))+","name":"string.unquoted.astro"},{"begin":"([\\"'])","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.astro"}},"end":"\\\\1","endCaptures":{"0":{"name":"punctuation.definition.string.end.astro"}},"name":"string.quoted.astro"},{"include":"#attribute-literal"}]},"comments":{"begin":"","name":"comment.block.astro","patterns":[{"match":"\\\\G-?>|)|--!>","name":"invalid.illegal.characters-not-allowed-here.astro"}]},"entities":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"912":{"name":"punctuation.definition.entity.astro"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)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([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|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([24])|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([lr])|p(s|c([au]p)|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((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|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((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|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((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)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([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|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([34]))?|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((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|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([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?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([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|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|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|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([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|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((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?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([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|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((?:lti|)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|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|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([abc]))?|in(dot|v([abc])|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([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|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((?:Slant|)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((?:n|ck)Space)|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)?|[fm])?|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((?:Double|)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([ou])|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(d??il)|aron)|Barr|t(hree|imes|ri([ef]|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([de]|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([du])|e)|ac([ek]))|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([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|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([ef]))?)|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((?:Right|Down|Up|Left)Arrow)|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([ry])|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((?:lef|righ)tarrow))|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((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|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((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|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([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|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(n?j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute)))(;)","name":"constant.character.entity.named.$2.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[0-9]+(;)","name":"constant.character.entity.numeric.decimal.astro"},{"captures":{"1":{"name":"punctuation.definition.entity.astro"},"3":{"name":"punctuation.definition.entity.astro"}},"match":"(&)#[Xx]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.astro"},{"match":"&(?=[0-9A-Za-z]+;)","name":"invalid.illegal.ambiguous-ampersand.astro"}]},"frontmatter":{"begin":"\\\\A(-{3})\\\\s*$","beginCaptures":{"1":{"name":"comment"}},"contentName":"source.ts","end":"(^|\\\\G)(-{3})|\\\\.{3}\\\\s*$","endCaptures":{"2":{"name":"comment"}},"patterns":[{"include":"source.ts"}]},"interpolation":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.astro"}},"contentName":"meta.embedded.expression.astro source.tsx","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.astro"}},"patterns":[{"begin":"\\\\G\\\\s*(?=\\\\{)","end":"(?<=})","patterns":[{"include":"source.tsx#object-literal"}]},{"include":"source.tsx"}]}]},"scope":{"patterns":[{"include":"#comments"},{"include":"#tags"},{"include":"#interpolation"},{"include":"#entities"}]},"tags":{"patterns":[{"include":"#tags-raw"},{"include":"#tags-lang"},{"include":"#tags-void"},{"include":"#tags-general-end"},{"include":"#tags-general-start"}]},"tags-end-node":{"captures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]},"3":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"},"4":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"match":"()|(/>)"},"tags-general-end":{"begin":"(\\\\s]*)","beginCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.begin.astro"},"2":{"name":"meta.tag.end.astro","patterns":[{"include":"#tags-name"}]}},"end":"(>)","endCaptures":{"1":{"name":"meta.tag.end.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro"},"tags-general-start":{"begin":"(<)([^/>\\\\s]*)","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"(/?>)","endCaptures":{"1":{"name":"meta.tag.start.astro punctuation.definition.tag.end.astro"}},"name":"meta.scope.tag.$2.astro","patterns":[{"include":"#tags-start-attributes"}]},"tags-lang":{"begin":"<(s(?:cript|tyle))","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"end":"|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.$1.astro","patterns":[{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/)?(application/ld\\\\+json)\\\\2)","end":"(?=)","name":"meta.lang.json.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(module)\\\\2)","end":"(?=)","name":"meta.lang.javascript.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"begin":"\\\\G(?=\\\\s*[^>]*?(type|lang)\\\\s*=\\\\s*([\\"']?)(?:text/|application/)?([+/\\\\w]+)\\\\2)","end":"(?=)","name":"meta.lang.$3.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},{"include":"#tags-lang-start-attributes"}]},"tags-lang-start-attributes":{"begin":"\\\\G","end":"(?=/>)|>","endCaptures":{"0":{"name":"punctuation.definition.tag.end.astro"}},"name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-name":{"patterns":[{"match":"[A-Z][0-9A-Z_a-z]*","name":"support.class.component.astro"},{"match":"[a-z][0-:\\\\w]*-[-0-:\\\\w]*","name":"meta.tag.custom.astro entity.name.tag.astro"},{"match":"[a-z][-0-:\\\\w]*","name":"entity.name.tag.astro"}]},"tags-raw":{"begin":"<([^!/<>?\\\\s]+)(?=[^>]+is:raw).*?","beginCaptures":{"0":{"patterns":[{"include":"#tags-start-node"}]}},"contentName":"source.unknown","end":"|/>","endCaptures":{"0":{"patterns":[{"include":"#tags-end-node"}]}},"name":"meta.scope.tag.$1.astro meta.raw.astro","patterns":[{"include":"#tags-lang-start-attributes"}]},"tags-start-attributes":{"begin":"\\\\G","end":"(?=/?>)","name":"meta.tag.start.astro","patterns":[{"include":"#attributes"}]},"tags-start-node":{"captures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"patterns":[{"include":"#tags-name"}]}},"match":"(<)([^/>\\\\s]*)","name":"meta.tag.start.astro"},"tags-void":{"begin":"(<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\\\\s|/?>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.astro"},"2":{"name":"entity.name.tag.astro"}},"end":"/?>","endCaptures":{"0":{"name":"punctuation.definition.tag.begin.astro"}},"name":"meta.tag.void.astro","patterns":[{"include":"#attributes"}]},"text":{"patterns":[{"begin":"(?<=^|---|[>}])","end":"(?=[<{]|$)","name":"text.astro","patterns":[{"include":"#entities"}]}]}},"scopeName":"source.astro","embeddedLangs":["json","javascript","typescript","css","postcss","tsx"],"embeddedLangsLazy":["sass","scss","stylus","less"]}`)),s=[...n,...e,...r,...t,...i,...a,o];export{s as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/blade-MWnOITg0.js b/internal/webui/dist/assets/blade-Dv4XuYG7.js similarity index 99% rename from internal/webui/dist/assets/blade-MWnOITg0.js rename to internal/webui/dist/assets/blade-Dv4XuYG7.js index 57799ec..8cb3269 100644 --- a/internal/webui/dist/assets/blade-MWnOITg0.js +++ b/internal/webui/dist/assets/blade-Dv4XuYG7.js @@ -1 +1 @@ -import{t as e}from"./javascript-cZ915vnh.js";import{t}from"./css-D_sUZuNy.js";import{t as n}from"./html-CQSL4Rts.js";import{t as r}from"./xml-BOKYiS6A.js";import{t as i}from"./json-xe-_kEqr.js";import a from"./html-derivative-Xrtwll_i.js";import{t as o}from"./sql-ClIVuo9t.js";var s=Object.freeze(JSON.parse(`{"displayName":"Blade","fileTypes":["blade.php"],"foldingStartMarker":"(/\\\\*|\\\\{\\\\s*$|<<))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.php"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.php"}},"patterns":[{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]}]},{"begin":"<\\\\?(?i:php|=)?(?![^?]*\\\\?>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]},{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"}},"name":"meta.embedded.line.php","patterns":[{"captures":{"1":{"name":"source.php"},"2":{"name":"punctuation.section.embedded.end.php"},"3":{"name":"source.php"}},"match":"\\\\G(\\\\s*)((\\\\?))(?=>)","name":"meta.special.empty-tag.php"},{"begin":"\\\\G","contentName":"source.php","end":"(\\\\?)(?=>)","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"patterns":[{"include":"#language"}]}]}]}},"name":"blade","patterns":[{"include":"text.html.derivative"}],"repository":{"balance_brackets":{"patterns":[{"begin":"\\\\(","end":"\\\\)","patterns":[{"include":"#balance_brackets"}]},{"match":"[^()]+"}]},"blade":{"patterns":[{"begin":"\\\\{\\\\{--","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.blade"}},"end":"--}}","endCaptures":{"0":{"name":"punctuation.definition.comment.end.blade"}},"name":"comment.block.blade","patterns":[{"begin":"^(\\\\s*)(?=<\\\\?(?![^?]*\\\\?>))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.php"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.php"}},"name":"invalid.illegal.php-code-in-comment.blade","patterns":[{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]}]},{"begin":"<\\\\?(?i:php|=)?(?![^?]*\\\\?>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"invalid.illegal.php-code-in-comment.blade.meta.embedded.block.php","patterns":[{"include":"#language"}]},{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"}},"name":"invalid.illegal.php-code-in-comment.blade.meta.embedded.line.php","patterns":[{"captures":{"1":{"name":"source.php"},"2":{"name":"punctuation.section.embedded.end.php"},"3":{"name":"source.php"}},"match":"\\\\G(\\\\s*)((\\\\?))(?=>)","name":"meta.special.empty-tag.php"},{"begin":"\\\\G","contentName":"source.php","end":"(\\\\?)(?=>)","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"patterns":[{"include":"#language"}]}]}]},{"begin":"(?)","name":"comment.line.double-slash.php"}]},{"begin":"(^\\\\s+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.php"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"end":"\\\\n|(?=\\\\?>)","name":"comment.line.number-sign.php"}]}]},"constants":{"patterns":[{"match":"(?i)\\\\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\\\b","name":"constant.language.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(DEFAULT_INCLUDE_PATH|EAR_(INSTALL|EXTENSION)_DIR|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|DEPRECATED|ERROR|NOTICE|PARSE|RECOVERABLE_ERROR|STRICT|USER_(DEPRECATED|ERROR|NOTICE|WARNING)|WARNING)|PHP_(ROUND_HALF_(DOWN|EVEN|ODD|UP)|(MAJOR|MINOR|RELEASE)_VERSION|MAXPATHLEN|BINDIR|SHLIB_SUFFIX|SYSCONFDIR|SAPI|CONFIG_FILE_(PATH|SCAN_DIR)|INT_(MAX|SIZE)|ZTS|OS|OUTPUT_HANDLER_(START|CONT|END)|DEBUG|DATADIR|URL_(SCHEME|HOST|USER|PORT|PASS|PATH|QUERY|FRAGMENT)|PREFIX|EXTRA_VERSION|EXTENSION_DIR|EOL|VERSION(_ID)?|WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)|VERSION_(M(?:AJOR|INOR))|BUILD|SUITEMASK|SP_(M(?:AJOR|INOR))|PRODUCTTYPE|PLATFORM)|LIBDIR|LOCALSTATEDIR)|STD(ERR|IN|OUT)|ZEND_(DEBUG_BUILD|THREAD_SAFE))\\\\b","name":"support.constant.core.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(__COMPILER_HALT_OFFSET__|AB(MON_([1-9]|10|11|12)|DAY[1-7])|AM_STR|ASSERT_(ACTIVE|BAIL|CALLBACK_QUIET_EVAL|WARNING)|ALT_DIGITS|CASE_(UPPER|LOWER)|CHAR_MAX|CONNECTION_(ABORTED|NORMAL|TIMEOUT)|CODESET|COUNT_(NORMAL|RECURSIVE)|CREDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)|CRYPT_(BLOWFISH|EXT_DES|MD5|SHA(256|512)|SALT_LENGTH|STD_DES)|CURRENCY_SYMBOL|D_(T_)?FMT|DATE_(ATOM|COOKIE|ISO8601|RFC(822|850|1036|1123|2822|3339)|RSS|W3C)|DAY_[1-7]|DECIMAL_POINT|DIRECTORY_SEPARATOR|ENT_(COMPAT|IGNORE|(NO)?QUOTES)|EXTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|REFS|SKIP)|ERA(_(D_(T_)?FMT)|T_FMT|YEAR)?|FRAC_DIGITS|GROUPING|HASH_HMAC|HTML_(ENTITIES|SPECIALCHARS)|INF|INFO_(ALL|CREDITS|CONFIGURATION|ENVIRONMENT|GENERAL|LICENSEMODULES|VARIABLES)|INI_(ALL|CANNER_(NORMAL|RAW)|PERDIR|SYSTEM|USER)|INT_(CURR_SYMBOL|FRAC_DIGITS)|LC_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|LOCK_(EX|NB|SH|UN)|LOG_(ALERT|AUTH(PRIV)?|CRIT|CRON|CONS|DAEMON|DEBUG|EMERG|ERR|INFO|LOCAL[1-7]|LPR|KERN|MAIL|NEWS|NODELAY|NOTICE|NOWAIT|ODELAY|PID|PERROR|WARNING|SYSLOG|UCP|USER)|M_(1_PI|SQRT(1_2|[23]|PI)|2_(SQRT)?PI|PI(_([24]))?|E(ULER)?|LN(10|2|PI)|LOG(10|2)E)|MON_([1-9]|10|11|12|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|N_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|NAN|NEGATIVE_SIGN|NO(EXPR|STR)|P_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|PM_STR|POSITIVE_SIGN|PATH(_SEPARATOR|INFO_(EXTENSION|(BASE|DIR|FILE)NAME))|RADIXCHAR|SEEK_(CUR|END|SET)|SORT_(ASC|DESC|LOCALE_STRING|REGULAR|STRING)|STR_PAD_(BOTH|LEFT|RIGHT)|T_FMT(_AMPM)?|THOUSEP|THOUSANDS_SEP|UPLOAD_ERR_(CANT_WRITE|EXTENSION|(FORM|INI)_SIZE|NO_(FILE|TMP_DIR)|OK|PARTIAL)|YES(EXPR|STR))\\\\b","name":"support.constant.std.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)|XML_(SAX_IMPL|(DTD|DOCUMENT(_(FRAG|TYPE))?|HTML_DOCUMENT|NOTATION|NAMESPACE_DECL|PI|COMMENT|DATA_SECTION|TEXT)_NODE|OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)|ERROR_((BAD_CHAR|(ATTRIBUTE_EXTERNAL|BINARY|PARAM|RECURSIVE)_ENTITY)_REF|MISPLACED_XML_PI|SYNTAX|NONE|NO_(MEMORY|ELEMENTS)|TAG_MISMATCH|INCORRECT_ENCODING|INVALID_TOKEN|DUPLICATE_ATTRIBUTE|UNCLOSED_(CDATA_SECTION|TOKEN)|UNDEFINED_ENTITY|UNKNOWN_ENCODING|JUNK_AFTER_DOC_ELEMENT|PARTIAL_CHAR|EXTERNAL_ENTITY_HANDLING|ASYNC_ENTITY)|ENTITY_(((REF|DECL)_)?NODE)|ELEMENT(_DECL)?_NODE|LOCAL_NAMESPACE|ATTRIBUTE_(N(?:MTOKEN(S)?|OTATION|ODE))|CDATA|ID(REF(S)?)?|DECL_NODE|ENTITY|ENUMERATION)|MHASH_(RIPEMD(128|160|256|320)|GOST|MD([245])|SHA(1|224|256|384|512)|SNEFRU256|HAVAL(128|160|192|224|256)|CRC23(B)?|TIGER(1(?:28|60))?|WHIRLPOOL|ADLER32)|MYSQL_(BOTH|NUM|CLIENT_(SSL|COMPRESS|IGNORE_SPACE|INTERACTIVE|ASSOC))|MYSQLI_(REPORT_(STRICT|INDEX|OFF|ERROR|ALL)|REFRESH_(GRANT|MASTER|BACKUP_LOG|STATUS|SLAVE|HOSTS|THREADS|TABLES|LOG)|READ_DEFAULT_(FILE|GROUP)|(GROUP|MULTIPLE_KEY|BINARY|BLOB)_FLAG|BOTH|STMT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|STORE_RESULT|SERVER_QUERY_(NO_((GOOD_)?INDEX_USED)|WAS_SLOW)|SET_(CHARSET_NAME|FLAG)|NO_(D(?:EFAULT_VALUE_FLAG|ATA))|NOT_NULL_FLAG|NUM(_FLAG)?|CURSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)|CLIENT_(SSL|NO_SCHEMA|COMPRESS|IGNORE_SPACE|INTERACTIVE|FOUND_ROWS)|TYPE_(GEOMETRY|((MEDIUM|LONG|TINY)_)?BLOB|BIT|SHORT|STRING|SET|YEAR|NULL|NEWDECIMAL|NEWDATE|CHAR|TIME(STAMP)?|TINY|INT24|INTERVAL|DOUBLE|DECIMAL|DATE(TIME)?|ENUM|VAR_STRING|FLOAT|LONG(LONG)?)|TIME_STAMP_FLAG|INIT_COMMAND|ZEROFILL_FLAG|ON_UPDATE_NOW_FLAG|OPT_(NET_((CMD|READ)_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE)|DEBUG_TRACE_ENABLED|DATA_TRUNCATED|USE_RESULT|(ENUM|(PART|PRI|UNIQUE)_KEY|UNSIGNED)_FLAG|ASSOC|ASYNC|AUTO_INCREMENT_FLAG)|MCRYPT_(RC([26])|RIJNDAEL_(128|192|256)|RAND|GOST|XTEA|MODE_(STREAM|NOFB|CBC|CFB|OFB|ECB)|MARS|BLOWFISH(_COMPAT)?|SERPENT|SKIPJACK|SAFER(64|128|PLUS)|CRYPT|CAST_(128|256)|TRIPLEDES|THREEWAY|TWOFISH|IDEA|(3)?DES|DECRYPT|DEV_(U)?RANDOM|PANAMA|ENCRYPT|ENIGNA|WAKE|LOKI97|ARCFOUR(_IV)?)|STREAM_(REPORT_ERRORS|MUST_SEEK|MKDIR_RECURSIVE|BUFFER_(NONE|FULL|LINE)|SHUT_(RD)?WR|SOCK_(RDM|RAW|STREAM|SEQPACKET|DGRAM)|SERVER_(BIND|LISTEN)|NOTIFY_(REDIRECTED|RESOLVE|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|COMPLETED|CONNECT|PROGRESS|FILE_SIZE_IS|FAILURE|AUTH_(RE(?:QUIRED|SULT)))|CRYPTO_METHOD_((SSLv2(3)?|SSLv3|TLS)_(CLIENT|SERVER))|CLIENT_((ASYNC_)?CONNECT|PERSISTENT)|CAST_(AS_STREAM|FOR_SELECT)|(I(?:GNORE|S))_URL|IPPROTO_(RAW|TCP|ICMP|IP|UDP)|OOB|OPTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER)|URL_STAT_(LINK|QUIET)|USE_PATH|PEEK|PF_(INET(6)?|UNIX)|ENFORCE_SAFE_MODE|FILTER_(ALL|READ|WRITE))|SUNFUNCS_RET_(DOUBLE|STRING|TIMESTAMP)|SQLITE_(READONLY|ROW|MISMATCH|MISUSE|BOTH|BUSY|SCHEMA|NOMEM|NOTFOUND|NOTADB|NOLFS|NUM|CORRUPT|CONSTRAINT|CANTOPEN|TOOBIG|INTERRUPT|INTERNAL|IOERR|OK|DONE|PROTOCOL|PERM|ERROR|EMPTY|FORMAT|FULL|LOCKED|ABORT|ASSOC|AUTH)|SQLITE3_(BOTH|BLOB|NUM|NULL|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT_ASSOC)|CURL(M_(BAD_((EASY)?HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|OUT_OF_MEMORY|OK)|MSG_DONE|SSH_AUTH_(HOST|NONE|DEFAULT|PUBLICKEY|PASSWORD|KEYBOARD)|CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC)|INFO_(REDIRECT_(COUNT|TIME)|REQUEST_SIZE|SSL_VERIFYRESULT|STARTTRANSFER_TIME|(S(?:IZE|PEED))_((?:DOWN|UP)LOAD)|HTTP_CODE|HEADER_(OUT|SIZE)|NAMELOOKUP_TIME|CONNECT_TIME|CONTENT_(TYPE|LENGTH_((?:DOWN|UP)LOAD))|CERTINFO|TOTAL_TIME|PRIVATE|PRETRANSFER_TIME|EFFECTIVE_URL|FILETIME)|OPT_(RESUME_FROM|RETURNTRANSFER|REDIR_PROTOCOLS|REFERER|READ(DATA|FUNCTION)|RANGE|RANDOM_FILE|MAX(CONNECTS|REDIRS)|BINARYTRANSFER|BUFFERSIZE|SSH_(HOST_PUBLIC_KEY_MD5|(P(?:RIVATE|UBLIC))_KEYFILE)|AUTH_TYPES)|SSL(CERT(TYPE|PASSWD)?|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?)|SSL_(CIPHER_LIST|VERIFY(HOST|PEER))|STDERR|HTTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)|HEADER(FUNCTION)?|NO(BODY|SIGNAL|PROGRESS)|NETRC|CRLF|CONNECTTIMEOUT(_MS)?|COOKIE(SESSION|JAR|FILE)?|CUSTOMREQUEST|CERTINFO|CLOSEPOLICY|CA(INFO|PATH)|TRANSFERTEXT|TCP_NODELAY|TIME(CONDITION|OUT(_MS)?|VALUE)|INTERFACE|INFILE(SIZE)?|IPRESOLVE|DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|URL|USER(AGENT|PWD)|UNRESTRICTED_AUTH|UPLOAD|PRIVATE|PROGRESSFUNCTION|PROXY(TYPE|USERPWD|PORT|AUTH)?|PROTOCOLS|PORT|POST(REDIR|QUOTE|FIELDS)?|PUT|EGDSOCKET|ENCODING|VERBOSE|KRB4LEVEL|KEYPASSWD|QUOTE|FRESH_CONNECT|FTP(APPEND|LISTONLY|PORT|SSLAUTH)|FTP_(SSL|SKIP_PASV_IP|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)|FILE(TIME)?|FORBID_REUSE|FOLLOWLOCATION|FAILONERROR|WRITE(FUNCTION|HEADER)|LOW_SPEED_(LIMIT|TIME)|AUTOREFERER)|PROXY_(HTTP|SOCKS([45]))|PROTO_(SCP|SFTP|HTTP(S)?|TELNET|TFTP|DICT|FTP(S)?|FILE|LDAP(S)?|ALL)|E_((RE(?:CV|AD))_ERROR|GOT_NOTHING|MALFORMAT_USER|BAD_(CONTENT_ENCODING|CALLING_ORDER|PASSWORD_ENTERED|FUNCTION_ARGUMENT)|SSH|SSL_(CIPHER|CONNECT_ERROR|CERTPROBLEM|CACERT|PEER_CERTIFICATE|ENGINE_(NOTFOUND|SETFAILED))|SHARE_IN_USE|SEND_ERROR|HTTP_(RANGE_ERROR|NOT_FOUND|PORT_FAILED|POST_ERROR)|COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|TOO_MANY_REDIRECTS|TELNET_OPTION_SYNTAX|OBSOLETE|OUT_OF_MEMORY|OPERATION|TIMEOUTED|OK|URL_MALFORMAT(_USER)?|UNSUPPORTED_PROTOCOL|UNKNOWN_TELNET_OPTION|PARTIAL_FILE|FTP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|COULDNT_(RETR_FILE|GET_SIZE|STOR_FILE|SET_(BINARY|ASCII)|USE_REST)|CANT_(GET_HOST|RECONNECT)|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|WRITE_ERROR|WEIRD_((PASS|PASV|SERVER|USER)_REPLY|227_FORMAT)|ACCESS_DENIED)|FILESIZE_EXCEEDED|FILE_COULDNT_READ_FILE|FUNCTION_NOT_FOUND|FAILED_INIT|WRITE_ERROR|LIBRARY_NOT_FOUND|LDAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL)|ABORTED_BY_CALLBACK)|VERSION_NOW|FTP(METHOD_(MULTI|SINGLE|NO)CWD|SSL_(ALL|NONE|CONTROL|TRY)|AUTH_(DEFAULT|SSL|TLS))|AUTH_(ANY(SAFE)?|BASIC|DIGEST|GSSNEGOTIATE|NTLM))|CURL_(HTTP_VERSION_(1_([01])|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(UN)?MODSINCE|LASTMOD)|IPRESOLVE_(V([46])|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))|IMAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|ICO|IFF|UNKNOWN|JB2|JPX|JP2|JPC|JPEG(2000)?|PSD|PNG|WBMP)|INPUT_(REQUEST|GET|SERVER|SESSION|COOKIE|POST|ENV)|ICONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION)|DNS_(MX|SRV|SOA|HINFO|NS|NAPTR|CNAME|TXT|PTR|ANY|ALL|AAAA|A(6)?)|DOM(STRING_SIZE_ERR)|DOM_((SYNTAX|HIERARCHY_REQUEST|NO_((?:MODIFICATION|DATA)_ALLOWED)|NOT_(FOUND|SUPPORTED)|NAMESPACE|INDEX_SIZE|USE_ATTRIBUTE|VALID_(MODIFICATION|STATE|CHARACTER|ACCESS)|PHP|VALIDATION|WRONG_DOCUMENT)_ERR)|JSON_(HEX_(TAG|QUOT|AMP|APOS)|NUMERIC_CHECK|ERROR_(SYNTAX|STATE_MISMATCH|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)|PREG_((D_UTF8(_OFFSET)?|NO|INTERNAL|(BACKTRACK|RECURSION)_LIMIT)_ERROR|GREP_INVERT|SPLIT_(NO_EMPTY|(DELIM|OFFSET)_CAPTURE)|SET_ORDER|OFFSET_CAPTURE|PATTERN_ORDER)|PSFS_(PASS_ON|ERR_FATAL|FEED_ME|FLAG_(NORMAL|FLUSH_(CLOSE|INC)))|PCRE_VERSION|POSIX_(([FRWX])_OK|S_IF(REG|BLK|SOCK|CHR|IFO))|FNM_(NOESCAPE|CASEFOLD|PERIOD|PATHNAME)|FILTER_(REQUIRE_(SCALAR|ARRAY)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW|SANITIZE_(MAGIC_QUOTES|STRING|STRIPPED|SPECIAL_CHARS|NUMBER_(INT|FLOAT)|URL|EMAIL|ENCODED|FULL_SPCIAL_CHARS)|VALIDATE_(REGEXP|BOOLEAN|INT|IP|URL|EMAIL|FLOAT)|FORCE_ARRAY|FLAG_(SCHEME_REQUIRED|STRIP_(BACKTICK|HIGH|LOW)|HOST_REQUIRED|NONE|NO_(RES|PRIV)_RANGE|ENCODE_QUOTES|IPV([46])|PATH_REQUIRED|EMPTY_STRING_NULL|ENCODE_(HIGH|LOW|AMP)|QUERY_REQUIRED|ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION)))|FILE_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)|FILEINFO_(RAW|MIME(_(ENCODING|TYPE))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)|FORCE_(DEFLATE|GZIP)|LIBXML_(XINCLUDE|NSCLEAN|NO(XMLDECL|BLANKS|NET|CDATA|ERROR|EMPTYTAG|ENT|WARNING)|COMPACT|DTD(VALID|LOAD|ATTR)|((DOTTED|LOADED)_)?VERSION|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)))\\\\b","name":"support.constant.ext.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(T_(RETURN|REQUIRE(_ONCE)?|GOTO|GLOBAL|(MINUS|MOD|MUL|XOR)_EQUAL|METHOD_C|ML_COMMENT|BREAK|BOOL_CAST|BOOLEAN_(AND|OR)|BAD_CHARACTER|SR(_EQUAL)?|STRING(_CAST|VARNAME)?|START_HEREDOC|STATIC|SWITCH|SL(_EQUAL)?|HALT_COMPILER|NS_(C|SEPARATOR)|NUM_STRING|NEW|NAMESPACE|CHARACTER|COMMENT|CONSTANT(_ENCAPSED_STRING)?|CONCAT_EQUAL|CONTINUE|CURLY_OPEN|CLOSE_TAG|CLONE|CLASS(_C)?|CASE|CATCH|TRY|THROW|IMPLEMENTS|ISSET|IS_((GREATER|SMALLER)_OR_EQUAL|(NOT_)?(IDENTICAL|EQUAL))|INSTANCEOF|INCLUDE(_ONCE)?|INC|INT_CAST|INTERFACE|INLINE_HTML|IF|OR_EQUAL|OBJECT_(CAST|OPERATOR)|OPEN_TAG(_WITH_ECHO)?|OLD_FUNCTION|DNUMBER|DIR|DIV_EQUAL|DOC_COMMENT|DOUBLE_(ARROW|CAST|COLON)|DOLLAR_OPEN_CURLY_BRACES|DO|DEC|DECLARE|DEFAULT|USE|UNSET(_CAST)?|PRINT|PRIVATE|PROTECTED|PUBLIC|PLUS_EQUAL|PAAMAYIM_NEKUDOTAYIM|EXTENDS|EXIT|EMPTY|ENCAPSED_AND_WHITESPACE|END(SWITCH|IF|DECLARE|FOR(EACH)?|WHILE)|END_HEREDOC|ECHO|EVAL|ELSE(IF)?|VAR(IABLE)?|FINAL|FILE|FOR(EACH)?|FUNC_C|FUNCTION|WHITESPACE|WHILE|LNUMBER|LIST|LINE|LOGICAL_(AND|OR|XOR)|ARRAY_(CAST)?|ABSTRACT|AS|AND_EQUAL))\\\\b","name":"support.constant.parser-token.php"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"constant.other.php"}]},"function-call":{"patterns":[{"begin":"(?i)(\\\\\\\\?\\\\b[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*(?:\\\\\\\\[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)+)\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.name.function.php"}]},"2":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.function-call.php","patterns":[{"include":"#language"}]},{"begin":"(?i)(\\\\\\\\)?\\\\b([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#namespace"}]},"2":{"patterns":[{"include":"#support"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.name.function.php"}]},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.function-call.php","patterns":[{"include":"#language"}]},{"match":"(?i)\\\\b(print|echo)\\\\b","name":"support.function.construct.output.php"}]},"function-parameters":{"patterns":[{"include":"#comments"},{"match":",","name":"punctuation.separator.delimiter.php"},{"begin":"(?i)(array)\\\\s+((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(=)\\\\s*(array)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"storage.type.php"},"2":{"name":"variable.other.php"},"3":{"name":"storage.modifier.reference.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"support.function.construct.php"},"7":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"contentName":"meta.array.php","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.function.parameter.array.php","patterns":[{"include":"#comments"},{"include":"#strings"},{"include":"#numbers"}]},{"captures":{"1":{"name":"storage.type.php"},"2":{"name":"variable.other.php"},"3":{"name":"storage.modifier.reference.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"constant.language.php"},"7":{"name":"punctuation.section.array.begin.php"},"8":{"patterns":[{"include":"#parameter-default-types"}]},"9":{"name":"punctuation.section.array.end.php"},"10":{"name":"invalid.illegal.non-null-typehinted.php"}},"match":"(?i)(array|callable)\\\\s+((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?:\\\\s*(=)\\\\s*(?:(null)|(\\\\[)((?>[^]\\\\[]+|\\\\[\\\\g<8>])*)(])|(\\\\S*?\\\\(\\\\)|\\\\S*?)))?\\\\s*(?=[),]|/[*/]|#|$)","name":"meta.function.parameter.array.php"},{"begin":"(?i)(\\\\\\\\?(?:[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)*)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s+((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"support.other.namespace.php","patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"storage.type.php"},{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]},"2":{"name":"storage.type.php"},"3":{"name":"variable.other.php"},"4":{"name":"storage.modifier.reference.php"},"5":{"name":"keyword.operator.variadic.php"},"6":{"name":"punctuation.definition.variable.php"}},"end":"(?=[),]|/[*/]|#)","name":"meta.function.parameter.typehinted.php","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.php"}},"end":"(?=[),]|/[*/]|#)","patterns":[{"include":"#language"}]}]},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"keyword.operator.variadic.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(?=[),]|/[*/]|#|$)","name":"meta.function.parameter.no-default.php"},{"begin":"(?i)((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(=)\\\\s*(?:(\\\\[)((?>[^]\\\\[]+|\\\\[\\\\g<6>])*)(]))?","beginCaptures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"keyword.operator.variadic.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"punctuation.section.array.begin.php"},"7":{"patterns":[{"include":"#parameter-default-types"}]},"8":{"name":"punctuation.section.array.end.php"}},"end":"(?=[),]|/[*/]|#)","name":"meta.function.parameter.default.php","patterns":[{"include":"#parameter-default-types"}]}]},"heredoc":{"patterns":[{"begin":"(?i)(?=<<<\\\\s*(\\"?)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(\\\\1)\\\\s*$)","end":"(?!\\\\G)","name":"string.unquoted.heredoc.php","patterns":[{"include":"#heredoc_interior"}]},{"begin":"(?=<<<\\\\s*'([A-Z_a-z]+[0-9A-Z_a-z]*)'\\\\s*$)","end":"(?!\\\\G)","name":"string.unquoted.nowdoc.php","patterns":[{"include":"#nowdoc_interior"}]}]},"heredoc_interior":{"patterns":[{"begin":"(<<<)\\\\s*(\\"?)(HTML)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.html","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.html","patterns":[{"include":"#interpolation"},{"include":"text.html.basic"}]},{"begin":"(<<<)\\\\s*(\\"?)(BLADE)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.blade","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.blade","patterns":[{"include":"#interpolation"},{"include":"text.html.basic"},{"include":"#blade"}]},{"begin":"(<<<)\\\\s*(\\"?)(XML)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.xml","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.xml","patterns":[{"include":"#interpolation"},{"include":"text.xml"}]},{"begin":"(<<<)\\\\s*(\\"?)(SQL)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.sql","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.sql","patterns":[{"include":"#interpolation"},{"include":"source.sql"}]},{"begin":"(<<<)\\\\s*(\\"?)(J(?:AVASCRIPT|S))(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.js","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.js","patterns":[{"include":"#interpolation"},{"include":"source.js"}]},{"begin":"(<<<)\\\\s*(\\"?)(JSON)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.json","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.json","patterns":[{"include":"#interpolation"},{"include":"source.json"}]},{"begin":"(<<<)\\\\s*(\\"?)(CSS)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.css","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.css","patterns":[{"include":"#interpolation"},{"include":"source.css"}]},{"begin":"(<<<)\\\\s*(\\"?)(REGEXP?)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"string.regexp.heredoc.php","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"patterns":[{"include":"#interpolation"},{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repitition.php"},"3":{"name":"punctuation.definition.arbitrary-repitition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repitition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"match":"\\\\\\\\[]'\\\\[\\\\\\\\]","name":"constant.character.escape.php"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"},{"begin":"(?i)(?<=^|\\\\s)(#)\\\\s(?=[-\\\\t !,.0-9?_a-z\\\\x7F-ÿ[^\\\\x00-\\\\x7F]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.php"}},"end":"$","endCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"name":"comment.line.number-sign.php"}]},{"begin":"(?i)(<<<)\\\\s*(\\"?)([_a-z\\\\x7F-ÿ]+[0-9_a-z\\\\x7F-ÿ]*)(\\\\2)(\\\\s*)","beginCaptures":{"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"1":{"name":"keyword.operator.heredoc.php"}},"patterns":[{"include":"#interpolation"}]}]},"instantiation":{"begin":"(?i)(new)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.new.php"}},"end":"(?i)(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"match":"(?i)(parent|static|self)(?![0-9_a-z\\\\x7F-ÿ])","name":"storage.type.php"},{"include":"#class-name"},{"include":"#variable-name"}]},"interpolation":{"patterns":[{"match":"\\\\\\\\[0-7]{1,3}","name":"constant.character.escape.octal.php"},{"match":"\\\\\\\\x\\\\h{1,2}","name":"constant.character.escape.hex.php"},{"match":"\\\\\\\\u\\\\{\\\\h+}","name":"constant.character.escape.unicode.php"},{"match":"\\\\\\\\[\\"$\\\\\\\\efnrtv]","name":"constant.character.escape.php"},{"begin":"\\\\{(?=\\\\$.*?})","beginCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]},{"include":"#variable-name"}]},"invoke-call":{"captures":{"1":{"name":"punctuation.definition.variable.php"},"2":{"name":"variable.other.php"}},"match":"(?i)(\\\\$+)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?=\\\\s*\\\\()","name":"meta.function-call.invoke.php"},"language":{"patterns":[{"include":"#comments"},{"begin":"(?i)^\\\\s*(interface)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(extends)?\\\\s*","beginCaptures":{"1":{"name":"storage.type.interface.php"},"2":{"name":"entity.name.type.interface.php"},"3":{"name":"storage.modifier.extends.php"}},"end":"(?i)((?:[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\s*,\\\\s*)*)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?\\\\s*(?:(?=\\\\{)|$)","endCaptures":{"1":{"patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"},{"match":",","name":"punctuation.separator.classes.php"}]},"2":{"name":"entity.other.inherited-class.php"}},"name":"meta.interface.php","patterns":[{"include":"#namespace"}]},{"begin":"(?i)^\\\\s*(trait)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"storage.type.trait.php"},"2":{"name":"entity.name.type.trait.php"}},"end":"(?=\\\\{)","name":"meta.trait.php","patterns":[{"include":"#comments"}]},{"captures":{"1":{"name":"keyword.other.namespace.php"},"2":{"name":"entity.name.type.namespace.php","patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]}},"match":"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+([0-9\\\\\\\\_a-z\\\\x7F-ÿ]+)(?=\\\\s*;)","name":"meta.namespace.php"},{"begin":"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.namespace.php"}},"end":"(?<=})|(?=\\\\?>)","name":"meta.namespace.php","patterns":[{"include":"#comments"},{"captures":{"0":{"patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]}},"match":"(?i)[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+","name":"entity.name.type.namespace.php"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.namespace.begin.bracket.curly.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.namespace.end.bracket.curly.php"}},"patterns":[{"include":"#language"}]},{"match":"\\\\S+","name":"invalid.illegal.identifier.php"}]},{"match":"\\\\s+(?=use\\\\b)"},{"begin":"(?i)\\\\buse\\\\b","beginCaptures":{"0":{"name":"keyword.other.use.php"}},"end":"(?<=})|(?=;)","name":"meta.use.php","patterns":[{"match":"\\\\b(const|function)\\\\b","name":"storage.type.\${1:/downcase}.php"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.use.begin.bracket.curly.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.use.end.bracket.curly.php"}},"patterns":[{"include":"#scope-resolution"},{"captures":{"1":{"name":"keyword.other.use-as.php"},"2":{"name":"storage.modifier.php"},"3":{"name":"entity.other.alias.php"}},"match":"(?i)\\\\b(as)\\\\s+(final|abstract|public|private|protected|static)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\b"},{"captures":{"1":{"name":"keyword.other.use-as.php"},"2":{"patterns":[{"match":"^(?:final|abstract|public|private|protected|static)$","name":"storage.modifier.php"},{"match":".+","name":"entity.other.alias.php"}]}},"match":"(?i)\\\\b(as)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\b"},{"captures":{"1":{"name":"keyword.other.use-insteadof.php"},"2":{"name":"support.class.php"}},"match":"(?i)\\\\b(insteadof)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"},{"match":";","name":"punctuation.terminator.expression.php"},{"include":"#use-inner"}]},{"include":"#use-inner"}]},{"begin":"(?i)^\\\\s*(?:(abstract|final)\\\\s+)?(class)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"storage.modifier.\${1:/downcase}.php"},"2":{"name":"storage.type.class.php"},"3":{"name":"entity.name.type.class.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.class.end.bracket.curly.php"}},"name":"meta.class.php","patterns":[{"include":"#comments"},{"begin":"(?i)(extends)\\\\s+","beginCaptures":{"1":{"name":"storage.modifier.extends.php"}},"contentName":"meta.other.inherited-class.php","end":"(?i)(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"begin":"(?i)(?=\\\\\\\\?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)","end":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","endCaptures":{"1":{"name":"entity.other.inherited-class.php"}},"patterns":[{"include":"#namespace"}]},{"include":"#class-builtin"},{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"}]},{"begin":"(?i)(implements)\\\\s+","beginCaptures":{"1":{"name":"storage.modifier.implements.php"}},"end":"(?i)(?=[;{])","patterns":[{"include":"#comments"},{"begin":"(?i)(?=[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+)","contentName":"meta.other.inherited-class.php","end":"(?i)\\\\s*(?:,|(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ\\\\s]))\\\\s*","patterns":[{"begin":"(?i)(?=\\\\\\\\?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)","end":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","endCaptures":{"1":{"name":"entity.other.inherited-class.php"}},"patterns":[{"include":"#namespace"}]},{"include":"#class-builtin"},{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"}]}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.class.begin.bracket.curly.php"}},"contentName":"meta.class.body.php","end":"(?=}|\\\\?>)","patterns":[{"include":"#language"}]}]},{"include":"#switch_statement"},{"captures":{"1":{"name":"keyword.control.\${1:/downcase}.php"}},"match":"\\\\s*\\\\b(break|case|continue|declare|default|die|do|else(if)?|end(declare|for(each)?|if|switch|while)|exit|for(each)?|if|return|switch|use|while|yield)\\\\b"},{"begin":"(?i)\\\\b((?:require|include)(?:_once)?)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.import.include.php"}},"end":"(?=[;\\\\s]|$|\\\\?>)","name":"meta.include.php","patterns":[{"include":"#language"}]},{"begin":"\\\\b(catch)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.control.exception.catch.php"},"2":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"name":"meta.catch.php","patterns":[{"include":"#namespace"},{"captures":{"1":{"name":"support.class.exception.php"},"2":{"patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"support.class.exception.php"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]},"3":{"name":"variable.other.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)((?:\\\\s*\\\\|\\\\s*[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)*)\\\\s*((\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"}]},{"match":"\\\\b(catch|try|throw|exception|finally)\\\\b","name":"keyword.control.exception.php"},{"begin":"(?i)\\\\b(function)\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"storage.type.function.php"}},"end":"(?=\\\\{)","name":"meta.function.closure.php","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"contentName":"meta.function.parameters.php","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"patterns":[{"include":"#function-parameters"}]},{"begin":"(?i)(use)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.other.function.use.php"},"2":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"patterns":[{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(?=[),])","name":"meta.function.closure.use.php"}]}]},{"begin":"((?:(?:final|abstract|public|private|protected|static)\\\\s+)*)(function)\\\\s+(?i:(__(?:call|construct|debugInfo|destruct|get|set|isset|unset|tostring|clone|set_state|sleep|wakeup|autoload|invoke|callStatic))|([A-Z_a-z\\\\x7F-ÿ][0-9A-Z_a-z\\\\x7F-ÿ]*))\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"match":"final|abstract|public|private|protected|static","name":"storage.modifier.php"}]},"2":{"name":"storage.type.function.php"},"3":{"name":"support.function.magic.php"},"4":{"name":"entity.name.function.php"},"5":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"contentName":"meta.function.parameters.php","end":"(\\\\))(?:\\\\s*(:)\\\\s*([A-Z_a-z\\\\x7F-ÿ][0-9A-Z_a-z\\\\x7F-ÿ]*))?","endCaptures":{"1":{"name":"punctuation.definition.parameters.end.bracket.round.php"},"2":{"name":"keyword.operator.return-value.php"},"3":{"name":"storage.type.php"}},"name":"meta.function.php","patterns":[{"include":"#function-parameters"}]},{"include":"#invoke-call"},{"include":"#scope-resolution"},{"include":"#variables"},{"include":"#strings"},{"captures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"},"3":{"name":"punctuation.definition.array.end.bracket.round.php"}},"match":"(array)(\\\\()(\\\\))","name":"meta.array.empty.php"},{"begin":"(array)(\\\\()","beginCaptures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.array.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"punctuation.definition.storage-type.begin.bracket.round.php"},"2":{"name":"storage.type.php"},"3":{"name":"punctuation.definition.storage-type.end.bracket.round.php"}},"match":"(?i)(\\\\()\\\\s*(array|real|double|float|int(?:eger)?|bool(?:ean)?|string|object|binary|unset)\\\\s*(\\\\))"},{"match":"(?i)\\\\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|var|function|interface|trait|parent|self|object)\\\\b","name":"storage.type.php"},{"match":"(?i)\\\\b(global|abstract|const|extends|implements|final|private|protected|public|static)\\\\b","name":"storage.modifier.php"},{"include":"#object"},{"match":";","name":"punctuation.terminator.expression.php"},{"match":":","name":"punctuation.terminator.statement.php"},{"include":"#heredoc"},{"include":"#numbers"},{"match":"(?i)\\\\bclone\\\\b","name":"keyword.other.clone.php"},{"match":"\\\\.=?","name":"keyword.operator.string.php"},{"match":"=>","name":"keyword.operator.key.php"},{"captures":{"1":{"name":"keyword.operator.assignment.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"storage.modifier.reference.php"}},"match":"(?i)(=)(&)|(&)(?=[$_a-z])"},{"match":"@","name":"keyword.operator.error-control.php"},{"match":"===?|!==?|<>","name":"keyword.operator.comparison.php"},{"match":"(?:|[-%\\\\&*+/^|]|<<|>>)=","name":"keyword.operator.assignment.php"},{"match":"<=>?|>=|[<>]","name":"keyword.operator.comparison.php"},{"match":"--|\\\\+\\\\+","name":"keyword.operator.increment-decrement.php"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.php"},{"match":"(?i)(!|&&|\\\\|\\\\|)|\\\\b(and|or|xor|as)\\\\b","name":"keyword.operator.logical.php"},{"include":"#function-call"},{"match":"<<|>>|[\\\\&^|~]","name":"keyword.operator.bitwise.php"},{"begin":"(?i)\\\\b(instanceof)\\\\s+(?=[$\\\\\\\\_a-z])","beginCaptures":{"1":{"name":"keyword.operator.type.php"}},"end":"(?=[^$0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"include":"#class-name"},{"include":"#variable-name"}]},{"include":"#instantiation"},{"captures":{"1":{"name":"keyword.control.goto.php"},"2":{"name":"support.other.php"}},"match":"(?i)(goto)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"},{"captures":{"1":{"name":"entity.name.goto-label.php"}},"match":"(?i)^\\\\s*([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*:(?!:)"},{"include":"#string-backtick"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.curly.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.php"}},"end":"]|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.section.array.end.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.php"}},"patterns":[{"include":"#language"}]},{"include":"#constants"},{"match":",","name":"punctuation.separator.delimiter.php"}]},"namespace":{"begin":"(?i)(?:(namespace)|[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(\\\\\\\\)(?=.*?[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","beginCaptures":{"1":{"name":"variable.language.namespace.php"},"2":{"name":"punctuation.separator.inheritance.php"}},"end":"(?i)(?=[0-9_a-z\\\\x7F-ÿ]*[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","name":"support.other.namespace.php","patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]},"nowdoc_interior":{"patterns":[{"begin":"(<<<)\\\\s*'(HTML)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.html","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.html","patterns":[{"include":"text.html.basic"}]},{"begin":"(<<<)\\\\s*'(BLADE)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.blade","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.blade","patterns":[{"include":"text.html.basic"},{"include":"#blade"}]},{"begin":"(<<<)\\\\s*'(XML)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.xml","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.xml","patterns":[{"include":"text.xml"}]},{"begin":"(<<<)\\\\s*'(SQL)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.sql","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.sql","patterns":[{"include":"source.sql"}]},{"begin":"(<<<)\\\\s*'(J(?:AVASCRIPT|S))'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.js","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.js","patterns":[{"include":"source.js"}]},{"begin":"(<<<)\\\\s*'(JSON)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.json","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.json","patterns":[{"include":"source.json"}]},{"begin":"(<<<)\\\\s*'(CSS)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.css","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.css","patterns":[{"include":"source.css"}]},{"begin":"(<<<)\\\\s*'(REGEXP?)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"string.regexp.nowdoc.php","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"patterns":[{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repitition.php"},"3":{"name":"punctuation.definition.arbitrary-repitition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repitition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"match":"\\\\\\\\[]'\\\\[\\\\\\\\]","name":"constant.character.escape.php"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"},{"begin":"(?i)(?<=^|\\\\s)(#)\\\\s(?=[-\\\\t !,.0-9?_a-z\\\\x7F-ÿ[^\\\\x00-\\\\x7F]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.php"}},"end":"$","endCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"name":"comment.line.number-sign.php"}]},{"begin":"(?i)(<<<)\\\\s*'([_a-z\\\\x7F-ÿ]+[0-9_a-z\\\\x7F-ÿ]*)'(\\\\s*)","beginCaptures":{"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"1":{"name":"keyword.operator.nowdoc.php"}}}]},"numbers":{"patterns":[{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.php"},{"match":"0[Bb][01]+","name":"constant.numeric.binary.php"},{"match":"0[0-7]+","name":"constant.numeric.octal.php"},{"captures":{"1":{"name":"punctuation.separator.decimal.period.php"},"2":{"name":"punctuation.separator.decimal.period.php"}},"match":"[0-9]*(\\\\.)[0-9]+(?:[Ee][-+]?[0-9]+)?|[0-9]+(\\\\.)[0-9]*(?:[Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+","name":"constant.numeric.decimal.php"},{"match":"0|[1-9][0-9]*","name":"constant.numeric.decimal.php"}]},"object":{"patterns":[{"begin":"(->)(\\\\$?\\\\{)","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]},{"begin":"(?i)(->)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"entity.name.function.php"},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.method-call.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"variable.other.property.php"},"3":{"name":"punctuation.definition.variable.php"}},"match":"(?i)(->)((\\\\$+)?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?"}]},"parameter-default-types":{"patterns":[{"include":"#strings"},{"include":"#numbers"},{"include":"#string-backtick"},{"include":"#variables"},{"match":"=>","name":"keyword.operator.key.php"},{"match":"=","name":"keyword.operator.assignment.php"},{"match":"&(?=\\\\s*\\\\$)","name":"storage.modifier.reference.php"},{"begin":"(array)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.array.php","patterns":[{"include":"#parameter-default-types"}]},{"include":"#instantiation"},{"begin":"(?i)(?=[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+(::)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?)","end":"(?i)(::)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?","endCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"constant.other.class.php"}},"patterns":[{"include":"#class-name"}]},{"include":"#constants"}]},"php_doc":{"patterns":[{"match":"^(?!\\\\s*\\\\*).*?(?:(?=\\\\*/)|$\\\\n?)","name":"invalid.illegal.missing-asterisk.phpdoc.php"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"},"3":{"name":"storage.modifier.php"},"4":{"name":"invalid.illegal.wrong-access-type.phpdoc.php"}},"match":"^\\\\s*\\\\*\\\\s*(@access)\\\\s+((p(?:ublic|rivate|rotected))|(.+))\\\\s*$"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"},"2":{"name":"markup.underline.link.php"}},"match":"(@xlink)\\\\s+(.+)\\\\s*$"},{"begin":"(@(?:global|param|property(-(read|write))?|return|throws|var))\\\\s+(?=[(A-Z\\\\\\\\_a-z\\\\x7F-ÿ])","beginCaptures":{"1":{"name":"keyword.other.phpdoc.php"}},"contentName":"meta.other.type.phpdoc.php","end":"(?=\\\\s|\\\\*/)","patterns":[{"include":"#php_doc_types_array_multiple"},{"include":"#php_doc_types_array_single"},{"include":"#php_doc_types"}]},{"match":"@(api|abstract|author|category|copyright|example|global|inherit[Dd]oc|internal|license|link|method|property(-(read|write))?|package|param|return|see|since|source|static|subpackage|throws|todo|var|version|uses|deprecated|final|ignore)\\\\b","name":"keyword.other.phpdoc.php"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"}},"match":"\\\\{(@(link|inherit[Dd]oc)).+?}","name":"meta.tag.inline.phpdoc.php"}]},"php_doc_types":{"captures":{"0":{"patterns":[{"match":"\\\\b(string|integer|int|boolean|bool|float|double|object|mixed|array|resource|void|null|callback|false|true|self)\\\\b","name":"keyword.other.type.php"},{"include":"#class-name"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]}},"match":"(?i)[\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*(\\\\|[\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*)*"},"php_doc_types_array_multiple":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.type.begin.bracket.round.phpdoc.php"}},"end":"(\\\\))(\\\\[])|(?=\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.type.end.bracket.round.phpdoc.php"},"2":{"name":"keyword.other.array.phpdoc.php"}},"patterns":[{"include":"#php_doc_types_array_multiple"},{"include":"#php_doc_types_array_single"},{"include":"#php_doc_types"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]},"php_doc_types_array_single":{"captures":{"1":{"patterns":[{"include":"#php_doc_types"}]},"2":{"name":"keyword.other.array.phpdoc.php"}},"match":"(?i)([\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*)(\\\\[])"},"regex-double-quoted":{"begin":"\\"/(?=(\\\\\\\\.|[^\\"/])++/[ADSUXeimsux]*\\")","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"(/)([ADSUXeimsux]*)(\\")","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.regexp.double-quoted.php","patterns":[{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"include":"#interpolation"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.php"},"3":{"name":"punctuation.definition.arbitrary-repetition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"include":"#interpolation"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"}]},"regex-single-quoted":{"begin":"'/(?=(\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\['\\\\\\\\]?|[^'])|.)|[^'/])++/[ADSUXeimsux]*')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"(/)([ADSUXeimsux]*)(')","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.regexp.single-quoted.php","patterns":[{"include":"#single_quote_regex_escape"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.php"},"3":{"name":"punctuation.definition.arbitrary-repetition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php"},{"match":"[$*+^]","name":"keyword.operator.regexp.php"}]},"scope-resolution":{"patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\b(self|static|parent)\\\\b","name":"storage.type.php"},{"match":"\\\\w+","name":"entity.name.class.php"},{"include":"#class-name"},{"include":"#variable-name"}]}},"match":"(?i)\\\\b([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?=\\\\s*::)"},{"begin":"(?i)(::)\\\\s*([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"entity.name.function.php"},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.method-call.static.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"keyword.other.class.php"}},"match":"(?i)(::)\\\\s*(class)\\\\b"},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"variable.other.class.php"},"3":{"name":"punctuation.definition.variable.php"},"4":{"name":"constant.other.class.php"}},"match":"(?i)(::)\\\\s*(?:((\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)|([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))?"}]},"single_quote_regex_escape":{"match":"\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\['\\\\\\\\]?|[^'])|.)","name":"constant.character.escape.php"},"sql-string-double-quoted":{"begin":"\\"\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"contentName":"source.sql.embedded.php","end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.double.sql.php","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(#)(\\\\\\\\\\"|[^\\"])*(?=\\"|$)","name":"comment.line.number-sign.sql"},{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(--)(\\\\\\\\\\"|[^\\"])*(?=\\"|$)","name":"comment.line.double-dash.sql"},{"match":"\\\\\\\\[\\"'\\\\\\\\\`]","name":"constant.character.escape.php"},{"match":"'(?=((\\\\\\\\')|[^\\"'])*(\\"|$))","name":"string.quoted.single.unclosed.sql"},{"match":"\`(?=((\\\\\\\\\`)|[^\\"\`])*(\\"|$))","name":"string.quoted.other.backtick.unclosed.sql"},{"begin":"'","end":"'","name":"string.quoted.single.sql","patterns":[{"include":"#interpolation"}]},{"begin":"\`","end":"\`","name":"string.quoted.other.backtick.sql","patterns":[{"include":"#interpolation"}]},{"include":"#interpolation"},{"include":"source.sql"}]},"sql-string-single-quoted":{"begin":"'\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"contentName":"source.sql.embedded.php","end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.single.sql.php","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(#)(\\\\\\\\'|[^'])*(?='|$)","name":"comment.line.number-sign.sql"},{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(--)(\\\\\\\\'|[^'])*(?='|$)","name":"comment.line.double-dash.sql"},{"match":"\\\\\\\\[\\"'\\\\\\\\\`]","name":"constant.character.escape.php"},{"match":"\`(?=((\\\\\\\\\`)|[^'\`])*('|$))","name":"string.quoted.other.backtick.unclosed.sql"},{"match":"\\"(?=((\\\\\\\\\\")|[^\\"'])*('|$))","name":"string.quoted.double.unclosed.sql"},{"include":"source.sql"}]},"string-backtick":{"begin":"\`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"\`","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.interpolated.php","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.php"},{"include":"#interpolation"}]},"string-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.double.php","patterns":[{"include":"#interpolation"}]},"string-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.single.php","patterns":[{"match":"\\\\\\\\['\\\\\\\\]","name":"constant.character.escape.php"}]},"strings":{"patterns":[{"include":"#regex-double-quoted"},{"include":"#sql-string-double-quoted"},{"include":"#string-double-quoted"},{"include":"#regex-single-quoted"},{"include":"#sql-string-single-quoted"},{"include":"#string-single-quoted"}]},"support":{"patterns":[{"match":"(?i)\\\\bapc_(store|sma_info|compile_file|clear_cache|cas|cache_info|inc|dec|define_constants|delete(_file)?|exists|fetch|load_constants|add|bin_(dump|load)(file)?)\\\\b","name":"support.function.apc.php"},{"match":"(?i)\\\\b(shuffle|sizeof|sort|next|nat(case)?sort|count|compact|current|in_array|usort|uksort|uasort|pos|prev|end|each|extract|ksort|key(_exists)?|krsort|list|asort|arsort|rsort|reset|range|array(_(shift|sum|splice|search|slice|chunk|change_key_case|count_values|column|combine|(diff|intersect)(_(u)?(key|assoc))?|u(diff|intersect)(_(u)?assoc)?|unshift|unique|pop|push|pad|product|values|keys|key_exists|filter|fill(_keys)?|flip|walk(_recursive)?|reduce|replace(_recursive)?|reverse|rand|multisort|merge(_recursive)?|map)?))\\\\b","name":"support.function.array.php"},{"match":"(?i)\\\\b(show_source|sys_getloadavg|sleep|highlight_(file|string)|constant|connection_(aborted|status)|time_(nanosleep|sleep_until)|ignore_user_abort|die|define(d)?|usleep|uniqid|unpack|__halt_compiler|php_(check_syntax|strip_whitespace)|pack|eval|exit|get_browser)\\\\b","name":"support.function.basic_functions.php"},{"match":"(?i)\\\\bbc(scale|sub|sqrt|comp|div|pow(mod)?|add|mod|mul)\\\\b","name":"support.function.bcmath.php"},{"match":"(?i)\\\\bblenc_encrypt\\\\b","name":"support.function.blenc.php"},{"match":"(?i)\\\\bbz(compress|close|open|decompress|errstr|errno|error|flush|write|read)\\\\b","name":"support.function.bz2.php"},{"match":"(?i)\\\\b((French|Gregorian|Jewish|Julian)ToJD|cal_(to_jd|info|days_in_month|from_jd)|unixtojd|jdto(unix|jewish)|easter_(da(?:te|ys))|JD(MonthName|To(Gregorian|Julian|French)|DayOfWeek))\\\\b","name":"support.function.calendar.php"},{"match":"(?i)\\\\b(class_alias|all_user_method(_array)?|is_(a|subclass_of)|__autoload|(class|interface|method|property|trait)_exists|get_(class(_(vars|methods))?|(called|parent)_class|object_vars|declared_(classes|interfaces|traits)))\\\\b","name":"support.function.classobj.php"},{"match":"(?i)\\\\b(com_(create_guid|print_typeinfo|event_sink|load_typelib|get_active_object|message_pump)|variant_(sub|set(_type)?|not|neg|cast|cat|cmp|int|idiv|imp|or|div|date_(from|to)_timestamp|pow|eqv|fix|and|add|abs|round|get_type|xor|mod|mul))\\\\b","name":"support.function.com.php"},{"begin":"(?i)\\\\b(isset|unset|eval|empty|list)\\\\b","name":"support.function.construct.php"},{"match":"(?i)\\\\b(print|echo)\\\\b","name":"support.function.construct.output.php"},{"match":"(?i)\\\\bctype_(space|cntrl|digit|upper|punct|print|lower|alnum|alpha|graph|xdigit)\\\\b","name":"support.function.ctype.php"},{"match":"(?i)\\\\bcurl_(share_(close|init|setopt)|strerror|setopt(_array)?|copy_handle|close|init|unescape|pause|escape|errno|error|exec|version|file_create|reset|getinfo|multi_(strerror|setopt|select|close|init|info_read|(add|remove)_handle|getcontent|exec))\\\\b","name":"support.function.curl.php"},{"match":"(?i)\\\\b(strtotime|str[fp]time|checkdate|time|timezone_name_(from_abbr|get)|idate|timezone_((location|offset|transitions|version)_get|(abbreviations|identifiers)_list|open)|date(_(sun(rise|set)|sun_info|sub|create(_(immutable_)?from_format)?|timestamp_([gs]et)|timezone_([gs]et)|time_set|isodate_set|interval_(create_from_date_string|format)|offset_get|diff|default_timezone_([gs]et)|date_set|parse(_from_format)?|format|add|get_last_errors|modify))?|localtime|get(date|timeofday)|gm(strftime|date|mktime)|microtime|mktime)\\\\b","name":"support.function.datetime.php"},{"match":"(?i)\\\\bdba_(sync|handlers|nextkey|close|insert|optimize|open|delete|popen|exists|key_split|firstkey|fetch|list|replace)\\\\b","name":"support.function.dba.php"},{"match":"(?i)\\\\bdbx_(sort|connect|compare|close|escape_string|error|query|fetch_row)\\\\b","name":"support.function.dbx.php"},{"match":"(?i)\\\\b(scandir|chdir|chroot|closedir|opendir|dir|rewinddir|readdir|getcwd)\\\\b","name":"support.function.dir.php"},{"match":"(?i)\\\\beio_(sync(fs)?|sync_file_range|symlink|stat(vfs)?|sendfile|set_min_parallel|set_max_(idle|poll_(reqs|time)|parallel)|seek|n(threads|op|pending|reqs|ready)|chown|chmod|custom|close|cancel|truncate|init|open|dup2|unlink|utime|poll|event_loop|f(sync|stat(vfs)?|chown|chmod|truncate|datasync|utime|allocate)|write|lstat|link|rename|realpath|read(ahead|dir|link)?|rmdir|get_(event_stream|last_error)|grp(_(add|cancel|limit))?|mknod|mkdir|busy)\\\\b","name":"support.function.eio.php"},{"match":"(?i)\\\\benchant_(dict_(store_replacement|suggest|check|is_in_session|describe|quick_check|add_to_(personal|session)|get_error)|broker_(set_ordering|init|dict_exists|describe|free(_dict)?|list_dicts|request_(pwl_)?dict|get_error))\\\\b","name":"support.function.enchant.php"},{"match":"(?i)\\\\bsplit(i)?|sql_regcase|ereg(i)?(_replace)?\\\\b","name":"support.function.ereg.php"},{"match":"(?i)\\\\b((restore|set)_(e(?:rror|xception)_handler)|trigger_error|debug_(print_)?backtrace|user_error|error_(log|reporting|get_last))\\\\b","name":"support.function.errorfunc.php"},{"match":"(?i)\\\\bshell_exec|system|passthru|proc_(nice|close|terminate|open|get_status)|escapeshell(arg|cmd)|exec\\\\b","name":"support.function.exec.php"},{"match":"(?i)\\\\b(exif_(thumbnail|tagname|imagetype|read_data)|read_exif_data)\\\\b","name":"support.function.exif.php"},{"match":"(?i)\\\\bfann_((duplicate|length|merge|shuffle|subset)_train_data|scale_(train(_data)?|((?:in|out)put)(_train_data)?)|set_(scaling_params|sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|cascade_(num_candidate_groups|candidate_(change_fraction|limit|stagnation_epochs)|output_(change_fraction|stagnation_epochs)|weight_multiplier|activation_(functions|steepnesses)|(m(?:ax|in))_(cand|out)_epochs)|callback|training_algorithm|train_(error|stop)_function|((?:in|out)put)_scaling_params|error_log|quickprop_(decay|mu)|weight(_array)?|learning_(momentum|rate)|bit_fail_limit|activation_(function|steepness)(_(hidden|layer|output))?|rprop_(((?:de|in)crease)_factor|delta_(max|min|zero)))|save(_train)?|num_((?:in|out)put)_train_data|copy|clear_scaling_params|cascadetrain_on_(file|data)|create_((s(?:parse|hortcut|tandard))(_array)?|train(_from_callback)?|from_file)|test(_data)?|train(_(on_(file|data)|epoch))?|init_weights|descale_(input|output|train)|destroy(_train)?|print_error|run|reset_(MSE|err(no|str))|read_train_from_file|randomize_weights|get_(sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|num_(input|output|layers)|network_type|MSE|connection_(array|rate)|bias_array|bit_fail(_limit)?|cascade_(num_(candidate(?:s|_groups))|(candidate|output)_(change_fraction|limit|stagnation_epochs)|weight_multiplier|activation_(functions|steepnesses)(_count)?|(m(?:ax|in))_(cand|out)_epochs)|total_((?:connecti|neur)ons)|training_algorithm|train_(error|stop)_function|err(no|str)|quickprop_(decay|mu)|learning_(momentum|rate)|layer_array|activation_(function|steepness)|rprop_(((?:de|in)crease)_factor|delta_(max|min|zero))))\\\\b","name":"support.function.fann.php"},{"match":"(?i)\\\\b(symlink|stat|set_file_buffer|chown|chgrp|chmod|copy|clearstatcache|touch|tempnam|tmpfile|is_(dir|(uploaded_)?file|executable|link|readable|writ(e)?able)|disk_(free|total)_space|diskfreespace|dirname|delete|unlink|umask|pclose|popen|pathinfo|parse_ini_(file|string)|fscanf|fstat|fseek|fnmatch|fclose|ftell|ftruncate|file(size|[acm]time|type|inode|owner|perms|group)?|file_(exists|(get|put)_contents)|f(open|puts|putcsv|passthru|eof|flush|write|lock|read|gets(s)?|getc(sv)?)|lstat|lchown|lchgrp|link(info)?|rename|rewind|read(file|link)|realpath(_cache_(get|size))?|rmdir|glob|move_uploaded_file|mkdir|basename)\\\\b","name":"support.function.file.php"},{"match":"(?i)\\\\b(finfo_(set_flags|close|open|file|buffer)|mime_content_type)\\\\b","name":"support.function.fileinfo.php"},{"match":"(?i)\\\\bfilter_(has_var|input(_array)?|id|var(_array)?|list)\\\\b","name":"support.function.filter.php"},{"match":"(?i)\\\\bfastcgi_finish_request\\\\b","name":"support.function.fpm.php"},{"match":"(?i)\\\\b(call_user_(func|method)(_array)?|create_function|unregister_tick_function|forward_static_call(_array)?|function_exists|func_(num_args|get_arg(s)?)|register_(shutdown|tick)_function|get_defined_functions)\\\\b","name":"support.function.funchand.php"},{"match":"(?i)\\\\b((n)?gettext|textdomain|d((?:(n)?|c(n)?)gettext)|bind(textdomain|_textdomain_codeset))\\\\b","name":"support.function.gettext.php"},{"match":"(?i)\\\\bgmp_(scan[01]|strval|sign|sub|setbit|sqrt(rem)?|hamdist|neg|nextprime|com|clrbit|cmp|testbit|intval|init|invert|import|or|div(exact)?|div_(qr??|r)|jacobi|popcount|pow(m)?|perfect_square|prob_prime|export|fact|legendre|and|add|abs|root(rem)?|random(_(bits|range))?|gcd(ext)?|xor|mod|mul)\\\\b","name":"support.function.gmp.php"},{"match":"(?i)\\\\bhash(_(hmac(_file)?|copy|init|update(_(file|stream))?|pbkdf2|equals|file|final|algos))?\\\\b","name":"support.function.hash.php"},{"match":"(?i)\\\\b(http_(support|send_(status|stream|content_(disposition|type)|data|file|last_modified)|head|negotiate_(charset|content_type|language)|chunked_decode|cache_(etag|last_modified)|throttle|inflate|deflate|date|post_(data|fields)|put_(data|file|stream)|persistent_handles_(count|clean|ident)|parse_(cookie|headers|message|params)|redirect|request(_(method_(exists|name|(un)?register)|body_encode))?|get(_request_(headers|body(_stream)?))?|match_(etag|modified|request_header)|build_(cookie|str|url))|ob_(etag|deflate|inflate)handler)\\\\b","name":"support.function.http.php"},{"match":"(?i)\\\\b(iconv(_(str(pos|len|rpos)|substr|([gs]et)_encoding|mime_(decode(_headers)?|encode)))?|ob_iconv_handler)\\\\b","name":"support.function.iconv.php"},{"match":"(?i)\\\\biis_((st(?:art|op))_(serv(?:ice|er))|set_(script_map|server_rights|dir_security|app_settings)|(add|remove)_server|get_(script_map|service_state|server_(rights|by_(comment|path))|dir_security))\\\\b","name":"support.function.iisfunc.php"},{"match":"(?i)\\\\b(iptc(embed|parse)|(jpeg|png)2wbmp|gd_info|getimagesize(fromstring)?|image(s[xy]|scale|(char|string)(up)?|set(style|thickness|tile|interpolation|pixel|brush)|savealpha|convolution|copy(resampled|resized|merge(gray)?)?|colors(forindex|total)|color(set|closest(alpha|hwb)?|transparent|deallocate|(allocate|exact|resolve)(alpha)?|at|match)|crop(auto)?|create(truecolor|from(string|jpeg|png|wbmp|webp|gif|gd(2(part)?)?|xpm|xbm))?|types|ttf(bbox|text)|truecolortopalette|istruecolor|interlace|2wbmp|destroy|dashedline|jpeg|_type_to_(extension|mime_type)|ps(slantfont|text|(encode|extend|free|load)font|bbox)|png|polygon|palette(copy|totruecolor)|ellipse|ft(text|bbox)|filter|fill|filltoborder|filled(arc|ellipse|polygon|rectangle)|font(height|width)|flip|webp|wbmp|line|loadfont|layereffect|antialias|affine(matrix(concat|get))?|alphablending|arc|rotate|rectangle|gif|gd(2)?|gammacorrect|grab(screen|window)|xbm))\\\\b","name":"support.function.image.php"},{"match":"(?i)\\\\b(sys_get_temp_dir|set_(time_limit|include_path|magic_quotes_runtime)|cli_([gs]et)_process_title|ini_(alter|get(_all)?|restore|set)|zend_(thread_id|version|logo_guid)|dl|php(credits|info|version)|php_(sapi_name|ini_(scanned_files|loaded_file)|uname|logo_guid)|putenv|extension_loaded|version_compare|assert(_options)?|restore_include_path|gc_(collect_cycles|disable|enable(d)?)|getopt|get_(cfg_var|current_user|defined_constants|extension_funcs|include_path|included_files|loaded_extensions|magic_quotes_(gpc|runtime)|required_files|resources)|get(env|lastmod|rusage|my(inode|[gpu]id))|memory_get_(peak_)?usage|main|magic_quotes_runtime)\\\\b","name":"support.function.info.php"},{"match":"(?i)\\\\bibase_(set_event_handler|service_((?:at|de)tach)|server_info|num_(fields|params)|name_result|connect|commit(_ret)?|close|trans|delete_user|drop_db|db_info|pconnect|param_info|prepare|err(code|msg)|execute|query|field_info|fetch_(assoc|object|row)|free_(event_handler|query|result)|wait_event|add_user|affected_rows|rollback(_ret)?|restore|gen_id|modify_user|maintain_db|backup|blob_(cancel|close|create|import|info|open|echo|add|get))\\\\b","name":"support.function.interbase.php"},{"match":"(?i)\\\\b(normalizer_(normalize|is_normalized)|idn_to_(unicode|utf8|ascii)|numfmt_(set_(symbol|(text_)?attribute|pattern)|create|(parse|format)(_currency)?|get_(symbol|(text_)?attribute|pattern|error_(code|message)|locale))|collator_(sort(_with_sort_keys)?|set_(attribute|strength)|compare|create|asort|get_(strength|sort_key|error_(code|message)|locale|attribute))|transliterator_(create(_(inverse|from_rules))?|transliterate|list_ids|get_error_(code|message))|intl(cal|tz)_get_error_(code|message)|intl_(is_failure|error_name|get_error_(code|message))|datefmt_(set_(calendar|lenient|pattern|timezone(_id)?)|create|is_lenient|parse|format(_object)?|localtime|get_(calendar(_object)?|time(type|zone(_id)?)|datetype|pattern|error_(code|message)|locale))|locale_(set_default|compose|canonicalize|parse|filter_matches|lookup|accept_from_http|get_(script|display_(script|name|variant|language|region)|default|primary_language|keywords|all_variants|region))|resourcebundle_(create|count|locales|get(_(error_(code|message)))?)|grapheme_(str(i?str|r?i?pos|len)|substr|extract)|msgfmt_(set_pattern|create|(format|parse)(_message)?|get_(pattern|error_(code|message)|locale)))\\\\b","name":"support.function.intl.php"},{"match":"(?i)\\\\bjson_(decode|encode|last_error(_msg)?)\\\\b","name":"support.function.json.php"},{"match":"(?i)\\\\bldap_(start|tls|sort|search|sasl_bind|set_(option|rebind_proc)|(first|next)_(attribute|entry|reference)|connect|control_paged_result(_response)?|count_entries|compare|close|t61_to_8859|8859_to_t61|dn2ufn|delete|unbind|parse_(re(?:ference|sult))|escape|errno|err2str|error|explode_dn|bind|free_result|list|add|rename|read|get_(option|dn|entries|values(_len)?|attributes)|modify(_batch)?|mod_(add|del|replace))\\\\b","name":"support.function.ldap.php"},{"match":"(?i)\\\\blibxml_(set_(streams_context|external_entity_loader)|clear_errors|disable_entity_loader|use_internal_errors|get_(errors|last_error))\\\\b","name":"support.function.libxml.php"},{"match":"(?i)\\\\b(ezmlm_hash|mail)\\\\b","name":"support.function.mail.php"},{"match":"(?i)\\\\b((a)?(cos|sin|tan)(h)?|sqrt|srand|hypot|hexdec|ceil|is_(nan|(in)?finite)|octdec|dec(hex|oct|bin)|deg2rad|pi|pow|exp(m1)?|floor|fmod|lcg_value|log(1([0p]))?|atan2|abs|round|rand|rad2deg|getrandmax|mt_(srand|rand|getrandmax)|max|min|bindec|base_convert)\\\\b","name":"support.function.math.php"},{"match":"(?i)\\\\bmb_(str(cut|str|to(lower|upper)|istr|ipos|imwidth|pos|width|len|rchr|richr|ripos|rpos)|substitute_character|substr(_count)?|split|send_mail|http_((?:in|out)put)|check_encoding|convert_(case|encoding|kana|variables)|internal_encoding|output_handler|decode_(numericentity|mimeheader)|detect_(encoding|order)|parse_str|preferred_mime_name|encoding_aliases|encode_(numericentity|mimeheader)|ereg(i(_replace)?)?|ereg_(search(_(get(pos|regs)|init|regs|(set)?pos))?|replace(_callback)?|match)|list_encodings|language|regex_(set_options|encoding)|get_info)\\\\b","name":"support.function.mbstring.php"},{"match":"(?i)\\\\b(m(?:crypt_(cfb|create_iv|cbc|ofb|decrypt|encrypt|ecb|list_(algorithms|modes)|generic(_((de)?init|end))?|enc_(self_test|is_block_(algorithm|algorithm_mode|mode)|get_(supported_key_sizes|(block|iv|key)_size|(algorithms|modes)_name))|get_(cipher_name|(block|iv|key)_size)|module_(close|self_test|is_block_(algorithm|algorithm_mode|mode)|open|get_(supported_key_sizes|algo_(block|key)_size)))|decrypt_generic))\\\\b","name":"support.function.mcrypt.php"},{"match":"(?i)\\\\bmemcache_debug\\\\b","name":"support.function.memcache.php"},{"match":"(?i)\\\\bmhash(_(count|keygen_s2k|get_(hash_name|block_size)))?\\\\b","name":"support.function.mhash.php"},{"match":"(?i)\\\\b(log_(cmd_(insert|delete|update)|killcursor|write_batch|reply|getmore)|bson_((?:de|en)code))\\\\b","name":"support.function.mongo.php"},{"match":"(?i)\\\\bmysql_(stat|set_charset|select_db|num_(fields|rows)|connect|client_encoding|close|create_db|escape_string|thread_id|tablename|insert_id|info|data_seek|drop_db|db_(name|query)|unbuffered_query|pconnect|ping|errno|error|query|field_(seek|name|type|table|flags|len)|fetch_(object|field|lengths|assoc|array|row)|free_result|list_(tables|dbs|processes|fields)|affected_rows|result|real_escape_string|get_(client|host|proto|server)_info)\\\\b","name":"support.function.mysql.php"},{"match":"(?i)\\\\bmysqli_(ssl_set|store_result|stat|send_(query|long_data)|set_(charset|opt|local_infile_(default|handler))|stmt_(store_result|send_long_data|next_result|close|init|data_seek|prepare|execute|fetch|free_result|attr_([gs]et)|result_metadata|reset|get_(result|warnings)|more_results|bind_(param|result))|select_db|slave_query|savepoint|next_result|change_user|character_set_name|connect|commit|client_encoding|close|thread_safe|init|options|((?:en|dis)able)_(r(?:eads_from_master|pl_parse))|dump_debug_info|debug|data_seek|use_result|ping|poll|param_count|prepare|escape_string|execute|embedded_server_(start|end)|kill|query|field_seek|free_result|autocommit|rollback|report|refresh|fetch(_(object|fields|field(_direct)?|assoc|all|array|row))?|rpl_(parse_enabled|probe|query_type)|release_savepoint|reap_async_query|real_(connect|escape_string|query)|more_results|multi_query|get_(charset|connection_stats|client_(stats|info|version)|cache_stats|warnings|links_stats|metadata)|master_query|bind_(param|result)|begin_transaction)\\\\b","name":"support.function.mysqli.php"},{"match":"(?i)\\\\bmysqlnd_memcache_(set|get_config)\\\\b","name":"support.function.mysqlnd-memcache.php"},{"match":"(?i)\\\\bmysqlnd_ms_(set_(user_pick_server|qos)|dump_servers|query_is_select|fabric_select_(shard|global)|get_(stats|last_(used_connection|gtid))|xa_(commit|rollback|gc|begin)|match_wild)\\\\b","name":"support.function.mysqlnd-ms.php"},{"match":"(?i)\\\\bmysqlnd_qc_(set_(storage_handler|cache_condition|is_select|user_handlers)|clear_cache|get_(normalized_query_trace_log|core_stats|cache_info|query_trace_log|available_handlers))\\\\b","name":"support.function.mysqlnd-qc.php"},{"match":"(?i)\\\\bmysqlnd_uh_(set_(statement|connection)_proxy|convert_to_mysqlnd)\\\\b","name":"support.function.mysqlnd-uh.php"},{"match":"(?i)\\\\b(syslog|socket_(set_(blocking|timeout)|get_status)|set(raw)?cookie|http_response_code|openlog|headers_(list|sent)|header(_(re(?:gister_callback|move)))?|checkdnsrr|closelog|inet_(ntop|pton)|ip2long|openlog|dns_(check_record|get_(record|mx))|define_syslog_variables|(p)?fsockopen|long2ip|get(servby(name|port)|host(name|by(name(l)?|addr))|protoby(n(?:ame|umber))|mxrr))\\\\b","name":"support.function.network.php"},{"match":"(?i)\\\\bnsapi_(virtual|response_headers|request_headers)\\\\b","name":"support.function.nsapi.php"},{"match":"(?i)\\\\b(oci(?:(statementtype|setprefetch|serverversion|savelob(file)?|numcols|new(collection|cursor|descriptor)|nlogon|column(scale|size|name|type(raw)?|isnull|precision)|coll(size|trim|assign(elem)?|append|getelem|max)|commit|closelob|cancel|internaldebug|definebyname|plogon|parse|error|execute|fetch(statement|into)?|free(statement|collection|cursor|desc)|write(temporarylob|lobtofile)|loadlob|log(o(?:n|ff))|rowcount|rollback|result|bindbyname)|_(statement_type|set_(client_(i(?:nfo|dentifier))|prefetch|edition|action|module_name)|server_version|num_(fields|rows)|new_(connect|collection|cursor|descriptor)|connect|commit|client_version|close|cancel|internal_debug|define_by_name|pconnect|password_change|parse|error|execute|bind_(array_)?by_name|field_(scale|size|name|type(_raw)?|is_null|precision)|fetch(_(object|assoc|all|array|row))?|free_(statement|descriptor)|lob_(copy|is_equal)|rollback|result|get_implicit_resultset)))\\\\b","name":"support.function.oci8.php"},{"match":"(?i)\\\\bopcache_(compile_file|invalidate|reset|get_(status|configuration))\\\\b","name":"support.function.opcache.php"},{"match":"(?i)\\\\bopenssl_(sign|spki_(new|export(_challenge)?|verify)|seal|csr_(sign|new|export(_to_file)?|get_(subject|public_key))|cipher_iv_length|open|dh_compute_key|digest|decrypt|public_((?:de|en)crypt)|encrypt|error_string|pkcs12_(export(_to_file)?|read)|pkcs7_(sign|decrypt|encrypt|verify)|verify|free_key|random_pseudo_bytes|pkey_(new|export(_to_file)?|free|get_(details|public|private))|private_((?:de|en)crypt)|pbkdf2|get_((cipher|md)_methods|cert_locations|(p(?:ublic|rivate))key)|x509_(check_private_key|checkpurpose|parse|export(_to_file)?|fingerprint|free|read))\\\\b","name":"support.function.openssl.php"},{"match":"(?i)\\\\b(output_(add_rewrite_var|reset_rewrite_vars)|flush|ob_(start|clean|implicit_flush|end_(clean|flush)|flush|list_handlers|gzhandler|get_(status|contents|clean|flush|length|level)))\\\\b","name":"support.function.output.php"},{"match":"(?i)\\\\bpassword_(hash|needs_rehash|verify|get_info)\\\\b","name":"support.function.password.php"},{"match":"(?i)\\\\bpcntl_(strerror|signal(_dispatch)?|sig(timedwait|procmask|waitinfo)|setpriority|errno|exec|fork|w(stopsig|termsig|if((?:stopp|signal|exit)ed))|wait(pid)?|alarm|getpriority|get_last_error)\\\\b","name":"support.function.pcntl.php"},{"match":"(?i)\\\\bpg_(socket|send_(prepare|execute|query(_params)?)|set_(client_encoding|error_verbosity)|select|host|num_(fields|rows)|consume_input|connection_(status|reset|busy)|connect(_poll)?|convert|copy_(from|to)|client_encoding|close|cancel_query|tty|transaction_status|trace|insert|options|delete|dbname|untrace|unescape_bytea|update|pconnect|ping|port|put_line|parameter_status|prepare|version|query(_params)?|escape_(string|identifier|literal|bytea)|end_copy|execute|flush|free_result|last_(notice|error|oid)|field_(size|num|name|type(_oid)?|table|is_null|prtlen)|affected_rows|result_(status|seek|error(_field)?)|fetch_(object|assoc|all(_columns)?|array|row|result)|get_(notify|pid|result)|meta_data|lo_(seek|close|create|tell|truncate|import|open|unlink|export|write|read(_all)?)|)\\\\b","name":"support.function.pgsql.php"},{"match":"(?i)\\\\b(virtual|getallheaders|apache_(([gs]et)env|note|child_terminate|lookup_uri|response_headers|reset_timeout|request_headers|get_(version|modules)))\\\\b","name":"support.function.php_apache.php"},{"match":"(?i)\\\\bdom_import_simplexml\\\\b","name":"support.function.php_dom.php"},{"match":"(?i)\\\\bftp_(ssl_connect|systype|site|size|set_option|nlist|nb_(continue|f?(put|get))|ch(dir|mod)|connect|cdup|close|delete|put|pwd|pasv|exec|quit|f(put|get)|login|alloc|rename|raw(list)?|rmdir|get(_option)?|mdtm|mkdir)\\\\b","name":"support.function.php_ftp.php"},{"match":"(?i)\\\\bimap_((create|delete|list|rename|scan)(mailbox)?|status|sort|subscribe|set_quota|set(flag_full|acl)|search|savebody|num_(recent|msg)|check|close|clearflag_full|thread|timeout|open|header(info)?|headers|append|alerts|reopen|8bit|unsubscribe|undelete|utf7_((?:de|en)code)|utf8|uid|ping|errors|expunge|qprint|gc|fetch(structure|header|text|mime|body)|fetch_overview|lsub|list(s(?:can|ubscribed))|last_error|rfc822_(parse_(headers|adrlist)|write_address)|get(subscribed|acl|mailboxes)|get_quota(root)?|msgno|mime_header_decode|mail_(copy|compose|move)|mail|mailboxmsginfo|binary|body(struct)?|base64)\\\\b","name":"support.function.php_imap.php"},{"match":"(?i)\\\\bmssql_(select_db|num_(fields|rows)|next_result|connect|close|init|data_seek|pconnect|execute|query|field_(seek|name|type|length)|fetch_(object|field|assoc|array|row|batch)|free_(statement|result)|rows_affected|result|guid_string|get_last_message|min_(error|message)_severity|bind)\\\\b","name":"support.function.php_mssql.php"},{"match":"(?i)\\\\bodbc_(statistics|specialcolumns|setoption|num_(fields|rows)|next_result|connect|columns|columnprivileges|commit|cursor|close(_all)?|tables|tableprivileges|do|data_source|pconnect|primarykeys|procedures|procedurecolumns|prepare|error(msg)?|exec(ute)?|field_(scale|num|name|type|precision|len)|foreignkeys|free_result|fetch_(into|object|array|row)|longreadlen|autocommit|rollback|result(_all)?|gettypeinfo|binmode)\\\\b","name":"support.function.php_odbc.php"},{"match":"(?i)\\\\bpreg_(split|quote|filter|last_error|replace(_callback)?|grep|match(_all)?)\\\\b","name":"support.function.php_pcre.php"},{"match":"(?i)\\\\b(spl_(classes|object_hash|autoload(_(call|unregister|extensions|functions|register))?)|class_(implements|uses|parents)|iterator_(count|to_array|apply))\\\\b","name":"support.function.php_spl.php"},{"match":"(?i)\\\\bzip_(close|open|entry_(name|compressionmethod|compressedsize|close|open|filesize|read)|read)\\\\b","name":"support.function.php_zip.php"},{"match":"(?i)\\\\bposix_(strerror|set(s|e?u|[ep]?g)id|ctermid|ttyname|times|isatty|initgroups|uname|errno|kill|access|get(sid|cwd|uid|pid|ppid|pwnam|pwuid|pgid|pgrp|euid|egid|login|rlimit|gid|grnam|groups|grgid)|get_last_error|mknod|mkfifo)\\\\b","name":"support.function.posix.php"},{"match":"(?i)\\\\bset(thread|proc)title\\\\b","name":"support.function.proctitle.php"},{"match":"(?i)\\\\bpspell_(store_replacement|suggest|save_wordlist|new(_(config|personal))?|check|clear_session|config_(save_repl|create|ignore|(d(?:ata|ict))_dir|personal|runtogether|repl|mode)|add_to_(session|personal))\\\\b","name":"support.function.pspell.php"},{"match":"(?i)\\\\breadline(_(completion_function|clear_history|callback_(handler_(install|remove)|read_char)|info|on_new_line|write_history|list_history|add_history|redisplay|read_history))?\\\\b","name":"support.function.readline.php"},{"match":"(?i)\\\\brecode(_(string|file))?\\\\b","name":"support.function.recode.php"},{"match":"(?i)\\\\brrd(c_disconnect|_(create|tune|info|update|error|version|first|fetch|last(update)?|restore|graph|xport))\\\\b","name":"support.function.rrd.php"},{"match":"(?i)\\\\b(shm_((get|has|remove|put)_var|detach|attach|remove)|sem_(acquire|release|remove|get)|ftok|msg_((get|remove|set|stat)_queue|send|queue_exists|receive))\\\\b","name":"support.function.sem.php"},{"match":"(?i)\\\\bsession_(status|start|set_(save_handler|cookie_params)|save_path|name|commit|cache_(expire|limiter)|is_registered|id|destroy|decode|unset|unregister|encode|write_close|abort|reset|register(_shutdown)?|regenerate_id|get_cookie_params|module_name)\\\\b","name":"support.function.session.php"},{"match":"(?i)\\\\bshmop_(size|close|open|delete|write|read)\\\\b","name":"support.function.shmop.php"},{"match":"(?i)\\\\bsimplexml_(import_dom|load_(string|file))\\\\b","name":"support.function.simplexml.php"},{"match":"(?i)\\\\b(snmp(?:(walk(oid)?|realwalk|get(next)?|set)|_(set_(valueretrieval|quick_print|enum_print|oid_(numeric_print|output_format))|read_mib|get_(valueretrieval|quick_print))|[23]_(set|walk|real_walk|get(next)?)))\\\\b","name":"support.function.snmp.php"},{"match":"(?i)\\\\b(is_soap_fault|use_soap_error_handler)\\\\b","name":"support.function.soap.php"},{"match":"(?i)\\\\bsocket_(shutdown|strerror|send(to|msg)?|set_((non)?block|option)|select|connect|close|clear_error|bind|create(_(pair|listen))?|cmsg_space|import_stream|write|listen|last_error|accept|recv(from|msg)?|read|get(peer|sock)name|get_option)\\\\b","name":"support.function.sockets.php"},{"match":"(?i)\\\\bsqlite_(single_query|seek|has_(more|prev)|num_(fields|rows)|next|changes|column|current|close|create_(aggregate|function)|open|unbuffered_query|udf_((?:de|en)code)_binary|popen|prev|escape_string|error_string|exec|valid|key|query|field_name|factory|fetch_(string|single|column_types|object|all|array)|lib(encoding|version)|last_(insert_rowid|error)|array_query|rewind|busy_timeout)\\\\b","name":"support.function.sqlite.php"},{"match":"(?i)\\\\bsqlsrv_(send_stream_data|server_info|has_rows|num_(fields|rows)|next_result|connect|configure|commit|client_info|close|cancel|prepare|errors|execute|query|field_metadata|fetch(_(array|object))?|free_stmt|rows_affected|rollback|get_(config|field)|begin_transaction)\\\\b","name":"support.function.sqlsrv.php"},{"match":"(?i)\\\\bstats_(harmonic_mean|covariance|standard_deviation|skew|cdf_(noncentral_(chisquare|f)|negative_binomial|chisquare|cauchy|t|uniform|poisson|exponential|f|weibull|logistic|laplace|gamma|binomial|beta)|stat_(noncentral_t|correlation|innerproduct|independent_t|powersum|percentile|paired_t|gennch|binomial_coef)|dens_(normal|negative_binomial|chisquare|cauchy|t|pmf_(hypergeometric|poisson|binomial)|exponential|f|weibull|logistic|laplace|gamma|beta)|den_uniform|variance|kurtosis|absolute_deviation|rand_(setall|phrase_to_seeds|ranf|get_seeds|gen_(noncentral_[ft]|noncenral_chisquare|normal|chisquare|t|int|i(uniform|poisson|binomial(_negative)?)|exponential|f(uniform)?|gamma|beta)))\\\\b","name":"support.function.stats.php"},{"match":"(?i)\\\\b(s(?:et_socket_blocking|tream_(socket_(shutdown|sendto|server|client|pair|enable_crypto|accept|recvfrom|get_name)|set_(chunk_size|timeout|(read|write)_buffer|blocking)|select|notification_callback|supports_lock|context_(set_(option|default|params)|create|get_(options|default|params))|copy_to_stream|is_local|encoding|filter_(append|prepend|register|remove)|wrapper_((un)?register|restore)|resolve_include_path|register_wrapper|get_(contents|transports|filters|wrappers|line|meta_data)|bucket_(new|prepend|append|make_writeable))))\\\\b","name":"support.function.streamsfuncs.php"},{"match":"(?i)\\\\b(money_format|md5(_file)?|metaphone|bin2hex|sscanf|sha1(_file)?|str(str|c?spn|n(at)?(case)?cmp|chr|coll|(case)?cmp|to(upper|lower)|tok|tr|istr|pos|pbrk|len|rchr|ri?pos|rev)|str_(getcsv|ireplace|pad|repeat|replace|rot13|shuffle|split|word_count)|strip(c?slashes|os)|strip_tags|similar_text|soundex|substr(_(count|compare|replace))?|setlocale|html(specialchars(_decode)?|entities)|html_entity_decode|hex2bin|hebrev(c)?|number_format|nl2br|nl_langinfo|chop|chunk_split|chr|convert_(cyr_string|uu((?:de|en)code))|count_chars|crypt|crc32|trim|implode|ord|uc(first|words)|join|parse_str|print(f)?|echo|explode|v?[fs]?printf|quoted_printable_((?:de|en)code)|quotemeta|wordwrap|lcfirst|[lr]trim|localeconv|levenshtein|addc?slashes|get_html_translation_table)\\\\b","name":"support.function.string.php"},{"match":"(?i)\\\\bsybase_(set_message_handler|select_db|num_(fields|rows)|connect|close|deadlock_retry_count|data_seek|unbuffered_query|pconnect|query|field_seek|fetch_(object|field|assoc|array|row)|free_result|affected_rows|result|get_last_message|min_(client|error|message|server)_severity)\\\\b","name":"support.function.sybase.php"},{"match":"(?i)\\\\b(taint|is_tainted|untaint)\\\\b","name":"support.function.taint.php"},{"match":"(?i)\\\\b(tidy_(([gs]et)opt|set_encoding|save_config|config_count|clean_repair|is_(x(?:html|ml))|diagnose|(access|error|warning)_count|load_config|reset_config|(parse|repair)_(string|file)|get_(status|html(_ver)?|head|config|output|opt_doc|root|release|body))|ob_tidyhandler)\\\\b","name":"support.function.tidy.php"},{"match":"(?i)\\\\btoken_(name|get_all)\\\\b","name":"support.function.tokenizer.php"},{"match":"(?i)\\\\btrader_(stoch([fr]|rsi)?|stddev|sin(h)?|sum|sub|set_(compat|unstable_period)|sqrt|sar(ext)?|sma|ht_(sine|trend(line|mode)|dc(p(?:eriod|hase))|phasor)|natr|cci|cos(h)?|correl|cdl(shootingstar|shortline|sticksandwich|stalledpattern|spinningtop|separatinglines|hikkake(mod)?|highwave|homingpigeon|hangingman|harami(cross)?|hammer|concealbabyswall|counterattack|closingmarubozu|thrusting|tasukigap|takuri|tristar|inneck|invertedhammer|identical3crows|2crows|onneck|doji(star)?|darkcloudcover|dragonflydoji|unique3river|upsidegap2crows|3(starsinsouth|inside|outside|whitesoldiers|linestrike|blackcrows)|piercing|engulfing|evening(doji)?star|kicking(bylength)?|longline|longleggeddoji|ladderbottom|advanceblock|abandonedbaby|risefall3methods|rickshawman|gapsidesidewhite|gravestonedoji|xsidegap3methods|morning(doji)?star|mathold|matchinglow|marubozu|belthold|breakaway)|ceil|cmo|tsf|typprice|t3|tema|tan(h)?|trix|trima|trange|obv|div|dema|dx|ultosc|ppo|plus_d[im]|errno|exp|ema|var|kama|floor|wclprice|willr|wma|ln|log10|bop|beta|bbands|linearreg(_(slope|intercept|angle))?|asin|acos|atan|atr|adosc|add??|adx(r)?|apo|avgprice|aroon(osc)?|rsi|rocp??|rocr(100)?|get_(compat|unstable_period)|min(index)?|minus_d[im]|minmax(index)?|mid(p(?:oint|rice))|mom|mult|medprice|mfi|macd(ext|fix)?|mavp|max(index)?|ma(ma)?)\\\\b","name":"support.function.trader.php"},{"match":"(?i)\\\\buopz_(copy|compose|implement|overload|delete|undefine|extend|function|flags|restore|rename|redefine|backup)\\\\b","name":"support.function.uopz.php"},{"match":"(?i)\\\\b(http_build_query|(raw)?url((?:de|en)code)|parse_url|get_(headers|meta_tags)|base64_((?:de|en)code))\\\\b","name":"support.function.url.php"},{"match":"(?i)\\\\b(strval|settype|serialize|(bool|double|float)val|debug_zval_dump|intval|import_request_variables|isset|is_(scalar|string|null|numeric|callable|int(eger)?|object|double|float|long|array|resource|real|bool)|unset|unserialize|print_r|empty|var_(dump|export)|gettype|get_(defined_vars|resource_type))\\\\b","name":"support.function.var.php"},{"match":"(?i)\\\\bwddx_(serialize_(va(?:lue|rs))|deserialize|packet_(start|end)|add_vars)\\\\b","name":"support.function.wddx.php"},{"match":"(?i)\\\\bxhprof_(sample_)?((?:dis|en)able)\\\\b","name":"support.function.xhprof.php"},{"match":"(?i)\\\\b(utf8_((?:de|en)code)|xml_(set_((notation|(end|start)_namespace|unparsed_entity)_decl_handler|(character_data|default|element|external_entity_ref|processing_instruction)_handler|object)|parse(_into_struct)?|parser_(([gs]et)_option|create(_ns)?|free)|error_string|get_(current_((column|line)_number|byte_index)|error_code)))\\\\b","name":"support.function.xml.php"},{"match":"(?i)\\\\bxmlrpc_(server_(call_method|create|destroy|add_introspection_data|register_(introspection_callback|method))|is_fault|decode(_request)?|parse_method_descriptions|encode(_request)?|([gs]et)_type)\\\\b","name":"support.function.xmlrpc.php"},{"match":"(?i)\\\\bxmlwriter_((end|start|write)_(comment|cdata|dtd(_(attlist|entity|element))?|document|pi|attribute|element)|(start|write)_(attribute|element)_ns|write_raw|set_indent(_string)?|text|output_memory|open_(memory|uri)|full_end_element|flush|)\\\\b","name":"support.function.xmlwriter.php"},{"match":"(?i)\\\\b(zlib_(decode|encode|get_coding_type)|readgzfile|gz(seek|compress|close|tell|inflate|open|decode|deflate|uncompress|puts|passthru|encode|eof|file|write|rewind|read|getc|getss?))\\\\b","name":"support.function.zlib.php"},{"match":"(?i)\\\\bis_int(eger)?\\\\b","name":"support.function.alias.php"}]},"switch_statement":{"patterns":[{"match":"\\\\s+(?=switch\\\\b)"},{"begin":"\\\\bswitch\\\\b(?!\\\\s*\\\\(.*\\\\)\\\\s*:)","beginCaptures":{"0":{"name":"keyword.control.switch.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.section.switch-block.end.bracket.curly.php"}},"name":"meta.switch-statement.php","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.switch-expression.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.switch-expression.end.bracket.round.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.section.switch-block.begin.bracket.curly.php"}},"end":"(?=}|\\\\?>)","patterns":[{"include":"#language"}]}]}]},"use-inner":{"patterns":[{"include":"#comments"},{"begin":"(?i)\\\\b(as)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.use-as.php"}},"end":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","endCaptures":{"0":{"name":"entity.other.alias.php"}}},{"include":"#class-name"},{"match":",","name":"punctuation.separator.delimiter.php"}]},"var_basic":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(?i)(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\b","name":"variable.other.php"}]},"var_global":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)((_(COOKIE|FILES|GET|POST|REQUEST))|arg([cv]))\\\\b","name":"variable.other.global.php"},"var_global_safer":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)((GLOBALS|_(ENV|SERVER|SESSION)))","name":"variable.other.global.safer.php"},"var_language":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)this\\\\b","name":"variable.language.this.php"},"variable-name":{"patterns":[{"include":"#var_global"},{"include":"#var_global_safer"},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"punctuation.definition.variable.php"},"4":{"name":"keyword.operator.class.php"},"5":{"name":"variable.other.property.php"},"6":{"name":"punctuation.section.array.begin.php"},"7":{"name":"constant.numeric.index.php"},"8":{"name":"variable.other.index.php"},"9":{"name":"punctuation.definition.variable.php"},"10":{"name":"string.unquoted.index.php"},"11":{"name":"punctuation.section.array.end.php"}},"match":"(?i)((\\\\$)(?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))(?:(->)(\\\\g)|(\\\\[)(?:(\\\\d+)|((\\\\$)\\\\g)|([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))(]))?"},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"punctuation.definition.variable.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((\\\\$\\\\{)(?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(}))"}]},"variables":{"patterns":[{"include":"#var_language"},{"include":"#var_global"},{"include":"#var_global_safer"},{"include":"#var_basic"},{"begin":"\\\\$\\\\{(?=.*?})","beginCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]}]}},"scopeName":"text.html.php.blade","embeddedLangs":["html-derivative","html","xml","sql","javascript","json","css"]}`)),c=[...a,...n,...r,...o,...e,...i,...t,s];export{c as default}; \ No newline at end of file +import{t as e}from"./javascript-CR5GavSE.js";import{t}from"./css-EYEy3Xlb.js";import{t as n}from"./html-rbi5PgIL.js";import{t as r}from"./xml-DpeacbYS.js";import{t as i}from"./json-I28f8KUm.js";import a from"./html-derivative-ClIm4xpX.js";import{t as o}from"./sql-WfIMpFBo.js";var s=Object.freeze(JSON.parse(`{"displayName":"Blade","fileTypes":["blade.php"],"foldingStartMarker":"(/\\\\*|\\\\{\\\\s*$|<<))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.php"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.php"}},"patterns":[{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]}]},{"begin":"<\\\\?(?i:php|=)?(?![^?]*\\\\?>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]},{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"}},"name":"meta.embedded.line.php","patterns":[{"captures":{"1":{"name":"source.php"},"2":{"name":"punctuation.section.embedded.end.php"},"3":{"name":"source.php"}},"match":"\\\\G(\\\\s*)((\\\\?))(?=>)","name":"meta.special.empty-tag.php"},{"begin":"\\\\G","contentName":"source.php","end":"(\\\\?)(?=>)","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"patterns":[{"include":"#language"}]}]}]}},"name":"blade","patterns":[{"include":"text.html.derivative"}],"repository":{"balance_brackets":{"patterns":[{"begin":"\\\\(","end":"\\\\)","patterns":[{"include":"#balance_brackets"}]},{"match":"[^()]+"}]},"blade":{"patterns":[{"begin":"\\\\{\\\\{--","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.blade"}},"end":"--}}","endCaptures":{"0":{"name":"punctuation.definition.comment.end.blade"}},"name":"comment.block.blade","patterns":[{"begin":"^(\\\\s*)(?=<\\\\?(?![^?]*\\\\?>))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.php"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.php"}},"name":"invalid.illegal.php-code-in-comment.blade","patterns":[{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"meta.embedded.block.php","patterns":[{"include":"#language"}]}]},{"begin":"<\\\\?(?i:php|=)?(?![^?]*\\\\?>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"contentName":"source.php","end":"(\\\\?)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"name":"invalid.illegal.php-code-in-comment.blade.meta.embedded.block.php","patterns":[{"include":"#language"}]},{"begin":"<\\\\?(?i:php|=)?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"}},"name":"invalid.illegal.php-code-in-comment.blade.meta.embedded.line.php","patterns":[{"captures":{"1":{"name":"source.php"},"2":{"name":"punctuation.section.embedded.end.php"},"3":{"name":"source.php"}},"match":"\\\\G(\\\\s*)((\\\\?))(?=>)","name":"meta.special.empty-tag.php"},{"begin":"\\\\G","contentName":"source.php","end":"(\\\\?)(?=>)","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"source.php"}},"patterns":[{"include":"#language"}]}]}]},{"begin":"(?)","name":"comment.line.double-slash.php"}]},{"begin":"(^\\\\s+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.php"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"end":"\\\\n|(?=\\\\?>)","name":"comment.line.number-sign.php"}]}]},"constants":{"patterns":[{"match":"(?i)\\\\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\\\b","name":"constant.language.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(DEFAULT_INCLUDE_PATH|EAR_(INSTALL|EXTENSION)_DIR|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|DEPRECATED|ERROR|NOTICE|PARSE|RECOVERABLE_ERROR|STRICT|USER_(DEPRECATED|ERROR|NOTICE|WARNING)|WARNING)|PHP_(ROUND_HALF_(DOWN|EVEN|ODD|UP)|(MAJOR|MINOR|RELEASE)_VERSION|MAXPATHLEN|BINDIR|SHLIB_SUFFIX|SYSCONFDIR|SAPI|CONFIG_FILE_(PATH|SCAN_DIR)|INT_(MAX|SIZE)|ZTS|OS|OUTPUT_HANDLER_(START|CONT|END)|DEBUG|DATADIR|URL_(SCHEME|HOST|USER|PORT|PASS|PATH|QUERY|FRAGMENT)|PREFIX|EXTRA_VERSION|EXTENSION_DIR|EOL|VERSION(_ID)?|WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)|VERSION_(M(?:AJOR|INOR))|BUILD|SUITEMASK|SP_(M(?:AJOR|INOR))|PRODUCTTYPE|PLATFORM)|LIBDIR|LOCALSTATEDIR)|STD(ERR|IN|OUT)|ZEND_(DEBUG_BUILD|THREAD_SAFE))\\\\b","name":"support.constant.core.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(__COMPILER_HALT_OFFSET__|AB(MON_([1-9]|10|11|12)|DAY[1-7])|AM_STR|ASSERT_(ACTIVE|BAIL|CALLBACK_QUIET_EVAL|WARNING)|ALT_DIGITS|CASE_(UPPER|LOWER)|CHAR_MAX|CONNECTION_(ABORTED|NORMAL|TIMEOUT)|CODESET|COUNT_(NORMAL|RECURSIVE)|CREDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)|CRYPT_(BLOWFISH|EXT_DES|MD5|SHA(256|512)|SALT_LENGTH|STD_DES)|CURRENCY_SYMBOL|D_(T_)?FMT|DATE_(ATOM|COOKIE|ISO8601|RFC(822|850|1036|1123|2822|3339)|RSS|W3C)|DAY_[1-7]|DECIMAL_POINT|DIRECTORY_SEPARATOR|ENT_(COMPAT|IGNORE|(NO)?QUOTES)|EXTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|REFS|SKIP)|ERA(_(D_(T_)?FMT)|T_FMT|YEAR)?|FRAC_DIGITS|GROUPING|HASH_HMAC|HTML_(ENTITIES|SPECIALCHARS)|INF|INFO_(ALL|CREDITS|CONFIGURATION|ENVIRONMENT|GENERAL|LICENSEMODULES|VARIABLES)|INI_(ALL|CANNER_(NORMAL|RAW)|PERDIR|SYSTEM|USER)|INT_(CURR_SYMBOL|FRAC_DIGITS)|LC_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|LOCK_(EX|NB|SH|UN)|LOG_(ALERT|AUTH(PRIV)?|CRIT|CRON|CONS|DAEMON|DEBUG|EMERG|ERR|INFO|LOCAL[1-7]|LPR|KERN|MAIL|NEWS|NODELAY|NOTICE|NOWAIT|ODELAY|PID|PERROR|WARNING|SYSLOG|UCP|USER)|M_(1_PI|SQRT(1_2|[23]|PI)|2_(SQRT)?PI|PI(_([24]))?|E(ULER)?|LN(10|2|PI)|LOG(10|2)E)|MON_([1-9]|10|11|12|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|N_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|NAN|NEGATIVE_SIGN|NO(EXPR|STR)|P_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|PM_STR|POSITIVE_SIGN|PATH(_SEPARATOR|INFO_(EXTENSION|(BASE|DIR|FILE)NAME))|RADIXCHAR|SEEK_(CUR|END|SET)|SORT_(ASC|DESC|LOCALE_STRING|REGULAR|STRING)|STR_PAD_(BOTH|LEFT|RIGHT)|T_FMT(_AMPM)?|THOUSEP|THOUSANDS_SEP|UPLOAD_ERR_(CANT_WRITE|EXTENSION|(FORM|INI)_SIZE|NO_(FILE|TMP_DIR)|OK|PARTIAL)|YES(EXPR|STR))\\\\b","name":"support.constant.std.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)|XML_(SAX_IMPL|(DTD|DOCUMENT(_(FRAG|TYPE))?|HTML_DOCUMENT|NOTATION|NAMESPACE_DECL|PI|COMMENT|DATA_SECTION|TEXT)_NODE|OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)|ERROR_((BAD_CHAR|(ATTRIBUTE_EXTERNAL|BINARY|PARAM|RECURSIVE)_ENTITY)_REF|MISPLACED_XML_PI|SYNTAX|NONE|NO_(MEMORY|ELEMENTS)|TAG_MISMATCH|INCORRECT_ENCODING|INVALID_TOKEN|DUPLICATE_ATTRIBUTE|UNCLOSED_(CDATA_SECTION|TOKEN)|UNDEFINED_ENTITY|UNKNOWN_ENCODING|JUNK_AFTER_DOC_ELEMENT|PARTIAL_CHAR|EXTERNAL_ENTITY_HANDLING|ASYNC_ENTITY)|ENTITY_(((REF|DECL)_)?NODE)|ELEMENT(_DECL)?_NODE|LOCAL_NAMESPACE|ATTRIBUTE_(N(?:MTOKEN(S)?|OTATION|ODE))|CDATA|ID(REF(S)?)?|DECL_NODE|ENTITY|ENUMERATION)|MHASH_(RIPEMD(128|160|256|320)|GOST|MD([245])|SHA(1|224|256|384|512)|SNEFRU256|HAVAL(128|160|192|224|256)|CRC23(B)?|TIGER(1(?:28|60))?|WHIRLPOOL|ADLER32)|MYSQL_(BOTH|NUM|CLIENT_(SSL|COMPRESS|IGNORE_SPACE|INTERACTIVE|ASSOC))|MYSQLI_(REPORT_(STRICT|INDEX|OFF|ERROR|ALL)|REFRESH_(GRANT|MASTER|BACKUP_LOG|STATUS|SLAVE|HOSTS|THREADS|TABLES|LOG)|READ_DEFAULT_(FILE|GROUP)|(GROUP|MULTIPLE_KEY|BINARY|BLOB)_FLAG|BOTH|STMT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|STORE_RESULT|SERVER_QUERY_(NO_((GOOD_)?INDEX_USED)|WAS_SLOW)|SET_(CHARSET_NAME|FLAG)|NO_(D(?:EFAULT_VALUE_FLAG|ATA))|NOT_NULL_FLAG|NUM(_FLAG)?|CURSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)|CLIENT_(SSL|NO_SCHEMA|COMPRESS|IGNORE_SPACE|INTERACTIVE|FOUND_ROWS)|TYPE_(GEOMETRY|((MEDIUM|LONG|TINY)_)?BLOB|BIT|SHORT|STRING|SET|YEAR|NULL|NEWDECIMAL|NEWDATE|CHAR|TIME(STAMP)?|TINY|INT24|INTERVAL|DOUBLE|DECIMAL|DATE(TIME)?|ENUM|VAR_STRING|FLOAT|LONG(LONG)?)|TIME_STAMP_FLAG|INIT_COMMAND|ZEROFILL_FLAG|ON_UPDATE_NOW_FLAG|OPT_(NET_((CMD|READ)_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE)|DEBUG_TRACE_ENABLED|DATA_TRUNCATED|USE_RESULT|(ENUM|(PART|PRI|UNIQUE)_KEY|UNSIGNED)_FLAG|ASSOC|ASYNC|AUTO_INCREMENT_FLAG)|MCRYPT_(RC([26])|RIJNDAEL_(128|192|256)|RAND|GOST|XTEA|MODE_(STREAM|NOFB|CBC|CFB|OFB|ECB)|MARS|BLOWFISH(_COMPAT)?|SERPENT|SKIPJACK|SAFER(64|128|PLUS)|CRYPT|CAST_(128|256)|TRIPLEDES|THREEWAY|TWOFISH|IDEA|(3)?DES|DECRYPT|DEV_(U)?RANDOM|PANAMA|ENCRYPT|ENIGNA|WAKE|LOKI97|ARCFOUR(_IV)?)|STREAM_(REPORT_ERRORS|MUST_SEEK|MKDIR_RECURSIVE|BUFFER_(NONE|FULL|LINE)|SHUT_(RD)?WR|SOCK_(RDM|RAW|STREAM|SEQPACKET|DGRAM)|SERVER_(BIND|LISTEN)|NOTIFY_(REDIRECTED|RESOLVE|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|COMPLETED|CONNECT|PROGRESS|FILE_SIZE_IS|FAILURE|AUTH_(RE(?:QUIRED|SULT)))|CRYPTO_METHOD_((SSLv2(3)?|SSLv3|TLS)_(CLIENT|SERVER))|CLIENT_((ASYNC_)?CONNECT|PERSISTENT)|CAST_(AS_STREAM|FOR_SELECT)|(I(?:GNORE|S))_URL|IPPROTO_(RAW|TCP|ICMP|IP|UDP)|OOB|OPTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER)|URL_STAT_(LINK|QUIET)|USE_PATH|PEEK|PF_(INET(6)?|UNIX)|ENFORCE_SAFE_MODE|FILTER_(ALL|READ|WRITE))|SUNFUNCS_RET_(DOUBLE|STRING|TIMESTAMP)|SQLITE_(READONLY|ROW|MISMATCH|MISUSE|BOTH|BUSY|SCHEMA|NOMEM|NOTFOUND|NOTADB|NOLFS|NUM|CORRUPT|CONSTRAINT|CANTOPEN|TOOBIG|INTERRUPT|INTERNAL|IOERR|OK|DONE|PROTOCOL|PERM|ERROR|EMPTY|FORMAT|FULL|LOCKED|ABORT|ASSOC|AUTH)|SQLITE3_(BOTH|BLOB|NUM|NULL|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT_ASSOC)|CURL(M_(BAD_((EASY)?HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|OUT_OF_MEMORY|OK)|MSG_DONE|SSH_AUTH_(HOST|NONE|DEFAULT|PUBLICKEY|PASSWORD|KEYBOARD)|CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC)|INFO_(REDIRECT_(COUNT|TIME)|REQUEST_SIZE|SSL_VERIFYRESULT|STARTTRANSFER_TIME|(S(?:IZE|PEED))_((?:DOWN|UP)LOAD)|HTTP_CODE|HEADER_(OUT|SIZE)|NAMELOOKUP_TIME|CONNECT_TIME|CONTENT_(TYPE|LENGTH_((?:DOWN|UP)LOAD))|CERTINFO|TOTAL_TIME|PRIVATE|PRETRANSFER_TIME|EFFECTIVE_URL|FILETIME)|OPT_(RESUME_FROM|RETURNTRANSFER|REDIR_PROTOCOLS|REFERER|READ(DATA|FUNCTION)|RANGE|RANDOM_FILE|MAX(CONNECTS|REDIRS)|BINARYTRANSFER|BUFFERSIZE|SSH_(HOST_PUBLIC_KEY_MD5|(P(?:RIVATE|UBLIC))_KEYFILE)|AUTH_TYPES)|SSL(CERT(TYPE|PASSWD)?|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?)|SSL_(CIPHER_LIST|VERIFY(HOST|PEER))|STDERR|HTTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)|HEADER(FUNCTION)?|NO(BODY|SIGNAL|PROGRESS)|NETRC|CRLF|CONNECTTIMEOUT(_MS)?|COOKIE(SESSION|JAR|FILE)?|CUSTOMREQUEST|CERTINFO|CLOSEPOLICY|CA(INFO|PATH)|TRANSFERTEXT|TCP_NODELAY|TIME(CONDITION|OUT(_MS)?|VALUE)|INTERFACE|INFILE(SIZE)?|IPRESOLVE|DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|URL|USER(AGENT|PWD)|UNRESTRICTED_AUTH|UPLOAD|PRIVATE|PROGRESSFUNCTION|PROXY(TYPE|USERPWD|PORT|AUTH)?|PROTOCOLS|PORT|POST(REDIR|QUOTE|FIELDS)?|PUT|EGDSOCKET|ENCODING|VERBOSE|KRB4LEVEL|KEYPASSWD|QUOTE|FRESH_CONNECT|FTP(APPEND|LISTONLY|PORT|SSLAUTH)|FTP_(SSL|SKIP_PASV_IP|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)|FILE(TIME)?|FORBID_REUSE|FOLLOWLOCATION|FAILONERROR|WRITE(FUNCTION|HEADER)|LOW_SPEED_(LIMIT|TIME)|AUTOREFERER)|PROXY_(HTTP|SOCKS([45]))|PROTO_(SCP|SFTP|HTTP(S)?|TELNET|TFTP|DICT|FTP(S)?|FILE|LDAP(S)?|ALL)|E_((RE(?:CV|AD))_ERROR|GOT_NOTHING|MALFORMAT_USER|BAD_(CONTENT_ENCODING|CALLING_ORDER|PASSWORD_ENTERED|FUNCTION_ARGUMENT)|SSH|SSL_(CIPHER|CONNECT_ERROR|CERTPROBLEM|CACERT|PEER_CERTIFICATE|ENGINE_(NOTFOUND|SETFAILED))|SHARE_IN_USE|SEND_ERROR|HTTP_(RANGE_ERROR|NOT_FOUND|PORT_FAILED|POST_ERROR)|COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|TOO_MANY_REDIRECTS|TELNET_OPTION_SYNTAX|OBSOLETE|OUT_OF_MEMORY|OPERATION|TIMEOUTED|OK|URL_MALFORMAT(_USER)?|UNSUPPORTED_PROTOCOL|UNKNOWN_TELNET_OPTION|PARTIAL_FILE|FTP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|COULDNT_(RETR_FILE|GET_SIZE|STOR_FILE|SET_(BINARY|ASCII)|USE_REST)|CANT_(GET_HOST|RECONNECT)|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|WRITE_ERROR|WEIRD_((PASS|PASV|SERVER|USER)_REPLY|227_FORMAT)|ACCESS_DENIED)|FILESIZE_EXCEEDED|FILE_COULDNT_READ_FILE|FUNCTION_NOT_FOUND|FAILED_INIT|WRITE_ERROR|LIBRARY_NOT_FOUND|LDAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL)|ABORTED_BY_CALLBACK)|VERSION_NOW|FTP(METHOD_(MULTI|SINGLE|NO)CWD|SSL_(ALL|NONE|CONTROL|TRY)|AUTH_(DEFAULT|SSL|TLS))|AUTH_(ANY(SAFE)?|BASIC|DIGEST|GSSNEGOTIATE|NTLM))|CURL_(HTTP_VERSION_(1_([01])|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(UN)?MODSINCE|LASTMOD)|IPRESOLVE_(V([46])|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))|IMAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|ICO|IFF|UNKNOWN|JB2|JPX|JP2|JPC|JPEG(2000)?|PSD|PNG|WBMP)|INPUT_(REQUEST|GET|SERVER|SESSION|COOKIE|POST|ENV)|ICONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION)|DNS_(MX|SRV|SOA|HINFO|NS|NAPTR|CNAME|TXT|PTR|ANY|ALL|AAAA|A(6)?)|DOM(STRING_SIZE_ERR)|DOM_((SYNTAX|HIERARCHY_REQUEST|NO_((?:MODIFICATION|DATA)_ALLOWED)|NOT_(FOUND|SUPPORTED)|NAMESPACE|INDEX_SIZE|USE_ATTRIBUTE|VALID_(MODIFICATION|STATE|CHARACTER|ACCESS)|PHP|VALIDATION|WRONG_DOCUMENT)_ERR)|JSON_(HEX_(TAG|QUOT|AMP|APOS)|NUMERIC_CHECK|ERROR_(SYNTAX|STATE_MISMATCH|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)|PREG_((D_UTF8(_OFFSET)?|NO|INTERNAL|(BACKTRACK|RECURSION)_LIMIT)_ERROR|GREP_INVERT|SPLIT_(NO_EMPTY|(DELIM|OFFSET)_CAPTURE)|SET_ORDER|OFFSET_CAPTURE|PATTERN_ORDER)|PSFS_(PASS_ON|ERR_FATAL|FEED_ME|FLAG_(NORMAL|FLUSH_(CLOSE|INC)))|PCRE_VERSION|POSIX_(([FRWX])_OK|S_IF(REG|BLK|SOCK|CHR|IFO))|FNM_(NOESCAPE|CASEFOLD|PERIOD|PATHNAME)|FILTER_(REQUIRE_(SCALAR|ARRAY)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW|SANITIZE_(MAGIC_QUOTES|STRING|STRIPPED|SPECIAL_CHARS|NUMBER_(INT|FLOAT)|URL|EMAIL|ENCODED|FULL_SPCIAL_CHARS)|VALIDATE_(REGEXP|BOOLEAN|INT|IP|URL|EMAIL|FLOAT)|FORCE_ARRAY|FLAG_(SCHEME_REQUIRED|STRIP_(BACKTICK|HIGH|LOW)|HOST_REQUIRED|NONE|NO_(RES|PRIV)_RANGE|ENCODE_QUOTES|IPV([46])|PATH_REQUIRED|EMPTY_STRING_NULL|ENCODE_(HIGH|LOW|AMP)|QUERY_REQUIRED|ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION)))|FILE_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)|FILEINFO_(RAW|MIME(_(ENCODING|TYPE))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)|FORCE_(DEFLATE|GZIP)|LIBXML_(XINCLUDE|NSCLEAN|NO(XMLDECL|BLANKS|NET|CDATA|ERROR|EMPTYTAG|ENT|WARNING)|COMPACT|DTD(VALID|LOAD|ATTR)|((DOTTED|LOADED)_)?VERSION|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)))\\\\b","name":"support.constant.ext.php"},{"captures":{"1":{"name":"punctuation.separator.inheritance.php"}},"match":"(\\\\\\\\)?\\\\b(T_(RETURN|REQUIRE(_ONCE)?|GOTO|GLOBAL|(MINUS|MOD|MUL|XOR)_EQUAL|METHOD_C|ML_COMMENT|BREAK|BOOL_CAST|BOOLEAN_(AND|OR)|BAD_CHARACTER|SR(_EQUAL)?|STRING(_CAST|VARNAME)?|START_HEREDOC|STATIC|SWITCH|SL(_EQUAL)?|HALT_COMPILER|NS_(C|SEPARATOR)|NUM_STRING|NEW|NAMESPACE|CHARACTER|COMMENT|CONSTANT(_ENCAPSED_STRING)?|CONCAT_EQUAL|CONTINUE|CURLY_OPEN|CLOSE_TAG|CLONE|CLASS(_C)?|CASE|CATCH|TRY|THROW|IMPLEMENTS|ISSET|IS_((GREATER|SMALLER)_OR_EQUAL|(NOT_)?(IDENTICAL|EQUAL))|INSTANCEOF|INCLUDE(_ONCE)?|INC|INT_CAST|INTERFACE|INLINE_HTML|IF|OR_EQUAL|OBJECT_(CAST|OPERATOR)|OPEN_TAG(_WITH_ECHO)?|OLD_FUNCTION|DNUMBER|DIR|DIV_EQUAL|DOC_COMMENT|DOUBLE_(ARROW|CAST|COLON)|DOLLAR_OPEN_CURLY_BRACES|DO|DEC|DECLARE|DEFAULT|USE|UNSET(_CAST)?|PRINT|PRIVATE|PROTECTED|PUBLIC|PLUS_EQUAL|PAAMAYIM_NEKUDOTAYIM|EXTENDS|EXIT|EMPTY|ENCAPSED_AND_WHITESPACE|END(SWITCH|IF|DECLARE|FOR(EACH)?|WHILE)|END_HEREDOC|ECHO|EVAL|ELSE(IF)?|VAR(IABLE)?|FINAL|FILE|FOR(EACH)?|FUNC_C|FUNCTION|WHITESPACE|WHILE|LNUMBER|LIST|LINE|LOGICAL_(AND|OR|XOR)|ARRAY_(CAST)?|ABSTRACT|AS|AND_EQUAL))\\\\b","name":"support.constant.parser-token.php"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"constant.other.php"}]},"function-call":{"patterns":[{"begin":"(?i)(\\\\\\\\?\\\\b[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*(?:\\\\\\\\[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)+)\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.name.function.php"}]},"2":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.function-call.php","patterns":[{"include":"#language"}]},{"begin":"(?i)(\\\\\\\\)?\\\\b([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#namespace"}]},"2":{"patterns":[{"include":"#support"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.name.function.php"}]},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.function-call.php","patterns":[{"include":"#language"}]},{"match":"(?i)\\\\b(print|echo)\\\\b","name":"support.function.construct.output.php"}]},"function-parameters":{"patterns":[{"include":"#comments"},{"match":",","name":"punctuation.separator.delimiter.php"},{"begin":"(?i)(array)\\\\s+((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(=)\\\\s*(array)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"storage.type.php"},"2":{"name":"variable.other.php"},"3":{"name":"storage.modifier.reference.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"support.function.construct.php"},"7":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"contentName":"meta.array.php","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.function.parameter.array.php","patterns":[{"include":"#comments"},{"include":"#strings"},{"include":"#numbers"}]},{"captures":{"1":{"name":"storage.type.php"},"2":{"name":"variable.other.php"},"3":{"name":"storage.modifier.reference.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"constant.language.php"},"7":{"name":"punctuation.section.array.begin.php"},"8":{"patterns":[{"include":"#parameter-default-types"}]},"9":{"name":"punctuation.section.array.end.php"},"10":{"name":"invalid.illegal.non-null-typehinted.php"}},"match":"(?i)(array|callable)\\\\s+((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?:\\\\s*(=)\\\\s*(?:(null)|(\\\\[)((?>[^]\\\\[]+|\\\\[\\\\g<8>])*)(])|(\\\\S*?\\\\(\\\\)|\\\\S*?)))?\\\\s*(?=[),]|/[*/]|#|$)","name":"meta.function.parameter.array.php"},{"begin":"(?i)(\\\\\\\\?(?:[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)*)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s+((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"support.other.namespace.php","patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"storage.type.php"},{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]},"2":{"name":"storage.type.php"},"3":{"name":"variable.other.php"},"4":{"name":"storage.modifier.reference.php"},"5":{"name":"keyword.operator.variadic.php"},"6":{"name":"punctuation.definition.variable.php"}},"end":"(?=[),]|/[*/]|#)","name":"meta.function.parameter.typehinted.php","patterns":[{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.php"}},"end":"(?=[),]|/[*/]|#)","patterns":[{"include":"#language"}]}]},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"keyword.operator.variadic.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(?=[),]|/[*/]|#|$)","name":"meta.function.parameter.no-default.php"},{"begin":"(?i)((&)?\\\\s*(\\\\.\\\\.\\\\.)?(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(=)\\\\s*(?:(\\\\[)((?>[^]\\\\[]+|\\\\[\\\\g<6>])*)(]))?","beginCaptures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"keyword.operator.variadic.php"},"4":{"name":"punctuation.definition.variable.php"},"5":{"name":"keyword.operator.assignment.php"},"6":{"name":"punctuation.section.array.begin.php"},"7":{"patterns":[{"include":"#parameter-default-types"}]},"8":{"name":"punctuation.section.array.end.php"}},"end":"(?=[),]|/[*/]|#)","name":"meta.function.parameter.default.php","patterns":[{"include":"#parameter-default-types"}]}]},"heredoc":{"patterns":[{"begin":"(?i)(?=<<<\\\\s*(\\"?)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(\\\\1)\\\\s*$)","end":"(?!\\\\G)","name":"string.unquoted.heredoc.php","patterns":[{"include":"#heredoc_interior"}]},{"begin":"(?=<<<\\\\s*'([A-Z_a-z]+[0-9A-Z_a-z]*)'\\\\s*$)","end":"(?!\\\\G)","name":"string.unquoted.nowdoc.php","patterns":[{"include":"#nowdoc_interior"}]}]},"heredoc_interior":{"patterns":[{"begin":"(<<<)\\\\s*(\\"?)(HTML)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.html","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.html","patterns":[{"include":"#interpolation"},{"include":"text.html.basic"}]},{"begin":"(<<<)\\\\s*(\\"?)(BLADE)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.blade","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.blade","patterns":[{"include":"#interpolation"},{"include":"text.html.basic"},{"include":"#blade"}]},{"begin":"(<<<)\\\\s*(\\"?)(XML)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.xml","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.xml","patterns":[{"include":"#interpolation"},{"include":"text.xml"}]},{"begin":"(<<<)\\\\s*(\\"?)(SQL)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.sql","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.sql","patterns":[{"include":"#interpolation"},{"include":"source.sql"}]},{"begin":"(<<<)\\\\s*(\\"?)(J(?:AVASCRIPT|S))(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.js","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.js","patterns":[{"include":"#interpolation"},{"include":"source.js"}]},{"begin":"(<<<)\\\\s*(\\"?)(JSON)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.json","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.json","patterns":[{"include":"#interpolation"},{"include":"source.json"}]},{"begin":"(<<<)\\\\s*(\\"?)(CSS)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.css","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"name":"meta.embedded.css","patterns":[{"include":"#interpolation"},{"include":"source.css"}]},{"begin":"(<<<)\\\\s*(\\"?)(REGEXP?)(\\\\2)(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"string.regexp.heredoc.php","end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.heredoc.php"}},"patterns":[{"include":"#interpolation"},{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repitition.php"},"3":{"name":"punctuation.definition.arbitrary-repitition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repitition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"match":"\\\\\\\\[]'\\\\[\\\\\\\\]","name":"constant.character.escape.php"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"},{"begin":"(?i)(?<=^|\\\\s)(#)\\\\s(?=[-\\\\t !,.0-9?_a-z\\\\x7F-ÿ[^\\\\x00-\\\\x7F]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.php"}},"end":"$","endCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"name":"comment.line.number-sign.php"}]},{"begin":"(?i)(<<<)\\\\s*(\\"?)([_a-z\\\\x7F-ÿ]+[0-9_a-z\\\\x7F-ÿ]*)(\\\\2)(\\\\s*)","beginCaptures":{"1":{"name":"punctuation.definition.string.php"},"3":{"name":"keyword.operator.heredoc.php"},"5":{"name":"invalid.illegal.trailing-whitespace.php"}},"end":"^\\\\s*(\\\\3)\\\\b","endCaptures":{"1":{"name":"keyword.operator.heredoc.php"}},"patterns":[{"include":"#interpolation"}]}]},"instantiation":{"begin":"(?i)(new)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.new.php"}},"end":"(?i)(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"match":"(?i)(parent|static|self)(?![0-9_a-z\\\\x7F-ÿ])","name":"storage.type.php"},{"include":"#class-name"},{"include":"#variable-name"}]},"interpolation":{"patterns":[{"match":"\\\\\\\\[0-7]{1,3}","name":"constant.character.escape.octal.php"},{"match":"\\\\\\\\x\\\\h{1,2}","name":"constant.character.escape.hex.php"},{"match":"\\\\\\\\u\\\\{\\\\h+}","name":"constant.character.escape.unicode.php"},{"match":"\\\\\\\\[\\"$\\\\\\\\efnrtv]","name":"constant.character.escape.php"},{"begin":"\\\\{(?=\\\\$.*?})","beginCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]},{"include":"#variable-name"}]},"invoke-call":{"captures":{"1":{"name":"punctuation.definition.variable.php"},"2":{"name":"variable.other.php"}},"match":"(?i)(\\\\$+)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?=\\\\s*\\\\()","name":"meta.function-call.invoke.php"},"language":{"patterns":[{"include":"#comments"},{"begin":"(?i)^\\\\s*(interface)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(extends)?\\\\s*","beginCaptures":{"1":{"name":"storage.type.interface.php"},"2":{"name":"entity.name.type.interface.php"},"3":{"name":"storage.modifier.extends.php"}},"end":"(?i)((?:[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\s*,\\\\s*)*)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?\\\\s*(?:(?=\\\\{)|$)","endCaptures":{"1":{"patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"},{"match":",","name":"punctuation.separator.classes.php"}]},"2":{"name":"entity.other.inherited-class.php"}},"name":"meta.interface.php","patterns":[{"include":"#namespace"}]},{"begin":"(?i)^\\\\s*(trait)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"storage.type.trait.php"},"2":{"name":"entity.name.type.trait.php"}},"end":"(?=\\\\{)","name":"meta.trait.php","patterns":[{"include":"#comments"}]},{"captures":{"1":{"name":"keyword.other.namespace.php"},"2":{"name":"entity.name.type.namespace.php","patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]}},"match":"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+([0-9\\\\\\\\_a-z\\\\x7F-ÿ]+)(?=\\\\s*;)","name":"meta.namespace.php"},{"begin":"(?i)(?:^|(?<=<\\\\?php))\\\\s*(namespace)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.namespace.php"}},"end":"(?<=})|(?=\\\\?>)","name":"meta.namespace.php","patterns":[{"include":"#comments"},{"captures":{"0":{"patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]}},"match":"(?i)[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+","name":"entity.name.type.namespace.php"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.namespace.begin.bracket.curly.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.namespace.end.bracket.curly.php"}},"patterns":[{"include":"#language"}]},{"match":"\\\\S+","name":"invalid.illegal.identifier.php"}]},{"match":"\\\\s+(?=use\\\\b)"},{"begin":"(?i)\\\\buse\\\\b","beginCaptures":{"0":{"name":"keyword.other.use.php"}},"end":"(?<=})|(?=;)","name":"meta.use.php","patterns":[{"match":"\\\\b(const|function)\\\\b","name":"storage.type.\${1:/downcase}.php"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.use.begin.bracket.curly.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.use.end.bracket.curly.php"}},"patterns":[{"include":"#scope-resolution"},{"captures":{"1":{"name":"keyword.other.use-as.php"},"2":{"name":"storage.modifier.php"},"3":{"name":"entity.other.alias.php"}},"match":"(?i)\\\\b(as)\\\\s+(final|abstract|public|private|protected|static)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\b"},{"captures":{"1":{"name":"keyword.other.use-as.php"},"2":{"patterns":[{"match":"^(?:final|abstract|public|private|protected|static)$","name":"storage.modifier.php"},{"match":".+","name":"entity.other.alias.php"}]}},"match":"(?i)\\\\b(as)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\b"},{"captures":{"1":{"name":"keyword.other.use-insteadof.php"},"2":{"name":"support.class.php"}},"match":"(?i)\\\\b(insteadof)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"},{"match":";","name":"punctuation.terminator.expression.php"},{"include":"#use-inner"}]},{"include":"#use-inner"}]},{"begin":"(?i)^\\\\s*(?:(abstract|final)\\\\s+)?(class)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)","beginCaptures":{"1":{"name":"storage.modifier.\${1:/downcase}.php"},"2":{"name":"storage.type.class.php"},"3":{"name":"entity.name.type.class.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.class.end.bracket.curly.php"}},"name":"meta.class.php","patterns":[{"include":"#comments"},{"begin":"(?i)(extends)\\\\s+","beginCaptures":{"1":{"name":"storage.modifier.extends.php"}},"contentName":"meta.other.inherited-class.php","end":"(?i)(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"begin":"(?i)(?=\\\\\\\\?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)","end":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","endCaptures":{"1":{"name":"entity.other.inherited-class.php"}},"patterns":[{"include":"#namespace"}]},{"include":"#class-builtin"},{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"}]},{"begin":"(?i)(implements)\\\\s+","beginCaptures":{"1":{"name":"storage.modifier.implements.php"}},"end":"(?i)(?=[;{])","patterns":[{"include":"#comments"},{"begin":"(?i)(?=[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+)","contentName":"meta.other.inherited-class.php","end":"(?i)\\\\s*(?:,|(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ\\\\s]))\\\\s*","patterns":[{"begin":"(?i)(?=\\\\\\\\?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\\\\\)","end":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(?=[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","endCaptures":{"1":{"name":"entity.other.inherited-class.php"}},"patterns":[{"include":"#namespace"}]},{"include":"#class-builtin"},{"include":"#namespace"},{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"entity.other.inherited-class.php"}]}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.class.begin.bracket.curly.php"}},"contentName":"meta.class.body.php","end":"(?=}|\\\\?>)","patterns":[{"include":"#language"}]}]},{"include":"#switch_statement"},{"captures":{"1":{"name":"keyword.control.\${1:/downcase}.php"}},"match":"\\\\s*\\\\b(break|case|continue|declare|default|die|do|else(if)?|end(declare|for(each)?|if|switch|while)|exit|for(each)?|if|return|switch|use|while|yield)\\\\b"},{"begin":"(?i)\\\\b((?:require|include)(?:_once)?)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.import.include.php"}},"end":"(?=[;\\\\s]|$|\\\\?>)","name":"meta.include.php","patterns":[{"include":"#language"}]},{"begin":"\\\\b(catch)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.control.exception.catch.php"},"2":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"name":"meta.catch.php","patterns":[{"include":"#namespace"},{"captures":{"1":{"name":"support.class.exception.php"},"2":{"patterns":[{"match":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","name":"support.class.exception.php"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]},"3":{"name":"variable.other.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)((?:\\\\s*\\\\|\\\\s*[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)*)\\\\s*((\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"}]},{"match":"\\\\b(catch|try|throw|exception|finally)\\\\b","name":"keyword.control.exception.php"},{"begin":"(?i)\\\\b(function)\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"storage.type.function.php"}},"end":"(?=\\\\{)","name":"meta.function.closure.php","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"contentName":"meta.function.parameters.php","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"patterns":[{"include":"#function-parameters"}]},{"begin":"(?i)(use)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.other.function.use.php"},"2":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.php"}},"patterns":[{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((&)?\\\\s*(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(?=[),])","name":"meta.function.closure.use.php"}]}]},{"begin":"((?:(?:final|abstract|public|private|protected|static)\\\\s+)*)(function)\\\\s+(?i:(__(?:call|construct|debugInfo|destruct|get|set|isset|unset|tostring|clone|set_state|sleep|wakeup|autoload|invoke|callStatic))|([A-Z_a-z\\\\x7F-ÿ][0-9A-Z_a-z\\\\x7F-ÿ]*))\\\\s*(\\\\()","beginCaptures":{"1":{"patterns":[{"match":"final|abstract|public|private|protected|static","name":"storage.modifier.php"}]},"2":{"name":"storage.type.function.php"},"3":{"name":"support.function.magic.php"},"4":{"name":"entity.name.function.php"},"5":{"name":"punctuation.definition.parameters.begin.bracket.round.php"}},"contentName":"meta.function.parameters.php","end":"(\\\\))(?:\\\\s*(:)\\\\s*([A-Z_a-z\\\\x7F-ÿ][0-9A-Z_a-z\\\\x7F-ÿ]*))?","endCaptures":{"1":{"name":"punctuation.definition.parameters.end.bracket.round.php"},"2":{"name":"keyword.operator.return-value.php"},"3":{"name":"storage.type.php"}},"name":"meta.function.php","patterns":[{"include":"#function-parameters"}]},{"include":"#invoke-call"},{"include":"#scope-resolution"},{"include":"#variables"},{"include":"#strings"},{"captures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"},"3":{"name":"punctuation.definition.array.end.bracket.round.php"}},"match":"(array)(\\\\()(\\\\))","name":"meta.array.empty.php"},{"begin":"(array)(\\\\()","beginCaptures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.array.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"punctuation.definition.storage-type.begin.bracket.round.php"},"2":{"name":"storage.type.php"},"3":{"name":"punctuation.definition.storage-type.end.bracket.round.php"}},"match":"(?i)(\\\\()\\\\s*(array|real|double|float|int(?:eger)?|bool(?:ean)?|string|object|binary|unset)\\\\s*(\\\\))"},{"match":"(?i)\\\\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|var|function|interface|trait|parent|self|object)\\\\b","name":"storage.type.php"},{"match":"(?i)\\\\b(global|abstract|const|extends|implements|final|private|protected|public|static)\\\\b","name":"storage.modifier.php"},{"include":"#object"},{"match":";","name":"punctuation.terminator.expression.php"},{"match":":","name":"punctuation.terminator.statement.php"},{"include":"#heredoc"},{"include":"#numbers"},{"match":"(?i)\\\\bclone\\\\b","name":"keyword.other.clone.php"},{"match":"\\\\.=?","name":"keyword.operator.string.php"},{"match":"=>","name":"keyword.operator.key.php"},{"captures":{"1":{"name":"keyword.operator.assignment.php"},"2":{"name":"storage.modifier.reference.php"},"3":{"name":"storage.modifier.reference.php"}},"match":"(?i)(=)(&)|(&)(?=[$_a-z])"},{"match":"@","name":"keyword.operator.error-control.php"},{"match":"===?|!==?|<>","name":"keyword.operator.comparison.php"},{"match":"(?:|[-%\\\\&*+/^|]|<<|>>)=","name":"keyword.operator.assignment.php"},{"match":"<=>?|>=|[<>]","name":"keyword.operator.comparison.php"},{"match":"--|\\\\+\\\\+","name":"keyword.operator.increment-decrement.php"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.php"},{"match":"(?i)(!|&&|\\\\|\\\\|)|\\\\b(and|or|xor|as)\\\\b","name":"keyword.operator.logical.php"},{"include":"#function-call"},{"match":"<<|>>|[\\\\&^|~]","name":"keyword.operator.bitwise.php"},{"begin":"(?i)\\\\b(instanceof)\\\\s+(?=[$\\\\\\\\_a-z])","beginCaptures":{"1":{"name":"keyword.operator.type.php"}},"end":"(?=[^$0-9\\\\\\\\_a-z\\\\x7F-ÿ])","patterns":[{"include":"#class-name"},{"include":"#variable-name"}]},{"include":"#instantiation"},{"captures":{"1":{"name":"keyword.control.goto.php"},"2":{"name":"support.other.php"}},"match":"(?i)(goto)\\\\s+([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)"},{"captures":{"1":{"name":"entity.name.goto-label.php"}},"match":"(?i)^\\\\s*([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*:(?!:)"},{"include":"#string-backtick"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.curly.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.curly.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.section.array.begin.php"}},"end":"]|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.section.array.end.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.end.bracket.round.php"}},"patterns":[{"include":"#language"}]},{"include":"#constants"},{"match":",","name":"punctuation.separator.delimiter.php"}]},"namespace":{"begin":"(?i)(?:(namespace)|[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?(\\\\\\\\)(?=.*?[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","beginCaptures":{"1":{"name":"variable.language.namespace.php"},"2":{"name":"punctuation.separator.inheritance.php"}},"end":"(?i)(?=[0-9_a-z\\\\x7F-ÿ]*[^0-9\\\\\\\\_a-z\\\\x7F-ÿ])","name":"support.other.namespace.php","patterns":[{"match":"\\\\\\\\","name":"punctuation.separator.inheritance.php"}]},"nowdoc_interior":{"patterns":[{"begin":"(<<<)\\\\s*'(HTML)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.html","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.html","patterns":[{"include":"text.html.basic"}]},{"begin":"(<<<)\\\\s*'(BLADE)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.blade","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.blade","patterns":[{"include":"text.html.basic"},{"include":"#blade"}]},{"begin":"(<<<)\\\\s*'(XML)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"text.xml","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.xml","patterns":[{"include":"text.xml"}]},{"begin":"(<<<)\\\\s*'(SQL)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.sql","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.sql","patterns":[{"include":"source.sql"}]},{"begin":"(<<<)\\\\s*'(J(?:AVASCRIPT|S))'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.js","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.js","patterns":[{"include":"source.js"}]},{"begin":"(<<<)\\\\s*'(JSON)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.json","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.json","patterns":[{"include":"source.json"}]},{"begin":"(<<<)\\\\s*'(CSS)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"source.css","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"name":"meta.embedded.css","patterns":[{"include":"source.css"}]},{"begin":"(<<<)\\\\s*'(REGEXP?)'(\\\\s*)$","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.php"},"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"contentName":"string.regexp.nowdoc.php","end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"0":{"name":"punctuation.section.embedded.end.php"},"1":{"name":"keyword.operator.nowdoc.php"}},"patterns":[{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repitition.php"},"3":{"name":"punctuation.definition.arbitrary-repitition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repitition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"match":"\\\\\\\\[]'\\\\[\\\\\\\\]","name":"constant.character.escape.php"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"},{"begin":"(?i)(?<=^|\\\\s)(#)\\\\s(?=[-\\\\t !,.0-9?_a-z\\\\x7F-ÿ[^\\\\x00-\\\\x7F]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.php"}},"end":"$","endCaptures":{"0":{"name":"punctuation.definition.comment.php"}},"name":"comment.line.number-sign.php"}]},{"begin":"(?i)(<<<)\\\\s*'([_a-z\\\\x7F-ÿ]+[0-9_a-z\\\\x7F-ÿ]*)'(\\\\s*)","beginCaptures":{"1":{"name":"punctuation.definition.string.php"},"2":{"name":"keyword.operator.nowdoc.php"},"3":{"name":"invalid.illegal.trailing-whitespace.php"}},"end":"^\\\\s*(\\\\2)\\\\b","endCaptures":{"1":{"name":"keyword.operator.nowdoc.php"}}}]},"numbers":{"patterns":[{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.php"},{"match":"0[Bb][01]+","name":"constant.numeric.binary.php"},{"match":"0[0-7]+","name":"constant.numeric.octal.php"},{"captures":{"1":{"name":"punctuation.separator.decimal.period.php"},"2":{"name":"punctuation.separator.decimal.period.php"}},"match":"[0-9]*(\\\\.)[0-9]+(?:[Ee][-+]?[0-9]+)?|[0-9]+(\\\\.)[0-9]*(?:[Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+","name":"constant.numeric.decimal.php"},{"match":"0|[1-9][0-9]*","name":"constant.numeric.decimal.php"}]},"object":{"patterns":[{"begin":"(->)(\\\\$?\\\\{)","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]},{"begin":"(?i)(->)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"entity.name.function.php"},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.method-call.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"variable.other.property.php"},"3":{"name":"punctuation.definition.variable.php"}},"match":"(?i)(->)((\\\\$+)?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?"}]},"parameter-default-types":{"patterns":[{"include":"#strings"},{"include":"#numbers"},{"include":"#string-backtick"},{"include":"#variables"},{"match":"=>","name":"keyword.operator.key.php"},{"match":"=","name":"keyword.operator.assignment.php"},{"match":"&(?=\\\\s*\\\\$)","name":"storage.modifier.reference.php"},{"begin":"(array)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"support.function.construct.php"},"2":{"name":"punctuation.definition.array.begin.bracket.round.php"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.array.end.bracket.round.php"}},"name":"meta.array.php","patterns":[{"include":"#parameter-default-types"}]},{"include":"#instantiation"},{"begin":"(?i)(?=[0-9\\\\\\\\_a-z\\\\x7F-ÿ]+(::)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?)","end":"(?i)(::)([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)?","endCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"constant.other.class.php"}},"patterns":[{"include":"#class-name"}]},{"include":"#constants"}]},"php_doc":{"patterns":[{"match":"^(?!\\\\s*\\\\*).*?(?:(?=\\\\*/)|$\\\\n?)","name":"invalid.illegal.missing-asterisk.phpdoc.php"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"},"3":{"name":"storage.modifier.php"},"4":{"name":"invalid.illegal.wrong-access-type.phpdoc.php"}},"match":"^\\\\s*\\\\*\\\\s*(@access)\\\\s+((p(?:ublic|rivate|rotected))|(.+))\\\\s*$"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"},"2":{"name":"markup.underline.link.php"}},"match":"(@xlink)\\\\s+(.+)\\\\s*$"},{"begin":"(@(?:global|param|property(-(read|write))?|return|throws|var))\\\\s+(?=[(A-Z\\\\\\\\_a-z\\\\x7F-ÿ])","beginCaptures":{"1":{"name":"keyword.other.phpdoc.php"}},"contentName":"meta.other.type.phpdoc.php","end":"(?=\\\\s|\\\\*/)","patterns":[{"include":"#php_doc_types_array_multiple"},{"include":"#php_doc_types_array_single"},{"include":"#php_doc_types"}]},{"match":"@(api|abstract|author|category|copyright|example|global|inherit[Dd]oc|internal|license|link|method|property(-(read|write))?|package|param|return|see|since|source|static|subpackage|throws|todo|var|version|uses|deprecated|final|ignore)\\\\b","name":"keyword.other.phpdoc.php"},{"captures":{"1":{"name":"keyword.other.phpdoc.php"}},"match":"\\\\{(@(link|inherit[Dd]oc)).+?}","name":"meta.tag.inline.phpdoc.php"}]},"php_doc_types":{"captures":{"0":{"patterns":[{"match":"\\\\b(string|integer|int|boolean|bool|float|double|object|mixed|array|resource|void|null|callback|false|true|self)\\\\b","name":"keyword.other.type.php"},{"include":"#class-name"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]}},"match":"(?i)[\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*(\\\\|[\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*)*"},"php_doc_types_array_multiple":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.type.begin.bracket.round.phpdoc.php"}},"end":"(\\\\))(\\\\[])|(?=\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.type.end.bracket.round.phpdoc.php"},"2":{"name":"keyword.other.array.phpdoc.php"}},"patterns":[{"include":"#php_doc_types_array_multiple"},{"include":"#php_doc_types_array_single"},{"include":"#php_doc_types"},{"match":"\\\\|","name":"punctuation.separator.delimiter.php"}]},"php_doc_types_array_single":{"captures":{"1":{"patterns":[{"include":"#php_doc_types"}]},"2":{"name":"keyword.other.array.phpdoc.php"}},"match":"(?i)([\\\\\\\\_a-z\\\\x7F-ÿ][0-9\\\\\\\\_a-z\\\\x7F-ÿ]*)(\\\\[])"},"regex-double-quoted":{"begin":"\\"/(?=(\\\\\\\\.|[^\\"/])++/[ADSUXeimsux]*\\")","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"(/)([ADSUXeimsux]*)(\\")","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.regexp.double-quoted.php","patterns":[{"match":"(\\\\\\\\){1,2}[]$.\\\\[^{}]","name":"constant.character.escape.regex.php"},{"include":"#interpolation"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.php"},"3":{"name":"punctuation.definition.arbitrary-repetition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php","patterns":[{"include":"#interpolation"}]},{"match":"[$*+^]","name":"keyword.operator.regexp.php"}]},"regex-single-quoted":{"begin":"'/(?=(\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\['\\\\\\\\]?|[^'])|.)|[^'/])++/[ADSUXeimsux]*')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"(/)([ADSUXeimsux]*)(')","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.regexp.single-quoted.php","patterns":[{"include":"#single_quote_regex_escape"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.php"},"3":{"name":"punctuation.definition.arbitrary-repetition.php"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.php"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.php"}},"end":"]","name":"string.regexp.character-class.php"},{"match":"[$*+^]","name":"keyword.operator.regexp.php"}]},"scope-resolution":{"patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\b(self|static|parent)\\\\b","name":"storage.type.php"},{"match":"\\\\w+","name":"entity.name.class.php"},{"include":"#class-name"},{"include":"#variable-name"}]}},"match":"(?i)\\\\b([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(?=\\\\s*::)"},{"begin":"(?i)(::)\\\\s*([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"entity.name.function.php"},"3":{"name":"punctuation.definition.arguments.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.arguments.end.bracket.round.php"}},"name":"meta.method-call.static.php","patterns":[{"include":"#language"}]},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"keyword.other.class.php"}},"match":"(?i)(::)\\\\s*(class)\\\\b"},{"captures":{"1":{"name":"keyword.operator.class.php"},"2":{"name":"variable.other.class.php"},"3":{"name":"punctuation.definition.variable.php"},"4":{"name":"constant.other.class.php"}},"match":"(?i)(::)\\\\s*(?:((\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)|([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))?"}]},"single_quote_regex_escape":{"match":"\\\\\\\\(?:\\\\\\\\(?:\\\\\\\\['\\\\\\\\]?|[^'])|.)","name":"constant.character.escape.php"},"sql-string-double-quoted":{"begin":"\\"\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"contentName":"source.sql.embedded.php","end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.double.sql.php","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(#)(\\\\\\\\\\"|[^\\"])*(?=\\"|$)","name":"comment.line.number-sign.sql"},{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(--)(\\\\\\\\\\"|[^\\"])*(?=\\"|$)","name":"comment.line.double-dash.sql"},{"match":"\\\\\\\\[\\"'\\\\\\\\\`]","name":"constant.character.escape.php"},{"match":"'(?=((\\\\\\\\')|[^\\"'])*(\\"|$))","name":"string.quoted.single.unclosed.sql"},{"match":"\`(?=((\\\\\\\\\`)|[^\\"\`])*(\\"|$))","name":"string.quoted.other.backtick.unclosed.sql"},{"begin":"'","end":"'","name":"string.quoted.single.sql","patterns":[{"include":"#interpolation"}]},{"begin":"\`","end":"\`","name":"string.quoted.other.backtick.sql","patterns":[{"include":"#interpolation"}]},{"include":"#interpolation"},{"include":"source.sql"}]},"sql-string-single-quoted":{"begin":"'\\\\s*(?=(SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|AND)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"contentName":"source.sql.embedded.php","end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.single.sql.php","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(#)(\\\\\\\\'|[^'])*(?='|$)","name":"comment.line.number-sign.sql"},{"captures":{"1":{"name":"punctuation.definition.comment.sql"}},"match":"(--)(\\\\\\\\'|[^'])*(?='|$)","name":"comment.line.double-dash.sql"},{"match":"\\\\\\\\[\\"'\\\\\\\\\`]","name":"constant.character.escape.php"},{"match":"\`(?=((\\\\\\\\\`)|[^'\`])*('|$))","name":"string.quoted.other.backtick.unclosed.sql"},{"match":"\\"(?=((\\\\\\\\\\")|[^\\"'])*('|$))","name":"string.quoted.double.unclosed.sql"},{"include":"source.sql"}]},"string-backtick":{"begin":"\`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"\`","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.interpolated.php","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.php"},{"include":"#interpolation"}]},"string-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.double.php","patterns":[{"include":"#interpolation"}]},"string-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.php"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.php"}},"name":"string.quoted.single.php","patterns":[{"match":"\\\\\\\\['\\\\\\\\]","name":"constant.character.escape.php"}]},"strings":{"patterns":[{"include":"#regex-double-quoted"},{"include":"#sql-string-double-quoted"},{"include":"#string-double-quoted"},{"include":"#regex-single-quoted"},{"include":"#sql-string-single-quoted"},{"include":"#string-single-quoted"}]},"support":{"patterns":[{"match":"(?i)\\\\bapc_(store|sma_info|compile_file|clear_cache|cas|cache_info|inc|dec|define_constants|delete(_file)?|exists|fetch|load_constants|add|bin_(dump|load)(file)?)\\\\b","name":"support.function.apc.php"},{"match":"(?i)\\\\b(shuffle|sizeof|sort|next|nat(case)?sort|count|compact|current|in_array|usort|uksort|uasort|pos|prev|end|each|extract|ksort|key(_exists)?|krsort|list|asort|arsort|rsort|reset|range|array(_(shift|sum|splice|search|slice|chunk|change_key_case|count_values|column|combine|(diff|intersect)(_(u)?(key|assoc))?|u(diff|intersect)(_(u)?assoc)?|unshift|unique|pop|push|pad|product|values|keys|key_exists|filter|fill(_keys)?|flip|walk(_recursive)?|reduce|replace(_recursive)?|reverse|rand|multisort|merge(_recursive)?|map)?))\\\\b","name":"support.function.array.php"},{"match":"(?i)\\\\b(show_source|sys_getloadavg|sleep|highlight_(file|string)|constant|connection_(aborted|status)|time_(nanosleep|sleep_until)|ignore_user_abort|die|define(d)?|usleep|uniqid|unpack|__halt_compiler|php_(check_syntax|strip_whitespace)|pack|eval|exit|get_browser)\\\\b","name":"support.function.basic_functions.php"},{"match":"(?i)\\\\bbc(scale|sub|sqrt|comp|div|pow(mod)?|add|mod|mul)\\\\b","name":"support.function.bcmath.php"},{"match":"(?i)\\\\bblenc_encrypt\\\\b","name":"support.function.blenc.php"},{"match":"(?i)\\\\bbz(compress|close|open|decompress|errstr|errno|error|flush|write|read)\\\\b","name":"support.function.bz2.php"},{"match":"(?i)\\\\b((French|Gregorian|Jewish|Julian)ToJD|cal_(to_jd|info|days_in_month|from_jd)|unixtojd|jdto(unix|jewish)|easter_(da(?:te|ys))|JD(MonthName|To(Gregorian|Julian|French)|DayOfWeek))\\\\b","name":"support.function.calendar.php"},{"match":"(?i)\\\\b(class_alias|all_user_method(_array)?|is_(a|subclass_of)|__autoload|(class|interface|method|property|trait)_exists|get_(class(_(vars|methods))?|(called|parent)_class|object_vars|declared_(classes|interfaces|traits)))\\\\b","name":"support.function.classobj.php"},{"match":"(?i)\\\\b(com_(create_guid|print_typeinfo|event_sink|load_typelib|get_active_object|message_pump)|variant_(sub|set(_type)?|not|neg|cast|cat|cmp|int|idiv|imp|or|div|date_(from|to)_timestamp|pow|eqv|fix|and|add|abs|round|get_type|xor|mod|mul))\\\\b","name":"support.function.com.php"},{"begin":"(?i)\\\\b(isset|unset|eval|empty|list)\\\\b","name":"support.function.construct.php"},{"match":"(?i)\\\\b(print|echo)\\\\b","name":"support.function.construct.output.php"},{"match":"(?i)\\\\bctype_(space|cntrl|digit|upper|punct|print|lower|alnum|alpha|graph|xdigit)\\\\b","name":"support.function.ctype.php"},{"match":"(?i)\\\\bcurl_(share_(close|init|setopt)|strerror|setopt(_array)?|copy_handle|close|init|unescape|pause|escape|errno|error|exec|version|file_create|reset|getinfo|multi_(strerror|setopt|select|close|init|info_read|(add|remove)_handle|getcontent|exec))\\\\b","name":"support.function.curl.php"},{"match":"(?i)\\\\b(strtotime|str[fp]time|checkdate|time|timezone_name_(from_abbr|get)|idate|timezone_((location|offset|transitions|version)_get|(abbreviations|identifiers)_list|open)|date(_(sun(rise|set)|sun_info|sub|create(_(immutable_)?from_format)?|timestamp_([gs]et)|timezone_([gs]et)|time_set|isodate_set|interval_(create_from_date_string|format)|offset_get|diff|default_timezone_([gs]et)|date_set|parse(_from_format)?|format|add|get_last_errors|modify))?|localtime|get(date|timeofday)|gm(strftime|date|mktime)|microtime|mktime)\\\\b","name":"support.function.datetime.php"},{"match":"(?i)\\\\bdba_(sync|handlers|nextkey|close|insert|optimize|open|delete|popen|exists|key_split|firstkey|fetch|list|replace)\\\\b","name":"support.function.dba.php"},{"match":"(?i)\\\\bdbx_(sort|connect|compare|close|escape_string|error|query|fetch_row)\\\\b","name":"support.function.dbx.php"},{"match":"(?i)\\\\b(scandir|chdir|chroot|closedir|opendir|dir|rewinddir|readdir|getcwd)\\\\b","name":"support.function.dir.php"},{"match":"(?i)\\\\beio_(sync(fs)?|sync_file_range|symlink|stat(vfs)?|sendfile|set_min_parallel|set_max_(idle|poll_(reqs|time)|parallel)|seek|n(threads|op|pending|reqs|ready)|chown|chmod|custom|close|cancel|truncate|init|open|dup2|unlink|utime|poll|event_loop|f(sync|stat(vfs)?|chown|chmod|truncate|datasync|utime|allocate)|write|lstat|link|rename|realpath|read(ahead|dir|link)?|rmdir|get_(event_stream|last_error)|grp(_(add|cancel|limit))?|mknod|mkdir|busy)\\\\b","name":"support.function.eio.php"},{"match":"(?i)\\\\benchant_(dict_(store_replacement|suggest|check|is_in_session|describe|quick_check|add_to_(personal|session)|get_error)|broker_(set_ordering|init|dict_exists|describe|free(_dict)?|list_dicts|request_(pwl_)?dict|get_error))\\\\b","name":"support.function.enchant.php"},{"match":"(?i)\\\\bsplit(i)?|sql_regcase|ereg(i)?(_replace)?\\\\b","name":"support.function.ereg.php"},{"match":"(?i)\\\\b((restore|set)_(e(?:rror|xception)_handler)|trigger_error|debug_(print_)?backtrace|user_error|error_(log|reporting|get_last))\\\\b","name":"support.function.errorfunc.php"},{"match":"(?i)\\\\bshell_exec|system|passthru|proc_(nice|close|terminate|open|get_status)|escapeshell(arg|cmd)|exec\\\\b","name":"support.function.exec.php"},{"match":"(?i)\\\\b(exif_(thumbnail|tagname|imagetype|read_data)|read_exif_data)\\\\b","name":"support.function.exif.php"},{"match":"(?i)\\\\bfann_((duplicate|length|merge|shuffle|subset)_train_data|scale_(train(_data)?|((?:in|out)put)(_train_data)?)|set_(scaling_params|sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|cascade_(num_candidate_groups|candidate_(change_fraction|limit|stagnation_epochs)|output_(change_fraction|stagnation_epochs)|weight_multiplier|activation_(functions|steepnesses)|(m(?:ax|in))_(cand|out)_epochs)|callback|training_algorithm|train_(error|stop)_function|((?:in|out)put)_scaling_params|error_log|quickprop_(decay|mu)|weight(_array)?|learning_(momentum|rate)|bit_fail_limit|activation_(function|steepness)(_(hidden|layer|output))?|rprop_(((?:de|in)crease)_factor|delta_(max|min|zero)))|save(_train)?|num_((?:in|out)put)_train_data|copy|clear_scaling_params|cascadetrain_on_(file|data)|create_((s(?:parse|hortcut|tandard))(_array)?|train(_from_callback)?|from_file)|test(_data)?|train(_(on_(file|data)|epoch))?|init_weights|descale_(input|output|train)|destroy(_train)?|print_error|run|reset_(MSE|err(no|str))|read_train_from_file|randomize_weights|get_(sarprop_(step_error_(shift|threshold_factor)|temperature|weight_decay_shift)|num_(input|output|layers)|network_type|MSE|connection_(array|rate)|bias_array|bit_fail(_limit)?|cascade_(num_(candidate(?:s|_groups))|(candidate|output)_(change_fraction|limit|stagnation_epochs)|weight_multiplier|activation_(functions|steepnesses)(_count)?|(m(?:ax|in))_(cand|out)_epochs)|total_((?:connecti|neur)ons)|training_algorithm|train_(error|stop)_function|err(no|str)|quickprop_(decay|mu)|learning_(momentum|rate)|layer_array|activation_(function|steepness)|rprop_(((?:de|in)crease)_factor|delta_(max|min|zero))))\\\\b","name":"support.function.fann.php"},{"match":"(?i)\\\\b(symlink|stat|set_file_buffer|chown|chgrp|chmod|copy|clearstatcache|touch|tempnam|tmpfile|is_(dir|(uploaded_)?file|executable|link|readable|writ(e)?able)|disk_(free|total)_space|diskfreespace|dirname|delete|unlink|umask|pclose|popen|pathinfo|parse_ini_(file|string)|fscanf|fstat|fseek|fnmatch|fclose|ftell|ftruncate|file(size|[acm]time|type|inode|owner|perms|group)?|file_(exists|(get|put)_contents)|f(open|puts|putcsv|passthru|eof|flush|write|lock|read|gets(s)?|getc(sv)?)|lstat|lchown|lchgrp|link(info)?|rename|rewind|read(file|link)|realpath(_cache_(get|size))?|rmdir|glob|move_uploaded_file|mkdir|basename)\\\\b","name":"support.function.file.php"},{"match":"(?i)\\\\b(finfo_(set_flags|close|open|file|buffer)|mime_content_type)\\\\b","name":"support.function.fileinfo.php"},{"match":"(?i)\\\\bfilter_(has_var|input(_array)?|id|var(_array)?|list)\\\\b","name":"support.function.filter.php"},{"match":"(?i)\\\\bfastcgi_finish_request\\\\b","name":"support.function.fpm.php"},{"match":"(?i)\\\\b(call_user_(func|method)(_array)?|create_function|unregister_tick_function|forward_static_call(_array)?|function_exists|func_(num_args|get_arg(s)?)|register_(shutdown|tick)_function|get_defined_functions)\\\\b","name":"support.function.funchand.php"},{"match":"(?i)\\\\b((n)?gettext|textdomain|d((?:(n)?|c(n)?)gettext)|bind(textdomain|_textdomain_codeset))\\\\b","name":"support.function.gettext.php"},{"match":"(?i)\\\\bgmp_(scan[01]|strval|sign|sub|setbit|sqrt(rem)?|hamdist|neg|nextprime|com|clrbit|cmp|testbit|intval|init|invert|import|or|div(exact)?|div_(qr??|r)|jacobi|popcount|pow(m)?|perfect_square|prob_prime|export|fact|legendre|and|add|abs|root(rem)?|random(_(bits|range))?|gcd(ext)?|xor|mod|mul)\\\\b","name":"support.function.gmp.php"},{"match":"(?i)\\\\bhash(_(hmac(_file)?|copy|init|update(_(file|stream))?|pbkdf2|equals|file|final|algos))?\\\\b","name":"support.function.hash.php"},{"match":"(?i)\\\\b(http_(support|send_(status|stream|content_(disposition|type)|data|file|last_modified)|head|negotiate_(charset|content_type|language)|chunked_decode|cache_(etag|last_modified)|throttle|inflate|deflate|date|post_(data|fields)|put_(data|file|stream)|persistent_handles_(count|clean|ident)|parse_(cookie|headers|message|params)|redirect|request(_(method_(exists|name|(un)?register)|body_encode))?|get(_request_(headers|body(_stream)?))?|match_(etag|modified|request_header)|build_(cookie|str|url))|ob_(etag|deflate|inflate)handler)\\\\b","name":"support.function.http.php"},{"match":"(?i)\\\\b(iconv(_(str(pos|len|rpos)|substr|([gs]et)_encoding|mime_(decode(_headers)?|encode)))?|ob_iconv_handler)\\\\b","name":"support.function.iconv.php"},{"match":"(?i)\\\\biis_((st(?:art|op))_(serv(?:ice|er))|set_(script_map|server_rights|dir_security|app_settings)|(add|remove)_server|get_(script_map|service_state|server_(rights|by_(comment|path))|dir_security))\\\\b","name":"support.function.iisfunc.php"},{"match":"(?i)\\\\b(iptc(embed|parse)|(jpeg|png)2wbmp|gd_info|getimagesize(fromstring)?|image(s[xy]|scale|(char|string)(up)?|set(style|thickness|tile|interpolation|pixel|brush)|savealpha|convolution|copy(resampled|resized|merge(gray)?)?|colors(forindex|total)|color(set|closest(alpha|hwb)?|transparent|deallocate|(allocate|exact|resolve)(alpha)?|at|match)|crop(auto)?|create(truecolor|from(string|jpeg|png|wbmp|webp|gif|gd(2(part)?)?|xpm|xbm))?|types|ttf(bbox|text)|truecolortopalette|istruecolor|interlace|2wbmp|destroy|dashedline|jpeg|_type_to_(extension|mime_type)|ps(slantfont|text|(encode|extend|free|load)font|bbox)|png|polygon|palette(copy|totruecolor)|ellipse|ft(text|bbox)|filter|fill|filltoborder|filled(arc|ellipse|polygon|rectangle)|font(height|width)|flip|webp|wbmp|line|loadfont|layereffect|antialias|affine(matrix(concat|get))?|alphablending|arc|rotate|rectangle|gif|gd(2)?|gammacorrect|grab(screen|window)|xbm))\\\\b","name":"support.function.image.php"},{"match":"(?i)\\\\b(sys_get_temp_dir|set_(time_limit|include_path|magic_quotes_runtime)|cli_([gs]et)_process_title|ini_(alter|get(_all)?|restore|set)|zend_(thread_id|version|logo_guid)|dl|php(credits|info|version)|php_(sapi_name|ini_(scanned_files|loaded_file)|uname|logo_guid)|putenv|extension_loaded|version_compare|assert(_options)?|restore_include_path|gc_(collect_cycles|disable|enable(d)?)|getopt|get_(cfg_var|current_user|defined_constants|extension_funcs|include_path|included_files|loaded_extensions|magic_quotes_(gpc|runtime)|required_files|resources)|get(env|lastmod|rusage|my(inode|[gpu]id))|memory_get_(peak_)?usage|main|magic_quotes_runtime)\\\\b","name":"support.function.info.php"},{"match":"(?i)\\\\bibase_(set_event_handler|service_((?:at|de)tach)|server_info|num_(fields|params)|name_result|connect|commit(_ret)?|close|trans|delete_user|drop_db|db_info|pconnect|param_info|prepare|err(code|msg)|execute|query|field_info|fetch_(assoc|object|row)|free_(event_handler|query|result)|wait_event|add_user|affected_rows|rollback(_ret)?|restore|gen_id|modify_user|maintain_db|backup|blob_(cancel|close|create|import|info|open|echo|add|get))\\\\b","name":"support.function.interbase.php"},{"match":"(?i)\\\\b(normalizer_(normalize|is_normalized)|idn_to_(unicode|utf8|ascii)|numfmt_(set_(symbol|(text_)?attribute|pattern)|create|(parse|format)(_currency)?|get_(symbol|(text_)?attribute|pattern|error_(code|message)|locale))|collator_(sort(_with_sort_keys)?|set_(attribute|strength)|compare|create|asort|get_(strength|sort_key|error_(code|message)|locale|attribute))|transliterator_(create(_(inverse|from_rules))?|transliterate|list_ids|get_error_(code|message))|intl(cal|tz)_get_error_(code|message)|intl_(is_failure|error_name|get_error_(code|message))|datefmt_(set_(calendar|lenient|pattern|timezone(_id)?)|create|is_lenient|parse|format(_object)?|localtime|get_(calendar(_object)?|time(type|zone(_id)?)|datetype|pattern|error_(code|message)|locale))|locale_(set_default|compose|canonicalize|parse|filter_matches|lookup|accept_from_http|get_(script|display_(script|name|variant|language|region)|default|primary_language|keywords|all_variants|region))|resourcebundle_(create|count|locales|get(_(error_(code|message)))?)|grapheme_(str(i?str|r?i?pos|len)|substr|extract)|msgfmt_(set_pattern|create|(format|parse)(_message)?|get_(pattern|error_(code|message)|locale)))\\\\b","name":"support.function.intl.php"},{"match":"(?i)\\\\bjson_(decode|encode|last_error(_msg)?)\\\\b","name":"support.function.json.php"},{"match":"(?i)\\\\bldap_(start|tls|sort|search|sasl_bind|set_(option|rebind_proc)|(first|next)_(attribute|entry|reference)|connect|control_paged_result(_response)?|count_entries|compare|close|t61_to_8859|8859_to_t61|dn2ufn|delete|unbind|parse_(re(?:ference|sult))|escape|errno|err2str|error|explode_dn|bind|free_result|list|add|rename|read|get_(option|dn|entries|values(_len)?|attributes)|modify(_batch)?|mod_(add|del|replace))\\\\b","name":"support.function.ldap.php"},{"match":"(?i)\\\\blibxml_(set_(streams_context|external_entity_loader)|clear_errors|disable_entity_loader|use_internal_errors|get_(errors|last_error))\\\\b","name":"support.function.libxml.php"},{"match":"(?i)\\\\b(ezmlm_hash|mail)\\\\b","name":"support.function.mail.php"},{"match":"(?i)\\\\b((a)?(cos|sin|tan)(h)?|sqrt|srand|hypot|hexdec|ceil|is_(nan|(in)?finite)|octdec|dec(hex|oct|bin)|deg2rad|pi|pow|exp(m1)?|floor|fmod|lcg_value|log(1([0p]))?|atan2|abs|round|rand|rad2deg|getrandmax|mt_(srand|rand|getrandmax)|max|min|bindec|base_convert)\\\\b","name":"support.function.math.php"},{"match":"(?i)\\\\bmb_(str(cut|str|to(lower|upper)|istr|ipos|imwidth|pos|width|len|rchr|richr|ripos|rpos)|substitute_character|substr(_count)?|split|send_mail|http_((?:in|out)put)|check_encoding|convert_(case|encoding|kana|variables)|internal_encoding|output_handler|decode_(numericentity|mimeheader)|detect_(encoding|order)|parse_str|preferred_mime_name|encoding_aliases|encode_(numericentity|mimeheader)|ereg(i(_replace)?)?|ereg_(search(_(get(pos|regs)|init|regs|(set)?pos))?|replace(_callback)?|match)|list_encodings|language|regex_(set_options|encoding)|get_info)\\\\b","name":"support.function.mbstring.php"},{"match":"(?i)\\\\b(m(?:crypt_(cfb|create_iv|cbc|ofb|decrypt|encrypt|ecb|list_(algorithms|modes)|generic(_((de)?init|end))?|enc_(self_test|is_block_(algorithm|algorithm_mode|mode)|get_(supported_key_sizes|(block|iv|key)_size|(algorithms|modes)_name))|get_(cipher_name|(block|iv|key)_size)|module_(close|self_test|is_block_(algorithm|algorithm_mode|mode)|open|get_(supported_key_sizes|algo_(block|key)_size)))|decrypt_generic))\\\\b","name":"support.function.mcrypt.php"},{"match":"(?i)\\\\bmemcache_debug\\\\b","name":"support.function.memcache.php"},{"match":"(?i)\\\\bmhash(_(count|keygen_s2k|get_(hash_name|block_size)))?\\\\b","name":"support.function.mhash.php"},{"match":"(?i)\\\\b(log_(cmd_(insert|delete|update)|killcursor|write_batch|reply|getmore)|bson_((?:de|en)code))\\\\b","name":"support.function.mongo.php"},{"match":"(?i)\\\\bmysql_(stat|set_charset|select_db|num_(fields|rows)|connect|client_encoding|close|create_db|escape_string|thread_id|tablename|insert_id|info|data_seek|drop_db|db_(name|query)|unbuffered_query|pconnect|ping|errno|error|query|field_(seek|name|type|table|flags|len)|fetch_(object|field|lengths|assoc|array|row)|free_result|list_(tables|dbs|processes|fields)|affected_rows|result|real_escape_string|get_(client|host|proto|server)_info)\\\\b","name":"support.function.mysql.php"},{"match":"(?i)\\\\bmysqli_(ssl_set|store_result|stat|send_(query|long_data)|set_(charset|opt|local_infile_(default|handler))|stmt_(store_result|send_long_data|next_result|close|init|data_seek|prepare|execute|fetch|free_result|attr_([gs]et)|result_metadata|reset|get_(result|warnings)|more_results|bind_(param|result))|select_db|slave_query|savepoint|next_result|change_user|character_set_name|connect|commit|client_encoding|close|thread_safe|init|options|((?:en|dis)able)_(r(?:eads_from_master|pl_parse))|dump_debug_info|debug|data_seek|use_result|ping|poll|param_count|prepare|escape_string|execute|embedded_server_(start|end)|kill|query|field_seek|free_result|autocommit|rollback|report|refresh|fetch(_(object|fields|field(_direct)?|assoc|all|array|row))?|rpl_(parse_enabled|probe|query_type)|release_savepoint|reap_async_query|real_(connect|escape_string|query)|more_results|multi_query|get_(charset|connection_stats|client_(stats|info|version)|cache_stats|warnings|links_stats|metadata)|master_query|bind_(param|result)|begin_transaction)\\\\b","name":"support.function.mysqli.php"},{"match":"(?i)\\\\bmysqlnd_memcache_(set|get_config)\\\\b","name":"support.function.mysqlnd-memcache.php"},{"match":"(?i)\\\\bmysqlnd_ms_(set_(user_pick_server|qos)|dump_servers|query_is_select|fabric_select_(shard|global)|get_(stats|last_(used_connection|gtid))|xa_(commit|rollback|gc|begin)|match_wild)\\\\b","name":"support.function.mysqlnd-ms.php"},{"match":"(?i)\\\\bmysqlnd_qc_(set_(storage_handler|cache_condition|is_select|user_handlers)|clear_cache|get_(normalized_query_trace_log|core_stats|cache_info|query_trace_log|available_handlers))\\\\b","name":"support.function.mysqlnd-qc.php"},{"match":"(?i)\\\\bmysqlnd_uh_(set_(statement|connection)_proxy|convert_to_mysqlnd)\\\\b","name":"support.function.mysqlnd-uh.php"},{"match":"(?i)\\\\b(syslog|socket_(set_(blocking|timeout)|get_status)|set(raw)?cookie|http_response_code|openlog|headers_(list|sent)|header(_(re(?:gister_callback|move)))?|checkdnsrr|closelog|inet_(ntop|pton)|ip2long|openlog|dns_(check_record|get_(record|mx))|define_syslog_variables|(p)?fsockopen|long2ip|get(servby(name|port)|host(name|by(name(l)?|addr))|protoby(n(?:ame|umber))|mxrr))\\\\b","name":"support.function.network.php"},{"match":"(?i)\\\\bnsapi_(virtual|response_headers|request_headers)\\\\b","name":"support.function.nsapi.php"},{"match":"(?i)\\\\b(oci(?:(statementtype|setprefetch|serverversion|savelob(file)?|numcols|new(collection|cursor|descriptor)|nlogon|column(scale|size|name|type(raw)?|isnull|precision)|coll(size|trim|assign(elem)?|append|getelem|max)|commit|closelob|cancel|internaldebug|definebyname|plogon|parse|error|execute|fetch(statement|into)?|free(statement|collection|cursor|desc)|write(temporarylob|lobtofile)|loadlob|log(o(?:n|ff))|rowcount|rollback|result|bindbyname)|_(statement_type|set_(client_(i(?:nfo|dentifier))|prefetch|edition|action|module_name)|server_version|num_(fields|rows)|new_(connect|collection|cursor|descriptor)|connect|commit|client_version|close|cancel|internal_debug|define_by_name|pconnect|password_change|parse|error|execute|bind_(array_)?by_name|field_(scale|size|name|type(_raw)?|is_null|precision)|fetch(_(object|assoc|all|array|row))?|free_(statement|descriptor)|lob_(copy|is_equal)|rollback|result|get_implicit_resultset)))\\\\b","name":"support.function.oci8.php"},{"match":"(?i)\\\\bopcache_(compile_file|invalidate|reset|get_(status|configuration))\\\\b","name":"support.function.opcache.php"},{"match":"(?i)\\\\bopenssl_(sign|spki_(new|export(_challenge)?|verify)|seal|csr_(sign|new|export(_to_file)?|get_(subject|public_key))|cipher_iv_length|open|dh_compute_key|digest|decrypt|public_((?:de|en)crypt)|encrypt|error_string|pkcs12_(export(_to_file)?|read)|pkcs7_(sign|decrypt|encrypt|verify)|verify|free_key|random_pseudo_bytes|pkey_(new|export(_to_file)?|free|get_(details|public|private))|private_((?:de|en)crypt)|pbkdf2|get_((cipher|md)_methods|cert_locations|(p(?:ublic|rivate))key)|x509_(check_private_key|checkpurpose|parse|export(_to_file)?|fingerprint|free|read))\\\\b","name":"support.function.openssl.php"},{"match":"(?i)\\\\b(output_(add_rewrite_var|reset_rewrite_vars)|flush|ob_(start|clean|implicit_flush|end_(clean|flush)|flush|list_handlers|gzhandler|get_(status|contents|clean|flush|length|level)))\\\\b","name":"support.function.output.php"},{"match":"(?i)\\\\bpassword_(hash|needs_rehash|verify|get_info)\\\\b","name":"support.function.password.php"},{"match":"(?i)\\\\bpcntl_(strerror|signal(_dispatch)?|sig(timedwait|procmask|waitinfo)|setpriority|errno|exec|fork|w(stopsig|termsig|if((?:stopp|signal|exit)ed))|wait(pid)?|alarm|getpriority|get_last_error)\\\\b","name":"support.function.pcntl.php"},{"match":"(?i)\\\\bpg_(socket|send_(prepare|execute|query(_params)?)|set_(client_encoding|error_verbosity)|select|host|num_(fields|rows)|consume_input|connection_(status|reset|busy)|connect(_poll)?|convert|copy_(from|to)|client_encoding|close|cancel_query|tty|transaction_status|trace|insert|options|delete|dbname|untrace|unescape_bytea|update|pconnect|ping|port|put_line|parameter_status|prepare|version|query(_params)?|escape_(string|identifier|literal|bytea)|end_copy|execute|flush|free_result|last_(notice|error|oid)|field_(size|num|name|type(_oid)?|table|is_null|prtlen)|affected_rows|result_(status|seek|error(_field)?)|fetch_(object|assoc|all(_columns)?|array|row|result)|get_(notify|pid|result)|meta_data|lo_(seek|close|create|tell|truncate|import|open|unlink|export|write|read(_all)?)|)\\\\b","name":"support.function.pgsql.php"},{"match":"(?i)\\\\b(virtual|getallheaders|apache_(([gs]et)env|note|child_terminate|lookup_uri|response_headers|reset_timeout|request_headers|get_(version|modules)))\\\\b","name":"support.function.php_apache.php"},{"match":"(?i)\\\\bdom_import_simplexml\\\\b","name":"support.function.php_dom.php"},{"match":"(?i)\\\\bftp_(ssl_connect|systype|site|size|set_option|nlist|nb_(continue|f?(put|get))|ch(dir|mod)|connect|cdup|close|delete|put|pwd|pasv|exec|quit|f(put|get)|login|alloc|rename|raw(list)?|rmdir|get(_option)?|mdtm|mkdir)\\\\b","name":"support.function.php_ftp.php"},{"match":"(?i)\\\\bimap_((create|delete|list|rename|scan)(mailbox)?|status|sort|subscribe|set_quota|set(flag_full|acl)|search|savebody|num_(recent|msg)|check|close|clearflag_full|thread|timeout|open|header(info)?|headers|append|alerts|reopen|8bit|unsubscribe|undelete|utf7_((?:de|en)code)|utf8|uid|ping|errors|expunge|qprint|gc|fetch(structure|header|text|mime|body)|fetch_overview|lsub|list(s(?:can|ubscribed))|last_error|rfc822_(parse_(headers|adrlist)|write_address)|get(subscribed|acl|mailboxes)|get_quota(root)?|msgno|mime_header_decode|mail_(copy|compose|move)|mail|mailboxmsginfo|binary|body(struct)?|base64)\\\\b","name":"support.function.php_imap.php"},{"match":"(?i)\\\\bmssql_(select_db|num_(fields|rows)|next_result|connect|close|init|data_seek|pconnect|execute|query|field_(seek|name|type|length)|fetch_(object|field|assoc|array|row|batch)|free_(statement|result)|rows_affected|result|guid_string|get_last_message|min_(error|message)_severity|bind)\\\\b","name":"support.function.php_mssql.php"},{"match":"(?i)\\\\bodbc_(statistics|specialcolumns|setoption|num_(fields|rows)|next_result|connect|columns|columnprivileges|commit|cursor|close(_all)?|tables|tableprivileges|do|data_source|pconnect|primarykeys|procedures|procedurecolumns|prepare|error(msg)?|exec(ute)?|field_(scale|num|name|type|precision|len)|foreignkeys|free_result|fetch_(into|object|array|row)|longreadlen|autocommit|rollback|result(_all)?|gettypeinfo|binmode)\\\\b","name":"support.function.php_odbc.php"},{"match":"(?i)\\\\bpreg_(split|quote|filter|last_error|replace(_callback)?|grep|match(_all)?)\\\\b","name":"support.function.php_pcre.php"},{"match":"(?i)\\\\b(spl_(classes|object_hash|autoload(_(call|unregister|extensions|functions|register))?)|class_(implements|uses|parents)|iterator_(count|to_array|apply))\\\\b","name":"support.function.php_spl.php"},{"match":"(?i)\\\\bzip_(close|open|entry_(name|compressionmethod|compressedsize|close|open|filesize|read)|read)\\\\b","name":"support.function.php_zip.php"},{"match":"(?i)\\\\bposix_(strerror|set(s|e?u|[ep]?g)id|ctermid|ttyname|times|isatty|initgroups|uname|errno|kill|access|get(sid|cwd|uid|pid|ppid|pwnam|pwuid|pgid|pgrp|euid|egid|login|rlimit|gid|grnam|groups|grgid)|get_last_error|mknod|mkfifo)\\\\b","name":"support.function.posix.php"},{"match":"(?i)\\\\bset(thread|proc)title\\\\b","name":"support.function.proctitle.php"},{"match":"(?i)\\\\bpspell_(store_replacement|suggest|save_wordlist|new(_(config|personal))?|check|clear_session|config_(save_repl|create|ignore|(d(?:ata|ict))_dir|personal|runtogether|repl|mode)|add_to_(session|personal))\\\\b","name":"support.function.pspell.php"},{"match":"(?i)\\\\breadline(_(completion_function|clear_history|callback_(handler_(install|remove)|read_char)|info|on_new_line|write_history|list_history|add_history|redisplay|read_history))?\\\\b","name":"support.function.readline.php"},{"match":"(?i)\\\\brecode(_(string|file))?\\\\b","name":"support.function.recode.php"},{"match":"(?i)\\\\brrd(c_disconnect|_(create|tune|info|update|error|version|first|fetch|last(update)?|restore|graph|xport))\\\\b","name":"support.function.rrd.php"},{"match":"(?i)\\\\b(shm_((get|has|remove|put)_var|detach|attach|remove)|sem_(acquire|release|remove|get)|ftok|msg_((get|remove|set|stat)_queue|send|queue_exists|receive))\\\\b","name":"support.function.sem.php"},{"match":"(?i)\\\\bsession_(status|start|set_(save_handler|cookie_params)|save_path|name|commit|cache_(expire|limiter)|is_registered|id|destroy|decode|unset|unregister|encode|write_close|abort|reset|register(_shutdown)?|regenerate_id|get_cookie_params|module_name)\\\\b","name":"support.function.session.php"},{"match":"(?i)\\\\bshmop_(size|close|open|delete|write|read)\\\\b","name":"support.function.shmop.php"},{"match":"(?i)\\\\bsimplexml_(import_dom|load_(string|file))\\\\b","name":"support.function.simplexml.php"},{"match":"(?i)\\\\b(snmp(?:(walk(oid)?|realwalk|get(next)?|set)|_(set_(valueretrieval|quick_print|enum_print|oid_(numeric_print|output_format))|read_mib|get_(valueretrieval|quick_print))|[23]_(set|walk|real_walk|get(next)?)))\\\\b","name":"support.function.snmp.php"},{"match":"(?i)\\\\b(is_soap_fault|use_soap_error_handler)\\\\b","name":"support.function.soap.php"},{"match":"(?i)\\\\bsocket_(shutdown|strerror|send(to|msg)?|set_((non)?block|option)|select|connect|close|clear_error|bind|create(_(pair|listen))?|cmsg_space|import_stream|write|listen|last_error|accept|recv(from|msg)?|read|get(peer|sock)name|get_option)\\\\b","name":"support.function.sockets.php"},{"match":"(?i)\\\\bsqlite_(single_query|seek|has_(more|prev)|num_(fields|rows)|next|changes|column|current|close|create_(aggregate|function)|open|unbuffered_query|udf_((?:de|en)code)_binary|popen|prev|escape_string|error_string|exec|valid|key|query|field_name|factory|fetch_(string|single|column_types|object|all|array)|lib(encoding|version)|last_(insert_rowid|error)|array_query|rewind|busy_timeout)\\\\b","name":"support.function.sqlite.php"},{"match":"(?i)\\\\bsqlsrv_(send_stream_data|server_info|has_rows|num_(fields|rows)|next_result|connect|configure|commit|client_info|close|cancel|prepare|errors|execute|query|field_metadata|fetch(_(array|object))?|free_stmt|rows_affected|rollback|get_(config|field)|begin_transaction)\\\\b","name":"support.function.sqlsrv.php"},{"match":"(?i)\\\\bstats_(harmonic_mean|covariance|standard_deviation|skew|cdf_(noncentral_(chisquare|f)|negative_binomial|chisquare|cauchy|t|uniform|poisson|exponential|f|weibull|logistic|laplace|gamma|binomial|beta)|stat_(noncentral_t|correlation|innerproduct|independent_t|powersum|percentile|paired_t|gennch|binomial_coef)|dens_(normal|negative_binomial|chisquare|cauchy|t|pmf_(hypergeometric|poisson|binomial)|exponential|f|weibull|logistic|laplace|gamma|beta)|den_uniform|variance|kurtosis|absolute_deviation|rand_(setall|phrase_to_seeds|ranf|get_seeds|gen_(noncentral_[ft]|noncenral_chisquare|normal|chisquare|t|int|i(uniform|poisson|binomial(_negative)?)|exponential|f(uniform)?|gamma|beta)))\\\\b","name":"support.function.stats.php"},{"match":"(?i)\\\\b(s(?:et_socket_blocking|tream_(socket_(shutdown|sendto|server|client|pair|enable_crypto|accept|recvfrom|get_name)|set_(chunk_size|timeout|(read|write)_buffer|blocking)|select|notification_callback|supports_lock|context_(set_(option|default|params)|create|get_(options|default|params))|copy_to_stream|is_local|encoding|filter_(append|prepend|register|remove)|wrapper_((un)?register|restore)|resolve_include_path|register_wrapper|get_(contents|transports|filters|wrappers|line|meta_data)|bucket_(new|prepend|append|make_writeable))))\\\\b","name":"support.function.streamsfuncs.php"},{"match":"(?i)\\\\b(money_format|md5(_file)?|metaphone|bin2hex|sscanf|sha1(_file)?|str(str|c?spn|n(at)?(case)?cmp|chr|coll|(case)?cmp|to(upper|lower)|tok|tr|istr|pos|pbrk|len|rchr|ri?pos|rev)|str_(getcsv|ireplace|pad|repeat|replace|rot13|shuffle|split|word_count)|strip(c?slashes|os)|strip_tags|similar_text|soundex|substr(_(count|compare|replace))?|setlocale|html(specialchars(_decode)?|entities)|html_entity_decode|hex2bin|hebrev(c)?|number_format|nl2br|nl_langinfo|chop|chunk_split|chr|convert_(cyr_string|uu((?:de|en)code))|count_chars|crypt|crc32|trim|implode|ord|uc(first|words)|join|parse_str|print(f)?|echo|explode|v?[fs]?printf|quoted_printable_((?:de|en)code)|quotemeta|wordwrap|lcfirst|[lr]trim|localeconv|levenshtein|addc?slashes|get_html_translation_table)\\\\b","name":"support.function.string.php"},{"match":"(?i)\\\\bsybase_(set_message_handler|select_db|num_(fields|rows)|connect|close|deadlock_retry_count|data_seek|unbuffered_query|pconnect|query|field_seek|fetch_(object|field|assoc|array|row)|free_result|affected_rows|result|get_last_message|min_(client|error|message|server)_severity)\\\\b","name":"support.function.sybase.php"},{"match":"(?i)\\\\b(taint|is_tainted|untaint)\\\\b","name":"support.function.taint.php"},{"match":"(?i)\\\\b(tidy_(([gs]et)opt|set_encoding|save_config|config_count|clean_repair|is_(x(?:html|ml))|diagnose|(access|error|warning)_count|load_config|reset_config|(parse|repair)_(string|file)|get_(status|html(_ver)?|head|config|output|opt_doc|root|release|body))|ob_tidyhandler)\\\\b","name":"support.function.tidy.php"},{"match":"(?i)\\\\btoken_(name|get_all)\\\\b","name":"support.function.tokenizer.php"},{"match":"(?i)\\\\btrader_(stoch([fr]|rsi)?|stddev|sin(h)?|sum|sub|set_(compat|unstable_period)|sqrt|sar(ext)?|sma|ht_(sine|trend(line|mode)|dc(p(?:eriod|hase))|phasor)|natr|cci|cos(h)?|correl|cdl(shootingstar|shortline|sticksandwich|stalledpattern|spinningtop|separatinglines|hikkake(mod)?|highwave|homingpigeon|hangingman|harami(cross)?|hammer|concealbabyswall|counterattack|closingmarubozu|thrusting|tasukigap|takuri|tristar|inneck|invertedhammer|identical3crows|2crows|onneck|doji(star)?|darkcloudcover|dragonflydoji|unique3river|upsidegap2crows|3(starsinsouth|inside|outside|whitesoldiers|linestrike|blackcrows)|piercing|engulfing|evening(doji)?star|kicking(bylength)?|longline|longleggeddoji|ladderbottom|advanceblock|abandonedbaby|risefall3methods|rickshawman|gapsidesidewhite|gravestonedoji|xsidegap3methods|morning(doji)?star|mathold|matchinglow|marubozu|belthold|breakaway)|ceil|cmo|tsf|typprice|t3|tema|tan(h)?|trix|trima|trange|obv|div|dema|dx|ultosc|ppo|plus_d[im]|errno|exp|ema|var|kama|floor|wclprice|willr|wma|ln|log10|bop|beta|bbands|linearreg(_(slope|intercept|angle))?|asin|acos|atan|atr|adosc|add??|adx(r)?|apo|avgprice|aroon(osc)?|rsi|rocp??|rocr(100)?|get_(compat|unstable_period)|min(index)?|minus_d[im]|minmax(index)?|mid(p(?:oint|rice))|mom|mult|medprice|mfi|macd(ext|fix)?|mavp|max(index)?|ma(ma)?)\\\\b","name":"support.function.trader.php"},{"match":"(?i)\\\\buopz_(copy|compose|implement|overload|delete|undefine|extend|function|flags|restore|rename|redefine|backup)\\\\b","name":"support.function.uopz.php"},{"match":"(?i)\\\\b(http_build_query|(raw)?url((?:de|en)code)|parse_url|get_(headers|meta_tags)|base64_((?:de|en)code))\\\\b","name":"support.function.url.php"},{"match":"(?i)\\\\b(strval|settype|serialize|(bool|double|float)val|debug_zval_dump|intval|import_request_variables|isset|is_(scalar|string|null|numeric|callable|int(eger)?|object|double|float|long|array|resource|real|bool)|unset|unserialize|print_r|empty|var_(dump|export)|gettype|get_(defined_vars|resource_type))\\\\b","name":"support.function.var.php"},{"match":"(?i)\\\\bwddx_(serialize_(va(?:lue|rs))|deserialize|packet_(start|end)|add_vars)\\\\b","name":"support.function.wddx.php"},{"match":"(?i)\\\\bxhprof_(sample_)?((?:dis|en)able)\\\\b","name":"support.function.xhprof.php"},{"match":"(?i)\\\\b(utf8_((?:de|en)code)|xml_(set_((notation|(end|start)_namespace|unparsed_entity)_decl_handler|(character_data|default|element|external_entity_ref|processing_instruction)_handler|object)|parse(_into_struct)?|parser_(([gs]et)_option|create(_ns)?|free)|error_string|get_(current_((column|line)_number|byte_index)|error_code)))\\\\b","name":"support.function.xml.php"},{"match":"(?i)\\\\bxmlrpc_(server_(call_method|create|destroy|add_introspection_data|register_(introspection_callback|method))|is_fault|decode(_request)?|parse_method_descriptions|encode(_request)?|([gs]et)_type)\\\\b","name":"support.function.xmlrpc.php"},{"match":"(?i)\\\\bxmlwriter_((end|start|write)_(comment|cdata|dtd(_(attlist|entity|element))?|document|pi|attribute|element)|(start|write)_(attribute|element)_ns|write_raw|set_indent(_string)?|text|output_memory|open_(memory|uri)|full_end_element|flush|)\\\\b","name":"support.function.xmlwriter.php"},{"match":"(?i)\\\\b(zlib_(decode|encode|get_coding_type)|readgzfile|gz(seek|compress|close|tell|inflate|open|decode|deflate|uncompress|puts|passthru|encode|eof|file|write|rewind|read|getc|getss?))\\\\b","name":"support.function.zlib.php"},{"match":"(?i)\\\\bis_int(eger)?\\\\b","name":"support.function.alias.php"}]},"switch_statement":{"patterns":[{"match":"\\\\s+(?=switch\\\\b)"},{"begin":"\\\\bswitch\\\\b(?!\\\\s*\\\\(.*\\\\)\\\\s*:)","beginCaptures":{"0":{"name":"keyword.control.switch.php"}},"end":"}|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.section.switch-block.end.bracket.curly.php"}},"name":"meta.switch-statement.php","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.switch-expression.begin.bracket.round.php"}},"end":"\\\\)|(?=\\\\?>)","endCaptures":{"0":{"name":"punctuation.definition.switch-expression.end.bracket.round.php"}},"patterns":[{"include":"#language"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.section.switch-block.begin.bracket.curly.php"}},"end":"(?=}|\\\\?>)","patterns":[{"include":"#language"}]}]}]},"use-inner":{"patterns":[{"include":"#comments"},{"begin":"(?i)\\\\b(as)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.use-as.php"}},"end":"(?i)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*","endCaptures":{"0":{"name":"entity.other.alias.php"}}},{"include":"#class-name"},{"match":",","name":"punctuation.separator.delimiter.php"}]},"var_basic":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(?i)(\\\\$+)[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*\\\\b","name":"variable.other.php"}]},"var_global":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)((_(COOKIE|FILES|GET|POST|REQUEST))|arg([cv]))\\\\b","name":"variable.other.global.php"},"var_global_safer":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)((GLOBALS|_(ENV|SERVER|SESSION)))","name":"variable.other.global.safer.php"},"var_language":{"captures":{"1":{"name":"punctuation.definition.variable.php"}},"match":"(\\\\$)this\\\\b","name":"variable.language.this.php"},"variable-name":{"patterns":[{"include":"#var_global"},{"include":"#var_global_safer"},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"punctuation.definition.variable.php"},"4":{"name":"keyword.operator.class.php"},"5":{"name":"variable.other.property.php"},"6":{"name":"punctuation.section.array.begin.php"},"7":{"name":"constant.numeric.index.php"},"8":{"name":"variable.other.index.php"},"9":{"name":"punctuation.definition.variable.php"},"10":{"name":"string.unquoted.index.php"},"11":{"name":"punctuation.section.array.end.php"}},"match":"(?i)((\\\\$)(?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))(?:(->)(\\\\g)|(\\\\[)(?:(\\\\d+)|((\\\\$)\\\\g)|([_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*))(]))?"},{"captures":{"1":{"name":"variable.other.php"},"2":{"name":"punctuation.definition.variable.php"},"4":{"name":"punctuation.definition.variable.php"}},"match":"(?i)((\\\\$\\\\{)(?[_a-z\\\\x7F-ÿ][0-9_a-z\\\\x7F-ÿ]*)(}))"}]},"variables":{"patterns":[{"include":"#var_language"},{"include":"#var_global"},{"include":"#var_global_safer"},{"include":"#var_basic"},{"begin":"\\\\$\\\\{(?=.*?})","beginCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.variable.php"}},"patterns":[{"include":"#language"}]}]}},"scopeName":"text.html.php.blade","embeddedLangs":["html-derivative","html","xml","sql","javascript","json","css"]}`)),c=[...a,...n,...r,...o,...e,...i,...t,s];export{c as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/c-DLL5koqn.js b/internal/webui/dist/assets/c-BFOYLRr0.js similarity index 99% rename from internal/webui/dist/assets/c-DLL5koqn.js rename to internal/webui/dist/assets/c-BFOYLRr0.js index b569633..f76eb4b 100644 --- a/internal/webui/dist/assets/c-DLL5koqn.js +++ b/internal/webui/dist/assets/c-BFOYLRr0.js @@ -1 +1 @@ -import{t as e}from"./index-B2lg52VZ.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"C","name":"c","patterns":[{"include":"#preprocessor-rule-enabled"},{"include":"#preprocessor-rule-disabled"},{"include":"#preprocessor-rule-conditional"},{"include":"#predefined_macros"},{"include":"#comments"},{"include":"#switch_statement"},{"include":"#anon_pattern_1"},{"include":"#storage_types"},{"include":"#anon_pattern_2"},{"include":"#anon_pattern_3"},{"include":"#anon_pattern_4"},{"include":"#anon_pattern_5"},{"include":"#anon_pattern_6"},{"include":"#anon_pattern_7"},{"include":"#operators"},{"include":"#numbers"},{"include":"#strings"},{"include":"#anon_pattern_range_1"},{"include":"#anon_pattern_range_2"},{"include":"#anon_pattern_range_3"},{"include":"#pragma-mark"},{"include":"#anon_pattern_range_4"},{"include":"#anon_pattern_range_5"},{"include":"#anon_pattern_range_6"},{"include":"#anon_pattern_8"},{"include":"#anon_pattern_9"},{"include":"#anon_pattern_10"},{"include":"#anon_pattern_11"},{"include":"#anon_pattern_12"},{"include":"#anon_pattern_13"},{"include":"#block"},{"include":"#parens"},{"include":"#anon_pattern_range_7"},{"include":"#line_continuation_character"},{"include":"#anon_pattern_range_8"},{"include":"#anon_pattern_range_9"},{"include":"#anon_pattern_14"},{"include":"#anon_pattern_15"}],"repository":{"access-method":{"begin":"([A-Z_a-z][0-9A-Z_a-z]*|(?<=[])]))\\\\s*(?:(\\\\.)|(->))((?:[A-Z_a-z][0-9A-Z_a-z]*\\\\s*(?:\\\\.|->))*)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(\\\\()","beginCaptures":{"1":{"name":"variable.object.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"match":"\\\\.","name":"punctuation.separator.dot-access.c"},{"match":"->","name":"punctuation.separator.pointer-access.c"},{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"variable.object.c"},{"match":".+","name":"everything.else.c"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"name":"meta.function-call.member.c","patterns":[{"include":"#function-call-innards"}]},"anon_pattern_1":{"match":"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b","name":"keyword.control.c"},"anon_pattern_10":{"match":"\\\\b((?:int8|int16|int32|int64|uint8|uint16|uint32|uint64|int_least8|int_least16|int_least32|int_least64|uint_least8|uint_least16|uint_least32|uint_least64|int_fast8|int_fast16|int_fast32|int_fast64|uint_fast8|uint_fast16|uint_fast32|uint_fast64|intptr|uintptr|intmax|uintmax)_t)\\\\b","name":"support.type.stdint.c"},"anon_pattern_11":{"match":"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b","name":"support.constant.mac-classic.c"},"anon_pattern_12":{"match":"\\\\b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\\\b","name":"support.type.mac-classic.c"},"anon_pattern_13":{"match":"\\\\b([0-9A-Z_a-z]+_t)\\\\b","name":"support.type.posix-reserved.c"},"anon_pattern_14":{"match":";","name":"punctuation.terminator.statement.c"},"anon_pattern_15":{"match":",","name":"punctuation.separator.delimiter.c"},"anon_pattern_2":{"match":"typedef","name":"keyword.other.typedef.c"},"anon_pattern_3":{"match":"\\\\b(const|extern|register|restrict|static|volatile|inline)\\\\b","name":"storage.modifier.c"},"anon_pattern_4":{"match":"\\\\bk[A-Z]\\\\w*\\\\b","name":"constant.other.variable.mac-classic.c"},"anon_pattern_5":{"match":"\\\\bg[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.global.mac-classic.c"},"anon_pattern_6":{"match":"\\\\bs[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.static.mac-classic.c"},"anon_pattern_7":{"match":"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b","name":"constant.language.c"},"anon_pattern_8":{"match":"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b","name":"support.type.sys-types.c"},"anon_pattern_9":{"match":"\\\\b(pthread_(?:attr_|cond_|condattr_|mutex_|mutexattr_|once_|rwlock_|rwlockattr_||key_)t)\\\\b","name":"support.type.pthread.c"},"anon_pattern_range_1":{"begin":"((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))((#)\\\\s*define)\\\\b\\\\s+((?","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.other.lt-gt.include.c"}]},"anon_pattern_range_4":{"begin":"^\\\\s*((#)\\\\s*line)\\\\b","beginCaptures":{"1":{"name":"keyword.control.directive.line.c"},"2":{"name":"punctuation.definition.directive.c"}},"end":"(?=/[*/])|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"variable.other.c"},"2":{"name":"punctuation.section.parens.begin.bracket.round.initialization.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.initialization.c"}},"name":"meta.initialization.c","patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.c"}},"end":"}|(?=\\\\s*#\\\\s*e(?:lif|lse|ndif)\\\\b)","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.c"}},"patterns":[{"include":"#block_innards"}]},{"include":"#parens-block"},{"include":"$self"}]},"c_conditional_context":{"patterns":[{"include":"$self"},{"include":"#block_innards"}]},"c_function_call":{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()(?=(?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++\\\\s*\\\\(|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)","name":"meta.function-call.c","patterns":[{"include":"#function-call-innards"}]},"case_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?\\\\s*)(//[!/]+)","beginCaptures":{"1":{"name":"punctuation.definition.comment.documentation.c"}},"end":"(?<=\\\\n)(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"},"2":{"patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},"3":{"name":"punctuation.definition.comment.end.documentation.c"}},"match":"(/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*/)","name":"comment.block.documentation.c"},{"begin":"((?>\\\\s*)/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s)))","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"}},"end":"([!*]*\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.documentation.c"}},"name":"comment.block.documentation.c","patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"meta.toc-list.banner.block.c"}},"match":"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?","name":"comment.block.banner.c"},{"begin":"(/\\\\*)","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.c"}},"end":"(\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.c"}},"name":"comment.block.c"},{"captures":{"1":{"name":"meta.toc-list.banner.line.c"}},"match":"^// =(\\\\s*.*?)\\\\s*=$\\\\n?","name":"comment.line.banner.c"},{"begin":"((?:^[\\\\t ]+)?)(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.c"}},"end":"(?!\\\\G)","patterns":[{"begin":"(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?=\\\\n)","name":"comment.line.double-slash.c","patterns":[{"include":"#line_continuation_character"}]}]}]},{"include":"#block_comment"},{"include":"#line_comment"}]},{"include":"#block_comment"},{"include":"#line_comment"}]},"default_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"include":"#block_innards"}]},"function-innards":{"patterns":[{"include":"#comments"},{"include":"#storage_types"},{"include":"#operators"},{"include":"#vararg_ellipses"},{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()((?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.parameters.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.c"}},"name":"meta.function.definition.parameters.c","patterns":[{"include":"#probably_a_parameter"},{"include":"#function-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-innards"}]},{"include":"$self"}]},"inline_comment":{"patterns":[{"patterns":[{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/))"},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},"line_comment":{"patterns":[{"begin":"\\\\s*+(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?<=\\\\n)(?\\\\*?))"}]},"5":{"name":"variable.other.member.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*\\\\b((?!(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|atomic_uintptr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintmax_t|pthread_mutex_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_attr_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_cond_t|pthread_once_t|uint_fast64_t|uint_fast16_t|atomic_size_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|pthread_key_t|atomic_ullong|atomic_ushort|uint_fast32_t|atomic_schar|atomic_short|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast16_t|atomic_ulong|atomic_llong|int_least8_t|atomic_uchar|memory_order|suseconds_t|int_fast8_t|atomic_bool|atomic_char|atomic_uint|atomic_long|atomic_int|useconds_t|_Imaginary|blksize_t|pthread_t|in_addr_t|uintptr_t|in_port_t|uintmax_t|blkcnt_t|uint16_t|unsigned|_Complex|uint32_t|intptr_t|intmax_t|uint64_t|u_quad_t|int64_t|int32_t|ssize_t|caddr_t|clock_t|uint8_t|u_short|swblk_t|segsz_t|int16_t|fixpt_t|daddr_t|nlink_t|qaddr_t|size_t|time_t|mode_t|signed|quad_t|ushort|u_long|u_char|double|int8_t|ino_t|uid_t|pid_t|_Bool|float|dev_t|div_t|short|gid_t|off_t|u_int|key_t|id_t|uint|long|void|char|bool|id_t|int)\\\\b)[A-Z_a-z]\\\\w*\\\\b(?!\\\\())"},"method_access":{"begin":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*([A-Z_a-z]\\\\w*)(\\\\()","beginCaptures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"include":"#member_access"},{"include":"#method_access"},{"captures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"contentName":"meta.function-call.member.c","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"patterns":[{"include":"#function-call-innards"}]},"numbers":{"captures":{"0":{"patterns":[{"begin":"(?=.)","end":"$","patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.c"},"2":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"3":{"name":"punctuation.separator.constant.numeric"},"4":{"name":"constant.numeric.hexadecimal.c"},"5":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"6":{"name":"punctuation.separator.constant.numeric"},"8":{"name":"keyword.other.unit.exponent.hexadecimal.c"},"9":{"name":"keyword.operator.plus.exponent.hexadecimal.c"},"10":{"name":"keyword.operator.minus.exponent.hexadecimal.c"},"11":{"name":"constant.numeric.exponent.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"12":{"name":"keyword.other.unit.suffix.floating-point.c"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?>|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.c"},{"match":"<<|>>","name":"keyword.operator.bitwise.shift.c"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.c"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.c"},{"match":"[\\\\&^|~]","name":"keyword.operator.c"},{"match":"=","name":"keyword.operator.assignment.c"},{"match":"[-%*+/]","name":"keyword.operator.c"},{"begin":"(\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"end":"(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"patterns":[{"include":"#function-call-innards"},{"include":"$self"}]}]},"parens":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.c","patterns":[{"include":"$self"}]},"parens-block":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.block.c","patterns":[{"include":"#block_innards"},{"match":"(?-im:(?]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"(\\\\))|(?])\\\\s*([A-Z_a-z]\\\\w*)\\\\s*(?=(?:\\\\[]\\\\s*)?[),])"},"static_assert":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"keyword.other.static_assert.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"10":{"name":"punctuation.section.arguments.begin.bracket.round.static_assert.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.static_assert.c"}},"patterns":[{"begin":"(,)\\\\s*(?=(?:L|u8?|U\\\\s*\\")?)","beginCaptures":{"1":{"name":"punctuation.separator.delimiter.comma.c"}},"end":"(?=\\\\))","name":"meta.static_assert.message.c","patterns":[{"include":"#string_context"}]},{"include":"#evaluation_context"}]},"storage_types":{"patterns":[{"match":"(?-im:(?\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))(?:\\\\n|$)"},{"include":"#comments"},{"begin":"(((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.c"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"4":{"name":"comment.block.c"},"5":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.c"}},"patterns":[{"begin":"(R?)(\\")","beginCaptures":{"1":{"name":"meta.encoding.c"},"2":{"name":"punctuation.definition.string.begin.assembly.c"}},"contentName":"meta.embedded.assembly.c","end":"(\\")","endCaptures":{"1":{"name":"punctuation.definition.string.end.assembly.c"}},"name":"string.quoted.double.c","patterns":[{"include":"source.asm"},{"include":"source.x86"},{"include":"source.x86_64"},{"include":"source.arm"},{"include":"#backslash_escapes"},{"include":"#string_escaped_char"}]},{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.inner.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.inner.c"}},"patterns":[{"include":"#evaluation_context"}]},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"variable.other.asm.label.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"\\\\[((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))([A-Z_a-z]\\\\w*)((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))]"},{"match":":","name":"punctuation.separator.delimiter.colon.assembly.c"},{"include":"#comments"}]}]}]},"string_escaped_char":{"patterns":[{"match":"\\\\\\\\([\\"'?\\\\\\\\abefnprtv]|[0-3]\\\\d{0,2}|[4-7]\\\\d?|x\\\\h{0,2}|u\\\\h{0,4}|U\\\\h{0,8})","name":"constant.character.escape.c"},{"match":"\\\\\\\\.","name":"invalid.illegal.unknown-escape.c"}]},"string_placeholder":{"patterns":[{"match":"%(\\\\d+\\\\$)?[- #'+0]*[,:;_]?((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?(hh?|ll|[Ljlqtz]|vh|vl?|hv|hl)?[%AC-GOSUXac-ginopsux]","name":"constant.other.placeholder.c"},{"captures":{"1":{"name":"invalid.illegal.placeholder.c"}},"match":"(%)(?!\\"\\\\s*(PRI|SCN))"}]},"strings":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.double.c","patterns":[{"include":"#string_escaped_char"},{"include":"#string_placeholder"},{"include":"#line_continuation_character"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.single.c","patterns":[{"include":"#string_escaped_char"},{"include":"#line_continuation_character"}]}]},"switch_conditional_parentheses":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"punctuation.section.parens.begin.bracket.round.conditional.switch.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.conditional.switch.c"}},"name":"meta.conditional.switch.c","patterns":[{"include":"#evaluation_context"},{"include":"#c_conditional_context"}]},"switch_statement":{"begin":"(((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","name":"meta.block.switch.c","patterns":[{"begin":"\\\\G ?","end":"(\\\\{|<%|\\\\?\\\\?<|(?=;))","endCaptures":{"1":{"name":"punctuation.section.block.begin.bracket.curly.switch.c"}},"name":"meta.head.switch.c","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","end":"(}|%>|\\\\?\\\\?>)","endCaptures":{"1":{"name":"punctuation.section.block.end.bracket.curly.switch.c"}},"name":"meta.body.switch.c","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"},{"include":"#block_innards"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)[\\\\n\\\\s]*","end":"[\\\\n\\\\s]*(?=;)","name":"meta.tail.switch.c","patterns":[{"include":"$self"}]}]},"vararg_ellipses":{"match":"(?n}),n=[Object.freeze(JSON.parse(`{"displayName":"C","name":"c","patterns":[{"include":"#preprocessor-rule-enabled"},{"include":"#preprocessor-rule-disabled"},{"include":"#preprocessor-rule-conditional"},{"include":"#predefined_macros"},{"include":"#comments"},{"include":"#switch_statement"},{"include":"#anon_pattern_1"},{"include":"#storage_types"},{"include":"#anon_pattern_2"},{"include":"#anon_pattern_3"},{"include":"#anon_pattern_4"},{"include":"#anon_pattern_5"},{"include":"#anon_pattern_6"},{"include":"#anon_pattern_7"},{"include":"#operators"},{"include":"#numbers"},{"include":"#strings"},{"include":"#anon_pattern_range_1"},{"include":"#anon_pattern_range_2"},{"include":"#anon_pattern_range_3"},{"include":"#pragma-mark"},{"include":"#anon_pattern_range_4"},{"include":"#anon_pattern_range_5"},{"include":"#anon_pattern_range_6"},{"include":"#anon_pattern_8"},{"include":"#anon_pattern_9"},{"include":"#anon_pattern_10"},{"include":"#anon_pattern_11"},{"include":"#anon_pattern_12"},{"include":"#anon_pattern_13"},{"include":"#block"},{"include":"#parens"},{"include":"#anon_pattern_range_7"},{"include":"#line_continuation_character"},{"include":"#anon_pattern_range_8"},{"include":"#anon_pattern_range_9"},{"include":"#anon_pattern_14"},{"include":"#anon_pattern_15"}],"repository":{"access-method":{"begin":"([A-Z_a-z][0-9A-Z_a-z]*|(?<=[])]))\\\\s*(?:(\\\\.)|(->))((?:[A-Z_a-z][0-9A-Z_a-z]*\\\\s*(?:\\\\.|->))*)\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)(\\\\()","beginCaptures":{"1":{"name":"variable.object.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"match":"\\\\.","name":"punctuation.separator.dot-access.c"},{"match":"->","name":"punctuation.separator.pointer-access.c"},{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"variable.object.c"},{"match":".+","name":"everything.else.c"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"name":"meta.function-call.member.c","patterns":[{"include":"#function-call-innards"}]},"anon_pattern_1":{"match":"\\\\b(break|continue|do|else|for|goto|if|_Pragma|return|while)\\\\b","name":"keyword.control.c"},"anon_pattern_10":{"match":"\\\\b((?:int8|int16|int32|int64|uint8|uint16|uint32|uint64|int_least8|int_least16|int_least32|int_least64|uint_least8|uint_least16|uint_least32|uint_least64|int_fast8|int_fast16|int_fast32|int_fast64|uint_fast8|uint_fast16|uint_fast32|uint_fast64|intptr|uintptr|intmax|uintmax)_t)\\\\b","name":"support.type.stdint.c"},"anon_pattern_11":{"match":"\\\\b(noErr|kNilOptions|kInvalidID|kVariableLengthArray)\\\\b","name":"support.constant.mac-classic.c"},"anon_pattern_12":{"match":"\\\\b(AbsoluteTime|Boolean|Byte|ByteCount|ByteOffset|BytePtr|CompTimeValue|ConstLogicalAddress|ConstStrFileNameParam|ConstStringPtr|Duration|Fixed|FixedPtr|Float32|Float32Point|Float64|Float80|Float96|FourCharCode|Fract|FractPtr|Handle|ItemCount|LogicalAddress|OptionBits|OSErr|OSStatus|OSType|OSTypePtr|PhysicalAddress|ProcessSerialNumber|ProcessSerialNumberPtr|ProcHandle|Ptr|ResType|ResTypePtr|ShortFixed|ShortFixedPtr|SignedByte|SInt16|SInt32|SInt64|SInt8|Size|StrFileName|StringHandle|StringPtr|TimeBase|TimeRecord|TimeScale|TimeValue|TimeValue64|UInt16|UInt32|UInt64|UInt8|UniChar|UniCharCount|UniCharCountPtr|UniCharPtr|UnicodeScalarValue|UniversalProcHandle|UniversalProcPtr|UnsignedFixed|UnsignedFixedPtr|UnsignedWide|UTF16Char|UTF32Char|UTF8Char)\\\\b","name":"support.type.mac-classic.c"},"anon_pattern_13":{"match":"\\\\b([0-9A-Z_a-z]+_t)\\\\b","name":"support.type.posix-reserved.c"},"anon_pattern_14":{"match":";","name":"punctuation.terminator.statement.c"},"anon_pattern_15":{"match":",","name":"punctuation.separator.delimiter.c"},"anon_pattern_2":{"match":"typedef","name":"keyword.other.typedef.c"},"anon_pattern_3":{"match":"\\\\b(const|extern|register|restrict|static|volatile|inline)\\\\b","name":"storage.modifier.c"},"anon_pattern_4":{"match":"\\\\bk[A-Z]\\\\w*\\\\b","name":"constant.other.variable.mac-classic.c"},"anon_pattern_5":{"match":"\\\\bg[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.global.mac-classic.c"},"anon_pattern_6":{"match":"\\\\bs[A-Z]\\\\w*\\\\b","name":"variable.other.readwrite.static.mac-classic.c"},"anon_pattern_7":{"match":"\\\\b(NULL|true|false|TRUE|FALSE)\\\\b","name":"constant.language.c"},"anon_pattern_8":{"match":"\\\\b(u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t)\\\\b","name":"support.type.sys-types.c"},"anon_pattern_9":{"match":"\\\\b(pthread_(?:attr_|cond_|condattr_|mutex_|mutexattr_|once_|rwlock_|rwlockattr_||key_)t)\\\\b","name":"support.type.pthread.c"},"anon_pattern_range_1":{"begin":"((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))((#)\\\\s*define)\\\\b\\\\s+((?","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.other.lt-gt.include.c"}]},"anon_pattern_range_4":{"begin":"^\\\\s*((#)\\\\s*line)\\\\b","beginCaptures":{"1":{"name":"keyword.control.directive.line.c"},"2":{"name":"punctuation.definition.directive.c"}},"end":"(?=/[*/])|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"variable.other.c"},"2":{"name":"punctuation.section.parens.begin.bracket.round.initialization.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.initialization.c"}},"name":"meta.initialization.c","patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.c"}},"end":"}|(?=\\\\s*#\\\\s*e(?:lif|lse|ndif)\\\\b)","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.c"}},"patterns":[{"include":"#block_innards"}]},{"include":"#parens-block"},{"include":"$self"}]},"c_conditional_context":{"patterns":[{"include":"$self"},{"include":"#block_innards"}]},"c_function_call":{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()(?=(?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++\\\\s*\\\\(|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)","name":"meta.function-call.c","patterns":[{"include":"#function-call-innards"}]},"case_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?\\\\s*)(//[!/]+)","beginCaptures":{"1":{"name":"punctuation.definition.comment.documentation.c"}},"end":"(?<=\\\\n)(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"},"2":{"patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},"3":{"name":"punctuation.definition.comment.end.documentation.c"}},"match":"(/\\\\*[!*]+(?=\\\\s))(.+)([!*]*\\\\*/)","name":"comment.block.documentation.c"},{"begin":"((?>\\\\s*)/\\\\*[!*]+(?:(?:\\\\n|$)|(?=\\\\s)))","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.documentation.c"}},"end":"([!*]*\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.documentation.c"}},"name":"comment.block.documentation.c","patterns":[{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:callergraph|callgraph|else|endif|f\\\\$|f\\\\[|f]|hidecallergraph|hidecallgraph|hiderefby|hiderefs|hideinitializer|htmlinclude|n|nosubgrouping|private|privatesection|protected|protectedsection|public|publicsection|pure|showinitializer|showrefby|showrefs|tableofcontents|[\\"-%.<=>]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.italic.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.bold.doxygen.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"name":"markup.inline.raw.string.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"captures":{"1":{"name":"storage.type.class.doxygen.c"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.c"}]},"3":{"name":"variable.parameter.c"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]param)(?:\\\\s*\\\\[((?:,?\\\\s*(?:in|out)\\\\s*)+)])?\\\\s+\\\\b(\\\\w+)\\\\b"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:arg|attention|authors??|brief|bug|copyright|date|deprecated|details|exception|invariant|li|note|par|paragraph|param|post|pre|remarks??|result|returns??|retval|sa|see|short|since|test|throw|todo|tparam|version|warning|xrefitem)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:code|cond|docbookonly|dot|htmlonly|internal|latexonly|link|manonly|msc|parblock|rtfonly|secreflist|uml|verbatim|xmlonly|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|enduml|endverbatim|endxmlonly)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.c"},{"match":"\\\\b[A-Z]+:|@[_a-z]+:","name":"storage.type.class.gtkdoc"}]},{"captures":{"1":{"name":"meta.toc-list.banner.block.c"}},"match":"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?","name":"comment.block.banner.c"},{"begin":"(/\\\\*)","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.c"}},"end":"(\\\\*/)","endCaptures":{"1":{"name":"punctuation.definition.comment.end.c"}},"name":"comment.block.c"},{"captures":{"1":{"name":"meta.toc-list.banner.line.c"}},"match":"^// =(\\\\s*.*?)\\\\s*=$\\\\n?","name":"comment.line.banner.c"},{"begin":"((?:^[\\\\t ]+)?)(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.c"}},"end":"(?!\\\\G)","patterns":[{"begin":"(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?=\\\\n)","name":"comment.line.double-slash.c","patterns":[{"include":"#line_continuation_character"}]}]}]},{"include":"#block_comment"},{"include":"#line_comment"}]},{"include":"#block_comment"},{"include":"#line_comment"}]},"default_statement":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-call-innards"}]},{"include":"#block_innards"}]},"function-innards":{"patterns":[{"include":"#comments"},{"include":"#storage_types"},{"include":"#operators"},{"include":"#vararg_ellipses"},{"begin":"(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\\\s*\\\\()((?:[A-Z_a-z][0-9A-Z_a-z]*+|::)++|(?<=operator)(?:[-!\\\\&*+<=>]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.parameters.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.c"}},"name":"meta.function.definition.parameters.c","patterns":[{"include":"#probably_a_parameter"},{"include":"#function-innards"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"patterns":[{"include":"#function-innards"}]},{"include":"$self"}]},"inline_comment":{"patterns":[{"patterns":[{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/))"},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},{"captures":{"1":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"2":{"name":"comment.block.c"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"}]},"line_comment":{"patterns":[{"begin":"\\\\s*+(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.c"}},"end":"(?<=\\\\n)(?\\\\*?))"}]},"5":{"name":"variable.other.member.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*\\\\b((?!(?:atomic_uint_least64_t|atomic_uint_least16_t|atomic_uint_least32_t|atomic_uint_least8_t|atomic_int_least16_t|atomic_uint_fast64_t|atomic_uint_fast32_t|atomic_int_least64_t|atomic_int_least32_t|pthread_rwlockattr_t|atomic_uint_fast16_t|pthread_mutexattr_t|atomic_int_fast16_t|atomic_uint_fast8_t|atomic_int_fast64_t|atomic_int_least8_t|atomic_int_fast32_t|atomic_int_fast8_t|pthread_condattr_t|atomic_uintptr_t|atomic_ptrdiff_t|pthread_rwlock_t|atomic_uintmax_t|pthread_mutex_t|atomic_intmax_t|atomic_intptr_t|atomic_char32_t|atomic_char16_t|pthread_attr_t|atomic_wchar_t|uint_least64_t|uint_least32_t|uint_least16_t|pthread_cond_t|pthread_once_t|uint_fast64_t|uint_fast16_t|atomic_size_t|uint_least8_t|int_least64_t|int_least32_t|int_least16_t|pthread_key_t|atomic_ullong|atomic_ushort|uint_fast32_t|atomic_schar|atomic_short|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast16_t|atomic_ulong|atomic_llong|int_least8_t|atomic_uchar|memory_order|suseconds_t|int_fast8_t|atomic_bool|atomic_char|atomic_uint|atomic_long|atomic_int|useconds_t|_Imaginary|blksize_t|pthread_t|in_addr_t|uintptr_t|in_port_t|uintmax_t|blkcnt_t|uint16_t|unsigned|_Complex|uint32_t|intptr_t|intmax_t|uint64_t|u_quad_t|int64_t|int32_t|ssize_t|caddr_t|clock_t|uint8_t|u_short|swblk_t|segsz_t|int16_t|fixpt_t|daddr_t|nlink_t|qaddr_t|size_t|time_t|mode_t|signed|quad_t|ushort|u_long|u_char|double|int8_t|ino_t|uid_t|pid_t|_Bool|float|dev_t|div_t|short|gid_t|off_t|u_int|key_t|id_t|uint|long|void|char|bool|id_t|int)\\\\b)[A-Z_a-z]\\\\w*\\\\b(?!\\\\())"},"method_access":{"begin":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))((?:[A-Z_a-z]\\\\w*\\\\s*(?:\\\\.\\\\*?|->\\\\*?)\\\\s*)*)\\\\s*([A-Z_a-z]\\\\w*)(\\\\()","beginCaptures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"},"4":{"patterns":[{"include":"#member_access"},{"include":"#method_access"},{"captures":{"1":{"name":"variable.other.object.access.c"},"2":{"name":"punctuation.separator.dot-access.c"},"3":{"name":"punctuation.separator.pointer-access.c"}},"match":"((?:[A-Z_a-z]\\\\w*|(?<=[])]))\\\\s*)(?:(\\\\.\\\\*?)|(->\\\\*?))"}]},"5":{"name":"entity.name.function.member.c"},"6":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.c"}},"contentName":"meta.function-call.member.c","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.function.member.c"}},"patterns":[{"include":"#function-call-innards"}]},"numbers":{"captures":{"0":{"patterns":[{"begin":"(?=.)","end":"$","patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.c"},"2":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"3":{"name":"punctuation.separator.constant.numeric"},"4":{"name":"constant.numeric.hexadecimal.c"},"5":{"name":"constant.numeric.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"6":{"name":"punctuation.separator.constant.numeric"},"8":{"name":"keyword.other.unit.exponent.hexadecimal.c"},"9":{"name":"keyword.operator.plus.exponent.hexadecimal.c"},"10":{"name":"keyword.operator.minus.exponent.hexadecimal.c"},"11":{"name":"constant.numeric.exponent.hexadecimal.c","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric"}]},"12":{"name":"keyword.other.unit.suffix.floating-point.c"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?>|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.c"},{"match":"<<|>>","name":"keyword.operator.bitwise.shift.c"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.c"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.c"},{"match":"[\\\\&^|~]","name":"keyword.operator.c"},{"match":"=","name":"keyword.operator.assignment.c"},{"match":"[-%*+/]","name":"keyword.operator.c"},{"begin":"(\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"end":"(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.c"}},"patterns":[{"include":"#function-call-innards"},{"include":"$self"}]}]},"parens":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.c","patterns":[{"include":"$self"}]},"parens-block":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parens.begin.bracket.round.c"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parens.end.bracket.round.c"}},"name":"meta.parens.block.c","patterns":[{"include":"#block_innards"},{"match":"(?-im:(?]+|\\\\(\\\\)|\\\\[])\\\\s*\\\\()","end":"(?<=\\\\))(?!\\\\w)|(?]+|\\\\(\\\\)|\\\\[]))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.c"},"2":{"name":"punctuation.section.arguments.begin.bracket.round.c"}},"end":"(\\\\))|(?])\\\\s*([A-Z_a-z]\\\\w*)\\\\s*(?=(?:\\\\[]\\\\s*)?[),])"},"static_assert":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"keyword.other.static_assert.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"10":{"name":"punctuation.section.arguments.begin.bracket.round.static_assert.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.arguments.end.bracket.round.static_assert.c"}},"patterns":[{"begin":"(,)\\\\s*(?=(?:L|u8?|U\\\\s*\\")?)","beginCaptures":{"1":{"name":"punctuation.separator.delimiter.comma.c"}},"end":"(?=\\\\))","name":"meta.static_assert.message.c","patterns":[{"include":"#string_context"}]},{"include":"#evaluation_context"}]},"storage_types":{"patterns":[{"match":"(?-im:(?\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))(?:\\\\n|$)"},{"include":"#comments"},{"begin":"(((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.c"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"4":{"name":"comment.block.c"},"5":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.c"}},"patterns":[{"begin":"(R?)(\\")","beginCaptures":{"1":{"name":"meta.encoding.c"},"2":{"name":"punctuation.definition.string.begin.assembly.c"}},"contentName":"meta.embedded.assembly.c","end":"(\\")","endCaptures":{"1":{"name":"punctuation.definition.string.end.assembly.c"}},"name":"string.quoted.double.c","patterns":[{"include":"source.asm"},{"include":"source.x86"},{"include":"source.x86_64"},{"include":"source.arm"},{"include":"#backslash_escapes"},{"include":"#string_escaped_char"}]},{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.section.parens.begin.bracket.round.assembly.inner.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.assembly.inner.c"}},"patterns":[{"include":"#evaluation_context"}]},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"variable.other.asm.label.c"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"8":{"name":"comment.block.c"},"9":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]}},"match":"\\\\[((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))([A-Z_a-z]\\\\w*)((?:(?>\\\\s+)|(/\\\\*)((?>(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+?|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z))]"},{"match":":","name":"punctuation.separator.delimiter.colon.assembly.c"},{"include":"#comments"}]}]}]},"string_escaped_char":{"patterns":[{"match":"\\\\\\\\([\\"'?\\\\\\\\abefnprtv]|[0-3]\\\\d{0,2}|[4-7]\\\\d?|x\\\\h{0,2}|u\\\\h{0,4}|U\\\\h{0,8})","name":"constant.character.escape.c"},{"match":"\\\\\\\\.","name":"invalid.illegal.unknown-escape.c"}]},"string_placeholder":{"patterns":[{"match":"%(\\\\d+\\\\$)?[- #'+0]*[,:;_]?((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?(\\\\.((-?\\\\d+)|\\\\*(-?\\\\d+\\\\$)?)?)?(hh?|ll|[Ljlqtz]|vh|vl?|hv|hl)?[%AC-GOSUXac-ginopsux]","name":"constant.other.placeholder.c"},{"captures":{"1":{"name":"invalid.illegal.placeholder.c"}},"match":"(%)(?!\\"\\\\s*(PRI|SCN))"}]},"strings":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.double.c","patterns":[{"include":"#string_escaped_char"},{"include":"#string_placeholder"},{"include":"#line_continuation_character"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.c"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.c"}},"name":"string.quoted.single.c","patterns":[{"include":"#string_escaped_char"},{"include":"#line_continuation_character"}]}]},"switch_conditional_parentheses":{"begin":"((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.c punctuation.definition.comment.begin.c"},"3":{"name":"comment.block.c"},"4":{"patterns":[{"match":"\\\\*/","name":"comment.block.c punctuation.definition.comment.end.c"},{"match":"\\\\*","name":"comment.block.c"}]},"5":{"name":"punctuation.section.parens.begin.bracket.round.conditional.switch.c"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.parens.end.bracket.round.conditional.switch.c"}},"name":"meta.conditional.switch.c","patterns":[{"include":"#evaluation_context"},{"include":"#c_conditional_context"}]},"switch_statement":{"begin":"(((?>(?:(?>(?(?:[^*]|(?>\\\\*+)[^/])*)((?>\\\\*+)/)))+|(?:(?:(?:(?:\\\\b|(?<=\\\\W))|(?=\\\\W))|\\\\A)|\\\\Z)))((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","name":"meta.block.switch.c","patterns":[{"begin":"\\\\G ?","end":"(\\\\{|<%|\\\\?\\\\?<|(?=;))","endCaptures":{"1":{"name":"punctuation.section.block.begin.bracket.curly.switch.c"}},"name":"meta.head.switch.c","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","end":"(}|%>|\\\\?\\\\?>)","endCaptures":{"1":{"name":"punctuation.section.block.end.bracket.curly.switch.c"}},"name":"meta.body.switch.c","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"},{"include":"#block_innards"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)[\\\\n\\\\s]*","end":"[\\\\n\\\\s]*(?=;)","name":"meta.tail.switch.c","patterns":[{"include":"$self"}]}]},"vararg_ellipses":{"match":"(?\\\\\\\\\\\\s*\\\\n)","name":"punctuation.separator.continuation.chapel"}]}]},"constants":{"patterns":[{"match":"\\\\b(true|false|nil|none)\\\\b","name":"constant.language.chapel"},{"include":"#integers"},{"include":"#floats"}]},"extern_block":{"patterns":[{"begin":"\\\\b(extern)\\\\s*(?=|==|[<>]|!=","name":"keyword.operator.comparison.chapel"},{"match":"\\\\+=|-=|\\\\*=|/=|%=|&=|(\\\\|=)|\\\\^=|>>=|<<=|\\\\*\\\\*=","name":"keyword.operator.assignment.augmented.chapel"},{"match":"[-*+]|\\\\*\\\\*|[%/]|<<|>>|&|(\\\\|)|[\\\\^~]|<=>|\\\\.\\\\.<|#|\\\\.\\\\.\\\\.?","name":"keyword.operator.arithmetic.chapel"},{"match":"=","name":"keyword.operator.assignment.chapel"},{"match":"[!:?]|->","name":"keyword.operator.others.chapel"},{"match":"[]\\\\[]|=>","name":"keyword.operator.domain.chapel"}]},"string_escapes":{"patterns":[{"match":"\\\\\\\\([\\"'?\\\\\\\\abefnprtv]|[0-3]\\\\d{0,2}|[4-7]\\\\d?|x\\\\h{0,2}|u\\\\h{0,4}|U\\\\h{0,8})","name":"constant.character.escape.chapel"},{"match":"\\\\\\\\.","name":"invalid.illegal.unknown-escape.chapel"}]},"string_format":{"patterns":[{"match":"(%\\\\?)","name":"constant.other.placeholder.chapel"},{"match":"(%\\\\{(#+|#+\\\\.#*|#*\\\\.#+)})","name":"constant.other.placeholder.chapel"},{"match":"(%\\\\{(.*?)})","name":"constant.other.placeholder.chapel"},{"match":"(%([+0<>@^])*(\\\\*|[0-9]+)?(\\\\.[0-9]*)?(?:[Xbdhjox]|\\\\\\\\?[\\"']S)?[Ee]?([Scimnrsuz]|(\\\\{(.S|\\\\*S|.S.)})|(/.*/)|(\\\\{/.*/[A-Za-z]+}))?)","name":"constant.other.placeholder.chapel"},{"match":"(%%)","name":"constant.other.placeholder.chapel"}]},"strings":{"patterns":[{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.double.multi.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"'''","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"'''","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.single.multi.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.double.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.single.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]}]},"variables":{"patterns":[{"match":"\\\\b(this|super)\\\\b","name":"variable.language.chapel"}]}},"scopeName":"source.chapel","embeddedLangs":["c"],"aliases":["chpl"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file +import{t as e}from"./c-BFOYLRr0.js";var t=Object.freeze(JSON.parse(`{"displayName":"Chapel","fileTypes":["chpl"],"name":"chapel","patterns":[{"include":"#extern_block"},{"include":"#comments"},{"include":"#strings"},{"include":"#keywords"},{"include":"#constants"},{"include":"#variables"},{"include":"#important_globals"},{"include":"#operators"},{"include":"#attributes"}],"repository":{"attributes":{"patterns":[{"match":"(@[A-Z_a-z][0-9A-Z_a-z]*(?:\\\\.[A-Z_a-z][0-9A-Z_a-z]*)?)","name":"storage.type.attribute.chapel"}]},"blockcomments":{"patterns":[{"captures":{"1":{"name":"meta.toc-list.banner.block.chapel"}},"match":"^/\\\\* =(\\\\s*.*?)\\\\s*= \\\\*/$\\\\n?","name":"comment.block.chapel"},{"begin":"/\\\\*","captures":{"0":{"name":"punctuation.definition.comment.chapel"}},"end":"\\\\*/","name":"comment.block.chapel","patterns":[{"include":"#blockcomments"}]}]},"comments":{"patterns":[{"include":"#blockcomments"},{"match":"\\\\*/.*\\\\n","name":"invalid.illegal.stray-comment-end.chapel"},{"captures":{"1":{"name":"meta.toc-list.banner.line.chapel"}},"match":"^// =(\\\\s*.*?)\\\\s*=\\\\s*$\\\\n?","name":"comment.line.banner.c++"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.chapel"}},"end":"$\\\\n?","name":"comment.line.double-slash.chapel","patterns":[{"match":"(?>\\\\\\\\\\\\s*\\\\n)","name":"punctuation.separator.continuation.chapel"}]}]},"constants":{"patterns":[{"match":"\\\\b(true|false|nil|none)\\\\b","name":"constant.language.chapel"},{"include":"#integers"},{"include":"#floats"}]},"extern_block":{"patterns":[{"begin":"\\\\b(extern)\\\\s*(?=|==|[<>]|!=","name":"keyword.operator.comparison.chapel"},{"match":"\\\\+=|-=|\\\\*=|/=|%=|&=|(\\\\|=)|\\\\^=|>>=|<<=|\\\\*\\\\*=","name":"keyword.operator.assignment.augmented.chapel"},{"match":"[-*+]|\\\\*\\\\*|[%/]|<<|>>|&|(\\\\|)|[\\\\^~]|<=>|\\\\.\\\\.<|#|\\\\.\\\\.\\\\.?","name":"keyword.operator.arithmetic.chapel"},{"match":"=","name":"keyword.operator.assignment.chapel"},{"match":"[!:?]|->","name":"keyword.operator.others.chapel"},{"match":"[]\\\\[]|=>","name":"keyword.operator.domain.chapel"}]},"string_escapes":{"patterns":[{"match":"\\\\\\\\([\\"'?\\\\\\\\abefnprtv]|[0-3]\\\\d{0,2}|[4-7]\\\\d?|x\\\\h{0,2}|u\\\\h{0,4}|U\\\\h{0,8})","name":"constant.character.escape.chapel"},{"match":"\\\\\\\\.","name":"invalid.illegal.unknown-escape.chapel"}]},"string_format":{"patterns":[{"match":"(%\\\\?)","name":"constant.other.placeholder.chapel"},{"match":"(%\\\\{(#+|#+\\\\.#*|#*\\\\.#+)})","name":"constant.other.placeholder.chapel"},{"match":"(%\\\\{(.*?)})","name":"constant.other.placeholder.chapel"},{"match":"(%([+0<>@^])*(\\\\*|[0-9]+)?(\\\\.[0-9]*)?(?:[Xbdhjox]|\\\\\\\\?[\\"']S)?[Ee]?([Scimnrsuz]|(\\\\{(.S|\\\\*S|.S.)})|(/.*/)|(\\\\{/.*/[A-Za-z]+}))?)","name":"constant.other.placeholder.chapel"},{"match":"(%%)","name":"constant.other.placeholder.chapel"}]},"strings":{"patterns":[{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.double.multi.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"'''","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"'''","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.single.multi.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.double.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.chapel"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.chapel"}},"name":"string.quoted.single.chapel","patterns":[{"include":"#string_escapes"},{"include":"#string_format"}]}]},"variables":{"patterns":[{"match":"\\\\b(this|super)\\\\b","name":"variable.language.chapel"}]}},"scopeName":"source.chapel","embeddedLangs":["c"],"aliases":["chpl"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/cobol-DBppYo7Q.js b/internal/webui/dist/assets/cobol-B11mWRHr.js similarity index 99% rename from internal/webui/dist/assets/cobol-DBppYo7Q.js rename to internal/webui/dist/assets/cobol-B11mWRHr.js index f2b7d26..56ea23c 100644 --- a/internal/webui/dist/assets/cobol-DBppYo7Q.js +++ b/internal/webui/dist/assets/cobol-B11mWRHr.js @@ -1 +1 @@ -import{t as e}from"./html-CQSL4Rts.js";import{t}from"./java-BwygYcjv.js";var n=Object.freeze(JSON.parse(`{"displayName":"COBOL","fileTypes":["ccp","scbl","cobol","cbl","cblsrce","cblcpy","lks","pdv","cpy","copybook","cobcopy","fd","sel","scb","scbl","cob","dds","def","src","ss","wks","bib","pco"],"name":"cobol","patterns":[{"match":"^([ *][ *][ *][ *][ *][ *])([Dd]\\\\s.*)$","name":"token.info-token.cobol"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"comment.line.cobol.newpage"}},"match":"^([ *][ *][ *][ *][ *][ *])(/.*)$"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"comment.line.cobol.fixed"}},"match":"^([ *][ *][ *][ *][ *][ *])(\\\\*.*)$"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"comment.line.cobol.newpage"}},"match":"^([0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s])(/.*)$"},{"match":"^[0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s]$","name":"constant.numeric.cobol"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"comment.line.cobol.fixed"}},"match":"^([0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s][0-9\\\\s])(\\\\*.*)$"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"comment.line.cobol.fixed"}},"match":"^([- #$%+.0-9@-Za-z\\\\s][- #$%+.0-9@-Za-z\\\\s][- #$%+.0-9@-Za-z\\\\s][- #$%+.0-9@-Za-z\\\\s][- #$%+.0-9@-Za-z\\\\s][- #$%+.0-9@-Za-z\\\\s])(\\\\*.*)$"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"variable.other.constant"}},"match":"^\\\\s+(78)\\\\s+([0-9A-Za-z][-0-9A-Z_a-z]+)"},{"captures":{"1":{"name":"constant.numeric.cobol"},"2":{"name":"variable.other.constant"},"3":{"name":"keyword.identifers.cobol"}},"match":"^\\\\s+([0-9]+)\\\\s+([0-9A-Za-z][-0-9A-Z_a-z]+)\\\\s+((?i:constant))"},{"captures":{"1":{"name":"constant.cobol"},"2":{"name":"comment.line.cobol.newpage"}},"match":"^([#$%.0-9@-Za-z\\\\s][#$%.0-9@-Za-z\\\\s][#$%.0-9@-Za-z\\\\s][#$%.0-9@-Za-z\\\\s][#$%.0-9@-Za-z\\\\s][#$%.0-9@-Za-z\\\\s])(/.*)$"},{"match":"^\\\\*.*$","name":"comment.line.cobol.fixed"},{"captures":{"1":{"name":"keyword.control.directive.conditional.cobol"},"2":{"name":"entity.name.function.preprocessor.cobol"},"3":{"name":"entity.name.function.cobol"},"4":{"name":"keyword.control.directive.conditional.cobol"}},"match":"((?:^|\\\\s+)(?i:\\\\$set)\\\\s+)((?i:constant)\\\\s+)([0-9A-Za-z][-0-9A-Za-z]+\\\\s*)([-0-9A-Za-z]*)"},{"captures":{"1":{"name":"entity.name.function.preprocessor.cobol"},"2":{"name":"storage.modifier.import.cobol"},"3":{"name":"punctuation.begin.bracket.round.cobol"},"4":{"name":"string.quoted.other.cobol"},"5":{"name":"punctuation.end.bracket.round.cobol"}},"match":"((?i:\\\\$\\\\s*set\\\\s+)(ilusing)(\\\\()(.*)(\\\\)))"},{"captures":{"1":{"name":"entity.name.function.preprocessor.cobol"},"2":{"name":"storage.modifier.import.cobol"},"3":{"name":"punctuation.definition.string.begin.cobol"},"4":{"name":"string.quoted.other.cobol"},"5":{"name":"punctuation.definition.string.begin.cobol"}},"match":"((?i:\\\\$\\\\s*set\\\\s+)(ilusing)(\\")(.*)(\\"))"},{"captures":{"1":{"name":"keyword.control.directive.conditional.cobol"},"2":{"name":"entity.name.function.preprocessor.cobol"},"3":{"name":"punctuation.definition.string.begin.cobol"},"4":{"name":"string.quoted.other.cobol"},"5":{"name":"punctuation.definition.string.begin.cobol"}},"match":"((?i:\\\\$set))\\\\s+(\\\\w+)\\\\s*(\\")(\\\\w*)(\\")"},{"captures":{"1":{"name":"keyword.control.directive.conditional.cobol"},"2":{"name":"entity.name.function.preprocessor.cobol"},"3":{"name":"punctuation.begin.bracket.round.cobol"},"4":{"name":"string.quoted.other.cobol"},"5":{"name":"punctuation.end.bracket.round.cobol"}},"match":"((?i:\\\\$set))\\\\s+(\\\\w+)\\\\s*(\\\\()(.*)(\\\\))"},{"captures":{"0":{"name":"keyword.control.directive.conditional.cobol"},"1":{"name":"invalid.illegal.directive"},"2":{"name":"comment.line.set.cobol"}},"match":"(?:^|\\\\s+)(?i:\\\\$\\\\s*set\\\\s)((?i:01SHUFFLE|64KPARA|64KSECT|AUXOPT|CHIP|DATALIT|EANIM|EXPANDDATA|FIXING|FLAG-CHIP|MASM|MODEL|OPTSIZE|OPTSPEED|PARAS|PROTMODE|REGPARM|SEGCROSS|SEGSIZE|SIGNCOMPARE|SMALLDD|TABLESEGCROSS|TRICKLECHECK|\\\\s)+).*$"},{"captures":{"1":{"name":"keyword.control.directive.cobol"},"2":{"name":"entity.other.attribute-name.preprocessor.cobol"}},"match":"(\\\\$(?:(?i:region)|(?i:end-region)))(.*)$"},{"begin":"\\\\$(?i:doc)(.*)$","end":"\\\\$(?i:end-doc)(.*)$","name":"invalid.illegal.iscobol"},{"match":">>\\\\s*(?i:turn|page|listing|leap-seconds|d)\\\\s+.*$","name":"invalid.illegal.meta.preprocessor.cobolit"},{"match":"(?i:substitute(?:-case|))\\\\s+","name":"invalid.illegal.functions.cobolit"},{"captures":{"1":{"name":"invalid.illegal.keyword.control.directive.conditional.cobol"},"2":{"name":"invalid.illegal.entity.name.function.preprocessor.cobol"},"3":{"name":"invalid.illegal.entity.name.function.preprocessor.cobol"}},"match":"((((>>|\\\\$)\\\\s*)(?i:elif))(.*))$"},{"captures":{"1":{"name":"keyword.control.directive.conditional.cobol"},"2":{"name":"entity.name.function.preprocessor.cobol"},"3":{"name":"entity.name.function.preprocessor.cobol"}},"match":"((((>>|\\\\$)\\\\s*)(?i:if|else|elif|end-if|end-evaluate|end|define|evaluate|when|display|call-convention|set))(.*))$"},{"captures":{"1":{"name":"comment.line.scantoken.cobol"},"2":{"name":"keyword.cobol"},"3":{"name":"string.cobol"}},"match":"(\\\\*>)\\\\s+(@[0-9A-Za-z][-0-9A-Za-z]+)\\\\s+(.*)$"},{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(>>.*)$","name":"strong comment.line.set.cobol"},{"match":"([NUnu][Xx]|[HXhx])'\\\\h*'","name":"constant.numeric.integer.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])'.*'","name":"invalid.illegal.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])\\"\\\\h*\\"","name":"constant.numeric.integer.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])\\".*\\"","name":"invalid.illegal.hexadecimal.cobol"},{"match":"[Bb]\\"[01]\\"","name":"constant.numeric.integer.boolean.cobol"},{"match":"[Bb]'[01]'","name":"constant.numeric.integer.boolean.cobol"},{"match":"[Oo]\\"[0-7]*\\"","name":"constant.numeric.integer.octal.cobol"},{"match":"[Oo]\\".*\\"","name":"invalid.illegal.octal.cobol"},{"match":"(#)([0-9A-Za-z][-0-9A-Za-z]+)","name":"meta.symbol.forced.cobol"},{"begin":"((?.*)$","name":"comment.line.modern"},{"match":"(:([-0-9A-Z_a-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+cics)","contentName":"meta.embedded.block.cics","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\()","name":"meta.symbol.cobol"},{"include":"#cics-keywords"},{"include":"#string-double-quoted-constant"},{"include":"#string-quoted-constant"},{"include":"#number-complex-constant"},{"include":"#number-simple-constant"},{"match":"([-0-9A-Z_a-z]*[0-9A-Za-z]|(#?[0-9A-Za-z]+[-0-9A-Z_a-z]*[0-9A-Za-z]))","name":"variable.cobol"}]},{"begin":"(?i:exec\\\\s+dli)","contentName":"meta.embedded.block.dli","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\()","name":"meta.symbol.cobol"},{"include":"#dli-keywords"},{"include":"#dli-options"},{"include":"#string-double-quoted-constant"},{"include":"#string-quoted-constant"},{"include":"#number-complex-constant"},{"include":"#number-simple-constant"},{"match":"([-0-9A-Z_a-z]*[0-9A-Za-z]|(#?[0-9A-Za-z]+[-0-9A-Z_a-z]*[0-9A-Za-z]))","name":"variable.cobol"}]},{"begin":"(?i:exec\\\\s+sqlims)","contentName":"meta.embedded.block.openesql","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(:([-A-Za-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+ado)","contentName":"meta.embedded.block.openesql","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(--.*)$","name":"comment.line.sql"},{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(:([-A-Za-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+html)","contentName":"meta.embedded.block.html","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"include":"text.html.basic"}]},{"begin":"(?i:exec\\\\s+java)","contentName":"meta.embedded.block.java","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"include":"source.java"}]},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(\\")(CBL_.*)(\\")"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(\\")(PC_.*)(\\")"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cobol"}},"end":"(\\"|$)","endCaptures":{"0":{"name":"punctuation.definition.string.end.cobol"}},"name":"string.quoted.double.cobol"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(')(CBL_.*)(')"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(')(PC_.*)(')"},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cobol"}},"end":"('|$)","endCaptures":{"0":{"name":"punctuation.definition.string.end.cobol"}},"name":"string.quoted.single.cobol"},{"begin":"(?]|<=|>=|<>|[-*+/]|(?>\\\\s*(?i:turn|page|listing|leap-seconds|d)\\\\s+.*$","name":"invalid.illegal.meta.preprocessor.cobolit"},{"match":"(?i:substitute(?:-case|))\\\\s+","name":"invalid.illegal.functions.cobolit"},{"captures":{"1":{"name":"invalid.illegal.keyword.control.directive.conditional.cobol"},"2":{"name":"invalid.illegal.entity.name.function.preprocessor.cobol"},"3":{"name":"invalid.illegal.entity.name.function.preprocessor.cobol"}},"match":"((((>>|\\\\$)\\\\s*)(?i:elif))(.*))$"},{"captures":{"1":{"name":"keyword.control.directive.conditional.cobol"},"2":{"name":"entity.name.function.preprocessor.cobol"},"3":{"name":"entity.name.function.preprocessor.cobol"}},"match":"((((>>|\\\\$)\\\\s*)(?i:if|else|elif|end-if|end-evaluate|end|define|evaluate|when|display|call-convention|set))(.*))$"},{"captures":{"1":{"name":"comment.line.scantoken.cobol"},"2":{"name":"keyword.cobol"},"3":{"name":"string.cobol"}},"match":"(\\\\*>)\\\\s+(@[0-9A-Za-z][-0-9A-Za-z]+)\\\\s+(.*)$"},{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(>>.*)$","name":"strong comment.line.set.cobol"},{"match":"([NUnu][Xx]|[HXhx])'\\\\h*'","name":"constant.numeric.integer.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])'.*'","name":"invalid.illegal.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])\\"\\\\h*\\"","name":"constant.numeric.integer.hexadecimal.cobol"},{"match":"([NUnu][Xx]|[HXhx])\\".*\\"","name":"invalid.illegal.hexadecimal.cobol"},{"match":"[Bb]\\"[01]\\"","name":"constant.numeric.integer.boolean.cobol"},{"match":"[Bb]'[01]'","name":"constant.numeric.integer.boolean.cobol"},{"match":"[Oo]\\"[0-7]*\\"","name":"constant.numeric.integer.octal.cobol"},{"match":"[Oo]\\".*\\"","name":"invalid.illegal.octal.cobol"},{"match":"(#)([0-9A-Za-z][-0-9A-Za-z]+)","name":"meta.symbol.forced.cobol"},{"begin":"((?.*)$","name":"comment.line.modern"},{"match":"(:([-0-9A-Z_a-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+cics)","contentName":"meta.embedded.block.cics","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\()","name":"meta.symbol.cobol"},{"include":"#cics-keywords"},{"include":"#string-double-quoted-constant"},{"include":"#string-quoted-constant"},{"include":"#number-complex-constant"},{"include":"#number-simple-constant"},{"match":"([-0-9A-Z_a-z]*[0-9A-Za-z]|(#?[0-9A-Za-z]+[-0-9A-Z_a-z]*[0-9A-Za-z]))","name":"variable.cobol"}]},{"begin":"(?i:exec\\\\s+dli)","contentName":"meta.embedded.block.dli","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\()","name":"meta.symbol.cobol"},{"include":"#dli-keywords"},{"include":"#dli-options"},{"include":"#string-double-quoted-constant"},{"include":"#string-quoted-constant"},{"include":"#number-complex-constant"},{"include":"#number-simple-constant"},{"match":"([-0-9A-Z_a-z]*[0-9A-Za-z]|(#?[0-9A-Za-z]+[-0-9A-Z_a-z]*[0-9A-Za-z]))","name":"variable.cobol"}]},{"begin":"(?i:exec\\\\s+sqlims)","contentName":"meta.embedded.block.openesql","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(:([-A-Za-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+ado)","contentName":"meta.embedded.block.openesql","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"match":"(--.*)$","name":"comment.line.sql"},{"match":"(\\\\*>.*)$","name":"comment.line.modern"},{"match":"(:([-A-Za-z])*)","name":"variable.cobol"},{"include":"source.openesql"}]},{"begin":"(?i:exec\\\\s+html)","contentName":"meta.embedded.block.html","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"include":"text.html.basic"}]},{"begin":"(?i:exec\\\\s+java)","contentName":"meta.embedded.block.java","end":"(?i:end-exec)","name":"keyword.verb.cobol","patterns":[{"include":"source.java"}]},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(\\")(CBL_.*)(\\")"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(\\")(PC_.*)(\\")"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cobol"}},"end":"(\\"|$)","endCaptures":{"0":{"name":"punctuation.definition.string.end.cobol"}},"name":"string.quoted.double.cobol"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(')(CBL_.*)(')"},{"captures":{"1":{"name":"punctuation.definition.string.begin.cobol"},"2":{"name":"support.function.cobol"},"3":{"name":"punctuation.definition.string.end.cobol"}},"match":"(')(PC_.*)(')"},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cobol"}},"end":"('|$)","endCaptures":{"0":{"name":"punctuation.definition.string.end.cobol"}},"name":"string.quoted.single.cobol"},{"begin":"(?]|<=|>=|<>|[-*+/]|(?)","beginCaptures":{"1":{"name":"entity.name.function.coffee"},"2":{"name":"variable.other.readwrite.instance.coffee"},"3":{"name":"keyword.operator.assignment.coffee"}},"end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?<=\\\\s|^)(?:((')([^']*?)('))|((\\")([^\\"]*?)(\\")))\\\\s*([:=])\\\\s*(?=(\\\\([^()]*\\\\)\\\\s*)?[-=]>)","beginCaptures":{"1":{"name":"string.quoted.single.coffee"},"2":{"name":"punctuation.definition.string.begin.coffee"},"3":{"name":"entity.name.function.coffee"},"4":{"name":"punctuation.definition.string.end.coffee"},"5":{"name":"string.quoted.double.coffee"},"6":{"name":"punctuation.definition.string.begin.coffee"},"7":{"name":"entity.name.function.coffee"},"8":{"name":"punctuation.definition.string.end.coffee"},"9":{"name":"keyword.operator.assignment.coffee"}},"end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?=(\\\\([^()]*\\\\)\\\\s*)?[-=]>)","end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.inline.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?<=\\\\s|^)(\\\\{)(?=[^\\"#']+?}[]}\\\\s]*=)","beginCaptures":{"1":{"name":"punctuation.definition.destructuring.begin.bracket.curly.coffee"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.destructuring.end.bracket.curly.coffee"}},"name":"meta.variable.assignment.destructured.object.coffee","patterns":[{"include":"$self"},{"match":"[$A-Z_a-z]\\\\w*","name":"variable.assignment.coffee"}]},{"begin":"(?<=\\\\s|^)(\\\\[)(?=[^\\"#']+?][]}\\\\s]*=)","beginCaptures":{"1":{"name":"punctuation.definition.destructuring.begin.bracket.square.coffee"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.destructuring.end.bracket.square.coffee"}},"name":"meta.variable.assignment.destructured.array.coffee","patterns":[{"include":"$self"},{"match":"[$A-Z_a-z]\\\\w*","name":"variable.assignment.coffee"}]},{"match":"\\\\b(?|-\\\\d|[\\"'\\\\[{]))","end":"(?=\\\\s*(?|-\\\\d|[\\"'\\\\[{])))","beginCaptures":{"1":{"name":"variable.other.readwrite.instance.coffee"},"2":{"patterns":[{"include":"#function_names"}]}},"end":"(?=\\\\s*(?)","name":"meta.tag.coffee"}]},"jsx-expression":{"begin":"\\\\{","beginCaptures":{"0":{"name":"meta.brace.curly.coffee"}},"end":"}","endCaptures":{"0":{"name":"meta.brace.curly.coffee"}},"patterns":[{"include":"#double_quoted_string"},{"include":"$self"}]},"jsx-tag":{"patterns":[{"begin":"(<)([-.\\\\w]+)","beginCaptures":{"1":{"name":"punctuation.definition.tag.coffee"},"2":{"name":"entity.name.tag.coffee"}},"end":"(/?>)","name":"meta.tag.coffee","patterns":[{"include":"#jsx-attribute"}]}]},"method_calls":{"patterns":[{"begin":"(?:(\\\\.)|(::))\\\\s*([$\\\\w]+)\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"punctuation.separator.method.period.coffee"},"2":{"name":"keyword.operator.prototype.coffee"},"3":{"patterns":[{"include":"#method_names"}]}},"end":"(?<=\\\\))","name":"meta.method-call.coffee","patterns":[{"include":"#arguments"}]},{"begin":"(?:(\\\\.)|(::))\\\\s*([$\\\\w]+)\\\\s*(?=\\\\s+(?!(?|-\\\\d|[\\"'\\\\[{])))","beginCaptures":{"1":{"name":"punctuation.separator.method.period.coffee"},"2":{"name":"keyword.operator.prototype.coffee"},"3":{"patterns":[{"include":"#method_names"}]}},"end":"(?=\\\\s*(?>>??|\\\\|)=)"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.coffee"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.coffee"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.coffee"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.coffee"},{"captures":{"1":{"name":"variable.assignment.coffee"},"2":{"name":"keyword.operator.assignment.coffee"}},"match":"([$A-Z_a-z][$\\\\w]*)?\\\\s*(=|:(?!:))(?![=>])"},{"match":"--","name":"keyword.operator.decrement.coffee"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.coffee"},{"match":"\\\\.\\\\.\\\\.","name":"keyword.operator.splat.coffee"},{"match":"\\\\?","name":"keyword.operator.existential.coffee"},{"match":"[-%*+/]","name":"keyword.operator.coffee"},{"captures":{"1":{"name":"keyword.operator.logical.coffee"},"2":{"name":"keyword.operator.comparison.coffee"}},"match":"\\\\b(?)","beginCaptures":{"1":{"name":"entity.name.function.coffee"},"2":{"name":"variable.other.readwrite.instance.coffee"},"3":{"name":"keyword.operator.assignment.coffee"}},"end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?<=\\\\s|^)(?:((')([^']*?)('))|((\\")([^\\"]*?)(\\")))\\\\s*([:=])\\\\s*(?=(\\\\([^()]*\\\\)\\\\s*)?[-=]>)","beginCaptures":{"1":{"name":"string.quoted.single.coffee"},"2":{"name":"punctuation.definition.string.begin.coffee"},"3":{"name":"entity.name.function.coffee"},"4":{"name":"punctuation.definition.string.end.coffee"},"5":{"name":"string.quoted.double.coffee"},"6":{"name":"punctuation.definition.string.begin.coffee"},"7":{"name":"entity.name.function.coffee"},"8":{"name":"punctuation.definition.string.end.coffee"},"9":{"name":"keyword.operator.assignment.coffee"}},"end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?=(\\\\([^()]*\\\\)\\\\s*)?[-=]>)","end":"[-=]>","endCaptures":{"0":{"name":"storage.type.function.coffee"}},"name":"meta.function.inline.coffee","patterns":[{"include":"#function_params"}]},{"begin":"(?<=\\\\s|^)(\\\\{)(?=[^\\"#']+?}[]}\\\\s]*=)","beginCaptures":{"1":{"name":"punctuation.definition.destructuring.begin.bracket.curly.coffee"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.destructuring.end.bracket.curly.coffee"}},"name":"meta.variable.assignment.destructured.object.coffee","patterns":[{"include":"$self"},{"match":"[$A-Z_a-z]\\\\w*","name":"variable.assignment.coffee"}]},{"begin":"(?<=\\\\s|^)(\\\\[)(?=[^\\"#']+?][]}\\\\s]*=)","beginCaptures":{"1":{"name":"punctuation.definition.destructuring.begin.bracket.square.coffee"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.destructuring.end.bracket.square.coffee"}},"name":"meta.variable.assignment.destructured.array.coffee","patterns":[{"include":"$self"},{"match":"[$A-Z_a-z]\\\\w*","name":"variable.assignment.coffee"}]},{"match":"\\\\b(?|-\\\\d|[\\"'\\\\[{]))","end":"(?=\\\\s*(?|-\\\\d|[\\"'\\\\[{])))","beginCaptures":{"1":{"name":"variable.other.readwrite.instance.coffee"},"2":{"patterns":[{"include":"#function_names"}]}},"end":"(?=\\\\s*(?)","name":"meta.tag.coffee"}]},"jsx-expression":{"begin":"\\\\{","beginCaptures":{"0":{"name":"meta.brace.curly.coffee"}},"end":"}","endCaptures":{"0":{"name":"meta.brace.curly.coffee"}},"patterns":[{"include":"#double_quoted_string"},{"include":"$self"}]},"jsx-tag":{"patterns":[{"begin":"(<)([-.\\\\w]+)","beginCaptures":{"1":{"name":"punctuation.definition.tag.coffee"},"2":{"name":"entity.name.tag.coffee"}},"end":"(/?>)","name":"meta.tag.coffee","patterns":[{"include":"#jsx-attribute"}]}]},"method_calls":{"patterns":[{"begin":"(?:(\\\\.)|(::))\\\\s*([$\\\\w]+)\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"punctuation.separator.method.period.coffee"},"2":{"name":"keyword.operator.prototype.coffee"},"3":{"patterns":[{"include":"#method_names"}]}},"end":"(?<=\\\\))","name":"meta.method-call.coffee","patterns":[{"include":"#arguments"}]},{"begin":"(?:(\\\\.)|(::))\\\\s*([$\\\\w]+)\\\\s*(?=\\\\s+(?!(?|-\\\\d|[\\"'\\\\[{])))","beginCaptures":{"1":{"name":"punctuation.separator.method.period.coffee"},"2":{"name":"keyword.operator.prototype.coffee"},"3":{"patterns":[{"include":"#method_names"}]}},"end":"(?=\\\\s*(?>>??|\\\\|)=)"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.coffee"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.coffee"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.coffee"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.coffee"},{"captures":{"1":{"name":"variable.assignment.coffee"},"2":{"name":"keyword.operator.assignment.coffee"}},"match":"([$A-Z_a-z][$\\\\w]*)?\\\\s*(=|:(?!:))(?![=>])"},{"match":"--","name":"keyword.operator.decrement.coffee"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.coffee"},{"match":"\\\\.\\\\.\\\\.","name":"keyword.operator.splat.coffee"},{"match":"\\\\?","name":"keyword.operator.existential.coffee"},{"match":"[-%*+/]","name":"keyword.operator.coffee"},{"captures":{"1":{"name":"keyword.operator.logical.coffee"},"2":{"name":"keyword.operator.comparison.coffee"}},"match":"\\\\b(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)|(?=(?|\\\\*/))\\\\s*+(?:((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"lambdas":{"begin":"(?:(?<=\\\\S|^)(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"source.cpp#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"source.cpp#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"source.cpp#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])|(?=(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)|(?=(?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"source.cpp#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"source.cpp#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"parameter":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=\\\\w)","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?:(?=\\\\))|(,))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?=(?|(?=(?|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?s}),o=Object.freeze(JSON.parse(`{"displayName":"C++","name":"cpp","patterns":[{"include":"#ever_present_context"},{"include":"#constructor_root"},{"include":"#destructor_root"},{"include":"#function_definition"},{"include":"#simple_array_assignment"},{"include":"#operator_overload"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#namespace_block"},{"include":"#extern_block"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#template_isolated_definition"},{"include":"#template_definition"},{"include":"#template_explicit_instantiation"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#evaluation_context"}],"repository":{"access_control_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.modifier.access.control.$4.cpp"},"4":{},"5":{"name":"punctuation.separator.colon.access.control.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((p(?:rotected|rivate|ublic))\\\\s+{0,1}(:))"},"alignas_attribute":{"begin":"alignas\\\\(","beginCaptures":{"0":{"name":"punctuation.section.attribute.begin.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.attribute.end.cpp"}},"name":"support.other.attribute.cpp","patterns":[{"include":"#attributes_context"},{"begin":"\\\\(","beginCaptures":{},"end":"\\\\)","endCaptures":{},"patterns":[{"include":"#attributes_context"},{"include":"#string_context"},{"include":"#ever_present_context"}]},{"captures":{"1":{"name":"keyword.other.using.directive.cpp"},"2":{"name":"entity.name.namespace.cpp"}},"match":"(using)\\\\s+((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"include":"$self"}]}]},"class_declare":{"captures":{"1":{"name":"storage.type.class.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.class.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"constructor_root":{"begin":"\\\\s*+((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"control_flow_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.control.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))\\\\s+{0,1}(;?)","name":"meta.preprocessor.import.cpp"},"decltype":{"begin":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"destructor_root":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"diagnostic":{"begin":"^(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}(error|warning))\\\\b\\\\s+{0,1}","beginCaptures":{"1":{"name":"keyword.control.directive.diagnostic.$7.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.definition.directive.cpp"},"7":{}},"end":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.enum.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.enum.cpp"}},"name":"meta.head.enum.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.enum.cpp"}},"name":"meta.body.enum.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#enumerator_list"},{"include":"#comments"},{"include":"#comma"},{"include":"#semicolon"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.enum.cpp","patterns":[{"include":"$self"}]}]},"enum_declare":{"captures":{"1":{"name":"storage.type.enum.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.enum.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.extern.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.extern.cpp"}},"name":"meta.head.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.extern.cpp"}},"name":"meta.body.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.extern.cpp","patterns":[{"include":"$self"}]},{"include":"$self"}]},"function_body_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#simple_array_assignment"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#over_qualified_types"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"include":"#switch_statement"},{"include":"#goto_statement"},{"include":"#evaluation_context"},{"include":"#label"}]},"function_call":{"patterns":[{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp"}},"patterns":[{"include":"#evaluation_context"}]}]},"function_definition":{"begin":"(?:(?:^|\\\\G|(?<=[;}]))|(?<=>|\\\\*/))\\\\s*+(?:((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.cpp"}},"name":"meta.head.function.definition.cpp","patterns":[{"include":"#ever_present_context"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.cpp"}},"contentName":"meta.function.definition.parameters","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#parameter_or_maybe_value"},{"include":"#comma"},{"include":"#evaluation_context"}]},{"captures":{"1":{"name":"punctuation.definition.function.return-type.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.cpp"}},"name":"meta.body.function.definition.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.cpp","patterns":[{"include":"$self"}]}]},"function_parameter_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#parameter"},{"include":"#comma"}]},"function_pointer":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"function_pointer_parameter":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"functional_specifiers_pre_parameters":{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))","name":"meta.preprocessor.include.cpp"},"inheritance_context":{"patterns":[{"include":"#ever_present_context"},{"match":",","name":"punctuation.separator.delimiter.comma.inheritance.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"inline_builtin_storage_type":{"captures":{"1":{"name":"storage.type.primitive.cpp storage.type.built-in.primitive.cpp"},"2":{"name":"storage.type.cpp storage.type.built-in.cpp"},"3":{"name":"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp"},"4":{"name":"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp"}},"match":"\\\\s*+(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])","endCaptures":{},"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.lambda.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.lambda.cpp"}},"name":"meta.function.definition.parameters.lambda.cpp","patterns":[{"include":"#function_parameter_context"}]},{"match":"(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"include":"#comments"},{"match":"\\\\S+","name":"storage.type.return-type.lambda.cpp"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.lambda.cpp"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.lambda.cpp"}},"name":"meta.function.definition.body.lambda.cpp","patterns":[{"include":"#function_body_context"}]}]},"language_constants":{"match":"(?\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"12":{"name":"variable.other.property.cpp"}},"match":"(?:(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}\\\\b((?!(?:uint_least32_t|uint_least16_t|uint_least64_t|int_least32_t|int_least64_t|uint_fast32_t|uint_fast64_t|uint_least8_t|uint_fast16_t|int_least16_t|int_fast16_t|int_least8_t|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast8_t|suseconds_t|useconds_t|in_addr_t|uintmax_t|in_port_t|uintptr_t|blksize_t|uint32_t|uint64_t|u_quad_t|intmax_t|unsigned|blkcnt_t|uint16_t|intptr_t|swblk_t|wchar_t|u_short|qaddr_t|caddr_t|daddr_t|fixpt_t|nlink_t|segsz_t|clock_t|ssize_t|int16_t|int32_t|int64_t|uint8_t|int8_t|mode_t|quad_t|ushort|u_long|u_char|double|signed|time_t|size_t|key_t|div_t|ino_t|uid_t|gid_t|off_t|pid_t|float|dev_t|u_int|short|bool|id_t|uint|long|char|void|auto|id_t|int)\\\\W)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b(?!\\\\())"},"memory_operators":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.operator.wordlike.cpp"},"4":{"name":"keyword.operator.delete.array.cpp"},"5":{"name":"keyword.operator.delete.array.bracket.cpp"},"6":{"name":"keyword.operator.delete.cpp"},"7":{"name":"keyword.operator.new.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:(?:(delete)\\\\s+{0,1}(\\\\[])|(delete))|(new))(?!\\\\w))"},"method_access":{"begin":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.cpp"}},"patterns":[{"include":"#evaluation_context"}]},"misc_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.other.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.namespace.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.namespace.cpp"}},"name":"meta.head.namespace.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#attributes_context"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.namespace.cpp"},"6":{"name":"punctuation.separator.scope-resolution.namespace.block.cpp"},"7":{"name":"storage.modifier.inline.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.namespace.cpp"}},"name":"meta.body.namespace.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.namespace.cpp","patterns":[{"include":"$self"}]}]},"noexcept_operator":{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.operator-overload.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.head.function.definition.special.operator-overload.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp"}},"contentName":"meta.function.definition.parameters.special.operator-overload","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp"}},"patterns":[{"include":"#function_parameter_context"},{"include":"#evaluation_context"}]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp"},"7":{"name":"keyword.other.delete.function.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.body.function.definition.special.operator-overload.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.operator-overload.cpp","patterns":[{"include":"$self"}]}]},"operators":{"patterns":[{"begin":"((?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"over_qualified_types":{"patterns":[{"captures":{"1":{"name":"storage.type.struct.parameter.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.parameter.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"patterns":[{"include":"#inline_comment"}]},"13":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"14":{"name":"variable.other.object.declare.cpp"},"15":{"patterns":[{"include":"#inline_comment"}]},"16":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"17":{"patterns":[{"include":"#inline_comment"}]},"18":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"19":{"patterns":[{"include":"#inline_comment"}]},"20":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"\\\\b(struct)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w])","name":"meta.qualified-type.cpp"},"qualifiers_and_specifiers_post_parameters":{"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition_operator_overload":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_operator_overload_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.operator-overload.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_alias":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_alias_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.alias.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_block":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_block_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.block.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_using":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_using_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.using.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_parameter":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_parameter_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.parameter.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"semicolon":{"match":";","name":"punctuation.terminator.statement.cpp"},"simple_array_assignment":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))"},"simple_constructor_call":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(?=(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?"},"sizeof_operator":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"include":"$self"}]}]},"struct_declare":{"captures":{"1":{"name":"storage.type.struct.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.switch.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.switch.cpp"}},"name":"meta.head.switch.cpp","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.switch.cpp"}},"name":"meta.body.switch.cpp","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.switch.cpp","patterns":[{"include":"$self"}]}]},"template_argument_defaulted":{"captures":{"1":{"name":"storage.type.template.argument.$1.cpp"},"2":{"name":"entity.name.type.template.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"(?<=[,<])\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(=)"},"template_call_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"include":"#storage_types"},{"include":"#language_constants"},{"include":"#scope_resolution_template_call_inner_generated"},{"include":"#operators"},{"include":"#number_literal"},{"include":"#string_context"},{"include":"#comma_in_template_argument"},{"include":"#qualified_type"}]},"template_call_innards":{"captures":{"0":{"patterns":[{"include":"#template_call_range_helper"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+","name":"meta.template.call.cpp"},"template_call_range":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_context"}]},"template_call_range_helper":{"patterns":[{"captures":{"1":{"patterns":[{"begin":"(?=.)","beginCaptures":{},"end":"$","endCaptures":{},"patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.cpp"},"2":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"3":{"name":"punctuation.separator.constant.numeric.cpp"},"4":{"name":"constant.numeric.hexadecimal.cpp"},"5":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"6":{"name":"punctuation.separator.constant.numeric.cpp"},"7":{"name":"keyword.other.unit.exponent.hexadecimal.cpp"},"8":{"name":"keyword.operator.plus.exponent.hexadecimal.cpp"},"9":{"name":"keyword.operator.minus.exponent.hexadecimal.cpp"},"10":{"name":"constant.numeric.exponent.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"11":{"name":"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp"},"12":{"name":"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?(?:(?","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"}},"name":"meta.template.definition.cpp","patterns":[{"begin":"(?<=\\\\w)\\\\s+{0,1}<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"patterns":[{"include":"#template_call_context"}]},{"include":"#template_definition_context"}]},"template_definition_argument":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.template.argument.$3.cpp"},"4":{"patterns":[{"match":"(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*","name":"storage.type.template.argument.$0.cpp"}]},"5":{"name":"entity.name.type.template.cpp"},"6":{"name":"storage.type.template.argument.$6.cpp"},"7":{"name":"punctuation.vararg-ellipses.template.definition.cpp"},"8":{"name":"entity.name.type.template.cpp"},"9":{"name":"storage.type.template.cpp"},"10":{"name":"punctuation.section.angle-brackets.begin.template.definition.cpp"},"11":{"name":"storage.type.template.argument.$11.cpp"},"12":{"name":"entity.name.type.template.cpp"},"13":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"},"14":{"name":"storage.type.template.argument.$14.cpp"},"15":{"name":"entity.name.type.template.cpp"},"16":{"name":"keyword.operator.assignment.cpp"},"17":{"name":"punctuation.separator.delimiter.comma.template.argument.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)|((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+)+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\.\\\\.\\\\.)\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|(?)\\\\s+{0,1}(class|typename)(?:\\\\s+((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))?)\\\\s+{0,1}(?:(=)\\\\s+{0,1}(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?(?:(,)|(?=>|$))"},"template_definition_context":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"},{"include":"#template_definition_argument"},{"include":"#template_argument_defaulted"},{"include":"#template_call_innards"},{"include":"#evaluation_context"}]},"template_explicit_instantiation":{"captures":{"1":{"name":"storage.modifier.specifier.extern.cpp"},"2":{"name":"storage.type.template.cpp"}},"match":"(?)\\\\s+{0,1}$"},"ternary_operator":{"applyEndPatternLast":1,"begin":"\\\\?","beginCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"end":":","endCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#string_context"},{"include":"#number_literal"},{"include":"#method_access"},{"include":"#member_access"},{"include":"#predefined_macros"},{"include":"#operators"},{"include":"#memory_operators"},{"include":"#wordlike_operators"},{"include":"#type_casting_operators"},{"include":"#control_flow_keywords"},{"include":"#exception_keywords"},{"include":"#the_this_keyword"},{"include":"#language_constants"},{"include":"#constructor_bracket_call"},{"include":"#simple_constructor_call"},{"include":"#simple_array_assignment"},{"include":"#builtin_storage_type_initilizer"},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"#functional_specifiers_pre_parameters"},{"include":"#storage_types"},{"include":"#lambdas"},{"include":"#attributes_context"},{"include":"#parentheses"},{"include":"#function_call"},{"include":"#scope_resolution_inner_generated"},{"include":"#square_brackets"},{"include":"#semicolon"},{"include":"#comma"},{"include":"#unknown_variable"}]},"the_this_keyword":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"variable.language.this.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))|(.*(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]}]},"typedef_struct":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},"undef":{"captures":{"1":{"name":"keyword.control.directive.undef.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"punctuation.definition.directive.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"name":"entity.name.function.preprocessor.cpp"}},"match":"^((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}undef)\\\\b(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"include":"$self"}]}]},"union_declare":{"captures":{"1":{"name":"storage.type.union.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.union.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))","name":"meta.assignment.cpp"},"variable_declare":{"captures":{"1":{"patterns":[{"include":"#storage_specifiers"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"patterns":[{"include":"#inline_comment"}]},"4":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"5":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)|(?=(?|\\\\*/))\\\\s*+(?:((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"lambdas":{"begin":"(?:(?<=\\\\S|^)(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"source.cpp#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"source.cpp#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"source.cpp#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])|(?=(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)|(?=(?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"source.cpp#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"source.cpp#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"parameter":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=\\\\w)","beginCaptures":{"1":{"patterns":[{"include":"source.cpp#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?:(?=\\\\))|(,))|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"source.cpp#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"source.cpp#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?=(?|(?=(?|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[]))|(?=(?|\\\\?\\\\?>|(?=(?|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)|(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?s}),o=Object.freeze(JSON.parse(`{"displayName":"C++","name":"cpp","patterns":[{"include":"#ever_present_context"},{"include":"#constructor_root"},{"include":"#destructor_root"},{"include":"#function_definition"},{"include":"#simple_array_assignment"},{"include":"#operator_overload"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#namespace_block"},{"include":"#extern_block"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#template_isolated_definition"},{"include":"#template_definition"},{"include":"#template_explicit_instantiation"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#evaluation_context"}],"repository":{"access_control_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.modifier.access.control.$4.cpp"},"4":{},"5":{"name":"punctuation.separator.colon.access.control.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((p(?:rotected|rivate|ublic))\\\\s+{0,1}(:))"},"alignas_attribute":{"begin":"alignas\\\\(","beginCaptures":{"0":{"name":"punctuation.section.attribute.begin.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.attribute.end.cpp"}},"name":"support.other.attribute.cpp","patterns":[{"include":"#attributes_context"},{"begin":"\\\\(","beginCaptures":{},"end":"\\\\)","endCaptures":{},"patterns":[{"include":"#attributes_context"},{"include":"#string_context"},{"include":"#ever_present_context"}]},{"captures":{"1":{"name":"keyword.other.using.directive.cpp"},"2":{"name":"entity.name.namespace.cpp"}},"match":"(using)\\\\s+((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"include":"$self"}]}]},"class_declare":{"captures":{"1":{"name":"storage.type.class.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.class.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?]|::|\\\\||---??)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.italic.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\](?:a|em?))\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.bold.doxygen.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\]b)\\\\s+(\\\\S+)"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"name":"markup.inline.raw.string.cpp"}},"match":"((?<=[!*/\\\\s])[@\\\\\\\\][cp])\\\\s+(\\\\S+)"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:a|anchor|[bc]|cite|copybrief|copydetail|copydoc|def|dir|dontinclude|em??|emoji|enum|example|extends|file|idlexcept|implements|include|includedoc|includelineno|latexinclude|link|memberof|namespace|p|package|ref|refitem|related|relates|relatedalso|relatesalso|verbinclude)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"match":"(?<=[!*/\\\\s])[@\\\\\\\\](?:addindex|addtogroup|category|class|defgroup|diafile|dotfile|elseif|fn|headerfile|if|ifnot|image|ingroup|interface|line|mainpage|mscfile|name|overload|page|property|protocol|section|skip|skipline|snippet|snippetdoc|snippetlineno|struct|subpage|subsection|subsubsection|typedef|union|until|vhdlflow|weakgroup)\\\\b(?:\\\\{[^}]*})?","name":"storage.type.class.doxygen.cpp"},{"captures":{"1":{"name":"storage.type.class.doxygen.cpp"},"2":{"patterns":[{"match":"in|out","name":"keyword.other.parameter.direction.$0.cpp"}]},"3":{"patterns":[{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"constructor_root":{"begin":"\\\\s*+((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.constructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.head.function.definition.special.constructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"#functional_specifiers_pre_parameters"},{"begin":":","beginCaptures":{"0":{"name":"punctuation.separator.initializers.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.call.initializer.cpp"},"2":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"3":{},"4":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"5":{"name":"comment.block.cpp"},"6":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"7":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.initializer.cpp"}},"contentName":"meta.parameter.initialization","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.initializer.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.constructor.cpp"}},"name":"meta.body.function.definition.special.constructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.constructor.cpp","patterns":[{"include":"$self"}]}]},"control_flow_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.control.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\{)","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))\\\\s+{0,1}(;?)","name":"meta.preprocessor.import.cpp"},"decltype":{"begin":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"destructor_root":{"begin":"((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?>(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.member.destructor.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.head.function.definition.special.member.destructor.cpp","patterns":[{"include":"#ever_present_context"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp keyword.other.default.constructor.cpp keyword.other.default.destructor.cpp"},"7":{"name":"keyword.other.delete.function.cpp keyword.other.delete.constructor.cpp keyword.other.delete.destructor.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.member.destructor.cpp"}},"contentName":"meta.function.definition.parameters.special.member.destructor","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.member.destructor.cpp"}},"patterns":[]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.member.destructor.cpp"}},"name":"meta.body.function.definition.special.member.destructor.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.member.destructor.cpp","patterns":[{"include":"$self"}]}]},"diagnostic":{"begin":"^(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}(error|warning))\\\\b\\\\s+{0,1}","beginCaptures":{"1":{"name":"keyword.control.directive.diagnostic.$7.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.definition.directive.cpp"},"7":{}},"end":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::))?\\\\s+{0,1}((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.enum.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.enum.cpp"}},"name":"meta.head.enum.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.enum.cpp"}},"name":"meta.body.enum.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#enumerator_list"},{"include":"#comments"},{"include":"#comma"},{"include":"#semicolon"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.enum.cpp","patterns":[{"include":"$self"}]}]},"enum_declare":{"captures":{"1":{"name":"storage.type.enum.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.enum.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.extern.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.extern.cpp"}},"name":"meta.head.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.extern.cpp"}},"name":"meta.body.extern.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.extern.cpp","patterns":[{"include":"$self"}]},{"include":"$self"}]},"function_body_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#simple_array_assignment"},{"include":"#using_namespace"},{"include":"#type_alias"},{"include":"#using_name"},{"include":"#namespace_alias"},{"include":"#typedef_class"},{"include":"#typedef_struct"},{"include":"#typedef_union"},{"include":"#misc_keywords"},{"include":"#standard_declares"},{"include":"#class_block"},{"include":"#struct_block"},{"include":"#union_block"},{"include":"#enum_block"},{"include":"#access_control_keywords"},{"include":"#block"},{"include":"#static_assert"},{"include":"#assembly"},{"include":"#function_pointer"},{"include":"#over_qualified_types"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"include":"#switch_statement"},{"include":"#goto_statement"},{"include":"#evaluation_context"},{"include":"#label"}]},"function_call":{"patterns":[{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)([A-Z][0-9A-Z_]*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.upper-case.cpp entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp punctuation.section.arguments.begin.bracket.round.function.call.upper-case.cpp"}},"patterns":[{"include":"#evaluation_context"}]},{"begin":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.function.call.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"11":{},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.call.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.call.cpp"}},"patterns":[{"include":"#evaluation_context"}]}]},"function_definition":{"begin":"(?:(?:^|\\\\G|(?<=[;}]))|(?<=>|\\\\*/))\\\\s*+(?:((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\b(?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.cpp"}},"name":"meta.head.function.definition.cpp","patterns":[{"include":"#ever_present_context"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.cpp"}},"contentName":"meta.function.definition.parameters","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#parameter_or_maybe_value"},{"include":"#comma"},{"include":"#evaluation_context"}]},{"captures":{"1":{"name":"punctuation.definition.function.return-type.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.cpp"}},"name":"meta.body.function.definition.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.cpp","patterns":[{"include":"$self"}]}]},"function_parameter_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#parameter"},{"include":"#comma"}]},"function_pointer":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"function_pointer_parameter":{"begin":"(\\\\s*+((?:(?:(?:\\\\[\\\\[.*?]]|__attribute(?:__)?\\\\s*\\\\(\\\\s*\\\\(.*?\\\\)\\\\s*\\\\))|__declspec\\\\(.*?\\\\))|alignas\\\\(.*?\\\\))(?!\\\\)))?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:unsigned|signed|short|long)|(?:struct|class|union|enum))((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*(?:((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]},"functional_specifiers_pre_parameters":{"match":"(?]*(>?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//)))|((\\")[^\\"]*(\\"?)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//))))|((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*(?:\\\\.(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)*(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;))))|(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:\\\\n|$)|(?=//|;)))","name":"meta.preprocessor.include.cpp"},"inheritance_context":{"patterns":[{"include":"#ever_present_context"},{"match":",","name":"punctuation.separator.delimiter.comma.inheritance.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"}]},"inline_builtin_storage_type":{"captures":{"1":{"name":"storage.type.primitive.cpp storage.type.built-in.primitive.cpp"},"2":{"name":"storage.type.cpp storage.type.built-in.cpp"},"3":{"name":"support.type.posix-reserved.pthread.cpp support.type.built-in.posix-reserved.pthread.cpp"},"4":{"name":"support.type.posix-reserved.cpp support.type.built-in.posix-reserved.cpp"}},"match":"\\\\s*+(?\\\\[\\\\w])|(?<=(?:\\\\W|^)return))\\\\s+{0,1}(\\\\[(?!\\\\[| *+\\"| *+\\\\d))((?:[^]\\\\[]|((??)++]))*+)(](?!((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)[];=\\\\[]))","beginCaptures":{"1":{"name":"punctuation.definition.capture.begin.lambda.cpp"},"2":{"name":"meta.lambda.capture.cpp","patterns":[{"include":"#the_this_keyword"},{"captures":{"1":{"name":"variable.parameter.capture.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"punctuation.separator.delimiter.comma.cpp"},"7":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?=]|\\\\z|$)|(,))|(=))"},{"include":"#evaluation_context"}]},"3":{},"4":{"name":"punctuation.definition.capture.end.lambda.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"7":{"name":"comment.block.cpp"},"8":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"end":"(?<=[;}])","endCaptures":{},"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.lambda.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.lambda.cpp"}},"name":"meta.function.definition.parameters.lambda.cpp","patterns":[{"include":"#function_parameter_context"}]},{"match":"(?","beginCaptures":{"0":{"name":"punctuation.definition.lambda.return-type.cpp"}},"end":"(?=\\\\{)","endCaptures":{},"patterns":[{"include":"#comments"},{"match":"\\\\S+","name":"storage.type.return-type.lambda.cpp"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.lambda.cpp"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.lambda.cpp"}},"name":"meta.function.definition.body.lambda.cpp","patterns":[{"include":"#function_body_context"}]}]},"language_constants":{"match":"(?\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"12":{"name":"variable.other.property.cpp"}},"match":"(?:(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}\\\\b((?!(?:uint_least32_t|uint_least16_t|uint_least64_t|int_least32_t|int_least64_t|uint_fast32_t|uint_fast64_t|uint_least8_t|uint_fast16_t|int_least16_t|int_fast16_t|int_least8_t|uint_fast8_t|int_fast64_t|int_fast32_t|int_fast8_t|suseconds_t|useconds_t|in_addr_t|uintmax_t|in_port_t|uintptr_t|blksize_t|uint32_t|uint64_t|u_quad_t|intmax_t|unsigned|blkcnt_t|uint16_t|intptr_t|swblk_t|wchar_t|u_short|qaddr_t|caddr_t|daddr_t|fixpt_t|nlink_t|segsz_t|clock_t|ssize_t|int16_t|int32_t|int64_t|uint8_t|int8_t|mode_t|quad_t|ushort|u_long|u_char|double|signed|time_t|size_t|key_t|div_t|ino_t|uid_t|gid_t|off_t|pid_t|float|dev_t|u_int|short|bool|id_t|uint|long|char|void|auto|id_t|int)\\\\W)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b(?!\\\\())"},"memory_operators":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.operator.wordlike.cpp"},"4":{"name":"keyword.operator.delete.array.cpp"},"5":{"name":"keyword.operator.delete.array.bracket.cpp"},"6":{"name":"keyword.operator.delete.cpp"},"7":{"name":"keyword.operator.new.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:(?:(delete)\\\\s+{0,1}(\\\\[])|(delete))|(new))(?!\\\\w))"},"method_access":{"begin":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+{0,1}(?:\\\\.\\\\*?|->\\\\*?)\\\\s+{0,1})*)\\\\s+{0,1}(~?(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"},"13":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.property.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.property.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.property.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.property.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?<=\\\\.\\\\*?|->\\\\*??)\\\\s+{0,1}(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"variable.language.this.cpp"},"6":{"name":"variable.lower-case.cpp variable.other.object.access.$6.cpp"},"7":{"name":"variable.snake-case.cpp variable.other.object.access.$7.cpp"},"8":{"name":"variable.camel-case.cpp variable.other.object.access.$8.cpp"},"9":{"name":"variable.upper-case.cpp variable.other.object.access.$9.cpp"},"10":{"name":"variable.other.unknown.$10.cpp"},"11":{"name":"punctuation.separator.dot-access.cpp"},"12":{"name":"punctuation.separator.pointer-access.cpp"}},"match":"(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?\\\\*?))"},{"include":"#member_access"},{"include":"#method_access"}]},"14":{"name":"entity.name.function.member.cpp"},"15":{"name":"punctuation.section.arguments.begin.bracket.round.function.member.cpp"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arguments.end.bracket.round.function.member.cpp"}},"patterns":[{"include":"#evaluation_context"}]},"misc_keywords":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"keyword.other.$3.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.namespace.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.namespace.cpp"}},"name":"meta.head.namespace.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#attributes_context"},{"include":"#normal_variable_assignment"},{"include":"#normal_variable_declaration"},{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.namespace.cpp"},"6":{"name":"punctuation.separator.scope-resolution.namespace.block.cpp"},"7":{"name":"storage.modifier.inline.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)\\\\s+{0,1}((?|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.namespace.cpp"}},"name":"meta.body.namespace.cpp","patterns":[{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.namespace.cpp","patterns":[{"include":"$self"}]}]},"noexcept_operator":{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=)))","beginCaptures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"5":{"name":"meta.assignment.cpp"},"6":{"patterns":[{"include":"#storage_specifiers"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?((?:__(?:cdec|clrcal|stdcal|fastcal|thiscal|vectorcal)l)?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(operator)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(?:(?:(delete\\\\[]|delete|new\\\\[]|<=>|<<=|new|>>=|->\\\\*|/=|%=|&=|>=|\\\\|=|\\\\+\\\\+|--|\\\\(\\\\)|\\\\[]|->|\\\\+\\\\+|<<|>>|--|<=|\\\\^=|==|!=|&&|\\\\|\\\\||\\\\+=|-=|\\\\*=|[!%\\\\&*-\\\\-/<=>^|~])|((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.function.definition.special.operator-overload.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.head.function.definition.special.operator-overload.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parameters.begin.bracket.round.special.operator-overload.cpp"}},"contentName":"meta.function.definition.parameters.special.operator-overload","end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parameters.end.bracket.round.special.operator-overload.cpp"}},"patterns":[{"include":"#function_parameter_context"},{"include":"#evaluation_context"}]},{"include":"#qualifiers_and_specifiers_post_parameters"},{"captures":{"1":{"name":"keyword.operator.assignment.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"name":"keyword.other.default.function.cpp"},"7":{"name":"keyword.other.delete.function.cpp"}},"match":"(=)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(default)|(delete))"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.function.definition.special.operator-overload.cpp"}},"name":"meta.body.function.definition.special.operator-overload.cpp","patterns":[{"include":"#function_body_context"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.function.definition.special.operator-overload.cpp","patterns":[{"include":"$self"}]}]},"operators":{"patterns":[{"begin":"((?>","name":"keyword.operator.bitwise.shift.cpp"},{"match":"!=|<=|>=|==|[<>]","name":"keyword.operator.comparison.cpp"},{"match":"&&|!|\\\\|\\\\|","name":"keyword.operator.logical.cpp"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.cpp"},{"captures":{"1":{"name":"keyword.operator.assignment.compound.cpp"},"2":{"name":"keyword.operator.assignment.compound.bitwise.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"((?:[-%*+]|(?>|\\\\|)=)|(=)"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.cpp"},{"include":"#ternary_operator"}]},"over_qualified_types":{"patterns":[{"captures":{"1":{"name":"storage.type.struct.parameter.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.parameter.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"patterns":[{"include":"#inline_comment"}]},"13":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"14":{"name":"variable.other.object.declare.cpp"},"15":{"patterns":[{"include":"#inline_comment"}]},"16":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"17":{"patterns":[{"include":"#inline_comment"}]},"18":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"19":{"patterns":[{"include":"#inline_comment"}]},"20":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"\\\\b(struct)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w])","name":"meta.qualified-type.cpp"},"qualifiers_and_specifiers_post_parameters":{"patterns":[{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)"},{"captures":{"1":{"name":"meta.type.cpp"},"2":{"patterns":[{"include":"#storage_specifiers"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\[)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)(?:((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(,)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))*((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(])((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(:)(?!:)","name":"meta.binding.cpp"},{"include":"#evaluation_context"}]},"requires_keyword":{"begin":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_function_definition_operator_overload":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_function_definition_operator_overload_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_function_definition_operator_overload_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.function.definition.operator-overload.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.function.definition.operator-overload.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_alias":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_alias_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_alias_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.alias.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.alias.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_block":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_block_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_block_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.block.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.block.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_namespace_using":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_namespace_using_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_namespace_using_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.namespace.using.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.namespace.using.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_parameter":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_parameter_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_parameter_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.parameter.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.parameter.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_call":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_call_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_call_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.call.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.call.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"scope_resolution_template_definition":{"captures":{"0":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"1":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"2":{"patterns":[{"include":"#template_call_range_helper"}]}},"match":"(::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+"},"scope_resolution_template_definition_inner_generated":{"captures":{"1":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"}]},"2":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"},"3":{"patterns":[{"include":"#template_call_range_helper"}]},"4":{},"5":{"name":"entity.name.scope-resolution.template.definition.cpp"},"6":{"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_range_helper"}]},"7":{},"8":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"9":{"name":"comment.block.cpp"},"10":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"11":{"name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.template.definition.cpp"}},"match":"((::)?(?:(?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)((?!\\\\b(?:__has_cpp_attribute|reinterpret_cast|atomic_noexcept|atomic_commit|atomic_cancel|__has_include|thread_local|dynamic_cast|synchronized|static_cast|const_cast|consteval|co_return|protected|constinit|constexpr|co_return|consteval|namespace|constexpr|co_await|explicit|volatile|noexcept|co_yield|noexcept|requires|typename|decltype|operator|template|continue|co_await|co_yield|volatile|register|restrict|reflexpr|mutable|alignof|include|private|defined|typedef|_Pragma|__asm__|concept|mutable|warning|default|virtual|alignas|public|sizeof|delete|not_eq|bitand|and_eq|xor_eq|typeid|switch|return|struct|static|extern|inline|friend|ifndef|define|pragma|export|import|module|catch|throw|const|or_eq|compl|while|ifdef|const|bitor|union|class|undef|error|break|using|endif|goto|line|enum|this|case|else|elif|else|not|try|for|asm|and|xor|new|do|if|or|if)\\\\b)(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?(::)"},"semicolon":{"match":";","name":"punctuation.terminator.statement.cpp"},"simple_array_assignment":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))"},"simple_constructor_call":{"captures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(?=(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?=(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?"},"sizeof_operator":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"include":"$self"}]}]},"struct_declare":{"captures":{"1":{"name":"storage.type.struct.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.struct.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|\\\\?\\\\?>)|(?=[];=>\\\\[])","endCaptures":{},"name":"meta.block.switch.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.switch.cpp"}},"name":"meta.head.switch.cpp","patterns":[{"include":"#switch_conditional_parentheses"},{"include":"$self"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.switch.cpp"}},"name":"meta.body.switch.cpp","patterns":[{"include":"#default_statement"},{"include":"#case_statement"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.switch.cpp","patterns":[{"include":"$self"}]}]},"template_argument_defaulted":{"captures":{"1":{"name":"storage.type.template.argument.$1.cpp"},"2":{"name":"entity.name.type.template.cpp"},"3":{"name":"keyword.operator.assignment.cpp"}},"match":"(?<=[,<])\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(=)"},"template_call_context":{"patterns":[{"include":"#ever_present_context"},{"include":"#template_call_range_helper"},{"include":"#storage_types"},{"include":"#language_constants"},{"include":"#scope_resolution_template_call_inner_generated"},{"include":"#operators"},{"include":"#number_literal"},{"include":"#string_context"},{"include":"#comma_in_template_argument"},{"include":"#qualified_type"}]},"template_call_innards":{"captures":{"0":{"patterns":[{"include":"#template_call_range_helper"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+","name":"meta.template.call.cpp"},"template_call_range":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"name":"meta.template.call.cpp","patterns":[{"include":"#template_call_context"}]},"template_call_range_helper":{"patterns":[{"captures":{"1":{"patterns":[{"begin":"(?=.)","beginCaptures":{},"end":"$","endCaptures":{},"patterns":[{"captures":{"1":{"name":"keyword.other.unit.hexadecimal.cpp"},"2":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"3":{"name":"punctuation.separator.constant.numeric.cpp"},"4":{"name":"constant.numeric.hexadecimal.cpp"},"5":{"name":"constant.numeric.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"6":{"name":"punctuation.separator.constant.numeric.cpp"},"7":{"name":"keyword.other.unit.exponent.hexadecimal.cpp"},"8":{"name":"keyword.operator.plus.exponent.hexadecimal.cpp"},"9":{"name":"keyword.operator.minus.exponent.hexadecimal.cpp"},"10":{"name":"constant.numeric.exponent.hexadecimal.cpp","patterns":[{"match":"(?<=\\\\h)'(?=\\\\h)","name":"punctuation.separator.constant.numeric.cpp"}]},"11":{"name":"keyword.other.suffix.literal.built-in.floating-point.cpp keyword.other.unit.suffix.floating-point.cpp"},"12":{"name":"keyword.other.suffix.literal.user-defined.integer.cpp keyword.other.unit.user-defined.cpp"}},"match":"\\\\G(0[Xx])(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?((?<=\\\\h)\\\\.|\\\\.(?=\\\\h))(\\\\h(?:\\\\h|((?<=\\\\h)'(?=\\\\h)))*)?(?:(?","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"}},"name":"meta.template.definition.cpp","patterns":[{"begin":"(?<=\\\\w)\\\\s+{0,1}<","beginCaptures":{"0":{"name":"punctuation.section.angle-brackets.begin.template.call.cpp"}},"end":">","endCaptures":{"0":{"name":"punctuation.section.angle-brackets.end.template.call.cpp"}},"patterns":[{"include":"#template_call_context"}]},{"include":"#template_definition_context"}]},"template_definition_argument":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"storage.type.template.argument.$3.cpp"},"4":{"patterns":[{"match":"(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*","name":"storage.type.template.argument.$0.cpp"}]},"5":{"name":"entity.name.type.template.cpp"},"6":{"name":"storage.type.template.argument.$6.cpp"},"7":{"name":"punctuation.vararg-ellipses.template.definition.cpp"},"8":{"name":"entity.name.type.template.cpp"},"9":{"name":"storage.type.template.cpp"},"10":{"name":"punctuation.section.angle-brackets.begin.template.definition.cpp"},"11":{"name":"storage.type.template.argument.$11.cpp"},"12":{"name":"entity.name.type.template.cpp"},"13":{"name":"punctuation.section.angle-brackets.end.template.definition.cpp"},"14":{"name":"storage.type.template.argument.$14.cpp"},"15":{"name":"entity.name.type.template.cpp"},"16":{"name":"keyword.operator.assignment.cpp"},"17":{"name":"punctuation.separator.delimiter.comma.template.argument.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:(?:(?:((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)|((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\s+)+)((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)\\\\s+{0,1}(\\\\.\\\\.\\\\.)\\\\s+{0,1}((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))|(?)\\\\s+{0,1}(class|typename)(?:\\\\s+((?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*))?)\\\\s+{0,1}(?:(=)\\\\s+{0,1}(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?(?:(,)|(?=>|$))"},"template_definition_context":{"patterns":[{"include":"#scope_resolution_template_definition_inner_generated"},{"include":"#template_definition_argument"},{"include":"#template_argument_defaulted"},{"include":"#template_call_innards"},{"include":"#evaluation_context"}]},"template_explicit_instantiation":{"captures":{"1":{"name":"storage.modifier.specifier.extern.cpp"},"2":{"name":"storage.type.template.cpp"}},"match":"(?)\\\\s+{0,1}$"},"ternary_operator":{"applyEndPatternLast":1,"begin":"\\\\?","beginCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"end":":","endCaptures":{"0":{"name":"keyword.operator.ternary.cpp"}},"patterns":[{"include":"#ever_present_context"},{"include":"#string_context"},{"include":"#number_literal"},{"include":"#method_access"},{"include":"#member_access"},{"include":"#predefined_macros"},{"include":"#operators"},{"include":"#memory_operators"},{"include":"#wordlike_operators"},{"include":"#type_casting_operators"},{"include":"#control_flow_keywords"},{"include":"#exception_keywords"},{"include":"#the_this_keyword"},{"include":"#language_constants"},{"include":"#constructor_bracket_call"},{"include":"#simple_constructor_call"},{"include":"#simple_array_assignment"},{"include":"#builtin_storage_type_initilizer"},{"include":"#qualifiers_and_specifiers_post_parameters"},{"include":"#functional_specifiers_pre_parameters"},{"include":"#storage_types"},{"include":"#lambdas"},{"include":"#attributes_context"},{"include":"#parentheses"},{"include":"#function_call"},{"include":"#scope_resolution_inner_generated"},{"include":"#square_brackets"},{"include":"#semicolon"},{"include":"#comma"},{"include":"#unknown_variable"}]},"the_this_keyword":{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"name":"variable.language.this.cpp"}},"match":"(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))|(.*(?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.class.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.class.cpp"}},"name":"meta.head.class.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.class.cpp"}},"name":"meta.body.class.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.class.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(\\\\()(\\\\*)\\\\s+{0,1}((?:(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*)?)\\\\s+{0,1}(?:(\\\\[)(\\\\w*)(])\\\\s+{0,1})*(\\\\))\\\\s+{0,1}(\\\\()","beginCaptures":{"1":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?{])(?!\\\\()","endCaptures":{"1":{"name":"punctuation.section.parameters.end.bracket.round.function.pointer.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"name":"storage.modifier.specifier.functional.post-parameters.$10.cpp"},"11":{"patterns":[{"include":"#inline_comment"}]},"12":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"13":{"name":"comment.block.cpp"},"14":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"patterns":[{"include":"#function_parameter_context"}]}]},"typedef_struct":{"begin":"((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.struct.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.struct.cpp"}},"name":"meta.head.struct.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.struct.cpp"}},"name":"meta.body.struct.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.struct.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"captures":{"1":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"4":{"name":"comment.block.cpp"},"5":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"8":{"name":"comment.block.cpp"},"9":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"12":{"name":"comment.block.cpp"},"13":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"},"14":{"name":"entity.name.type.alias.cpp"}},"match":"(((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*]((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))"},"undef":{"captures":{"1":{"name":"keyword.control.directive.undef.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"punctuation.definition.directive.cpp"},"5":{"patterns":[{"include":"#inline_comment"}]},"6":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"7":{"name":"entity.name.function.preprocessor.cpp"}},"match":"^((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(#)\\\\s+{0,1}undef)\\\\b(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)((?|\\\\?\\\\?>)\\\\s+{0,1}(;)|(;))|(?=[];=>\\\\[])","endCaptures":{"1":{"name":"punctuation.terminator.statement.cpp"},"2":{"name":"punctuation.terminator.statement.cpp"}},"name":"meta.block.union.cpp","patterns":[{"begin":"\\\\G ?","beginCaptures":{},"end":"\\\\{|<%|\\\\?\\\\?<|(?=;)","endCaptures":{"0":{"name":"punctuation.section.block.begin.bracket.curly.union.cpp"}},"name":"meta.head.union.cpp","patterns":[{"include":"#ever_present_context"},{"include":"#inheritance_context"},{"include":"#template_call_range_helper"}]},{"begin":"(?<=\\\\{|<%|\\\\?\\\\?<)","beginCaptures":{},"end":"}|%>|\\\\?\\\\?>","endCaptures":{"0":{"name":"punctuation.section.block.end.bracket.curly.union.cpp"}},"name":"meta.body.union.cpp","patterns":[{"include":"#function_pointer"},{"include":"#static_assert"},{"include":"#constructor_inline"},{"include":"#destructor_inline"},{"include":"#operator_overload"},{"include":"#normal_variable_declaration"},{"include":"#normal_variable_assignment"},{"include":"$self"}]},{"begin":"(?<=}|%>|\\\\?\\\\?>)\\\\s*","beginCaptures":{},"end":"\\\\s*(?=;)","endCaptures":{},"name":"meta.tail.union.cpp","patterns":[{"include":"$self"}]}]},"union_declare":{"captures":{"1":{"name":"storage.type.union.declare.cpp"},"2":{"patterns":[{"include":"#inline_comment"}]},"3":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"4":{"name":"entity.name.type.union.cpp"},"5":{"patterns":[{"match":"\\\\*","name":"storage.modifier.pointer.cpp"},{"captures":{"1":{"patterns":[{"include":"#inline_comment"}]},"2":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"3":{"name":"comment.block.cpp"},"4":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"(?:&((?:\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+)+|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)){2,}&","name":"invalid.illegal.reference-type.cpp"},{"match":"&","name":"storage.modifier.reference.cpp"}]},"6":{"patterns":[{"include":"#inline_comment"}]},"7":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"8":{"patterns":[{"include":"#inline_comment"}]},"9":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"10":{"patterns":[{"include":"#inline_comment"}]},"11":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"12":{"name":"variable.other.object.declare.cpp"},"13":{"patterns":[{"include":"#inline_comment"}]},"14":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]}},"match":"((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*\\\\s*+)?((?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?>|\\\\|)=)|(=))","name":"meta.assignment.cpp"},"variable_declare":{"captures":{"1":{"patterns":[{"include":"#storage_specifiers"}]},"2":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"3":{"patterns":[{"include":"#inline_comment"}]},"4":{"patterns":[{"captures":{"1":{"name":"comment.block.cpp punctuation.definition.comment.begin.cpp"},"2":{"name":"comment.block.cpp"},"3":{"name":"comment.block.cpp punctuation.definition.comment.end.cpp"}},"match":"\\\\s*+(/\\\\*)((?:[^*]++|\\\\*+(?!/))*+(\\\\*/))\\\\s*+"}]},"5":{"name":"meta.qualified-type.cpp","patterns":[{"match":"::","name":"punctuation.separator.namespace.access.cpp punctuation.separator.scope-resolution.cpp"},{"match":"(?|(?:[^\\"'/<>]|/[^*])++)*>)\\\\s*+)?::)*+)(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))?(?!(?:transaction_safe_dynamic|__has_cpp_attribute|reinterpret_cast|transaction_safe|atomic_noexcept|atomic_commit|__has_include|atomic_cancel|synchronized|thread_local|dynamic_cast|static_cast|const_cast|constexpr|co_return|constinit|namespace|protected|consteval|constexpr|co_return|consteval|co_await|continue|template|reflexpr|volatile|register|co_await|co_yield|restrict|noexcept|volatile|override|explicit|decltype|operator|noexcept|typename|requires|co_yield|nullptr|alignof|alignas|default|mutable|virtual|mutable|private|include|warning|_Pragma|defined|typedef|__asm__|concept|define|module|sizeof|switch|delete|pragma|and_eq|inline|xor_eq|typeid|import|extern|public|bitand|static|export|return|friend|ifndef|not_eq|false|final|break|const|catch|endif|ifdef|undef|error|audit|while|using|axiom|or_eq|compl|throw|bitor|const|line|case|else|this|true|goto|else|NULL|elif|new|asm|xor|and|try|not|for|do|if|or|if)\\\\b)(?:[A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))(?:[0-9A-Z_a-z]|\\\\\\\\(?:u\\\\h{4}|U\\\\h{8}))*\\\\b((?|(?:[^\\"'/<>]|/[^*])++)*>)?(?![.:<\\\\w]))((((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)?(?:[\\\\&*](((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z))*[\\\\&*])?(((?:\\\\s*+/\\\\*(?:[^*]++|\\\\*+(?!/))*+\\\\*/\\\\s*+)+)|\\\\s++|(?<=\\\\W)|(?=\\\\W)|^|\\\\n?$|\\\\A|\\\\Z)(?:\\\\b(?:(?:(?:([0-9a-z]+)|([0-9A-Za-z]+_[0-9A-Za-z]*))|([a-z]+[A-Z][0-9A-Za-z]*))|([A-Z][0-9A-Z_]*))\\\\b|((?^|~]\\\\s*+(if|unless)))\\\\b(?![^;]*+;.*?\\\\bend\\\\b)|(\\"(\\\\\\\\.|[^\\"])*+\\"|'(\\\\\\\\.|[^'])*+'|[^\\"#'])*(\\\\{(?![^}]*+})|\\\\[(?![^]]*+]))).*|#.*?\\\\(fold\\\\)\\\\s*+)$","foldingStopMarker":"((^|;)\\\\s*+end\\\\s*+(#.*)?$|(^|;)\\\\s*+end\\\\..*$|^\\\\s*+[]}],?\\\\s*+(#.*)?$|#.*?\\\\(end\\\\)\\\\s*+$|^=end)","name":"crystal","patterns":[{"captures":{"1":{"name":"keyword.control.class.crystal"},"2":{"name":"keyword.control.class.crystal"},"3":{"name":"entity.name.type.class.crystal"},"5":{"name":"punctuation.separator.crystal"},"6":{"name":"support.class.other.type-param.crystal"},"7":{"name":"entity.other.inherited-class.crystal"},"8":{"name":"punctuation.separator.crystal"},"9":{"name":"punctuation.separator.crystal"},"10":{"name":"support.class.other.type-param.crystal"},"11":{"name":"punctuation.definition.variable.crystal"}},"match":"^\\\\s*(abstract)?\\\\s*(class|struct|union|annotation|enum)\\\\s+(([.:A-Z_\\\\x{80}-\\\\x{10FFFF}][.:\\\\x{80}-\\\\x{10FFFF}\\\\w]*(\\\\(([,.0-:A-Z_a-z\\\\x{80}-\\\\x{10FFFF}\\\\s]+)\\\\))?(\\\\s*(<)\\\\s*[.:A-Z\\\\x{80}-\\\\x{10FFFF}][.:\\\\x{80}-\\\\x{10FFFF}\\\\w]*(\\\\(([.0-:A-Z_a-z]+\\\\s,)\\\\))?)?)|((<<)\\\\s*[.0-:A-Z_\\\\x{80}-\\\\x{10FFFF}]+))","name":"meta.class.crystal"},{"captures":{"1":{"name":"keyword.control.module.crystal"},"2":{"name":"entity.name.type.module.crystal"},"3":{"name":"entity.other.inherited-class.module.first.crystal"},"4":{"name":"punctuation.separator.inheritance.crystal"},"5":{"name":"entity.other.inherited-class.module.second.crystal"},"6":{"name":"punctuation.separator.inheritance.crystal"},"7":{"name":"entity.other.inherited-class.module.third.crystal"},"8":{"name":"punctuation.separator.inheritance.crystal"}},"match":"^\\\\s*(module)\\\\s+(([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))?([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))?([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))*[A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*)","name":"meta.module.crystal"},{"captures":{"1":{"name":"keyword.control.lib.crystal"},"2":{"name":"entity.name.type.lib.crystal"},"3":{"name":"entity.other.inherited-class.lib.first.crystal"},"4":{"name":"punctuation.separator.inheritance.crystal"},"5":{"name":"entity.other.inherited-class.lib.second.crystal"},"6":{"name":"punctuation.separator.inheritance.crystal"},"7":{"name":"entity.other.inherited-class.lib.third.crystal"},"8":{"name":"punctuation.separator.inheritance.crystal"}},"match":"^\\\\s*(lib)\\\\s+(([A-Z]\\\\w*(::))?([A-Z]\\\\w*(::))?([A-Z]\\\\w*(::))*[A-Z]\\\\w*)","name":"meta.lib.crystal"},{"captures":{"1":{"name":"keyword.control.lib.type.crystal"},"2":{"name":"entity.name.lib.type.crystal"},"3":{"name":"keyword.control.lib.crystal"},"4":{"name":"entity.name.lib.type.value.crystal"}},"match":"(?[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|\\\\^|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|\\\\[]=?))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.control.def.crystal"},"2":{"name":"entity.name.function.crystal"},"3":{"name":"punctuation.definition.parameters.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.crystal"}},"name":"meta.function.method.with-arguments.crystal","patterns":[{"begin":"(?![),\\\\s])","end":"(?=,|\\\\)\\\\s*)","patterns":[{"captures":{"1":{"name":"storage.type.variable.crystal"},"2":{"name":"constant.other.symbol.hashkey.parameter.function.crystal"},"3":{"name":"punctuation.definition.constant.hashkey.crystal"},"4":{"name":"variable.parameter.function.crystal"}},"match":"\\\\G([\\\\&*]?)(?:([A-Z_a-z]\\\\w*(:))|([A-Z_a-z]\\\\w*))"},{"include":"$self"}]}]},{"captures":{"1":{"name":"keyword.control.def.crystal"},"3":{"name":"entity.name.function.crystal"}},"match":"(?=def\\\\b)(?<=^|\\\\s)(def)\\\\b(\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|\\\\^|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|\\\\[]=?)))?","name":"meta.function.method.without-arguments.crystal"},{"match":"\\\\b[0-9][0-9_]*\\\\.[0-9][0-9_]*([Ee][-+]?[0-9_]+)?(f(?:32|64))?\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b[0-9][0-9_]*(\\\\.[0-9][0-9_]*)?[Ee][-+]?[0-9_]+(f(?:32|64))?\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b[0-9][0-9_]*(\\\\.[0-9][0-9_]*)?([Ee][-+]?[0-9_]+)?(f(?:32|64))\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b(?!0[0-9])[0-9][0-9_]*([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.decimal.crystal"},{"match":"\\\\b0x[_\\\\h]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.hexadecimal.crystal"},{"match":"\\\\b0o[0-7_]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.octal.crystal"},{"match":"\\\\b0b[01_]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.binary.crystal"},{"begin":":'","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.crystal"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.crystal"}},"name":"constant.other.symbol.crystal","patterns":[{"match":"\\\\\\\\['\\\\\\\\]","name":"constant.character.escape.crystal"}]},{"begin":":\\"","beginCaptures":{"0":{"name":"punctuation.section.symbol.begin.crystal"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.section.symbol.end.crystal"}},"name":"constant.other.symbol.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"match":"(?","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%x\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%x\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?:^|(?<=[\\\\&(,:;=>?\\\\[|~]|[;\\\\s]if\\\\s|[;\\\\s]elsif\\\\s|[;\\\\s]while\\\\s|[;\\\\s]unless\\\\s|[;\\\\s]when\\\\s|[;\\\\s]assert_match\\\\s|[;\\\\s]or\\\\s|[;\\\\s]and\\\\s|[;\\\\s]not\\\\s|[.\\\\s]index\\\\s|[.\\\\s]scan\\\\s|[.\\\\s]sub\\\\s|[.\\\\s]sub!\\\\s|[.\\\\s]gsub\\\\s|[.\\\\s]gsub!\\\\s|[.\\\\s]match\\\\s)|(?<=^(?:when|if|elsif|while|unless)\\\\s))\\\\s*((/))(?![*+?{}])","captures":{"1":{"name":"string.regexp.classic.crystal"},"2":{"name":"punctuation.definition.string.crystal"}},"contentName":"string.regexp.classic.crystal","end":"((/[imsx]*))","patterns":[{"include":"#regex_sub"}]},{"begin":"%r\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},{"begin":"%r\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"][imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},{"begin":"%r\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},{"begin":"%r<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},{"begin":"%r\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"}]},{"begin":"%Q?\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%Q?\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},{"begin":"%Q?<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%Q?\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.double.crystal.mod","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},{"begin":"%Q\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"%[iqw]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_parens"}]},{"begin":"%[iqw]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_ltgt"}]},{"begin":"%[iqw]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_brackets"}]},{"begin":"%[iqw]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.crystal"},{"include":"#nest_curly"}]},{"begin":"%[iqw]\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\."}]},{"captures":{"1":{"name":"punctuation.definition.constant.crystal"}},"match":"(?[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(?>[!?]|=(?![=>]))?|===?|>[=>]?|<[<=]?|<=>|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|@@?[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*)","name":"constant.other.symbol.crystal"},{"captures":{"1":{"name":"punctuation.definition.constant.crystal"}},"match":"(?>[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*[!?]?)(:)(?!:)","name":"constant.other.symbol.crystal.19syntax"},{"captures":{"1":{"name":"punctuation.definition.comment.crystal"}},"match":"(?:^[\\\\t ]+)?(#).*$\\\\n?","name":"comment.line.number-sign.crystal"},{"match":"(?<<-('?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.html.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.html.crystal","patterns":[{"include":"#heredoc"},{"include":"text.html.basic"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.sql.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.sql.crystal","patterns":[{"include":"#heredoc"},{"include":"source.sql"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.css.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.css.crystal","patterns":[{"include":"#heredoc"},{"include":"source.css"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.c++.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.cplusplus.crystal","patterns":[{"include":"#heredoc"},{"include":"source.c++"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)C)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.c.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.c.crystal","patterns":[{"include":"#heredoc"},{"include":"source.c"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.js.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.js.crystal","patterns":[{"include":"#heredoc"},{"include":"source.js"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.js.jquery.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.js.jquery.crystal","patterns":[{"include":"#heredoc"},{"include":"source.js.jquery"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)SH(?:|ELL))\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.shell.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.shell.crystal","patterns":[{"include":"#heredoc"},{"include":"source.shell"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CRYSTAL)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.crystal.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.crystal.crystal","patterns":[{"include":"#heredoc"},{"include":"source.crystal"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-'(\\\\w+)')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\s*\\\\1\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.heredoc.crystal","patterns":[{"include":"#heredoc"},{"include":"#escaped_char"}]},{"begin":"(?><<-(\\\\w+)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\s*\\\\1\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.heredoc.crystal","patterns":[{"include":"#heredoc"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?<=\\\\{\\\\s??|[^0-9A-Z_a-z]do|^do|[^0-9A-Z_a-z]do\\\\s|^do\\\\s)(\\\\|)","captures":{"1":{"name":"punctuation.separator.variable.crystal"}},"end":"(?","name":"punctuation.separator.key-value"},{"match":"->","name":"support.function.kernel.crystal"},{"match":"<<=|%=|&{1,2}=|\\\\*=|\\\\*\\\\*=|\\\\+=|-=|\\\\^=|\\\\|{1,2}=|<<","name":"keyword.operator.assignment.augmented.crystal"},{"match":"<=>|<(?![<=])|>(?![<=>])|<=|>=|===?|=~|!=|!~|(?<=[\\\\t ])\\\\?","name":"keyword.operator.comparison.crystal"},{"match":"(?<=^|[\\\\t ])!|&&|\\\\|\\\\||\\\\^","name":"keyword.operator.logical.crystal"},{"match":"(\\\\{%|%}|\\\\{\\\\{|}})","name":"keyword.operator.macro.crystal"},{"captures":{"1":{"name":"punctuation.separator.method.crystal"}},"match":"(&\\\\.)\\\\s*(?![A-Z])"},{"match":"([%\\\\&]|\\\\*\\\\*|[-*+/])","name":"keyword.operator.arithmetic.crystal"},{"match":"=","name":"keyword.operator.assignment.crystal"},{"match":"[|~]|>>","name":"keyword.operator.other.crystal"},{"match":":","name":"punctuation.separator.other.crystal"},{"match":";","name":"punctuation.separator.statement.crystal"},{"match":",","name":"punctuation.separator.object.crystal"},{"match":"\\\\.|::","name":"punctuation.separator.method.crystal"},{"match":"[{}]","name":"punctuation.section.scope.crystal"},{"match":"[]\\\\[]","name":"punctuation.section.array.crystal"},{"match":"[()]","name":"punctuation.section.function.crystal"},{"begin":"(?=[!0-9?A-Z_a-z]+\\\\()","end":"(?<=\\\\))","name":"meta.function-call.crystal","patterns":[{"match":"([!0-9?A-Z_a-z]+)(?=\\\\()","name":"entity.name.function.crystal"},{"include":"$self"}]},{"match":"((?<=\\\\W)\\\\b|^)\\\\w+\\\\b(?=\\\\s*([]$)-/=^}]|<\\\\s|<<[.|\\\\s]))","name":"variable.other.crystal"}],"repository":{"escaped_char":{"match":"\\\\\\\\(?:[0-7]{1,3}|x\\\\h{2}|u\\\\h{4}|u\\\\{[ \\\\h]+}|.)","name":"constant.character.escape.crystal"},"heredoc":{"begin":"^<<-?\\\\w+","end":"$","patterns":[{"include":"$self"}]},"interpolated_crystal":{"patterns":[{"begin":"#\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.crystal"}},"contentName":"source.crystal","end":"(})","endCaptures":{"0":{"name":"punctuation.section.embedded.end.crystal"},"1":{"name":"source.crystal"}},"name":"meta.embedded.line.crystal","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}],"repository":{"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]}}},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.instance.crystal"},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#@@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.class.crystal"},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#\\\\$)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.global.crystal"}]},"nest_brackets":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#nest_brackets"}]},"nest_brackets_i":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},"nest_brackets_r":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},"nest_curly":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly"}]},"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]},"nest_curly_i":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},"nest_curly_r":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},"nest_ltgt":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#nest_ltgt"}]},"nest_ltgt_i":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},"nest_ltgt_r":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},"nest_parens":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#nest_parens"}]},"nest_parens_i":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},"nest_parens_r":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},"regex_sub":{"patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.crystal"},"3":{"name":"punctuation.definition.arbitrary-repetition.crystal"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.crystal"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.crystal"}},"end":"]","name":"string.regexp.character-class.crystal","patterns":[{"include":"#escaped_char"}]},{"begin":"\\\\(","captures":{"0":{"name":"punctuation.definition.group.crystal"}},"end":"\\\\)","name":"string.regexp.group.crystal","patterns":[{"include":"#regex_sub"}]},{"captures":{"1":{"name":"punctuation.definition.comment.crystal"}},"match":"(?<=^|\\\\s)(#)\\\\s[-\\\\t !,.0-9?A-Za-z[^\\\\x00-\\\\x7F]]*$","name":"comment.line.number-sign.crystal"}]}},"scopeName":"source.crystal","embeddedLangs":["html","sql","css","c","javascript","shellscript"]}`)),s=[...n,...r,...t,...i,...e,...a,o];export{s as default}; \ No newline at end of file +import{t as e}from"./javascript-CR5GavSE.js";import{t}from"./css-EYEy3Xlb.js";import{t as n}from"./html-rbi5PgIL.js";import{t as r}from"./sql-WfIMpFBo.js";import{t as i}from"./c-BFOYLRr0.js";import{t as a}from"./shellscript-BxUYTJbB.js";var o=Object.freeze(JSON.parse(`{"displayName":"Crystal","fileTypes":["cr"],"firstLineMatch":"^#!/.*\\\\bcrystal","foldingStartMarker":"(?:^(\\\\s*+(annotation|module|class|struct|union|enum|def(?!.*\\\\bend\\\\s*$)|unless|if|case|begin|for|while|until|^=begin|(\\"(\\\\\\\\.|[^\\"])*+\\"|'(\\\\\\\\.|[^'])*+'|[^\\"#'])*(\\\\s(do|begin|case)|(?^|~]\\\\s*+(if|unless)))\\\\b(?![^;]*+;.*?\\\\bend\\\\b)|(\\"(\\\\\\\\.|[^\\"])*+\\"|'(\\\\\\\\.|[^'])*+'|[^\\"#'])*(\\\\{(?![^}]*+})|\\\\[(?![^]]*+]))).*|#.*?\\\\(fold\\\\)\\\\s*+)$","foldingStopMarker":"((^|;)\\\\s*+end\\\\s*+(#.*)?$|(^|;)\\\\s*+end\\\\..*$|^\\\\s*+[]}],?\\\\s*+(#.*)?$|#.*?\\\\(end\\\\)\\\\s*+$|^=end)","name":"crystal","patterns":[{"captures":{"1":{"name":"keyword.control.class.crystal"},"2":{"name":"keyword.control.class.crystal"},"3":{"name":"entity.name.type.class.crystal"},"5":{"name":"punctuation.separator.crystal"},"6":{"name":"support.class.other.type-param.crystal"},"7":{"name":"entity.other.inherited-class.crystal"},"8":{"name":"punctuation.separator.crystal"},"9":{"name":"punctuation.separator.crystal"},"10":{"name":"support.class.other.type-param.crystal"},"11":{"name":"punctuation.definition.variable.crystal"}},"match":"^\\\\s*(abstract)?\\\\s*(class|struct|union|annotation|enum)\\\\s+(([.:A-Z_\\\\x{80}-\\\\x{10FFFF}][.:\\\\x{80}-\\\\x{10FFFF}\\\\w]*(\\\\(([,.0-:A-Z_a-z\\\\x{80}-\\\\x{10FFFF}\\\\s]+)\\\\))?(\\\\s*(<)\\\\s*[.:A-Z\\\\x{80}-\\\\x{10FFFF}][.:\\\\x{80}-\\\\x{10FFFF}\\\\w]*(\\\\(([.0-:A-Z_a-z]+\\\\s,)\\\\))?)?)|((<<)\\\\s*[.0-:A-Z_\\\\x{80}-\\\\x{10FFFF}]+))","name":"meta.class.crystal"},{"captures":{"1":{"name":"keyword.control.module.crystal"},"2":{"name":"entity.name.type.module.crystal"},"3":{"name":"entity.other.inherited-class.module.first.crystal"},"4":{"name":"punctuation.separator.inheritance.crystal"},"5":{"name":"entity.other.inherited-class.module.second.crystal"},"6":{"name":"punctuation.separator.inheritance.crystal"},"7":{"name":"entity.other.inherited-class.module.third.crystal"},"8":{"name":"punctuation.separator.inheritance.crystal"}},"match":"^\\\\s*(module)\\\\s+(([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))?([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))?([A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(::))*[A-Z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*)","name":"meta.module.crystal"},{"captures":{"1":{"name":"keyword.control.lib.crystal"},"2":{"name":"entity.name.type.lib.crystal"},"3":{"name":"entity.other.inherited-class.lib.first.crystal"},"4":{"name":"punctuation.separator.inheritance.crystal"},"5":{"name":"entity.other.inherited-class.lib.second.crystal"},"6":{"name":"punctuation.separator.inheritance.crystal"},"7":{"name":"entity.other.inherited-class.lib.third.crystal"},"8":{"name":"punctuation.separator.inheritance.crystal"}},"match":"^\\\\s*(lib)\\\\s+(([A-Z]\\\\w*(::))?([A-Z]\\\\w*(::))?([A-Z]\\\\w*(::))*[A-Z]\\\\w*)","name":"meta.lib.crystal"},{"captures":{"1":{"name":"keyword.control.lib.type.crystal"},"2":{"name":"entity.name.lib.type.crystal"},"3":{"name":"keyword.control.lib.crystal"},"4":{"name":"entity.name.lib.type.value.crystal"}},"match":"(?[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|\\\\^|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|\\\\[]=?))\\\\s*(\\\\()","beginCaptures":{"1":{"name":"keyword.control.def.crystal"},"2":{"name":"entity.name.function.crystal"},"3":{"name":"punctuation.definition.parameters.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.crystal"}},"name":"meta.function.method.with-arguments.crystal","patterns":[{"begin":"(?![),\\\\s])","end":"(?=,|\\\\)\\\\s*)","patterns":[{"captures":{"1":{"name":"storage.type.variable.crystal"},"2":{"name":"constant.other.symbol.hashkey.parameter.function.crystal"},"3":{"name":"punctuation.definition.constant.hashkey.crystal"},"4":{"name":"variable.parameter.function.crystal"}},"match":"\\\\G([\\\\&*]?)(?:([A-Z_a-z]\\\\w*(:))|([A-Z_a-z]\\\\w*))"},{"include":"$self"}]}]},{"captures":{"1":{"name":"keyword.control.def.crystal"},"3":{"name":"entity.name.function.crystal"}},"match":"(?=def\\\\b)(?<=^|\\\\s)(def)\\\\b(\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|\\\\^|===?|!=|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|\\\\[]=?)))?","name":"meta.function.method.without-arguments.crystal"},{"match":"\\\\b[0-9][0-9_]*\\\\.[0-9][0-9_]*([Ee][-+]?[0-9_]+)?(f(?:32|64))?\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b[0-9][0-9_]*(\\\\.[0-9][0-9_]*)?[Ee][-+]?[0-9_]+(f(?:32|64))?\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b[0-9][0-9_]*(\\\\.[0-9][0-9_]*)?([Ee][-+]?[0-9_]+)?(f(?:32|64))\\\\b","name":"constant.numeric.float.crystal"},{"match":"\\\\b(?!0[0-9])[0-9][0-9_]*([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.decimal.crystal"},{"match":"\\\\b0x[_\\\\h]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.hexadecimal.crystal"},{"match":"\\\\b0o[0-7_]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.octal.crystal"},{"match":"\\\\b0b[01_]+([iu](8|16|32|64|128))?\\\\b","name":"constant.numeric.integer.binary.crystal"},{"begin":":'","beginCaptures":{"0":{"name":"punctuation.definition.symbol.begin.crystal"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.symbol.end.crystal"}},"name":"constant.other.symbol.crystal","patterns":[{"match":"\\\\\\\\['\\\\\\\\]","name":"constant.character.escape.crystal"}]},{"begin":":\\"","beginCaptures":{"0":{"name":"punctuation.section.symbol.begin.crystal"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.section.symbol.end.crystal"}},"name":"constant.other.symbol.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"match":"(?","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%x\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%x\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.interpolated.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?:^|(?<=[\\\\&(,:;=>?\\\\[|~]|[;\\\\s]if\\\\s|[;\\\\s]elsif\\\\s|[;\\\\s]while\\\\s|[;\\\\s]unless\\\\s|[;\\\\s]when\\\\s|[;\\\\s]assert_match\\\\s|[;\\\\s]or\\\\s|[;\\\\s]and\\\\s|[;\\\\s]not\\\\s|[.\\\\s]index\\\\s|[.\\\\s]scan\\\\s|[.\\\\s]sub\\\\s|[.\\\\s]sub!\\\\s|[.\\\\s]gsub\\\\s|[.\\\\s]gsub!\\\\s|[.\\\\s]match\\\\s)|(?<=^(?:when|if|elsif|while|unless)\\\\s))\\\\s*((/))(?![*+?{}])","captures":{"1":{"name":"string.regexp.classic.crystal"},"2":{"name":"punctuation.definition.string.crystal"}},"contentName":"string.regexp.classic.crystal","end":"((/[imsx]*))","patterns":[{"include":"#regex_sub"}]},{"begin":"%r\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},{"begin":"%r\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"][imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},{"begin":"%r\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},{"begin":"%r<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},{"begin":"%r\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|[imsx]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.regexp.mod-r.crystal","patterns":[{"include":"#regex_sub"}]},{"begin":"%Q?\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},{"begin":"%Q?\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},{"begin":"%Q?<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},{"begin":"%Q?\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.double.crystal.mod","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},{"begin":"%Q\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.upper.crystal","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"%[iqw]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[)\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_parens"}]},{"begin":"%[iqw]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[>\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_ltgt"}]},{"begin":"%[iqw]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[]\\\\\\\\]","name":"constant.character.escape.crystal"},{"include":"#nest_brackets"}]},{"begin":"%[iqw]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\[\\\\\\\\}]","name":"constant.character.escape.crystal"},{"include":"#nest_curly"}]},{"begin":"%[iqw]\\\\|","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\|","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.quoted.other.literal.lower.crystal","patterns":[{"match":"\\\\\\\\."}]},{"captures":{"1":{"name":"punctuation.definition.constant.crystal"}},"match":"(?[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*(?>[!?]|=(?![=>]))?|===?|>[=>]?|<[<=]?|<=>|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[][=?]?|@@?[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*)","name":"constant.other.symbol.crystal"},{"captures":{"1":{"name":"punctuation.definition.constant.crystal"}},"match":"(?>[A-Z_a-z\\\\x{80}-\\\\x{10FFFF}][\\\\x{80}-\\\\x{10FFFF}\\\\w]*[!?]?)(:)(?!:)","name":"constant.other.symbol.crystal.19syntax"},{"captures":{"1":{"name":"punctuation.definition.comment.crystal"}},"match":"(?:^[\\\\t ]+)?(#).*$\\\\n?","name":"comment.line.number-sign.crystal"},{"match":"(?<<-('?)((?:[_\\\\w]+_|)HTML)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.html.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.html.crystal","patterns":[{"include":"#heredoc"},{"include":"text.html.basic"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)SQL)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.sql.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.sql.crystal","patterns":[{"include":"#heredoc"},{"include":"source.sql"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CSS)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.css.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.css.crystal","patterns":[{"include":"#heredoc"},{"include":"source.css"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CPP)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.c++.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.cplusplus.crystal","patterns":[{"include":"#heredoc"},{"include":"source.c++"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)C)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.c.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.c.crystal","patterns":[{"include":"#heredoc"},{"include":"source.c"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)J(?:S|AVASCRIPT))\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.js.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.js.crystal","patterns":[{"include":"#heredoc"},{"include":"source.js"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)JQUERY)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.js.jquery.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.js.jquery.crystal","patterns":[{"include":"#heredoc"},{"include":"source.js.jquery"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)SH(?:|ELL))\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.shell.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.shell.crystal","patterns":[{"include":"#heredoc"},{"include":"source.shell"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-('?)((?:[_\\\\w]+_|)CRYSTAL)\\\\b\\\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"contentName":"text.crystal.embedded.crystal","end":"\\\\s*\\\\2\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.embedded.crystal.crystal","patterns":[{"include":"#heredoc"},{"include":"source.crystal"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?><<-'(\\\\w+)')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\s*\\\\1\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.heredoc.crystal","patterns":[{"include":"#heredoc"},{"include":"#escaped_char"}]},{"begin":"(?><<-(\\\\w+)\\\\b)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.crystal"}},"end":"\\\\s*\\\\1\\\\b","endCaptures":{"0":{"name":"punctuation.definition.string.end.crystal"}},"name":"string.unquoted.heredoc.crystal","patterns":[{"include":"#heredoc"},{"include":"#interpolated_crystal"},{"include":"#escaped_char"}]},{"begin":"(?<=\\\\{\\\\s??|[^0-9A-Z_a-z]do|^do|[^0-9A-Z_a-z]do\\\\s|^do\\\\s)(\\\\|)","captures":{"1":{"name":"punctuation.separator.variable.crystal"}},"end":"(?","name":"punctuation.separator.key-value"},{"match":"->","name":"support.function.kernel.crystal"},{"match":"<<=|%=|&{1,2}=|\\\\*=|\\\\*\\\\*=|\\\\+=|-=|\\\\^=|\\\\|{1,2}=|<<","name":"keyword.operator.assignment.augmented.crystal"},{"match":"<=>|<(?![<=])|>(?![<=>])|<=|>=|===?|=~|!=|!~|(?<=[\\\\t ])\\\\?","name":"keyword.operator.comparison.crystal"},{"match":"(?<=^|[\\\\t ])!|&&|\\\\|\\\\||\\\\^","name":"keyword.operator.logical.crystal"},{"match":"(\\\\{%|%}|\\\\{\\\\{|}})","name":"keyword.operator.macro.crystal"},{"captures":{"1":{"name":"punctuation.separator.method.crystal"}},"match":"(&\\\\.)\\\\s*(?![A-Z])"},{"match":"([%\\\\&]|\\\\*\\\\*|[-*+/])","name":"keyword.operator.arithmetic.crystal"},{"match":"=","name":"keyword.operator.assignment.crystal"},{"match":"[|~]|>>","name":"keyword.operator.other.crystal"},{"match":":","name":"punctuation.separator.other.crystal"},{"match":";","name":"punctuation.separator.statement.crystal"},{"match":",","name":"punctuation.separator.object.crystal"},{"match":"\\\\.|::","name":"punctuation.separator.method.crystal"},{"match":"[{}]","name":"punctuation.section.scope.crystal"},{"match":"[]\\\\[]","name":"punctuation.section.array.crystal"},{"match":"[()]","name":"punctuation.section.function.crystal"},{"begin":"(?=[!0-9?A-Z_a-z]+\\\\()","end":"(?<=\\\\))","name":"meta.function-call.crystal","patterns":[{"match":"([!0-9?A-Z_a-z]+)(?=\\\\()","name":"entity.name.function.crystal"},{"include":"$self"}]},{"match":"((?<=\\\\W)\\\\b|^)\\\\w+\\\\b(?=\\\\s*([]$)-/=^}]|<\\\\s|<<[.|\\\\s]))","name":"variable.other.crystal"}],"repository":{"escaped_char":{"match":"\\\\\\\\(?:[0-7]{1,3}|x\\\\h{2}|u\\\\h{4}|u\\\\{[ \\\\h]+}|.)","name":"constant.character.escape.crystal"},"heredoc":{"begin":"^<<-?\\\\w+","end":"$","patterns":[{"include":"$self"}]},"interpolated_crystal":{"patterns":[{"begin":"#\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.crystal"}},"contentName":"source.crystal","end":"(})","endCaptures":{"0":{"name":"punctuation.section.embedded.end.crystal"},"1":{"name":"source.crystal"}},"name":"meta.embedded.line.crystal","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}],"repository":{"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]}}},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.instance.crystal"},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#@@)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.class.crystal"},{"captures":{"1":{"name":"punctuation.definition.variable.crystal"}},"match":"(#\\\\$)[A-Z_a-z]\\\\w*","name":"variable.other.readwrite.global.crystal"}]},"nest_brackets":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#nest_brackets"}]},"nest_brackets_i":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_brackets_i"}]},"nest_brackets_r":{"begin":"\\\\[","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"]","patterns":[{"include":"#regex_sub"},{"include":"#nest_brackets_r"}]},"nest_curly":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly"}]},"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]},"nest_curly_i":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_curly_i"}]},"nest_curly_r":{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"}","patterns":[{"include":"#regex_sub"},{"include":"#nest_curly_r"}]},"nest_ltgt":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#nest_ltgt"}]},"nest_ltgt_i":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_ltgt_i"}]},"nest_ltgt_r":{"begin":"<","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":">","patterns":[{"include":"#regex_sub"},{"include":"#nest_ltgt_r"}]},"nest_parens":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#nest_parens"}]},"nest_parens_i":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"include":"#nest_parens_i"}]},"nest_parens_r":{"begin":"\\\\(","captures":{"0":{"name":"punctuation.section.scope.crystal"}},"end":"\\\\)","patterns":[{"include":"#regex_sub"},{"include":"#nest_parens_r"}]},"regex_sub":{"patterns":[{"include":"#interpolated_crystal"},{"include":"#escaped_char"},{"captures":{"1":{"name":"punctuation.definition.arbitrary-repetition.crystal"},"3":{"name":"punctuation.definition.arbitrary-repetition.crystal"}},"match":"(\\\\{)\\\\d+(,\\\\d+)?(})","name":"string.regexp.arbitrary-repetition.crystal"},{"begin":"\\\\[(?:\\\\^?])?","captures":{"0":{"name":"punctuation.definition.character-class.crystal"}},"end":"]","name":"string.regexp.character-class.crystal","patterns":[{"include":"#escaped_char"}]},{"begin":"\\\\(","captures":{"0":{"name":"punctuation.definition.group.crystal"}},"end":"\\\\)","name":"string.regexp.group.crystal","patterns":[{"include":"#regex_sub"}]},{"captures":{"1":{"name":"punctuation.definition.comment.crystal"}},"match":"(?<=^|\\\\s)(#)\\\\s[-\\\\t !,.0-9?A-Za-z[^\\\\x00-\\\\x7F]]*$","name":"comment.line.number-sign.crystal"}]}},"scopeName":"source.crystal","embeddedLangs":["html","sql","css","c","javascript","shellscript"]}`)),s=[...n,...r,...t,...i,...e,...a,o];export{s as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/css-D_sUZuNy.js b/internal/webui/dist/assets/css-EYEy3Xlb.js similarity index 99% rename from internal/webui/dist/assets/css-D_sUZuNy.js rename to internal/webui/dist/assets/css-EYEy3Xlb.js index b09436c..d675e1c 100644 --- a/internal/webui/dist/assets/css-D_sUZuNy.js +++ b/internal/webui/dist/assets/css-EYEy3Xlb.js @@ -1 +1 @@ -import{t as e}from"./index-B2lg52VZ.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"CSS","name":"css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#combinators"},{"include":"#selector"},{"include":"#at-rules"},{"include":"#rule-list"}],"repository":{"at-rules":{"patterns":[{"begin":"\\\\A\\\\uFEFF?(?i:(?=\\\\s*@charset\\\\b))","end":";|(?=$)","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.charset.css","patterns":[{"captures":{"1":{"name":"invalid.illegal.not-lowercase.charset.css"},"2":{"name":"invalid.illegal.leading-whitespace.charset.css"},"3":{"name":"invalid.illegal.no-whitespace.charset.css"},"4":{"name":"invalid.illegal.whitespace.charset.css"},"5":{"name":"invalid.illegal.not-double-quoted.charset.css"},"6":{"name":"invalid.illegal.unclosed-string.charset.css"},"7":{"name":"invalid.illegal.unexpected-characters.charset.css"}},"match":"\\\\G((?!@charset)@\\\\w+)|\\\\G(\\\\s+)|(@charset\\\\S[^;]*)|(?<=@charset)( {2,}|\\\\t+)|(?<=@charset )([^\\";]+)|(\\"[^\\"]+)$|(?<=\\")([^;]+)"},{"captures":{"1":{"name":"keyword.control.at-rule.charset.css"},"2":{"name":"punctuation.definition.keyword.css"}},"match":"((@)charset)(?=\\\\s)"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"\\"|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.double.css","patterns":[{"begin":"(?:\\\\G|^)(?=[^\\"]+$)","end":"$","name":"invalid.illegal.unclosed.string.css"}]}]},{"begin":"(?i)((@)import)(?:\\\\s+|$|(?=[\\"']|/\\\\*))","beginCaptures":{"1":{"name":"keyword.control.at-rule.import.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":";","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.import.css","patterns":[{"begin":"\\\\G\\\\s*(?=/\\\\*)","end":"(?<=\\\\*/)\\\\s*","patterns":[{"include":"#comment-block"}]},{"include":"#string"},{"include":"#url"},{"include":"#media-query-list"}]},{"begin":"(?i)((@)font-face)(?=\\\\s*|\\\\{|/\\\\*|$)","beginCaptures":{"1":{"name":"keyword.control.at-rule.font-face.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":"(?!\\\\G)","name":"meta.at-rule.font-face.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list"}]},{"begin":"(?i)(@)page(?=[:{\\\\s]|/\\\\*|$)","captures":{"0":{"name":"keyword.control.at-rule.page.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*($|[:;{]))","name":"meta.at-rule.page.css","patterns":[{"include":"#rule-list"}]},{"begin":"(?i)(?=@media([(\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)media","beginCaptures":{"0":{"name":"keyword.control.at-rule.media.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.media.header.css","patterns":[{"include":"#media-query-list"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.media.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.media.end.bracket.curly.css"}},"name":"meta.at-rule.media.body.css","patterns":[{"include":"$self"}]}]},{"begin":"(?i)(?=@counter-style([\\"';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)counter-style","beginCaptures":{"0":{"name":"keyword.control.at-rule.counter-style.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*\\\\{)","name":"meta.at-rule.counter-style.header.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"captures":{"0":{"patterns":[{"include":"#escapes"}]}},"match":"[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.parameter.style-name.css"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.property-list.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.property-list.end.bracket.curly.css"}},"name":"meta.at-rule.counter-style.body.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list-innards"}]}]},{"begin":"(?i)(?=@document([\\"';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)document","beginCaptures":{"0":{"name":"keyword.control.at-rule.document.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.document.header.css","patterns":[{"begin":"(?i)(?>>","name":"invalid.deprecated.combinator.css"},{"match":">>|[+>~]","name":"keyword.operator.combinator.css"}]},"commas":{"match":",","name":"punctuation.separator.list.comma.css"},"comment-block":{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.css"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.css"}},"name":"comment.block.css"},"escapes":{"patterns":[{"match":"\\\\\\\\\\\\h{1,6}","name":"constant.character.escape.codepoint.css"},{"begin":"\\\\\\\\$\\\\s*","end":"^(?]|/\\\\*)"},"media-query":{"begin":"\\\\G","end":"(?=\\\\s*[;{])","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#media-types"},{"match":"(?i)(?<=\\\\s|^|,|\\\\*/)(only|not)(?=[{\\\\s]|/\\\\*|$)","name":"keyword.operator.logical.$1.media.css"},{"match":"(?i)(?<=\\\\s|^|\\\\*/|\\\\))and(?=\\\\s|/\\\\*|$)","name":"keyword.operator.logical.and.media.css"},{"match":",(?:(?:\\\\s*,)+|(?=\\\\s*[);{]))","name":"invalid.illegal.comma.css"},{"include":"#commas"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.css"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.css"}},"patterns":[{"include":"#media-features"},{"include":"#media-feature-keywords"},{"match":":","name":"punctuation.separator.key-value.css"},{"match":">=|<=|[<=>]","name":"keyword.operator.comparison.css"},{"captures":{"1":{"name":"constant.numeric.css"},"2":{"name":"keyword.operator.arithmetic.css"},"3":{"name":"constant.numeric.css"}},"match":"(\\\\d+)\\\\s*(/)\\\\s*(\\\\d+)","name":"meta.ratio.css"},{"include":"#numeric-values"},{"include":"#comment-block"}]}]},"media-query-list":{"begin":"(?=\\\\s*[^;{])","end":"(?=\\\\s*[;{])","patterns":[{"include":"#media-query"}]},"media-types":{"captures":{"1":{"name":"support.constant.media.css"},"2":{"name":"invalid.deprecated.constant.media.css"}},"match":"(?i)(?<=^|[,\\\\s]|\\\\*/)(?:(all|print|screen|speech)|(aural|braille|embossed|handheld|projection|tty|tv))(?=$|[,;{\\\\s]|/\\\\*)"},"numeric-values":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.constant.css"}},"match":"(#)(?:\\\\h{3,4}|\\\\h{6}|\\\\h{8})\\\\b","name":"constant.other.color.rgb-value.hex.css"},{"captures":{"1":{"name":"keyword.other.unit.percentage.css"},"2":{"name":"keyword.other.unit.\${2:/downcase}.css"}},"match":"(?i)(?\\\\[{|~\\\\s]|/\\\\*)|(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*(?:[]!\\"%-(*;\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"patterns":[{"include":"#escapes"}]}},"match":"(#)(-?(?![0-9])(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)(?=$|[#)+,.:>\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.id.css"},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.entity.begin.bracket.square.css"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.entity.end.bracket.square.css"}},"name":"meta.attribute-selector.css","patterns":[{"include":"#comment-block"},{"include":"#string"},{"captures":{"1":{"name":"storage.modifier.ignore-case.css"}},"match":"(?<=[\\"'\\\\s]|^|\\\\*/)\\\\s*([Ii])\\\\s*(?=[]\\\\s]|/\\\\*|$)"},{"captures":{"1":{"name":"string.unquoted.attribute-value.css","patterns":[{"include":"#escapes"}]}},"match":"(?<==)\\\\s*((?!/\\\\*)(?:[^]\\"'\\\\\\\\\\\\s]|\\\\\\\\.)+)"},{"include":"#escapes"},{"match":"[$*^|~]?=","name":"keyword.operator.pattern.css"},{"match":"\\\\|","name":"punctuation.separator.css"},{"captures":{"1":{"name":"entity.other.namespace-prefix.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?:[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+|\\\\*)(?=\\\\|(?![=\\\\s]|$|])(?:-?(?!\\\\d)|[-\\\\\\\\\\\\w[^\\\\x00-\\\\x7F]]))"},{"captures":{"1":{"name":"entity.other.attribute-name.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?>[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)\\\\s*(?=[]$*=^|~]|/\\\\*)"}]},{"include":"#pseudo-classes"},{"include":"#pseudo-elements"},{"include":"#functional-pseudo-classes"},{"match":"(?\\\\[{|~\\\\s]|/\\\\*|$)","name":"entity.name.tag.css"},"unicode-range":{"captures":{"0":{"name":"constant.other.unicode-range.css"},"1":{"name":"punctuation.separator.dash.unicode-range.css"}},"match":"(?n}),n=[Object.freeze(JSON.parse(`{"displayName":"CSS","name":"css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#combinators"},{"include":"#selector"},{"include":"#at-rules"},{"include":"#rule-list"}],"repository":{"at-rules":{"patterns":[{"begin":"\\\\A\\\\uFEFF?(?i:(?=\\\\s*@charset\\\\b))","end":";|(?=$)","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.charset.css","patterns":[{"captures":{"1":{"name":"invalid.illegal.not-lowercase.charset.css"},"2":{"name":"invalid.illegal.leading-whitespace.charset.css"},"3":{"name":"invalid.illegal.no-whitespace.charset.css"},"4":{"name":"invalid.illegal.whitespace.charset.css"},"5":{"name":"invalid.illegal.not-double-quoted.charset.css"},"6":{"name":"invalid.illegal.unclosed-string.charset.css"},"7":{"name":"invalid.illegal.unexpected-characters.charset.css"}},"match":"\\\\G((?!@charset)@\\\\w+)|\\\\G(\\\\s+)|(@charset\\\\S[^;]*)|(?<=@charset)( {2,}|\\\\t+)|(?<=@charset )([^\\";]+)|(\\"[^\\"]+)$|(?<=\\")([^;]+)"},{"captures":{"1":{"name":"keyword.control.at-rule.charset.css"},"2":{"name":"punctuation.definition.keyword.css"}},"match":"((@)charset)(?=\\\\s)"},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"\\"|$","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.double.css","patterns":[{"begin":"(?:\\\\G|^)(?=[^\\"]+$)","end":"$","name":"invalid.illegal.unclosed.string.css"}]}]},{"begin":"(?i)((@)import)(?:\\\\s+|$|(?=[\\"']|/\\\\*))","beginCaptures":{"1":{"name":"keyword.control.at-rule.import.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":";","endCaptures":{"0":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.import.css","patterns":[{"begin":"\\\\G\\\\s*(?=/\\\\*)","end":"(?<=\\\\*/)\\\\s*","patterns":[{"include":"#comment-block"}]},{"include":"#string"},{"include":"#url"},{"include":"#media-query-list"}]},{"begin":"(?i)((@)font-face)(?=\\\\s*|\\\\{|/\\\\*|$)","beginCaptures":{"1":{"name":"keyword.control.at-rule.font-face.css"},"2":{"name":"punctuation.definition.keyword.css"}},"end":"(?!\\\\G)","name":"meta.at-rule.font-face.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list"}]},{"begin":"(?i)(@)page(?=[:{\\\\s]|/\\\\*|$)","captures":{"0":{"name":"keyword.control.at-rule.page.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*($|[:;{]))","name":"meta.at-rule.page.css","patterns":[{"include":"#rule-list"}]},{"begin":"(?i)(?=@media([(\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)media","beginCaptures":{"0":{"name":"keyword.control.at-rule.media.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.media.header.css","patterns":[{"include":"#media-query-list"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.media.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.media.end.bracket.curly.css"}},"name":"meta.at-rule.media.body.css","patterns":[{"include":"$self"}]}]},{"begin":"(?i)(?=@counter-style([\\"';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)counter-style","beginCaptures":{"0":{"name":"keyword.control.at-rule.counter-style.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*\\\\{)","name":"meta.at-rule.counter-style.header.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"captures":{"0":{"patterns":[{"include":"#escapes"}]}},"match":"[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.parameter.style-name.css"}]},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.section.property-list.begin.bracket.curly.css"}},"end":"}","endCaptures":{"0":{"name":"punctuation.section.property-list.end.bracket.curly.css"}},"name":"meta.at-rule.counter-style.body.css","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#rule-list-innards"}]}]},{"begin":"(?i)(?=@document([\\"';{\\\\s]|/\\\\*|$))","end":"(?<=})(?!\\\\G)","patterns":[{"begin":"(?i)\\\\G(@)document","beginCaptures":{"0":{"name":"keyword.control.at-rule.document.css"},"1":{"name":"punctuation.definition.keyword.css"}},"end":"(?=\\\\s*[;{])","name":"meta.at-rule.document.header.css","patterns":[{"begin":"(?i)(?>>","name":"invalid.deprecated.combinator.css"},{"match":">>|[+>~]","name":"keyword.operator.combinator.css"}]},"commas":{"match":",","name":"punctuation.separator.list.comma.css"},"comment-block":{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.css"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.css"}},"name":"comment.block.css"},"escapes":{"patterns":[{"match":"\\\\\\\\\\\\h{1,6}","name":"constant.character.escape.codepoint.css"},{"begin":"\\\\\\\\$\\\\s*","end":"^(?]|/\\\\*)"},"media-query":{"begin":"\\\\G","end":"(?=\\\\s*[;{])","patterns":[{"include":"#comment-block"},{"include":"#escapes"},{"include":"#media-types"},{"match":"(?i)(?<=\\\\s|^|,|\\\\*/)(only|not)(?=[{\\\\s]|/\\\\*|$)","name":"keyword.operator.logical.$1.media.css"},{"match":"(?i)(?<=\\\\s|^|\\\\*/|\\\\))and(?=\\\\s|/\\\\*|$)","name":"keyword.operator.logical.and.media.css"},{"match":",(?:(?:\\\\s*,)+|(?=\\\\s*[);{]))","name":"invalid.illegal.comma.css"},{"include":"#commas"},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bracket.round.css"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bracket.round.css"}},"patterns":[{"include":"#media-features"},{"include":"#media-feature-keywords"},{"match":":","name":"punctuation.separator.key-value.css"},{"match":">=|<=|[<=>]","name":"keyword.operator.comparison.css"},{"captures":{"1":{"name":"constant.numeric.css"},"2":{"name":"keyword.operator.arithmetic.css"},"3":{"name":"constant.numeric.css"}},"match":"(\\\\d+)\\\\s*(/)\\\\s*(\\\\d+)","name":"meta.ratio.css"},{"include":"#numeric-values"},{"include":"#comment-block"}]}]},"media-query-list":{"begin":"(?=\\\\s*[^;{])","end":"(?=\\\\s*[;{])","patterns":[{"include":"#media-query"}]},"media-types":{"captures":{"1":{"name":"support.constant.media.css"},"2":{"name":"invalid.deprecated.constant.media.css"}},"match":"(?i)(?<=^|[,\\\\s]|\\\\*/)(?:(all|print|screen|speech)|(aural|braille|embossed|handheld|projection|tty|tv))(?=$|[,;{\\\\s]|/\\\\*)"},"numeric-values":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.constant.css"}},"match":"(#)(?:\\\\h{3,4}|\\\\h{6}|\\\\h{8})\\\\b","name":"constant.other.color.rgb-value.hex.css"},{"captures":{"1":{"name":"keyword.other.unit.percentage.css"},"2":{"name":"keyword.other.unit.\${2:/downcase}.css"}},"match":"(?i)(?\\\\[{|~\\\\s]|/\\\\*)|(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*(?:[]!\\"%-(*;\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"patterns":[{"include":"#escapes"}]}},"match":"(#)(-?(?![0-9])(?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)(?=$|[#)+,.:>\\\\[{|~\\\\s]|/\\\\*)","name":"entity.other.attribute-name.id.css"},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.entity.begin.bracket.square.css"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.entity.end.bracket.square.css"}},"name":"meta.attribute-selector.css","patterns":[{"include":"#comment-block"},{"include":"#string"},{"captures":{"1":{"name":"storage.modifier.ignore-case.css"}},"match":"(?<=[\\"'\\\\s]|^|\\\\*/)\\\\s*([Ii])\\\\s*(?=[]\\\\s]|/\\\\*|$)"},{"captures":{"1":{"name":"string.unquoted.attribute-value.css","patterns":[{"include":"#escapes"}]}},"match":"(?<==)\\\\s*((?!/\\\\*)(?:[^]\\"'\\\\\\\\\\\\s]|\\\\\\\\.)+)"},{"include":"#escapes"},{"match":"[$*^|~]?=","name":"keyword.operator.pattern.css"},{"match":"\\\\|","name":"punctuation.separator.css"},{"captures":{"1":{"name":"entity.other.namespace-prefix.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?:[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+|\\\\*)(?=\\\\|(?![=\\\\s]|$|])(?:-?(?!\\\\d)|[-\\\\\\\\\\\\w[^\\\\x00-\\\\x7F]]))"},{"captures":{"1":{"name":"entity.other.attribute-name.css","patterns":[{"include":"#escapes"}]}},"match":"(-?(?!\\\\d)(?>[-\\\\w[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))+)\\\\s*(?=[]$*=^|~]|/\\\\*)"}]},{"include":"#pseudo-classes"},{"include":"#pseudo-elements"},{"include":"#functional-pseudo-classes"},{"match":"(?\\\\[{|~\\\\s]|/\\\\*|$)","name":"entity.name.tag.css"},"unicode-range":{"captures":{"0":{"name":"constant.other.unicode-range.css"},"1":{"name":"punctuation.separator.dash.unicode-range.css"}},"match":"(?|[\\\\[{]|do)\\\\s*$","foldingStopMarker":"^\\\\s*(([]}]|after|else|catch|rescue)\\\\s*$|end\\\\b)","name":"elixir","patterns":[{"begin":"\\\\b(fn)\\\\b(?!.*->)","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"$","patterns":[{"include":"#core_syntax"}]},{"captures":{"1":{"name":"entity.name.type.class.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}},"match":"([A-Z]\\\\w+)\\\\s*(\\\\.)\\\\s*([_a-z]\\\\w*[!?]?)"},{"captures":{"1":{"name":"constant.other.symbol.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}},"match":"(:\\\\w+)\\\\s*(\\\\.)\\\\s*(_?\\\\w*[!?]?)"},{"captures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"entity.name.function.elixir"}},"match":"(\\\\|>)\\\\s*([_a-z]\\\\w*[!?]?)"},{"match":"\\\\b[_a-z]\\\\w*[!?]?(?=\\\\s*\\\\.?\\\\s*\\\\()","name":"entity.name.function.elixir"},{"begin":"\\\\b(fn)\\\\b(?=.*->)","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"(?>(->)|(when)|(\\\\)))","endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}},"patterns":[{"include":"#core_syntax"}]},{"include":"#core_syntax"},{"begin":"^(?=.*->)((?![^\\"']*([\\"'])[^\\"']*->)|(?=.*->[^\\"']*([\\"'])[^\\"']*->))((?!.*\\\\([^)]*->)|(?=[^()]*->)|(?=\\\\s*\\\\(.*\\\\).*->))((?!.*\\\\b(fn)\\\\b)|(?=.*->.*\\\\bfn\\\\b))","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"(?>(->)|(when)|(\\\\)))","endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}},"patterns":[{"include":"#core_syntax"}]}],"repository":{"core_syntax":{"patterns":[{"begin":"^\\\\s*(defmodule)\\\\b","beginCaptures":{"1":{"name":"keyword.control.module.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.module.elixir"}},"name":"meta.module.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*(?=\\\\.)","name":"entity.other.inherited-class.elixir"},{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.class.elixir"}]},{"begin":"^\\\\s*(defprotocol)\\\\b","beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"name":"meta.protocol_declaration.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.protocol.elixir"}]},{"begin":"^\\\\s*(defimpl)\\\\b","beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"name":"meta.protocol_implementation.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.protocol.elixir"}]},{"begin":"^\\\\s*(def(?:|macro|delegate|guard))\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))((\\\\()|\\\\s*)","beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.public.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"end":"\\\\b(do:)|\\\\b(do)\\\\b|(?=\\\\s+(def(?:|n|macro|delegate|guard))\\\\b)","endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}},"name":"meta.function.public.elixir","patterns":[{"include":"$self"},{"begin":"\\\\s(\\\\\\\\\\\\\\\\)","beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}},"end":"[),]|$","patterns":[{"include":"$self"}]},{"match":"\\\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\\\b","name":"keyword.control.elixir"}]},{"begin":"^\\\\s*(def(?:|n|macro|guard)p)\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))((\\\\()|\\\\s*)","beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.private.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"end":"\\\\b(do:)|\\\\b(do)\\\\b|(?=\\\\s+(def(?:p|macrop|guardp))\\\\b)","endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}},"name":"meta.function.private.elixir","patterns":[{"include":"$self"},{"begin":"\\\\s(\\\\\\\\\\\\\\\\)","beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}},"end":"[),]|$","patterns":[{"include":"$self"}]},{"match":"\\\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\\\b","name":"keyword.control.elixir"}]},{"begin":"\\\\s*~L\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"sigil.leex","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"begin":"\\\\s*~H\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"sigil.heex","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"begin":"@(module|type)?doc (~[a-z])?\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"comment.block.documentation.heredoc","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"@(module|type)?doc ~[A-Z]\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"comment.block.documentation.heredoc"},{"begin":"@(module|type)?doc (~[a-z])?'''","end":"\\\\s*'''","name":"comment.block.documentation.heredoc","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"@(module|type)?doc ~[A-Z]'''","end":"\\\\s*'''","name":"comment.block.documentation.heredoc"},{"match":"@(module|type)?doc false","name":"comment.block.documentation.false"},{"begin":"@(module|type)?doc \\"","end":"\\"","name":"comment.block.documentation.string","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"match":"(?_?\\\\h)*\\\\b","name":"constant.numeric.hex.elixir"},{"match":"\\\\b\\\\d(?>_?\\\\d)*(\\\\.(?![^\\\\s\\\\d])(?>_?\\\\d)+)([Ee][-+]?\\\\d(?>_?\\\\d)*)?\\\\b","name":"constant.numeric.float.elixir"},{"match":"\\\\b\\\\d(?>_?\\\\d)*\\\\b","name":"constant.numeric.integer.elixir"},{"match":"\\\\b0b[01](?>_?[01])*\\\\b","name":"constant.numeric.binary.elixir"},{"match":"\\\\b0o[0-7](?>_?[0-7])*\\\\b","name":"constant.numeric.octal.elixir"},{"begin":":'","captures":{"0":{"name":"punctuation.definition.constant.elixir"}},"end":"'","name":"constant.other.symbol.single-quoted.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":":\\"","captures":{"0":{"name":"punctuation.definition.constant.elixir"}},"end":"\\"","name":"constant.other.symbol.double-quoted.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"'''","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*'''","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.single.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.single.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.double.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.double.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"}[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"][a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":">[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\)[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z](\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\1[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[A-Z]\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.heredoc.literal.elixir"},{"begin":"~[A-Z]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"}[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"][a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":">[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\)[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z](\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\1[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"captures":{"1":{"name":"punctuation.definition.constant.elixir"}},"match":"(?[A-Z_a-z][@\\\\w]*(?>[!?]|=(?![=>]))?|<>|===?|!==?|<<>>|<<<|>>>|~~~|::|<-|\\\\|>|=>|=~|[/=]|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|\\\\.\\\\.//|>=?|<=?|&&?&?|\\\\+\\\\+?|--?|\\\\|\\\\|?\\\\|?|[!@]|%?\\\\{}|%|\\\\[]|\\\\^(\\\\^\\\\^)?)","name":"constant.other.symbol.elixir"},{"captures":{"1":{"name":"punctuation.definition.constant.elixir"}},"match":"(?>[A-Z_a-z][@\\\\w]*[!?]?)(:)(?!:)","name":"constant.other.keywords.elixir"},{"begin":"(^[\\\\t ]+)?(?=##)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}},"end":"(?!#)","patterns":[{"begin":"##","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}},"end":"\\\\n","name":"comment.line.section.elixir"}]},{"begin":"(^[\\\\t ]+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}},"end":"(?!#)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}},"end":"\\\\n","name":"comment.line.number-sign.elixir"}]},{"match":"\\\\b_([^_]\\\\w+[!?]?)","name":"comment.unused.elixir"},{"match":"\\\\b_\\\\b","name":"comment.wildcard.elixir"},{"match":"(?","name":"keyword.operator.concatenation.elixir"},{"match":"\\\\|>|<~>|<>|<<<|>>>|~>>|<<~|~>|<~|<\\\\|>","name":"keyword.operator.sigils_1.elixir"},{"match":"&&&?","name":"keyword.operator.sigils_2.elixir"},{"match":"<-|\\\\\\\\\\\\\\\\","name":"keyword.operator.sigils_3.elixir"},{"match":"===?|!==?|<=?|>=?","name":"keyword.operator.comparison.elixir"},{"match":"(\\\\|\\\\|\\\\||&&&|\\\\^\\\\^\\\\^|<<<|>>>|~~~)","name":"keyword.operator.bitwise.elixir"},{"match":"(?<=[\\\\t ])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b","name":"keyword.operator.logical.elixir"},{"match":"([-*+/])","name":"keyword.operator.arithmetic.elixir"},{"match":"\\\\||\\\\+\\\\+|--|\\\\*\\\\*|\\\\\\\\\\\\\\\\|<-|<>|<<|>>|::|\\\\.\\\\.|//|\\\\|>|~|=>|&","name":"keyword.operator.other.elixir"},{"match":"=","name":"keyword.operator.assignment.elixir"},{"match":":","name":"punctuation.separator.other.elixir"},{"match":";","name":"punctuation.separator.statement.elixir"},{"match":",","name":"punctuation.separator.object.elixir"},{"match":"\\\\.","name":"punctuation.separator.method.elixir"},{"match":"[{}]","name":"punctuation.section.scope.elixir"},{"match":"[]\\\\[]","name":"punctuation.section.array.elixir"},{"match":"[()]","name":"punctuation.section.function.elixir"}]},"escaped_char":{"match":"\\\\\\\\(x[A-Fa-f\\\\d]{1,2}|.)","name":"constant.character.escaped.elixir"},"interpolated_elixir":{"begin":"#\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.elixir"}},"contentName":"source.elixir","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.elixir"}},"name":"meta.embedded.line.elixir","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}]},"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.elixir"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]}},"scopeName":"source.elixir","embeddedLangs":["html"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file +import{t as e}from"./html-rbi5PgIL.js";var t=Object.freeze(JSON.parse(`{"displayName":"Elixir","fileTypes":["ex","exs"],"firstLineMatch":"^#!/.*\\\\belixir","foldingStartMarker":"(after|else|catch|rescue|->|[\\\\[{]|do)\\\\s*$","foldingStopMarker":"^\\\\s*(([]}]|after|else|catch|rescue)\\\\s*$|end\\\\b)","name":"elixir","patterns":[{"begin":"\\\\b(fn)\\\\b(?!.*->)","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"$","patterns":[{"include":"#core_syntax"}]},{"captures":{"1":{"name":"entity.name.type.class.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}},"match":"([A-Z]\\\\w+)\\\\s*(\\\\.)\\\\s*([_a-z]\\\\w*[!?]?)"},{"captures":{"1":{"name":"constant.other.symbol.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}},"match":"(:\\\\w+)\\\\s*(\\\\.)\\\\s*(_?\\\\w*[!?]?)"},{"captures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"entity.name.function.elixir"}},"match":"(\\\\|>)\\\\s*([_a-z]\\\\w*[!?]?)"},{"match":"\\\\b[_a-z]\\\\w*[!?]?(?=\\\\s*\\\\.?\\\\s*\\\\()","name":"entity.name.function.elixir"},{"begin":"\\\\b(fn)\\\\b(?=.*->)","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"(?>(->)|(when)|(\\\\)))","endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}},"patterns":[{"include":"#core_syntax"}]},{"include":"#core_syntax"},{"begin":"^(?=.*->)((?![^\\"']*([\\"'])[^\\"']*->)|(?=.*->[^\\"']*([\\"'])[^\\"']*->))((?!.*\\\\([^)]*->)|(?=[^()]*->)|(?=\\\\s*\\\\(.*\\\\).*->))((?!.*\\\\b(fn)\\\\b)|(?=.*->.*\\\\bfn\\\\b))","beginCaptures":{"1":{"name":"keyword.control.elixir"}},"end":"(?>(->)|(when)|(\\\\)))","endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}},"patterns":[{"include":"#core_syntax"}]}],"repository":{"core_syntax":{"patterns":[{"begin":"^\\\\s*(defmodule)\\\\b","beginCaptures":{"1":{"name":"keyword.control.module.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.module.elixir"}},"name":"meta.module.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*(?=\\\\.)","name":"entity.other.inherited-class.elixir"},{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.class.elixir"}]},{"begin":"^\\\\s*(defprotocol)\\\\b","beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"name":"meta.protocol_declaration.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.protocol.elixir"}]},{"begin":"^\\\\s*(defimpl)\\\\b","beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"end":"\\\\b(do)\\\\b","endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"name":"meta.protocol_implementation.elixir","patterns":[{"match":"\\\\b[A-Z]\\\\w*\\\\b","name":"entity.name.type.protocol.elixir"}]},{"begin":"^\\\\s*(def(?:|macro|delegate|guard))\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))((\\\\()|\\\\s*)","beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.public.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"end":"\\\\b(do:)|\\\\b(do)\\\\b|(?=\\\\s+(def(?:|n|macro|delegate|guard))\\\\b)","endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}},"name":"meta.function.public.elixir","patterns":[{"include":"$self"},{"begin":"\\\\s(\\\\\\\\\\\\\\\\)","beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}},"end":"[),]|$","patterns":[{"include":"$self"}]},{"match":"\\\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\\\b","name":"keyword.control.elixir"}]},{"begin":"^\\\\s*(def(?:|n|macro|guard)p)\\\\s+((?>[A-Z_a-z]\\\\w*(?>\\\\.|::))?(?>[A-Z_a-z]\\\\w*(?>[!?]|=(?!>))?|===?|>[=>]?|<=>|<[<=]?|[%\\\\&/\`|]|\\\\*\\\\*?|=?~|[-+]@?|\\\\[]=?))((\\\\()|\\\\s*)","beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.private.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"end":"\\\\b(do:)|\\\\b(do)\\\\b|(?=\\\\s+(def(?:p|macrop|guardp))\\\\b)","endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}},"name":"meta.function.private.elixir","patterns":[{"include":"$self"},{"begin":"\\\\s(\\\\\\\\\\\\\\\\)","beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}},"end":"[),]|$","patterns":[{"include":"$self"}]},{"match":"\\\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\\\b","name":"keyword.control.elixir"}]},{"begin":"\\\\s*~L\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"sigil.leex","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"begin":"\\\\s*~H\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"sigil.heex","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"begin":"@(module|type)?doc (~[a-z])?\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"comment.block.documentation.heredoc","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"@(module|type)?doc ~[A-Z]\\"\\"\\"","end":"\\\\s*\\"\\"\\"","name":"comment.block.documentation.heredoc"},{"begin":"@(module|type)?doc (~[a-z])?'''","end":"\\\\s*'''","name":"comment.block.documentation.heredoc","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"@(module|type)?doc ~[A-Z]'''","end":"\\\\s*'''","name":"comment.block.documentation.heredoc"},{"match":"@(module|type)?doc false","name":"comment.block.documentation.false"},{"begin":"@(module|type)?doc \\"","end":"\\"","name":"comment.block.documentation.string","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"match":"(?_?\\\\h)*\\\\b","name":"constant.numeric.hex.elixir"},{"match":"\\\\b\\\\d(?>_?\\\\d)*(\\\\.(?![^\\\\s\\\\d])(?>_?\\\\d)+)([Ee][-+]?\\\\d(?>_?\\\\d)*)?\\\\b","name":"constant.numeric.float.elixir"},{"match":"\\\\b\\\\d(?>_?\\\\d)*\\\\b","name":"constant.numeric.integer.elixir"},{"match":"\\\\b0b[01](?>_?[01])*\\\\b","name":"constant.numeric.binary.elixir"},{"match":"\\\\b0o[0-7](?>_?[0-7])*\\\\b","name":"constant.numeric.octal.elixir"},{"begin":":'","captures":{"0":{"name":"punctuation.definition.constant.elixir"}},"end":"'","name":"constant.other.symbol.single-quoted.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":":\\"","captures":{"0":{"name":"punctuation.definition.constant.elixir"}},"end":"\\"","name":"constant.other.symbol.double-quoted.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"'''","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*'''","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.single.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.single.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.double.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.double.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.heredoc.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"}[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"][a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":">[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\)[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[a-z](\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\1[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.elixir","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"begin":"~[A-Z]\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"^\\\\s*\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.heredoc.literal.elixir"},{"begin":"~[A-Z]\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"}[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"][a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]<","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":">[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\)[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"begin":"~[A-Z](\\\\W)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"end":"\\\\1[a-z]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}},"name":"string.quoted.other.sigil.literal.elixir"},{"captures":{"1":{"name":"punctuation.definition.constant.elixir"}},"match":"(?[A-Z_a-z][@\\\\w]*(?>[!?]|=(?![=>]))?|<>|===?|!==?|<<>>|<<<|>>>|~~~|::|<-|\\\\|>|=>|=~|[/=]|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|\\\\.\\\\.//|>=?|<=?|&&?&?|\\\\+\\\\+?|--?|\\\\|\\\\|?\\\\|?|[!@]|%?\\\\{}|%|\\\\[]|\\\\^(\\\\^\\\\^)?)","name":"constant.other.symbol.elixir"},{"captures":{"1":{"name":"punctuation.definition.constant.elixir"}},"match":"(?>[A-Z_a-z][@\\\\w]*[!?]?)(:)(?!:)","name":"constant.other.keywords.elixir"},{"begin":"(^[\\\\t ]+)?(?=##)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}},"end":"(?!#)","patterns":[{"begin":"##","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}},"end":"\\\\n","name":"comment.line.section.elixir"}]},{"begin":"(^[\\\\t ]+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}},"end":"(?!#)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}},"end":"\\\\n","name":"comment.line.number-sign.elixir"}]},{"match":"\\\\b_([^_]\\\\w+[!?]?)","name":"comment.unused.elixir"},{"match":"\\\\b_\\\\b","name":"comment.wildcard.elixir"},{"match":"(?","name":"keyword.operator.concatenation.elixir"},{"match":"\\\\|>|<~>|<>|<<<|>>>|~>>|<<~|~>|<~|<\\\\|>","name":"keyword.operator.sigils_1.elixir"},{"match":"&&&?","name":"keyword.operator.sigils_2.elixir"},{"match":"<-|\\\\\\\\\\\\\\\\","name":"keyword.operator.sigils_3.elixir"},{"match":"===?|!==?|<=?|>=?","name":"keyword.operator.comparison.elixir"},{"match":"(\\\\|\\\\|\\\\||&&&|\\\\^\\\\^\\\\^|<<<|>>>|~~~)","name":"keyword.operator.bitwise.elixir"},{"match":"(?<=[\\\\t ])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b","name":"keyword.operator.logical.elixir"},{"match":"([-*+/])","name":"keyword.operator.arithmetic.elixir"},{"match":"\\\\||\\\\+\\\\+|--|\\\\*\\\\*|\\\\\\\\\\\\\\\\|<-|<>|<<|>>|::|\\\\.\\\\.|//|\\\\|>|~|=>|&","name":"keyword.operator.other.elixir"},{"match":"=","name":"keyword.operator.assignment.elixir"},{"match":":","name":"punctuation.separator.other.elixir"},{"match":";","name":"punctuation.separator.statement.elixir"},{"match":",","name":"punctuation.separator.object.elixir"},{"match":"\\\\.","name":"punctuation.separator.method.elixir"},{"match":"[{}]","name":"punctuation.section.scope.elixir"},{"match":"[]\\\\[]","name":"punctuation.section.array.elixir"},{"match":"[()]","name":"punctuation.section.function.elixir"}]},"escaped_char":{"match":"\\\\\\\\(x[A-Fa-f\\\\d]{1,2}|.)","name":"constant.character.escaped.elixir"},"interpolated_elixir":{"begin":"#\\\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.elixir"}},"contentName":"source.elixir","end":"}","endCaptures":{"0":{"name":"punctuation.section.embedded.end.elixir"}},"name":"meta.embedded.line.elixir","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}]},"nest_curly_and_self":{"patterns":[{"begin":"\\\\{","captures":{"0":{"name":"punctuation.section.scope.elixir"}},"end":"}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]}},"scopeName":"source.elixir","embeddedLangs":["html"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/elm-DZ2GG1O0.js b/internal/webui/dist/assets/elm-CIXzGuv_.js similarity index 99% rename from internal/webui/dist/assets/elm-DZ2GG1O0.js rename to internal/webui/dist/assets/elm-CIXzGuv_.js index 21ecc60..f2d59ca 100644 --- a/internal/webui/dist/assets/elm-DZ2GG1O0.js +++ b/internal/webui/dist/assets/elm-CIXzGuv_.js @@ -1 +1 @@ -import{t as e}from"./glsl-DBaA16lM.js";var t=Object.freeze(JSON.parse(`{"displayName":"Elm","fileTypes":["elm"],"name":"elm","patterns":[{"include":"#import"},{"include":"#module"},{"include":"#debug"},{"include":"#comments"},{"match":"\\\\b(_)\\\\b","name":"keyword.unused.elm"},{"include":"#type-signature"},{"include":"#type-declaration"},{"include":"#type-alias-declaration"},{"include":"#string-triple"},{"include":"#string-quote"},{"include":"#char"},{"match":"\\\\b([0-9]+\\\\.[0-9]+([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)\\\\b","name":"constant.numeric.float.elm"},{"match":"\\\\b([0-9]+)\\\\b","name":"constant.numeric.elm"},{"match":"\\\\b(0x\\\\h+)\\\\b","name":"constant.numeric.elm"},{"include":"#glsl"},{"include":"#record-prefix"},{"include":"#module-prefix"},{"include":"#constructor"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"record.name.elm"},"3":{"name":"keyword.pipe.elm"},"4":{"name":"entity.name.record.field.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(\\\\|)\\\\s+([a-z][0-9A-Z_a-z]*)","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"keyword.pipe.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(\\\\|)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"record.name.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+$","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.elm"},{"captures":{"1":{"name":"punctuation.separator.comma.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(,)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.elm"},{"match":"([{}])","name":"punctuation.bracket.elm"},{"include":"#unit"},{"include":"#comma"},{"include":"#parens"},{"match":"(->)","name":"keyword.operator.arrow.elm"},{"include":"#infix_op"},{"match":"([:=\\\\\\\\|])","name":"keyword.other.elm"},{"match":"\\\\b(type|as|port|exposing|alias|infixl|infixr?)\\\\s+","name":"keyword.other.elm"},{"match":"\\\\b(if|then|else|case|of|let|in)\\\\s+","name":"keyword.control.elm"},{"include":"#record-accessor"},{"include":"#top_level_value"},{"include":"#value"},{"include":"#period"},{"include":"#square_brackets"}],"repository":{"block_comment":{"applyEndPatternLast":1,"begin":"\\\\{-(?!#)","captures":{"0":{"name":"punctuation.definition.comment.elm"}},"end":"-}","name":"comment.block.elm","patterns":[{"include":"#block_comment"}]},"char":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.char.begin.elm"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.char.end.elm"}},"name":"string.quoted.single.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"comma":{"match":"(,)","name":"punctuation.separator.comma.elm"},"comments":{"patterns":[{"begin":"--","captures":{"1":{"name":"punctuation.definition.comment.elm"}},"end":"$","name":"comment.line.double-dash.elm"},{"include":"#block_comment"}]},"constructor":{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"constant.type-constructor.elm"},"debug":{"match":"\\\\b(Debug)\\\\b","name":"invalid.illegal.debug.elm"},"glsl":{"begin":"(\\\\[)(glsl)(\\\\|)","beginCaptures":{"1":{"name":"entity.glsl.bracket.elm"},"2":{"name":"entity.glsl.name.elm"},"3":{"name":"entity.glsl.bracket.elm"}},"end":"(\\\\|])","endCaptures":{"1":{"name":"entity.glsl.bracket.elm"}},"name":"meta.embedded.block.glsl","patterns":[{"include":"source.glsl"}]},"import":{"begin":"^\\\\b(import)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.import.elm"}},"end":"\\\\n(?!\\\\s)","name":"meta.import.elm","patterns":[{"match":"(as|exposing)","name":"keyword.control.elm"},{"include":"#module_chunk"},{"include":"#period"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-exports"}]},"infix_op":{"match":"(|<\\\\?>|<\\\\||<=|\\\\|\\\\||&&|>=|\\\\|>|\\\\|=|\\\\|\\\\.|\\\\+\\\\+|::|/=|==|//|>>|<<|[-*+/<>^])","name":"keyword.operator.elm"},"module":{"begin":"^\\\\b((port |effect )?module)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.elm"}},"end":"\\\\n(?!\\\\s)","endCaptures":{"1":{"name":"keyword.other.elm"}},"name":"meta.declaration.module.elm","patterns":[{"include":"#module_chunk"},{"include":"#period"},{"match":"(exposing)","name":"keyword.other.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-exports"}]},"module-exports":{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.parens.module-export.elm"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.parens.module-export.elm"}},"name":"meta.declaration.exports.elm","patterns":[{"match":"\\\\b[a-z]['0-9A-Z_a-z]*","name":"entity.name.function.elm"},{"match":"\\\\b[A-Z]['0-9A-Z_a-z]*","name":"storage.type.elm"},{"match":",","name":"punctuation.separator.comma.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#comma"},{"match":"\\\\(\\\\.\\\\.\\\\)","name":"punctuation.parens.ellipses.elm"},{"match":"\\\\.\\\\.","name":"punctuation.parens.ellipses.elm"},{"include":"#infix_op"},{"match":"\\\\(.*?\\\\)","name":"meta.other.unknown.elm"}]},"module-prefix":{"captures":{"1":{"name":"support.module.elm"},"2":{"name":"keyword.other.period.elm"}},"match":"([A-Z][0-9A-Z_a-z]*)(\\\\.)","name":"meta.module.name.elm"},"module_chunk":{"match":"[A-Z][0-9A-Z_a-z]*","name":"support.module.elm"},"parens":{"match":"([()])","name":"punctuation.parens.elm"},"period":{"match":"\\\\.","name":"keyword.other.period.elm"},"record-accessor":{"captures":{"1":{"name":"keyword.other.period.elm"},"2":{"name":"entity.name.record.field.accessor.elm"}},"match":"(\\\\.)([a-z][0-9A-Z_a-z]*)","name":"meta.record.accessor"},"record-prefix":{"captures":{"1":{"name":"record.name.elm"},"2":{"name":"keyword.other.period.elm"},"3":{"name":"entity.name.record.field.accessor.elm"}},"match":"([a-z][0-9A-Z_a-z]*)(\\\\.)([a-z][0-9A-Z_a-z]*)","name":"record.accessor.elm"},"square_brackets":{"match":"[]\\\\[]","name":"punctuation.definition.list.elm"},"string-quote":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elm"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elm"}},"name":"string.quoted.double.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"string-triple":{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elm"}},"end":"\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elm"}},"name":"string.quoted.triple.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"top_level_value":{"match":"^[a-z][0-9A-Z_a-z]*\\\\b","name":"entity.name.function.top_level.elm"},"type-alias-declaration":{"begin":"^(type\\\\s+)(alias\\\\s+)([A-Z]['0-9A-Z_a-z]*)\\\\s+","beginCaptures":{"1":{"name":"keyword.type.elm"},"2":{"name":"keyword.type-alias.elm"},"3":{"name":"storage.type.elm"}},"end":"^(?=\\\\S)","name":"meta.function.type-declaration.elm","patterns":[{"match":"\\\\n\\\\s+","name":"punctuation.spaces.elm"},{"match":"=","name":"keyword.operator.assignment.elm"},{"include":"#module-prefix"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-declaration":{"begin":"^(type\\\\s+)([A-Z]['0-9A-Z_a-z]*)\\\\s+","beginCaptures":{"1":{"name":"keyword.type.elm"},"2":{"name":"storage.type.elm"}},"end":"^(?=\\\\S)","name":"meta.function.type-declaration.elm","patterns":[{"captures":{"1":{"name":"constant.type-constructor.elm"}},"match":"^\\\\s*([A-Z][0-9A-Z_a-z]*)\\\\b","name":"meta.record.field.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"captures":{"1":{"name":"keyword.operator.assignment.elm"},"2":{"name":"constant.type-constructor.elm"}},"match":"([=|])\\\\s+([A-Z][0-9A-Z_a-z]*)\\\\b","name":"meta.record.field.elm"},{"match":"=","name":"keyword.operator.assignment.elm"},{"match":"->","name":"keyword.operator.arrow.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-record":{"begin":"(\\\\{)","beginCaptures":{"1":{"name":"punctuation.section.braces.begin"}},"end":"(})","endCaptures":{"1":{"name":"punctuation.section.braces.end"}},"name":"meta.function.type-record.elm","patterns":[{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"match":"->","name":"keyword.operator.arrow.elm"},{"captures":{"1":{"name":"entity.name.record.field.elm"},"2":{"name":"keyword.other.elm"}},"match":"([a-z][0-9A-Z_a-z]*)\\\\s+(:)","name":"meta.record.field.elm"},{"match":",","name":"punctuation.separator.comma.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-signature":{"begin":"^(port\\\\s+)?([_a-z]['0-9A-Z_a-z]*)\\\\s+(:)","beginCaptures":{"1":{"name":"keyword.other.port.elm"},"2":{"name":"entity.name.function.elm"},"3":{"name":"keyword.other.colon.elm"}},"end":"^(((?=[a-z]))|$)","name":"meta.function.type-declaration.elm","patterns":[{"include":"#type-signature-chunk"}]},"type-signature-chunk":{"patterns":[{"match":"->","name":"keyword.operator.arrow.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"match":"\\\\(\\\\)","name":"constant.unit.elm"},{"include":"#comma"},{"include":"#parens"},{"include":"#comments"},{"include":"#type-record"}]},"unit":{"match":"\\\\(\\\\)","name":"constant.unit.elm"},"value":{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"meta.value.elm"}},"scopeName":"source.elm","embeddedLangs":["glsl"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file +import{t as e}from"./glsl-BYnWR4Hv.js";var t=Object.freeze(JSON.parse(`{"displayName":"Elm","fileTypes":["elm"],"name":"elm","patterns":[{"include":"#import"},{"include":"#module"},{"include":"#debug"},{"include":"#comments"},{"match":"\\\\b(_)\\\\b","name":"keyword.unused.elm"},{"include":"#type-signature"},{"include":"#type-declaration"},{"include":"#type-alias-declaration"},{"include":"#string-triple"},{"include":"#string-quote"},{"include":"#char"},{"match":"\\\\b([0-9]+\\\\.[0-9]+([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)\\\\b","name":"constant.numeric.float.elm"},{"match":"\\\\b([0-9]+)\\\\b","name":"constant.numeric.elm"},{"match":"\\\\b(0x\\\\h+)\\\\b","name":"constant.numeric.elm"},{"include":"#glsl"},{"include":"#record-prefix"},{"include":"#module-prefix"},{"include":"#constructor"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"record.name.elm"},"3":{"name":"keyword.pipe.elm"},"4":{"name":"entity.name.record.field.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(\\\\|)\\\\s+([a-z][0-9A-Z_a-z]*)","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"keyword.pipe.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(\\\\|)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"record.name.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+$","name":"meta.record.field.update.elm"},{"captures":{"1":{"name":"punctuation.bracket.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(\\\\{)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.elm"},{"captures":{"1":{"name":"punctuation.separator.comma.elm"},"2":{"name":"entity.name.record.field.elm"},"3":{"name":"keyword.operator.assignment.elm"}},"match":"(,)\\\\s+([a-z][0-9A-Z_a-z]*)\\\\s+(=)","name":"meta.record.field.elm"},{"match":"([{}])","name":"punctuation.bracket.elm"},{"include":"#unit"},{"include":"#comma"},{"include":"#parens"},{"match":"(->)","name":"keyword.operator.arrow.elm"},{"include":"#infix_op"},{"match":"([:=\\\\\\\\|])","name":"keyword.other.elm"},{"match":"\\\\b(type|as|port|exposing|alias|infixl|infixr?)\\\\s+","name":"keyword.other.elm"},{"match":"\\\\b(if|then|else|case|of|let|in)\\\\s+","name":"keyword.control.elm"},{"include":"#record-accessor"},{"include":"#top_level_value"},{"include":"#value"},{"include":"#period"},{"include":"#square_brackets"}],"repository":{"block_comment":{"applyEndPatternLast":1,"begin":"\\\\{-(?!#)","captures":{"0":{"name":"punctuation.definition.comment.elm"}},"end":"-}","name":"comment.block.elm","patterns":[{"include":"#block_comment"}]},"char":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.char.begin.elm"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.char.end.elm"}},"name":"string.quoted.single.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"comma":{"match":"(,)","name":"punctuation.separator.comma.elm"},"comments":{"patterns":[{"begin":"--","captures":{"1":{"name":"punctuation.definition.comment.elm"}},"end":"$","name":"comment.line.double-dash.elm"},{"include":"#block_comment"}]},"constructor":{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"constant.type-constructor.elm"},"debug":{"match":"\\\\b(Debug)\\\\b","name":"invalid.illegal.debug.elm"},"glsl":{"begin":"(\\\\[)(glsl)(\\\\|)","beginCaptures":{"1":{"name":"entity.glsl.bracket.elm"},"2":{"name":"entity.glsl.name.elm"},"3":{"name":"entity.glsl.bracket.elm"}},"end":"(\\\\|])","endCaptures":{"1":{"name":"entity.glsl.bracket.elm"}},"name":"meta.embedded.block.glsl","patterns":[{"include":"source.glsl"}]},"import":{"begin":"^\\\\b(import)\\\\s+","beginCaptures":{"1":{"name":"keyword.control.import.elm"}},"end":"\\\\n(?!\\\\s)","name":"meta.import.elm","patterns":[{"match":"(as|exposing)","name":"keyword.control.elm"},{"include":"#module_chunk"},{"include":"#period"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-exports"}]},"infix_op":{"match":"(|<\\\\?>|<\\\\||<=|\\\\|\\\\||&&|>=|\\\\|>|\\\\|=|\\\\|\\\\.|\\\\+\\\\+|::|/=|==|//|>>|<<|[-*+/<>^])","name":"keyword.operator.elm"},"module":{"begin":"^\\\\b((port |effect )?module)\\\\s+","beginCaptures":{"1":{"name":"keyword.other.elm"}},"end":"\\\\n(?!\\\\s)","endCaptures":{"1":{"name":"keyword.other.elm"}},"name":"meta.declaration.module.elm","patterns":[{"include":"#module_chunk"},{"include":"#period"},{"match":"(exposing)","name":"keyword.other.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-exports"}]},"module-exports":{"begin":"(\\\\()","beginCaptures":{"1":{"name":"punctuation.parens.module-export.elm"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.parens.module-export.elm"}},"name":"meta.declaration.exports.elm","patterns":[{"match":"\\\\b[a-z]['0-9A-Z_a-z]*","name":"entity.name.function.elm"},{"match":"\\\\b[A-Z]['0-9A-Z_a-z]*","name":"storage.type.elm"},{"match":",","name":"punctuation.separator.comma.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#comma"},{"match":"\\\\(\\\\.\\\\.\\\\)","name":"punctuation.parens.ellipses.elm"},{"match":"\\\\.\\\\.","name":"punctuation.parens.ellipses.elm"},{"include":"#infix_op"},{"match":"\\\\(.*?\\\\)","name":"meta.other.unknown.elm"}]},"module-prefix":{"captures":{"1":{"name":"support.module.elm"},"2":{"name":"keyword.other.period.elm"}},"match":"([A-Z][0-9A-Z_a-z]*)(\\\\.)","name":"meta.module.name.elm"},"module_chunk":{"match":"[A-Z][0-9A-Z_a-z]*","name":"support.module.elm"},"parens":{"match":"([()])","name":"punctuation.parens.elm"},"period":{"match":"\\\\.","name":"keyword.other.period.elm"},"record-accessor":{"captures":{"1":{"name":"keyword.other.period.elm"},"2":{"name":"entity.name.record.field.accessor.elm"}},"match":"(\\\\.)([a-z][0-9A-Z_a-z]*)","name":"meta.record.accessor"},"record-prefix":{"captures":{"1":{"name":"record.name.elm"},"2":{"name":"keyword.other.period.elm"},"3":{"name":"entity.name.record.field.accessor.elm"}},"match":"([a-z][0-9A-Z_a-z]*)(\\\\.)([a-z][0-9A-Z_a-z]*)","name":"record.accessor.elm"},"square_brackets":{"match":"[]\\\\[]","name":"punctuation.definition.list.elm"},"string-quote":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elm"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elm"}},"name":"string.quoted.double.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"string-triple":{"begin":"\\"\\"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elm"}},"end":"\\"\\"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.elm"}},"name":"string.quoted.triple.elm","patterns":[{"match":"\\\\\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[\\"\\\\&'\\\\\\\\abfnrtv]|x\\\\h{1,5})","name":"constant.character.escape.elm"},{"match":"\\\\^[@-_]","name":"constant.character.escape.control.elm"}]},"top_level_value":{"match":"^[a-z][0-9A-Z_a-z]*\\\\b","name":"entity.name.function.top_level.elm"},"type-alias-declaration":{"begin":"^(type\\\\s+)(alias\\\\s+)([A-Z]['0-9A-Z_a-z]*)\\\\s+","beginCaptures":{"1":{"name":"keyword.type.elm"},"2":{"name":"keyword.type-alias.elm"},"3":{"name":"storage.type.elm"}},"end":"^(?=\\\\S)","name":"meta.function.type-declaration.elm","patterns":[{"match":"\\\\n\\\\s+","name":"punctuation.spaces.elm"},{"match":"=","name":"keyword.operator.assignment.elm"},{"include":"#module-prefix"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-declaration":{"begin":"^(type\\\\s+)([A-Z]['0-9A-Z_a-z]*)\\\\s+","beginCaptures":{"1":{"name":"keyword.type.elm"},"2":{"name":"storage.type.elm"}},"end":"^(?=\\\\S)","name":"meta.function.type-declaration.elm","patterns":[{"captures":{"1":{"name":"constant.type-constructor.elm"}},"match":"^\\\\s*([A-Z][0-9A-Z_a-z]*)\\\\b","name":"meta.record.field.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"captures":{"1":{"name":"keyword.operator.assignment.elm"},"2":{"name":"constant.type-constructor.elm"}},"match":"([=|])\\\\s+([A-Z][0-9A-Z_a-z]*)\\\\b","name":"meta.record.field.elm"},{"match":"=","name":"keyword.operator.assignment.elm"},{"match":"->","name":"keyword.operator.arrow.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-record":{"begin":"(\\\\{)","beginCaptures":{"1":{"name":"punctuation.section.braces.begin"}},"end":"(})","endCaptures":{"1":{"name":"punctuation.section.braces.end"}},"name":"meta.function.type-record.elm","patterns":[{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"match":"->","name":"keyword.operator.arrow.elm"},{"captures":{"1":{"name":"entity.name.record.field.elm"},"2":{"name":"keyword.other.elm"}},"match":"([a-z][0-9A-Z_a-z]*)\\\\s+(:)","name":"meta.record.field.elm"},{"match":",","name":"punctuation.separator.comma.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"include":"#comments"},{"include":"#type-record"}]},"type-signature":{"begin":"^(port\\\\s+)?([_a-z]['0-9A-Z_a-z]*)\\\\s+(:)","beginCaptures":{"1":{"name":"keyword.other.port.elm"},"2":{"name":"entity.name.function.elm"},"3":{"name":"keyword.other.colon.elm"}},"end":"^(((?=[a-z]))|$)","name":"meta.function.type-declaration.elm","patterns":[{"include":"#type-signature-chunk"}]},"type-signature-chunk":{"patterns":[{"match":"->","name":"keyword.operator.arrow.elm"},{"match":"\\\\s+","name":"punctuation.spaces.elm"},{"include":"#module-prefix"},{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"variable.type.elm"},{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"storage.type.elm"},{"match":"\\\\(\\\\)","name":"constant.unit.elm"},{"include":"#comma"},{"include":"#parens"},{"include":"#comments"},{"include":"#type-record"}]},"unit":{"match":"\\\\(\\\\)","name":"constant.unit.elm"},"value":{"match":"\\\\b[a-z][0-9A-Z_a-z]*\\\\b","name":"meta.value.elm"}},"scopeName":"source.elm","embeddedLangs":["glsl"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/erb-C-JhO4M6.js b/internal/webui/dist/assets/erb-BIc8Omep.js similarity index 94% rename from internal/webui/dist/assets/erb-C-JhO4M6.js rename to internal/webui/dist/assets/erb-BIc8Omep.js index 071eed3..0131215 100644 --- a/internal/webui/dist/assets/erb-C-JhO4M6.js +++ b/internal/webui/dist/assets/erb-BIc8Omep.js @@ -1 +1 @@ -import{t as e}from"./html-CQSL4Rts.js";import t from"./ruby-CxwDFG51.js";var n=Object.freeze(JSON.parse(`{"displayName":"ERB","fileTypes":["erb","rhtml","html.erb"],"injections":{"text.html.erb - (meta.embedded.block.erb | meta.embedded.line.erb | comment)":{"patterns":[{"begin":"^(\\\\s*)(?=<%+#(?![^%]*%>))","beginCaptures":{"0":{"name":"punctuation.whitespace.comment.leading.erb"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.comment.trailing.erb"}},"patterns":[{"include":"#comment"}]},{"begin":"^(\\\\s*)(?=<%(?![^%]*%>))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.erb"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.erb"}},"patterns":[{"include":"#tags"}]},{"include":"#comment"},{"include":"#tags"}]}},"name":"erb","patterns":[{"include":"text.html.basic"}],"repository":{"comment":{"patterns":[{"begin":"<%+#","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.erb"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.definition.comment.end.erb"}},"name":"comment.block.erb"}]},"tags":{"patterns":[{"begin":"<%+(?!>)[-=]?(?![^%]*%>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.erb"}},"contentName":"source.ruby","end":"(-?%)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.erb"},"1":{"name":"source.ruby"}},"name":"meta.embedded.block.erb","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.erb"}},"match":"(#).*?(?=-?%>)","name":"comment.line.number-sign.erb"},{"include":"source.ruby"}]},{"begin":"<%+(?!>)[-=]?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.erb"}},"contentName":"source.ruby","end":"(-?%)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.erb"},"1":{"name":"source.ruby"}},"name":"meta.embedded.line.erb","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.erb"}},"match":"(#).*?(?=-?%>)","name":"comment.line.number-sign.erb"},{"include":"source.ruby"}]}]}},"scopeName":"text.html.erb","embeddedLangs":["html","ruby"]}`)),r=[...e,...t,n];export{r as default}; \ No newline at end of file +import{t as e}from"./html-rbi5PgIL.js";import t from"./ruby-DLg3GxA3.js";var n=Object.freeze(JSON.parse(`{"displayName":"ERB","fileTypes":["erb","rhtml","html.erb"],"injections":{"text.html.erb - (meta.embedded.block.erb | meta.embedded.line.erb | comment)":{"patterns":[{"begin":"^(\\\\s*)(?=<%+#(?![^%]*%>))","beginCaptures":{"0":{"name":"punctuation.whitespace.comment.leading.erb"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.comment.trailing.erb"}},"patterns":[{"include":"#comment"}]},{"begin":"^(\\\\s*)(?=<%(?![^%]*%>))","beginCaptures":{"0":{"name":"punctuation.whitespace.embedded.leading.erb"}},"end":"(?!\\\\G)(\\\\s*$\\\\n)?","endCaptures":{"0":{"name":"punctuation.whitespace.embedded.trailing.erb"}},"patterns":[{"include":"#tags"}]},{"include":"#comment"},{"include":"#tags"}]}},"name":"erb","patterns":[{"include":"text.html.basic"}],"repository":{"comment":{"patterns":[{"begin":"<%+#","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.erb"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.definition.comment.end.erb"}},"name":"comment.block.erb"}]},"tags":{"patterns":[{"begin":"<%+(?!>)[-=]?(?![^%]*%>)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.erb"}},"contentName":"source.ruby","end":"(-?%)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.erb"},"1":{"name":"source.ruby"}},"name":"meta.embedded.block.erb","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.erb"}},"match":"(#).*?(?=-?%>)","name":"comment.line.number-sign.erb"},{"include":"source.ruby"}]},{"begin":"<%+(?!>)[-=]?","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.erb"}},"contentName":"source.ruby","end":"(-?%)>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.erb"},"1":{"name":"source.ruby"}},"name":"meta.embedded.line.erb","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.erb"}},"match":"(#).*?(?=-?%>)","name":"comment.line.number-sign.erb"},{"include":"source.ruby"}]}]}},"scopeName":"text.html.erb","embeddedLangs":["html","ruby"]}`)),r=[...e,...t,n];export{r as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/git-rebase-B734D6L0.js b/internal/webui/dist/assets/git-rebase-BdIZdJUH.js similarity index 93% rename from internal/webui/dist/assets/git-rebase-B734D6L0.js rename to internal/webui/dist/assets/git-rebase-BdIZdJUH.js index 9fdf534..3f19ec9 100644 --- a/internal/webui/dist/assets/git-rebase-B734D6L0.js +++ b/internal/webui/dist/assets/git-rebase-BdIZdJUH.js @@ -1 +1 @@ -import{t as e}from"./shellscript-CE8jMVsJ.js";var t=Object.freeze(JSON.parse(`{"displayName":"Git Rebase Message","name":"git-rebase","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.git-rebase"}},"match":"^\\\\s*(#).*$\\\\n?","name":"comment.line.number-sign.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"},"2":{"name":"constant.sha.git-rebase"},"3":{"name":"meta.commit-message.git-rebase"}},"match":"^\\\\s*(pick|p|reword|r|edit|e|squash|s|fixup|f|drop|d)\\\\s+([0-9a-f]+)\\\\s+(.*)$","name":"meta.commit-command.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"},"2":{"patterns":[{"include":"source.shell"}]}},"match":"^\\\\s*(exec|x)\\\\s+(.*)$","name":"meta.commit-command.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"}},"match":"^\\\\s*(b(?:reak|))\\\\s*$","name":"meta.commit-command.git-rebase"}],"scopeName":"text.git-rebase","embeddedLangs":["shellscript"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file +import{t as e}from"./shellscript-BxUYTJbB.js";var t=Object.freeze(JSON.parse(`{"displayName":"Git Rebase Message","name":"git-rebase","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.git-rebase"}},"match":"^\\\\s*(#).*$\\\\n?","name":"comment.line.number-sign.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"},"2":{"name":"constant.sha.git-rebase"},"3":{"name":"meta.commit-message.git-rebase"}},"match":"^\\\\s*(pick|p|reword|r|edit|e|squash|s|fixup|f|drop|d)\\\\s+([0-9a-f]+)\\\\s+(.*)$","name":"meta.commit-command.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"},"2":{"patterns":[{"include":"source.shell"}]}},"match":"^\\\\s*(exec|x)\\\\s+(.*)$","name":"meta.commit-command.git-rebase"},{"captures":{"1":{"name":"support.function.git-rebase"}},"match":"^\\\\s*(b(?:reak|))\\\\s*$","name":"meta.commit-command.git-rebase"}],"scopeName":"text.git-rebase","embeddedLangs":["shellscript"]}`)),n=[...e,t];export{n as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/glimmer-js-S-qenfyd.js b/internal/webui/dist/assets/glimmer-js-D-2dfiTn.js similarity index 99% rename from internal/webui/dist/assets/glimmer-js-S-qenfyd.js rename to internal/webui/dist/assets/glimmer-js-D-2dfiTn.js index 971b38a..0fd3d4f 100644 --- a/internal/webui/dist/assets/glimmer-js-S-qenfyd.js +++ b/internal/webui/dist/assets/glimmer-js-D-2dfiTn.js @@ -1 +1 @@ -import{t as e}from"./javascript-cZ915vnh.js";import{t}from"./css-D_sUZuNy.js";import{t as n}from"./html-CQSL4Rts.js";import{t as r}from"./typescript-Dxzp_mdn.js";var i=Object.freeze(JSON.parse(`{"displayName":"Glimmer JS","injections":{"L:source.gjs -comment -(string -meta.embedded)":{"patterns":[{"include":"#main"}]}},"name":"glimmer-js","patterns":[{"include":"#main"},{"include":"source.js"}],"repository":{"as-keyword":{"match":"\\\\s\\\\b(as)\\\\b(?=\\\\s\\\\|)","name":"keyword.control","patterns":[]},"as-params":{"begin":"(?)","endCaptures":{"1":{"name":"punctuation.definition.tag"},"2":{"name":"punctuation.definition.tag"}},"name":"meta.tag.any.ember-handlebars","patterns":[{"include":"#tag-like-content"}]},"digit":{"captures":{"0":{"name":"constant.numeric"},"1":{"name":"constant.numeric"},"2":{"name":"constant.numeric"}},"match":"\\\\d*(\\\\.)?\\\\d+","patterns":[]},"entities":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.entity.html.ember-handlebars"},"3":{"name":"punctuation.definition.entity.html.ember-handlebars"}},"match":"(&)([0-9A-Za-z]+|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.html.ember-handlebars"},{"match":"&","name":"invalid.illegal.bad-ampersand.html.ember-handlebars"}]},"glimmer-argument":{"captures":{"1":{"name":"entity.other.attribute-name.ember-handlebars.argument","patterns":[{"match":"(@)","name":"markup.italic"}]},"2":{"name":"punctuation.separator.key-value.html.ember-handlebars"}},"match":"\\\\s(@[-.0-:A-Z_a-z]+)(=)?"},"glimmer-as-stuff":{"patterns":[{"include":"#as-keyword"},{"include":"#as-params"}]},"glimmer-block":{"begin":"(\\\\{\\\\{~?)([#/])(([$\\\\--9@-Z_a-z]+))","captures":{"1":{"name":"punctuation.definition.tag"},"2":{"name":"punctuation.definition.tag"},"3":{"name":"keyword.control","patterns":[{"include":"#glimmer-component-path"},{"match":"(/)+","name":"punctuation.definition.tag"},{"match":"(\\\\.)+","name":"punctuation.definition.tag"}]}},"end":"(~?}})","name":"entity.expression.ember-handlebars","patterns":[{"include":"#glimmer-as-stuff"},{"include":"#glimmer-supexp-content"}]},"glimmer-bools":{"captures":{"0":{"name":"keyword.operator"},"1":{"name":"keyword.operator"},"2":{"name":"string.regexp"},"3":{"name":"string.regexp"},"4":{"name":"keyword.operator"}},"match":"(\\\\{\\\\{~?)(true|false|null|undefined|\\\\d*(\\\\.)?\\\\d+)(~?}})","name":"entity.expression.ember-handlebars"},"glimmer-comment-block":{"begin":"\\\\{\\\\{!--","captures":{"0":{"name":"punctuation.definition.block.comment.glimmer"}},"end":"--}}","name":"comment.block.glimmer","patterns":[{"include":"#script"},{"include":"#attention"}]},"glimmer-comment-inline":{"begin":"\\\\{\\\\{!","captures":{"0":{"name":"punctuation.definition.block.comment.glimmer"}},"end":"}}","name":"comment.inline.glimmer","patterns":[{"include":"#script"},{"include":"#attention"}]},"glimmer-component-path":{"captures":{"1":{"name":"punctuation.definition.tag"}},"match":"(::|[$._])"},"glimmer-control-expression":{"begin":"(\\\\{\\\\{~?)(([-/-9A-Z_a-z]+)\\\\s)","captures":{"1":{"name":"keyword.operator"},"2":{"name":"keyword.operator"},"3":{"name":"keyword.control"}},"end":"(~?}})","name":"entity.expression.ember-handlebars","patterns":[{"include":"#glimmer-supexp-content"}]},"glimmer-else-block":{"captures":{"0":{"name":"punctuation.definition.tag"},"1":{"name":"punctuation.definition.tag"},"2":{"name":"keyword.control"},"3":{"name":"keyword.control","patterns":[{"include":"#glimmer-subexp"},{"include":"#string-single-quoted-handlebars"},{"include":"#string-double-quoted-handlebars"},{"include":"#boolean"},{"include":"#digit"},{"include":"#param"},{"include":"#glimmer-parameter-name"},{"include":"#glimmer-parameter-value"}]},"4":{"name":"punctuation.definition.tag"}},"match":"(\\\\{\\\\{~?)(else(?:\\\\s[a-z]+\\\\s|))([\\\\x08().0-9@-Za-z\\\\s]+)?(~?}})","name":"entity.expression.ember-handlebars"},"glimmer-expression":{"begin":"(\\\\{\\\\{~?)(([-().0-9@-Z_a-z\\\\s]+))","captures":{"1":{"name":"keyword.operator"},"2":{"name":"keyword.operator"},"3":{"name":"support.function","patterns":[{"match":"\\\\(+","name":"string.regexp"},{"match":"\\\\)+","name":"string.regexp"},{"match":"(\\\\.)+","name":"punctuation.definition.tag"},{"include":"#glimmer-supexp-content"}]}},"end":"(~?}})","name":"entity.expression.ember-handlebars","patterns":[{"include":"#glimmer-supexp-content"}]},"glimmer-expression-property":{"begin":"(\\\\{\\\\{~?)((@|this.)([-.0-9A-Z_a-z]+))","captures":{"1":{"name":"keyword.operator"},"2":{"name":"keyword.operator"},"3":{"name":"support.function","patterns":[{"match":"(@|this)","name":"variable.language"},{"match":"(\\\\.)+","name":"punctuation.definition.tag"}]},"4":{"name":"support.function","patterns":[{"match":"(\\\\.)+","name":"punctuation.definition.tag"}]}},"end":"(~?}})","name":"entity.expression.ember-handlebars","patterns":[{"include":"#glimmer-supexp-content"}]},"glimmer-parameter-name":{"captures":{"1":{"name":"variable.parameter.name.ember-handlebars"},"2":{"name":"punctuation.definition.expression.ember-handlebars"}},"match":"\\\\b([-0-9A-Z_a-z]+)(\\\\s?=)","patterns":[]},"glimmer-parameter-value":{"captures":{"1":{"name":"support.function","patterns":[{"match":"(\\\\.)+","name":"punctuation.definition.tag"}]}},"match":"\\\\b([-.0-:A-Z_a-z]+)\\\\b(?!=)","patterns":[]},"glimmer-special-block":{"captures":{"0":{"name":"keyword.operator"},"1":{"name":"keyword.operator"},"2":{"name":"keyword.control"},"3":{"name":"keyword.operator"}},"match":"(\\\\{\\\\{~?)(yield|outlet)(~?}})","name":"entity.expression.ember-handlebars"},"glimmer-subexp":{"begin":"(\\\\()([-.0-9@-Za-z]+)","captures":{"1":{"name":"keyword.other"},"2":{"name":"keyword.control"}},"end":"(\\\\))","name":"entity.subexpression.ember-handlebars","patterns":[{"include":"#glimmer-supexp-content"}]},"glimmer-supexp-content":{"patterns":[{"include":"#glimmer-subexp"},{"include":"#string-single-quoted-handlebars"},{"include":"#string-double-quoted-handlebars"},{"include":"#boolean"},{"include":"#digit"},{"include":"#param"},{"include":"#glimmer-parameter-name"},{"include":"#glimmer-parameter-value"}]},"glimmer-unescaped-expression":{"begin":"\\\\{\\\\{\\\\{","captures":{"0":{"name":"keyword.operator"}},"end":"}}}","name":"entity.unescaped.expression.ember-handlebars","patterns":[{"include":"#string-single-quoted-handlebars"},{"include":"#string-double-quoted-handlebars"},{"include":"#glimmer-subexp"},{"include":"#param"}]},"html-attribute":{"captures":{"1":{"name":"entity.other.attribute-name.ember-handlebars","patterns":[{"match":"(\\\\.\\\\.\\\\.attributes)","name":"markup.bold"}]},"2":{"name":"punctuation.separator.key-value.html.ember-handlebars"}},"match":"\\\\s([-.0-:A-Z_a-z]+)(=)?"},"html-comment":{"begin":"","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":{"patterns":[{"include":"#xml-processing"},{"include":"#comment"},{"include":"#doctype"},{"include":"#cdata"},{"include":"#tags-valid"},{"include":"#entities"}]},"doctype":{"begin":"","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"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)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([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|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([24])|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([lr])|p(s|c([au]p)|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((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|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((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|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((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)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([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|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([34]))?|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((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|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([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?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([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|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|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|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([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|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((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?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([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|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((?:lti|)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|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|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([abc]))?|in(dot|v([abc])|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([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|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((?:Slant|)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((?:n|ck)Space)|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)?|[fm])?|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((?:Double|)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([ou])|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(d??il)|aron)|Barr|t(hree|imes|ri([ef]|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([de]|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([du])|e)|ac([ek]))|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([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|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([ef]))?)|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((?:Right|Down|Up|Left)Arrow)|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([ry])|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((?:lef|righ)tarrow))|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((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|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((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|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([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|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(n?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]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.html"},{"match":"&(?=[0-9A-Za-z]+;)","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)()","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([bp]scriptshift)|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":"([^\\\\x00- \\"'/<=>\\\\x7F-\\\\x{9F}﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿\\\\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"}},"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)()|(/>)|(?=)\\\\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)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\s|/?>)(([^\\"'>]|\\"[^\\"]*\\"|'[^']*')*)(/>)","name":"meta.element.inline.math.$2.html"},{"begin":"(?i)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()","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([hv])|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([12]|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS((?:cript|tyle)Type)|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([XY])?|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([XYZ]))?|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-([xy])|adv-y)))|alues)|k([123]|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([XY]|errerPolicy)|l)|adius|x)?|g([12]|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x([12]|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk((?:Content|)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":"([^\\\\x00- \\"'/<=>\\\\x7F-\\\\x{9F}﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿\\\\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"}},"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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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":"(\\\\s]*))(?)","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-ignored-vscode"},"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":"(?=)","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-ignored-vscode"}},"patterns":[{"begin":"\\\\G","end":"(?=|type(?=[=\\\\s])(?!\\\\s*=\\\\s*(''|\\"\\"|([\\"']?)(text/(javascript(1\\\\.[0-5])?|x-javascript|jscript|livescript|(x-)?ecmascript|babel)|application/((?:(x-)?jav|(x-)?ecm)ascript)|module)[\\"'>\\\\s]))))","name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i:(?=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":"(?=)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?!\\\\G)","end":"(?=)","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)()","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)()","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)()","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)()","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)()","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)()","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)()","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)()","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-9A-Z_a-z·À-ÖØ-öø-ͽͿ-῿‌‍‿⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-\\\\x{EFFFF}]*-[-.0-9A-Z_a-z·À-ÖØ-öø-ͽͿ-῿‌‍‿⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-\\\\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":"()","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","embeddedLangs":["javascript","css"]}`)),a=[...t,...n,i];export{r as n,a as t}; \ No newline at end of file +import{t as e}from"./index-Bwvh_IHd.js";import{t}from"./javascript-CR5GavSE.js";import{t as n}from"./css-EYEy3Xlb.js";var r=e({default:()=>a}),i=Object.freeze(JSON.parse(`{"displayName":"HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"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"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"style(?![-:\\\\w])","beginCaptures":{"0":{"name":"entity.other.attribute-name.html"}},"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((?:n|ff)line)|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((?:|meta)data)))?|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"}},"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"}},"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"}},"end":"(?=\\\\s*+[^=\\\\s])","name":"meta.attribute.$1.html","patterns":[{"include":"#attribute-interior"}]},{"begin":"([^\\\\x00- \\"'/<=>\\\\x7F-\\\\x{9F}﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿\\\\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"}},"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":"","endCaptures":{"0":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.cdata.html"},"comment":{"begin":"","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":{"patterns":[{"include":"#xml-processing"},{"include":"#comment"},{"include":"#doctype"},{"include":"#cdata"},{"include":"#tags-valid"},{"include":"#entities"}]},"doctype":{"begin":"","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"}},"match":"(&)(?=[A-Za-z])((a(s(ymp(eq)?|cr|t)|n(d(slope|[dv]|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a([a-h]))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|[Ee]|acir)?|elig|f(r)?|w((?:con|)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([DUdu])?|times|H([DUdu])?|d([LRlr])|u([LRlr])|plus|D([LRlr])|v([HLRhlr])?|U([LRlr])|V([HLRhlr])?|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([24])|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([lr])|p(s|c([au]p)|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((?:con|)int)|lubs(uit)?|a(cute|p(s|c([au]p)|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((?:Double|)Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))|(d(s(c([ry])|trok|ol)|har([lr])|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((?:Down|)Arrow)|VerticalBar|L(ong(RightArrow|Left((?:Right|)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([ah])|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(D??ot)|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([34]))?|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((?:|Very)SmallSquare)|acr)))|(f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(l??ig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1([2-68])|78|2([35])|3([458])|45|5([68])))))|F(scr|cy|illed((?:|Very)SmallSquare)|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([el])?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(q?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([Eaj])?|a(cute|p|mma(d)?)|rave|g(g)?|breve))|(h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok((?:lef|righ)tarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks([ew]arow)|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|[Ev])?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(i??nt)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f([fr])|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([eg])?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(d??il)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i([ef])?|Par))?|Har|o(ng(left((?:|right)arrow)|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((?:d|us)har))|ur((?:ds|u)har)|jcy|par(lt)?|e(s(s(sim|dot|eq(q?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([du])|e)|ac([ek]))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left((?:|right)arrow)|rightarrow|Left((?:Right|)Arrow))|pf|wer((?:Righ|Lef)tArrow))|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((?:lti|)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|[er])?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|[Ee])?|b(set(eq(q)?)?|[Ee])?)|par|qsu([bp]e)|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([abc]))?|in(dot|v([abc])|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([et]))|fr|w(near|ar(hk|r(ow)?)|Arr)|V([Dd]ash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft((?:|right)arrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr([cw])?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft((?:|right)arrow)|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((?:Slant|)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((?:n|ck)Space)|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)?|[fm])?|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((?:Double|)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([ou])|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(d??il)|aron)|Barr|t(hree|imes|ri([ef]|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([de]|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([du])|e)|ac([ek]))|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([fv])?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot([be])?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n([Ee])|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u([bp])|et(neq(q)?|eq(q)?)?)|n([Ee])|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([ef]))?)|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((?:Right|Down|Up|Left)Arrow)|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([ry])|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((?:lef|righ)tarrow))|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((?:n|ck)Space)|e(ta|refore))|c(y|edil|aron)|S(H??cy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a([bu])|ripleDot))|(u(scr|h(ar([lr])|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((?:Righ|Lef)tArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))|(v(s(cr|u(pn([Ee])|bn([Ee])))|nsu([bp])|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([Aa]rr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l([Aa]rr)|r([Aa]rr)|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(n?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]\\\\h+(;)","name":"constant.character.entity.numeric.hexadecimal.html"},{"match":"&(?=[0-9A-Za-z]+;)","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)()","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([bp]scriptshift)|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":"([^\\\\x00- \\"'/<=>\\\\x7F-\\\\x{9F}﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿\\\\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"}},"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)()|(/>)|(?=)\\\\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)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\s|/?>)(([^\\"'>]|\\"[^\\"]*\\"|'[^']*')*)(/>)","name":"meta.element.inline.math.$2.html"},{"begin":"(?i)(<)(m(?:[inos]|space|text|aligngroup|alignmark))(?=\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()","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([hv])|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([12]|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS((?:cript|tyle)Type)|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([XY])?|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([XYZ]))?|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-([xy])|adv-y)))|alues)|k([123]|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([XY]|errerPolicy)|l)|adius|x)?|g([12]|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x([12]|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk((?:Content|)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":"([^\\\\x00- \\"'/<=>\\\\x7F-\\\\x{9F}﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿\\\\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"}},"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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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)()|(/>)|(?=)\\\\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":"(\\\\s]*))(?)","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-ignored-vscode"},"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":"(?=)","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-ignored-vscode"}},"patterns":[{"begin":"\\\\G","end":"(?=|type(?=[=\\\\s])(?!\\\\s*=\\\\s*(''|\\"\\"|([\\"']?)(text/(javascript(1\\\\.[0-5])?|x-javascript|jscript|livescript|(x-)?ecmascript|babel)|application/((?:(x-)?jav|(x-)?ecm)ascript)|module)[\\"'>\\\\s]))))","name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?i:(?=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":"(?=)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.metadata.script.start.html","patterns":[{"include":"#attribute"}]},{"begin":"(?!\\\\G)","end":"(?=)","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)()","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)()","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)()","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)()","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)()","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)()","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)()","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)()","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-9A-Z_a-z·À-ÖØ-öø-ͽͿ-῿‌‍‿⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-\\\\x{EFFFF}]*-[-.0-9A-Z_a-z·À-ÖØ-öø-ͽͿ-῿‌‍‿⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-\\\\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":"()","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","embeddedLangs":["javascript","css"]}`)),a=[...t,...n,i];export{r as n,a as t}; \ No newline at end of file diff --git a/internal/webui/dist/assets/http-DiFBXl1d.js b/internal/webui/dist/assets/http-B2PGq0eK.js similarity index 95% rename from internal/webui/dist/assets/http-DiFBXl1d.js rename to internal/webui/dist/assets/http-B2PGq0eK.js index f87a872..9594768 100644 --- a/internal/webui/dist/assets/http-DiFBXl1d.js +++ b/internal/webui/dist/assets/http-B2PGq0eK.js @@ -1 +1 @@ -import{t as e}from"./xml-BOKYiS6A.js";import{t}from"./json-xe-_kEqr.js";import{t as n}from"./shellscript-CE8jMVsJ.js";import{t as r}from"./graphql-hCMHrW-c.js";var i=Object.freeze(JSON.parse(`{"displayName":"HTTP","fileTypes":["http","rest"],"name":"http","patterns":[{"begin":"^\\\\s*(?=curl)","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.curl","patterns":[{"include":"source.shell"}]},{"begin":"\\\\s*(?=(\\\\[|\\\\{[^{]))","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.json","patterns":[{"include":"source.json"}]},{"begin":"^\\\\s*(?=<\\\\S)","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.xml","patterns":[{"include":"text.xml"}]},{"begin":"\\\\s*(?=(query|mutation))","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.graphql","patterns":[{"include":"source.graphql"}]},{"begin":"\\\\s*(?=(query|mutation))","end":"^\\\\{\\\\s*$","name":"http.request.body.graphql","patterns":[{"include":"source.graphql"}]},{"include":"#metadata"},{"include":"#comments"},{"captures":{"1":{"name":"keyword.other.http"},"2":{"name":"variable.other.http"},"3":{"name":"string.other.http"}},"match":"^\\\\s*(@)([^=\\\\s]+)\\\\s*=\\\\s*(.*?)\\\\s*$","name":"http.filevariable"},{"captures":{"1":{"name":"keyword.operator.http"},"2":{"name":"variable.other.http"},"3":{"name":"string.other.http"}},"match":"^\\\\s*([\\\\&?])([^=\\\\s]+)=(.*)$","name":"http.query"},{"captures":{"1":{"name":"entity.name.tag.http"},"2":{"name":"keyword.other.http"},"3":{"name":"string.other.http"}},"match":"^([-\\\\w]+)\\\\s*(:)\\\\s*([^/].*?)\\\\s*$","name":"http.headers"},{"include":"#request-line"},{"include":"#response-line"}],"repository":{"comments":{"patterns":[{"match":"^\\\\s*#+.*$","name":"comment.line.sharp.http"},{"match":"^\\\\s*/{2,}.*$","name":"comment.line.double-slash.http"}]},"metadata":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"entity.name.type.http"}},"match":"^\\\\s*#+\\\\s+((@)name)\\\\s+([^.\\\\s]+)$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"entity.name.type.http"}},"match":"^\\\\s*/{2,}\\\\s+((@)name)\\\\s+([^.\\\\s]+)$","name":"comment.line.double-slash.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"}},"match":"^\\\\s*#+\\\\s+((@)note)\\\\s*$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"}},"match":"^\\\\s*/{2,}\\\\s+((@)note)\\\\s*$","name":"comment.line.double-slash.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"variable.other.http"},"4":{"name":"string.other.http"}},"match":"^\\\\s*#+\\\\s+((@)prompt)\\\\s+(\\\\S+)(?:\\\\s+(.*))?\\\\s*$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"variable.other.http"},"4":{"name":"string.other.http"}},"match":"^\\\\s*/{2,}\\\\s+((@)prompt)\\\\s+(\\\\S+)(?:\\\\s+(.*))?\\\\s*$","name":"comment.line.double-slash.http"}]},"protocol":{"patterns":[{"captures":{"1":{"name":"keyword.other.http"},"2":{"name":"constant.numeric.http"}},"match":"(HTTP)/(\\\\d+.\\\\d+)","name":"http.version"}]},"request-line":{"captures":{"1":{"name":"keyword.control.http"},"2":{"name":"const.language.http"},"3":{"patterns":[{"include":"#protocol"}]}},"match":"(?i)^(get|post|put|delete|patch|head|options|connect|trace|lock|unlock|propfind|proppatch|copy|move|mkcol|mkcalendar|acl|search)\\\\s+\\\\s*(.+?)(?:\\\\s+(HTTP/\\\\S+))?$","name":"http.requestline"},"response-line":{"captures":{"1":{"patterns":[{"include":"#protocol"}]},"2":{"name":"constant.numeric.http"},"3":{"name":"string.other.http"}},"match":"(?i)^\\\\s*(HTTP/\\\\S+)\\\\s([1-5][0-9][0-9])\\\\s(.*)$","name":"http.responseLine"}},"scopeName":"source.http","embeddedLangs":["shellscript","json","xml","graphql"]}`)),a=[...n,...t,...e,...r,i];export{a as default}; \ No newline at end of file +import{t as e}from"./xml-DpeacbYS.js";import{t}from"./json-I28f8KUm.js";import{t as n}from"./shellscript-BxUYTJbB.js";import{t as r}from"./graphql-ClvnBbMm.js";var i=Object.freeze(JSON.parse(`{"displayName":"HTTP","fileTypes":["http","rest"],"name":"http","patterns":[{"begin":"^\\\\s*(?=curl)","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.curl","patterns":[{"include":"source.shell"}]},{"begin":"\\\\s*(?=(\\\\[|\\\\{[^{]))","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.json","patterns":[{"include":"source.json"}]},{"begin":"^\\\\s*(?=<\\\\S)","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.xml","patterns":[{"include":"text.xml"}]},{"begin":"\\\\s*(?=(query|mutation))","end":"^\\\\s*(#{3,}.*?)?\\\\s*$","endCaptures":{"0":{"name":"comment.line.sharp.http"}},"name":"http.request.body.graphql","patterns":[{"include":"source.graphql"}]},{"begin":"\\\\s*(?=(query|mutation))","end":"^\\\\{\\\\s*$","name":"http.request.body.graphql","patterns":[{"include":"source.graphql"}]},{"include":"#metadata"},{"include":"#comments"},{"captures":{"1":{"name":"keyword.other.http"},"2":{"name":"variable.other.http"},"3":{"name":"string.other.http"}},"match":"^\\\\s*(@)([^=\\\\s]+)\\\\s*=\\\\s*(.*?)\\\\s*$","name":"http.filevariable"},{"captures":{"1":{"name":"keyword.operator.http"},"2":{"name":"variable.other.http"},"3":{"name":"string.other.http"}},"match":"^\\\\s*([\\\\&?])([^=\\\\s]+)=(.*)$","name":"http.query"},{"captures":{"1":{"name":"entity.name.tag.http"},"2":{"name":"keyword.other.http"},"3":{"name":"string.other.http"}},"match":"^([-\\\\w]+)\\\\s*(:)\\\\s*([^/].*?)\\\\s*$","name":"http.headers"},{"include":"#request-line"},{"include":"#response-line"}],"repository":{"comments":{"patterns":[{"match":"^\\\\s*#+.*$","name":"comment.line.sharp.http"},{"match":"^\\\\s*/{2,}.*$","name":"comment.line.double-slash.http"}]},"metadata":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"entity.name.type.http"}},"match":"^\\\\s*#+\\\\s+((@)name)\\\\s+([^.\\\\s]+)$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"entity.name.type.http"}},"match":"^\\\\s*/{2,}\\\\s+((@)name)\\\\s+([^.\\\\s]+)$","name":"comment.line.double-slash.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"}},"match":"^\\\\s*#+\\\\s+((@)note)\\\\s*$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"}},"match":"^\\\\s*/{2,}\\\\s+((@)note)\\\\s*$","name":"comment.line.double-slash.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"variable.other.http"},"4":{"name":"string.other.http"}},"match":"^\\\\s*#+\\\\s+((@)prompt)\\\\s+(\\\\S+)(?:\\\\s+(.*))?\\\\s*$","name":"comment.line.sharp.http"},{"captures":{"1":{"name":"entity.other.attribute-name"},"2":{"name":"punctuation.definition.block.tag.metadata"},"3":{"name":"variable.other.http"},"4":{"name":"string.other.http"}},"match":"^\\\\s*/{2,}\\\\s+((@)prompt)\\\\s+(\\\\S+)(?:\\\\s+(.*))?\\\\s*$","name":"comment.line.double-slash.http"}]},"protocol":{"patterns":[{"captures":{"1":{"name":"keyword.other.http"},"2":{"name":"constant.numeric.http"}},"match":"(HTTP)/(\\\\d+.\\\\d+)","name":"http.version"}]},"request-line":{"captures":{"1":{"name":"keyword.control.http"},"2":{"name":"const.language.http"},"3":{"patterns":[{"include":"#protocol"}]}},"match":"(?i)^(get|post|put|delete|patch|head|options|connect|trace|lock|unlock|propfind|proppatch|copy|move|mkcol|mkcalendar|acl|search)\\\\s+\\\\s*(.+?)(?:\\\\s+(HTTP/\\\\S+))?$","name":"http.requestline"},"response-line":{"captures":{"1":{"patterns":[{"include":"#protocol"}]},"2":{"name":"constant.numeric.http"},"3":{"name":"string.other.http"}},"match":"(?i)^\\\\s*(HTTP/\\\\S+)\\\\s([1-5][0-9][0-9])\\\\s(.*)$","name":"http.responseLine"}},"scopeName":"source.http","embeddedLangs":["shellscript","json","xml","graphql"]}`)),a=[...n,...t,...e,...r,i];export{a as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/hurl-DTMKKsTz.js b/internal/webui/dist/assets/hurl-CqQcMAR7.js similarity index 96% rename from internal/webui/dist/assets/hurl-DTMKKsTz.js rename to internal/webui/dist/assets/hurl-CqQcMAR7.js index ce9bdfa..d697287 100644 --- a/internal/webui/dist/assets/hurl-DTMKKsTz.js +++ b/internal/webui/dist/assets/hurl-CqQcMAR7.js @@ -1 +1 @@ -import{t as e}from"./xml-BOKYiS6A.js";import t from"./csv-Dx-8-gkx.js";import{t as n}from"./graphql-hCMHrW-c.js";var r=Object.freeze(JSON.parse('{"displayName":"Hurl","name":"hurl","patterns":[{"include":"#comments"},{"include":"#sections"},{"include":"#http"},{"include":"#strings"},{"include":"#body"},{"include":"#request"}],"repository":{"body":{"patterns":[{"begin":"```graphql(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.graphql.hurl","patterns":[{"include":"source.graphql"}]},{"begin":"```xml(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.xml.hurl","patterns":[{"include":"text.xml"}]},{"begin":"```json(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.json.hurl","patterns":[{"include":"text.json"}]},{"begin":"```csv(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.csv.hurl","patterns":[{"include":"text.csv"}]},{"begin":"```hex(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"contentName":"text.plain","end":"```$","name":"string.quoted.multiline.hurl"},{"begin":"```base64(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"contentName":"text.plain","end":"```$","name":"string.quoted.multiline.hurl"},{"begin":"```([^,]*)(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"},"2":{"name":"support.type"}},"end":"```$","name":"string.quoted.multiline.hurl"},{"match":"`(\\\\\\\\.|[^\\\\\\\\`])*`","name":"string.quoted.backtick.hurl","patterns":[{"include":"#escapes"}]},{"begin":"\\\\b(base64|hex),","beginCaptures":{"1":{"name":"support.function.name"}},"contentName":"text.plain","end":";","endCaptures":{"0":{"name":"support.function"}},"name":"support.function","patterns":[{"include":"#placeholders"}]}]},"comments":{"patterns":[{"match":"#.*$","name":"comment.line.number-sign.hurl"}]},"escapes":{"patterns":[{"match":"\\\\\\\\[\\"#\\\\\\\\`bnrtu]","name":"constant.character.escape.hurl"}]},"http":{"patterns":[{"captures":{"1":{"name":"constant.language.version.hurl"},"3":{"name":"constant.numeric.status.hurl"}},"match":"\\\\b(HTTP(/(?:1\\\\.0|1\\\\.1|2))?)([\\\\t ]+([0-9]{3}))?\\\\b"}]},"placeholders":{"patterns":[{"begin":"(\\\\{\\\\{)\\\\s*","beginCaptures":{"1":{"name":"string.interpolated.hurl"}},"contentName":"variable.other.hurl","end":"\\\\s*(}})","endCaptures":{"1":{"name":"string.interpolated.hurl"}}}]},"request":{"patterns":[{"match":"\\\\b(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|TRACE|CONNECT)\\\\b","name":"keyword.control.method.hurl"},{"captures":{"1":{"name":"string.unquoted.url.hurl","patterns":[{"include":"#placeholders"}]}},"match":"(https?://[^\\\\t\\\\n]+)\\\\s*$","name":"string.unquoted.url.hurl"},{"begin":"^([-0-9A-Za-z]+)(:)\\\\s*","beginCaptures":{"1":{"name":"entity.name.tag.header.hurl"},"2":{"name":"punctuation.separator.key-value.hurl"}},"contentName":"string.unquoted.hurl","end":"$","name":"entity.name.tag.header.hurl","patterns":[{"include":"#placeholders"}]}]},"sections":{"patterns":[{"match":"^\\\\s*\\\\[(QueryStringParams|Query|FormParams|Form|MultipartFormData|Multipart|Cookies|Captures|Asserts|BasicAuth|Options)]","name":"entity.name.section.hurl"}]},"strings":{"patterns":[{"match":"\\"(\\\\\\\\.|[^\\"\\\\\\\\])*\\"","name":"string.quoted.double.hurl","patterns":[{"include":"#escapes"}]}]}},"scopeName":"source.hurl","embeddedLangs":["graphql","xml","csv"]}')),i=[...n,...e,...t,r];export{i as default}; \ No newline at end of file +import{t as e}from"./xml-DpeacbYS.js";import t from"./csv-Dx-8-gkx.js";import{t as n}from"./graphql-ClvnBbMm.js";var r=Object.freeze(JSON.parse('{"displayName":"Hurl","name":"hurl","patterns":[{"include":"#comments"},{"include":"#sections"},{"include":"#http"},{"include":"#strings"},{"include":"#body"},{"include":"#request"}],"repository":{"body":{"patterns":[{"begin":"```graphql(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.graphql.hurl","patterns":[{"include":"source.graphql"}]},{"begin":"```xml(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.xml.hurl","patterns":[{"include":"text.xml"}]},{"begin":"```json(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.json.hurl","patterns":[{"include":"text.json"}]},{"begin":"```csv(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"end":"```$","name":"meta.embedded.block.csv.hurl","patterns":[{"include":"text.csv"}]},{"begin":"```hex(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"contentName":"text.plain","end":"```$","name":"string.quoted.multiline.hurl"},{"begin":"```base64(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"}},"contentName":"text.plain","end":"```$","name":"string.quoted.multiline.hurl"},{"begin":"```([^,]*)(,\\\\w+)*$","beginCaptures":{"1":{"name":"support.type"},"2":{"name":"support.type"}},"end":"```$","name":"string.quoted.multiline.hurl"},{"match":"`(\\\\\\\\.|[^\\\\\\\\`])*`","name":"string.quoted.backtick.hurl","patterns":[{"include":"#escapes"}]},{"begin":"\\\\b(base64|hex),","beginCaptures":{"1":{"name":"support.function.name"}},"contentName":"text.plain","end":";","endCaptures":{"0":{"name":"support.function"}},"name":"support.function","patterns":[{"include":"#placeholders"}]}]},"comments":{"patterns":[{"match":"#.*$","name":"comment.line.number-sign.hurl"}]},"escapes":{"patterns":[{"match":"\\\\\\\\[\\"#\\\\\\\\`bnrtu]","name":"constant.character.escape.hurl"}]},"http":{"patterns":[{"captures":{"1":{"name":"constant.language.version.hurl"},"3":{"name":"constant.numeric.status.hurl"}},"match":"\\\\b(HTTP(/(?:1\\\\.0|1\\\\.1|2))?)([\\\\t ]+([0-9]{3}))?\\\\b"}]},"placeholders":{"patterns":[{"begin":"(\\\\{\\\\{)\\\\s*","beginCaptures":{"1":{"name":"string.interpolated.hurl"}},"contentName":"variable.other.hurl","end":"\\\\s*(}})","endCaptures":{"1":{"name":"string.interpolated.hurl"}}}]},"request":{"patterns":[{"match":"\\\\b(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|TRACE|CONNECT)\\\\b","name":"keyword.control.method.hurl"},{"captures":{"1":{"name":"string.unquoted.url.hurl","patterns":[{"include":"#placeholders"}]}},"match":"(https?://[^\\\\t\\\\n]+)\\\\s*$","name":"string.unquoted.url.hurl"},{"begin":"^([-0-9A-Za-z]+)(:)\\\\s*","beginCaptures":{"1":{"name":"entity.name.tag.header.hurl"},"2":{"name":"punctuation.separator.key-value.hurl"}},"contentName":"string.unquoted.hurl","end":"$","name":"entity.name.tag.header.hurl","patterns":[{"include":"#placeholders"}]}]},"sections":{"patterns":[{"match":"^\\\\s*\\\\[(QueryStringParams|Query|FormParams|Form|MultipartFormData|Multipart|Cookies|Captures|Asserts|BasicAuth|Options)]","name":"entity.name.section.hurl"}]},"strings":{"patterns":[{"match":"\\"(\\\\\\\\.|[^\\"\\\\\\\\])*\\"","name":"string.quoted.double.hurl","patterns":[{"include":"#escapes"}]}]}},"scopeName":"source.hurl","embeddedLangs":["graphql","xml","csv"]}')),i=[...n,...e,...t,r];export{i as default}; \ No newline at end of file diff --git a/internal/webui/dist/assets/index-B2lg52VZ.js b/internal/webui/dist/assets/index-Bwvh_IHd.js similarity index 86% rename from internal/webui/dist/assets/index-B2lg52VZ.js rename to internal/webui/dist/assets/index-Bwvh_IHd.js index 4560ed5..1fd10e2 100644 --- a/internal/webui/dist/assets/index-B2lg52VZ.js +++ b/internal/webui/dist/assets/index-Bwvh_IHd.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/angular-html-DI9Gnh-6.js","assets/html-CQSL4Rts.js","assets/javascript-cZ915vnh.js","assets/css-D_sUZuNy.js","assets/angular-ts-D0oJNn_5.js","assets/scss-B8r4RXCT.js","assets/apl-BovzKLwL.js","assets/xml-BOKYiS6A.js","assets/java-BwygYcjv.js","assets/json-xe-_kEqr.js","assets/astro-DPheOMp2.js","assets/typescript-Dxzp_mdn.js","assets/postcss-BXeXVLqQ.js","assets/tsx-C7U7cVa6.js","assets/blade-MWnOITg0.js","assets/html-derivative-Xrtwll_i.js","assets/sql-ClIVuo9t.js","assets/bsl-_VjlB9mv.js","assets/sdbl-bTVj8UrX.js","assets/cairo-DLTphjLi.js","assets/python-gzcpVVnB.js","assets/chapel-CWsTSfb2.js","assets/c-DLL5koqn.js","assets/cobol-DBppYo7Q.js","assets/coffee-w6pACU0m.js","assets/cpp-BOsVglB-.js","assets/regexp-BtVX3oxr.js","assets/glsl-DBaA16lM.js","assets/crystal-CdIIvivK.js","assets/shellscript-CE8jMVsJ.js","assets/edge-BbDvonD4.js","assets/elixir-Bf8isSWq.js","assets/elm-DZ2GG1O0.js","assets/erb-C-JhO4M6.js","assets/ruby-CxwDFG51.js","assets/haml-CJTw6KCx.js","assets/graphql-hCMHrW-c.js","assets/jsx-BaQikP4I.js","assets/lua-BMwKRpUS.js","assets/yaml-BmrUBDE7.js","assets/erlang-Cphh6RMH.js","assets/markdown-BYOwaDjH.js","assets/fortran-fixed-form-DEKoE2YW.js","assets/fortran-free-form-CYNrtFtB.js","assets/fsharp-D13ZGOAj.js","assets/gdresource-xMC7jr7x.js","assets/gdshader-CBce3t8t.js","assets/gdscript-DYvRD3hg.js","assets/git-commit-BSykSTBG.js","assets/diff-woXpYk--.js","assets/git-rebase-B734D6L0.js","assets/glimmer-js-S-qenfyd.js","assets/glimmer-ts-3RXpKVtX.js","assets/hack-1-RmdN54.js","assets/handlebars-BjfB5oJv.js","assets/http-DiFBXl1d.js","assets/hurl-DTMKKsTz.js","assets/csv-Dx-8-gkx.js","assets/hxml-Dcm88srW.js","assets/haxe-C8oCnwJJ.js","assets/jinja-BZ56G71o.js","assets/jison-CrMHkA5T.js","assets/julia-DOQr_yfw.js","assets/r-Cq3JeZGS.js","assets/just-DJjQ6wca.js","assets/perl-BOSN-lJd.js","assets/latex-BR2yZEm8.js","assets/tex-BZ8j5Ki8.js","assets/liquid-BW4tFZT5.js","assets/marko-_k-1VAV1.js","assets/less-DVTAwKKz.js","assets/mdc-Bpi8gJ8w.js","assets/nextflow-BJtWHP5T.js","assets/nextflow-groovy-DJMQeKeT.js","assets/nginx-Bqz6odJ0.js","assets/nim-DUfzkSYY.js","assets/org-hCFMncj0.js","assets/clojure-DqKBuwfJ.js","assets/csharp-oqKa8noW.js","assets/dart-CnvKMtbv.js","assets/docker-IyjqRm3v.js","assets/go-rLFTqkRN.js","assets/groovy-CacY0gHj.js","assets/ini-B5eOa1yu.js","assets/make-Dixweg8N.js","assets/objective-c-D1A_Heim.js","assets/ocaml-O90oeIOV.js","assets/php-BcxfUlb0.js","assets/vb-DOwzaHZ0.js","assets/raku-B3gFvitq.js","assets/rust-Cfkwpbl8.js","assets/scala-BiFt_7mu.js","assets/zig-CMLA9XwU.js","assets/xsl-BpdVMO9A.js","assets/pug-CCacKbEP.js","assets/qml-BJ3i-i8V.js","assets/razor-D4KIaiN4.js","assets/rst-yziTZ18z.js","assets/cmake-Bj61d0ZC.js","assets/sas-DwRcM5a3.js","assets/shaderlab-TOUzSsQk.js","assets/hlsl-Cvrh5tZx.js","assets/shellsession-CxmlJTEF.js","assets/soy-BzTEIhUJ.js","assets/sparql-D_iOobhT.js","assets/turtle-ByJddavk.js","assets/stata-BB9tap1y.js","assets/surrealql-CI8AgyIv.js","assets/svelte-D1eIrOoP.js","assets/templ-Bw4hFTpq.js","assets/ts-tags-CJWRyznG.js","assets/twig-ChWsK9Nr.js","assets/typst-DsfTC6LO.js","assets/bat-qdxAdBWQ.js","assets/bibtex-Ci_nEsc7.js","assets/jsonc-CYpm1nAK.js","assets/log-BNLmms1o.js","assets/powershell-CCSX75yM.js","assets/swift-CyEgAFGc.js","assets/system-verilog-Dh5ihWbf.js","assets/verilog-B2gwz-sJ.js","assets/vue-tc09nslQ.js","assets/vue-html-DNMTIoNH.js","assets/vue-vine-CJXT0Vnu.js","assets/stylus-B6D30XZt.js"])))=>i.map(i=>d[i]); -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=l(d(),1);function p(e){let t=(0,f.useRef)(e);return(0,f.useInsertionEffect)(()=>void(t.current=e)),(0,f.useCallback)((...e)=>t.current(...e),[])}var m=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),h=o(((e,t)=>{t.exports=m()}))(),g=(0,f.createContext)(void 0);function _(){return(0,f.useContext)(g)}var v={position:`absolute`,top:0,bottom:0,textAlign:`center`,whiteSpace:`normal`,touchAction:`none`},y={display:`contents`},b=`diffs-container`,x=(()=>{try{return!1}catch{return!1}})(),S=/(?=^From [a-f0-9]+ .+$)/m,C=/(?=^diff --git)/gm,w=/(?<=\n)/,T=/^(---|\+\+\+)\s+([^\t\r\n]+)/,E=/^(---|\+\+\+)\s+[ab]\/([^\t\r\n]+)/,D=/^diff --git (?:"a\/(.+?)"|a\/(.+?)) (?:"b\/(.+?)"|b\/(.+?))$/,O=/^index ([0-9a-f]+)\.\.([0-9a-f]+)(?: (\d+))?$/i,k=`header-prefix`,A=`header-filename-suffix`,j=`header-metadata`,M=`header-custom`,N={dark:`pierre-dark`,light:`pierre-light`},P=`data-theme-css`,F=`data-unsafe-css`,I=`data-diffs-scrollbar-measure`,L=`data-diffs-code-view-header`,R=`data-diffs-code-view-footer`,z=`--diffs-scrollbar-gutter-measured`,B=1e5,V={hunkLineCount:50,lineHeight:20,diffHeaderHeight:44,spacing:8},H={...V,hunkLineCount:1},ee={paddingTop:8,paddingBottom:8,gap:8},te={omega:.015,positionEpsilon:.5,velocityEpsilon:.05},ne=Object.freeze({fromStart:0,fromEnd:0}),U={startingLine:0,totalLines:1/0,bufferBefore:0,bufferAfter:0},re={startingLine:0,totalLines:0,bufferBefore:0,bufferAfter:0};function ie(e){return`annotation-${`side`in e?`${e.side}-`:``}${e.lineNumber}`}function ae({hunkIndex:e,lineIndex:t,conflictIndex:n}){return`merge-conflict-action-${e}-${t}-${n}`}function oe(e,t){return e-(t===0?0:1)}function se(e,t){return oe(e,t)+t}function ce(e,t){let n=t.hunks[e.hunkIndex];if(n!=null)return{hunkIndex:e.hunkIndex,lineIndex:le(n,e.startContentIndex)}}function le(e,t){let n=e.unifiedLineStart;for(let r=0;r(0,h.jsx)(`div`,{slot:f(e),children:o(e)},t)),t!=null&&c!=null&&d!=null&&t.map(t=>{if(t==null)return;let n=de(t,e);return(0,h.jsx)(`div`,{slot:n,style:y,children:c(t,d)},n)}),s!=null&&(0,h.jsx)(`div`,{slot:`gutter-utility-slot`,style:v,children:s(u)})]})}function de(e,t){let n=ce(e,t);return n==null?void 0:ae({hunkIndex:n.hunkIndex,lineIndex:n.lineIndex,conflictIndex:e.conflictIndex})}function fe({file:e,renderCustomHeader:t,renderHeaderPrefix:n,renderHeaderFilenameSuffix:r,renderHeaderMetadata:i,renderAnnotation:a,lineAnnotations:o,renderGutterUtility:s,getHoveredLine:c,getAnnotationSlotName:l=ie}){let u=t?.(e),d=n?.(e),f=r?.(e),p=i?.(e);return(0,h.jsxs)(h.Fragment,{children:[u==null?(0,h.jsxs)(h.Fragment,{children:[d!=null&&(0,h.jsx)(`div`,{slot:`header-prefix`,children:d}),f!=null&&(0,h.jsx)(`div`,{slot:`header-filename-suffix`,children:f}),p!=null&&(0,h.jsx)(`div`,{slot:`header-metadata`,children:p})]}):(0,h.jsx)(`div`,{slot:M,children:u}),a!=null&&o?.map((e,t)=>(0,h.jsx)(`div`,{slot:l(e),children:a(e)},t)),s!=null&&(0,h.jsx)(`div`,{slot:`gutter-utility-slot`,style:v,children:s(c)})]})}var pe=new Map,me=new Map,he=new Map,ge=new Set;function _e(e){for(let t of Array.isArray(e)?e:[e])if(t!==`text`&&t!==`ansi`&&!ge.has(t))return!1;return!0}function ve(e=N){let t=[];return typeof e==`string`?t.push(e):(t.push(e.dark),t.push(e.light)),t}var ye=new Set;function be(e){let t=[],n=new Set;for(let r of xe(e.themes)){let e=we(r)?r.getThemes():[r];for(let r of e){if(n.has(r.name))throw Error(`Theme collection already contains theme "${r.name}"`);n.add(r.name),t.push(r)}}let r=Object.freeze([...t]),i=Object.freeze(r.filter(e=>e.colorScheme===`light`)),a=Object.freeze(r.filter(e=>e.colorScheme===`dark`)),o=new Map(r.map(e=>[e.name,e])),s=Object.freeze(r.map(e=>e.name)),c=Object.freeze(i.map(e=>e.name)),l=Object.freeze(a.map(e=>e.name));function u(e){if(e==null)return r;let{colorScheme:t,collection:n}=e;return n==null?t===`light`?i:t===`dark`?a:r:r.filter(e=>e.collection===n?t==null||e.colorScheme===t:!1)}return{getTheme(e){return o.get(e)},getThemes(e){return u(e)},getThemeNames(e){return e?.collection==null?e?.colorScheme===`light`?c:e?.colorScheme===`dark`?l:s:u(e).map(e=>e.name)},hasTheme(e){return o.has(e)},orderBy(e){return be({themes:r.map((e,t)=>({descriptor:e,index:t})).sort((t,n)=>{let r=e(t.descriptor,n.descriptor);return r===0?t.index-n.index:r}).map(e=>e.descriptor)})},pick(e){let t=[],n=new Set;for(let r of e){if(n.has(r))throw Error(`Theme collection pick already includes theme "${r}"`);n.add(r);let e=o.get(r);if(e==null)throw Error(`Theme collection does not contain theme "${r}"`);t.push(e)}return be({themes:t})},registerInto(e){for(let t of r)e.registerThemeIfAbsent(t.name,t.load)}}}function xe(e){return Se(e)?[e]:e}function Se(e){return we(e)||Ce(e)}function Ce(e){return typeof e.name==`string`&&typeof e.load==`function`}function we(e){return typeof e.getThemes==`function`}function Te(e){return typeof e==`object`&&e&&`default`in e?e.default:e}var Ee=class extends Error{constructor(e){super(`Theme "${e}" is already registered`),this.name=`DuplicateThemeError`}},De=class extends Error{constructor(e){super(`No loader registered for theme "${e}"`),this.name=`UnregisteredThemeError`}},Oe=class extends Error{constructor(e){super(`Theme "${e}" has not been resolved`),this.name=`UnresolvedThemeError`}};function ke(){let e=new Map,t=new Map,n=new Map,r=0;function i(t,n){if(e.has(t))throw new Ee(t);e.set(t,n)}function a(t,n){return!e.has(t)&&(e.set(t,n),!0)}function o(t){return e.has(t)}function s(i){let a=t.get(i);if(a!==void 0)return Promise.resolve(a);let o=n.get(i);if(o!==void 0)return o;let s=e.get(i);if(s===void 0)return Promise.reject(new De(i));let c=r,l=s().then(e=>{let a=Te(e);return c===r&&t.set(i,a),n.get(i)===l&&n.delete(i),a}).catch(e=>{throw n.get(i)===l&&n.delete(i),e});return n.set(i,l),l}function c(e){return Promise.all(e.map(e=>s(e)))}function l(e,n){t.set(e,n)}function u(e){for(let[t,n]of e)l(t,n)}function d(e){return t.get(e)}function f(e){let n=[];for(let r of e){let e=t.get(r);if(e===void 0)throw new Oe(r);n.push(e)}return n}function p(e){return t.has(e)}function m(e){for(let n of e)if(!t.has(n))return!1;return!0}function h(e){let n=t.get(e);return n===void 0?s(e):n}function g(){r++,t.clear(),n.clear()}return{clearResolvedThemes:g,getResolvedOrResolveTheme:h,getResolvedTheme:d,getResolvedThemes:f,hasRegisteredTheme:o,hasResolvedTheme:p,hasResolvedThemes:m,registerTheme:i,registerThemeIfAbsent:a,resolveTheme:s,resolveThemes:c,seedResolvedTheme:l,seedResolvedThemes:u}}var Ae=ke();function je(e,t){e=Array.isArray(e)?e:[e];for(let n of e){let e;if(typeof n==`string`){if(e=Ae.getResolvedTheme(n),e==null)throw Error(`loadResolvedThemes: ${n} is not resolved, you must resolve it before calling loadResolvedThemes`)}else e=n,n=n.name,Ae.getResolvedTheme(n)??Ae.seedResolvedTheme(n,e);ye.has(n)||(ye.add(n),t.loadThemeSync(e))}}function Me(e,t){e=Array.isArray(e)?e:[e];for(let n of e){if(ge.has(n.name))continue;let e=pe.get(n.name);e??(e=n,pe.set(n.name,e)),ge.add(e.name),t.loadLanguageSync(e.data)}}function Ne(){return typeof WorkerGlobalScope<`u`&&typeof self<`u`&&self instanceof WorkerGlobalScope}var Pe=Object.defineProperty,Fe=Object.getOwnPropertyDescriptor,Ie=Object.getOwnPropertyNames,Le=Object.prototype.hasOwnProperty,Re=(e,t)=>{let n={};for(var r in e)Pe(n,r,{get:e[r],enumerable:!0});return t||Pe(n,Symbol.toStringTag,{value:`Module`}),n},ze=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=Ie(t),a=0,o=i.length,s;at[e]).bind(null,s),enumerable:!(r=Fe(t,s))||r.enumerable});return e},Be=(e,t,n)=>(ze(e,t,`default`),n&&ze(n,t,`default`)),Ve=`modulepreload`,He=function(e){return`/`+e},Ue={},W=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=He(t,n),t=s(t),t in Ue)return;Ue[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ve,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},We=[{id:`abap`,name:`ABAP`,import:(()=>W(()=>import(`./abap-CLvhMVsD.js`),[]))},{id:`actionscript-3`,name:`ActionScript`,aliases:[`actionscript`,`as3`],import:(()=>W(()=>import(`./actionscript-3-Cs6JJXT5.js`),[]))},{id:`ada`,name:`Ada`,import:(()=>W(()=>import(`./ada-C5qYipkI.js`),[]))},{id:`ahk`,name:`AutoHotkey`,aliases:[`ahk1`],import:(()=>W(()=>import(`./ahk-CA9gdOdF.js`),[]))},{id:`ahk2`,name:`AutoHotkey2`,import:(()=>W(()=>import(`./ahk2-_6rzW9BS.js`),[]))},{id:`angular-html`,name:`Angular HTML`,import:(()=>W(()=>import(`./angular-html-DI9Gnh-6.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3])))},{id:`angular-ts`,name:`Angular TypeScript`,import:(()=>W(()=>import(`./angular-ts-D0oJNn_5.js`),__vite__mapDeps([4,0,1,2,3,5])))},{id:`apache`,name:`Apache Conf`,import:(()=>W(()=>import(`./apache-U0d_L8uA.js`),[]))},{id:`apex`,name:`Apex`,import:(()=>W(()=>import(`./apex-KFGFyKwG.js`),[]))},{id:`apl`,name:`APL`,import:(()=>W(()=>import(`./apl-BovzKLwL.js`),__vite__mapDeps([6,2,3,1,7,8,9])))},{id:`applescript`,name:`AppleScript`,import:(()=>W(()=>import(`./applescript-CCn79oCD.js`),[]))},{id:`ara`,name:`Ara`,import:(()=>W(()=>import(`./ara-4CJ0cIlV.js`),[]))},{id:`asciidoc`,name:`AsciiDoc`,aliases:[`adoc`],import:(()=>W(()=>import(`./asciidoc-SCjQUq34.js`),[]))},{id:`asm`,name:`Assembly`,import:(()=>W(()=>import(`./asm-Cmm7eHzH.js`),[]))},{id:`astro`,name:`Astro`,import:(()=>W(()=>import(`./astro-DPheOMp2.js`),__vite__mapDeps([10,2,3,9,11,12,13])))},{id:`awk`,name:`AWK`,import:(()=>W(()=>import(`./awk-BWXHIvNe.js`),[]))},{id:`ballerina`,name:`Ballerina`,import:(()=>W(()=>import(`./ballerina-B7ZEbQpA.js`),[]))},{id:`bat`,name:`Batch File`,aliases:[`batch`,`cmd`],import:(()=>W(()=>import(`./bat-qdxAdBWQ.js`),[]))},{id:`beancount`,name:`Beancount`,import:(()=>W(()=>import(`./beancount-D-usSTwE.js`),[]))},{id:`berry`,name:`Berry`,aliases:[`be`],import:(()=>W(()=>import(`./berry-DKpUyyne.js`),[]))},{id:`bibtex`,name:`BibTeX`,import:(()=>W(()=>import(`./bibtex-Ci_nEsc7.js`),[]))},{id:`bicep`,name:`Bicep`,import:(()=>W(()=>import(`./bicep-CUHmPFLl.js`),[]))},{id:`bird2`,name:`BIRD2 Configuration`,aliases:[`bird`],import:(()=>W(()=>import(`./bird2-CYIUgYqB.js`),[]))},{id:`blade`,name:`Blade`,import:(()=>W(()=>import(`./blade-MWnOITg0.js`),__vite__mapDeps([14,2,3,1,7,8,9,15,16])))},{id:`bsl`,name:`1C (Enterprise)`,aliases:[`1c`],import:(()=>W(()=>import(`./bsl-_VjlB9mv.js`),__vite__mapDeps([17,18])))},{id:`c`,name:`C`,import:(()=>W(()=>import(`./c-DLL5koqn.js`).then(e=>e.n),[]))},{id:`c3`,name:`C3`,import:(()=>W(()=>import(`./c3-D0apG41V.js`),[]))},{id:`cadence`,name:`Cadence`,aliases:[`cdc`],import:(()=>W(()=>import(`./cadence-CQ2zXKGN.js`),[]))},{id:`cairo`,name:`Cairo`,import:(()=>W(()=>import(`./cairo-DLTphjLi.js`),__vite__mapDeps([19,20])))},{id:`chapel`,name:`Chapel`,aliases:[`chpl`],import:(()=>W(()=>import(`./chapel-CWsTSfb2.js`),__vite__mapDeps([21,22])))},{id:`clarity`,name:`Clarity`,import:(()=>W(()=>import(`./clarity-CtfBBspg.js`),[]))},{id:`clojure`,name:`Clojure`,aliases:[`clj`],import:(()=>W(()=>import(`./clojure-DqKBuwfJ.js`),[]))},{id:`cmake`,name:`CMake`,import:(()=>W(()=>import(`./cmake-Bj61d0ZC.js`),[]))},{id:`cobol`,name:`COBOL`,import:(()=>W(()=>import(`./cobol-DBppYo7Q.js`),__vite__mapDeps([23,1,2,3,8])))},{id:`codeowners`,name:`CODEOWNERS`,import:(()=>W(()=>import(`./codeowners-C8r90Shi.js`),[]))},{id:`codeql`,name:`CodeQL`,aliases:[`ql`],import:(()=>W(()=>import(`./codeql-oeQT6MSM.js`),[]))},{id:`coffee`,name:`CoffeeScript`,aliases:[`coffeescript`],import:(()=>W(()=>import(`./coffee-w6pACU0m.js`),__vite__mapDeps([24,2])))},{id:`common-lisp`,name:`Common Lisp`,aliases:[`lisp`],import:(()=>W(()=>import(`./common-lisp-Cv5bFMCO.js`),[]))},{id:`coq`,name:`Rocq`,import:(()=>W(()=>import(`./coq-DuBRPxYg.js`),[]))},{id:`cpp`,name:`C++`,aliases:[`c++`],import:(()=>W(()=>import(`./cpp-BOsVglB-.js`).then(e=>e.n),__vite__mapDeps([25,26,27,22])))},{id:`crystal`,name:`Crystal`,import:(()=>W(()=>import(`./crystal-CdIIvivK.js`),__vite__mapDeps([28,2,3,1,16,22,29])))},{id:`csharp`,name:`C#`,aliases:[`c#`,`cs`],import:(()=>W(()=>import(`./csharp-oqKa8noW.js`),[]))},{id:`css`,name:`CSS`,import:(()=>W(()=>import(`./css-D_sUZuNy.js`).then(e=>e.n),[]))},{id:`csv`,name:`CSV`,import:(()=>W(()=>import(`./csv-Dx-8-gkx.js`),[]))},{id:`cue`,name:`CUE`,import:(()=>W(()=>import(`./cue-CE9AQfxI.js`),[]))},{id:`cypher`,name:`Cypher`,aliases:[`cql`],import:(()=>W(()=>import(`./cypher-ClKdZ_lG.js`),[]))},{id:`d`,name:`D`,import:(()=>W(()=>import(`./d-qD-0Kul2.js`),[]))},{id:`dart`,name:`Dart`,import:(()=>W(()=>import(`./dart-CnvKMtbv.js`),[]))},{id:`dax`,name:`DAX`,import:(()=>W(()=>import(`./dax-BkyTk9wS.js`),[]))},{id:`desktop`,name:`Desktop`,import:(()=>W(()=>import(`./desktop-Dlh5hvp9.js`),[]))},{id:`diff`,name:`Diff`,import:(()=>W(()=>import(`./diff-woXpYk--.js`),[]))},{id:`docker`,name:`Dockerfile`,aliases:[`dockerfile`],import:(()=>W(()=>import(`./docker-IyjqRm3v.js`),[]))},{id:`dotenv`,name:`dotEnv`,import:(()=>W(()=>import(`./dotenv-_5a1GRtc.js`),[]))},{id:`dream-maker`,name:`Dream Maker`,import:(()=>W(()=>import(`./dream-maker-DW3nJb8Q.js`),[]))},{id:`edge`,name:`Edge`,import:(()=>W(()=>import(`./edge-BbDvonD4.js`),__vite__mapDeps([30,1,2,3,11,15])))},{id:`elixir`,name:`Elixir`,import:(()=>W(()=>import(`./elixir-Bf8isSWq.js`),__vite__mapDeps([31,1,2,3])))},{id:`elm`,name:`Elm`,import:(()=>W(()=>import(`./elm-DZ2GG1O0.js`),__vite__mapDeps([32,27,22])))},{id:`emacs-lisp`,name:`Emacs Lisp`,aliases:[`elisp`],import:(()=>W(()=>import(`./emacs-lisp-c_oH4hRZ.js`),[]))},{id:`erb`,name:`ERB`,import:(()=>W(()=>import(`./erb-C-JhO4M6.js`),__vite__mapDeps([33,1,2,3,34,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39])))},{id:`erlang`,name:`Erlang`,aliases:[`erl`],import:(()=>W(()=>import(`./erlang-Cphh6RMH.js`),__vite__mapDeps([40,41])))},{id:`fennel`,name:`Fennel`,import:(()=>W(()=>import(`./fennel-DQxkIbk2.js`),[]))},{id:`fish`,name:`Fish`,import:(()=>W(()=>import(`./fish-BJitypiv.js`),[]))},{id:`fluent`,name:`Fluent`,aliases:[`ftl`],import:(()=>W(()=>import(`./fluent-C03EYrpw.js`),[]))},{id:`fortran-fixed-form`,name:`Fortran (Fixed Form)`,aliases:[`f`,`for`,`f77`],import:(()=>W(()=>import(`./fortran-fixed-form-DEKoE2YW.js`),__vite__mapDeps([42,43])))},{id:`fortran-free-form`,name:`Fortran (Free Form)`,aliases:[`f90`,`f95`,`f03`,`f08`,`f18`],import:(()=>W(()=>import(`./fortran-free-form-CYNrtFtB.js`),[]))},{id:`fsharp`,name:`F#`,aliases:[`f#`,`fs`],import:(()=>W(()=>import(`./fsharp-D13ZGOAj.js`),__vite__mapDeps([44,41])))},{id:`gdresource`,name:`GDResource`,aliases:[`tscn`,`tres`],import:(()=>W(()=>import(`./gdresource-xMC7jr7x.js`),__vite__mapDeps([45,46,47])))},{id:`gdscript`,name:`GDScript`,aliases:[`gd`],import:(()=>W(()=>import(`./gdscript-DYvRD3hg.js`),[]))},{id:`gdshader`,name:`GDShader`,import:(()=>W(()=>import(`./gdshader-CBce3t8t.js`),[]))},{id:`genie`,name:`Genie`,import:(()=>W(()=>import(`./genie-CV2tkWYe.js`),[]))},{id:`gherkin`,name:`Gherkin`,import:(()=>W(()=>import(`./gherkin-DExj1W_8.js`),[]))},{id:`git-commit`,name:`Git Commit Message`,import:(()=>W(()=>import(`./git-commit-BSykSTBG.js`),__vite__mapDeps([48,49])))},{id:`git-rebase`,name:`Git Rebase Message`,import:(()=>W(()=>import(`./git-rebase-B734D6L0.js`),__vite__mapDeps([50,29])))},{id:`gleam`,name:`Gleam`,import:(()=>W(()=>import(`./gleam-CSRkHgEL.js`),[]))},{id:`glimmer-js`,name:`Glimmer JS`,aliases:[`gjs`],import:(()=>W(()=>import(`./glimmer-js-S-qenfyd.js`),__vite__mapDeps([51,2,3,1,11])))},{id:`glimmer-ts`,name:`Glimmer TS`,aliases:[`gts`],import:(()=>W(()=>import(`./glimmer-ts-3RXpKVtX.js`),__vite__mapDeps([52,2,3,1,11])))},{id:`glsl`,name:`GLSL`,import:(()=>W(()=>import(`./glsl-DBaA16lM.js`).then(e=>e.n),__vite__mapDeps([27,22])))},{id:`gn`,name:`GN`,import:(()=>W(()=>import(`./gn-ilITqXS6.js`),[]))},{id:`gnuplot`,name:`Gnuplot`,import:(()=>W(()=>import(`./gnuplot-7GGW24-e.js`),[]))},{id:`go`,name:`Go`,import:(()=>W(()=>import(`./go-rLFTqkRN.js`),[]))},{id:`graphql`,name:`GraphQL`,aliases:[`gql`],import:(()=>W(()=>import(`./graphql-hCMHrW-c.js`).then(e=>e.n),__vite__mapDeps([36,2,11,13,37])))},{id:`groovy`,name:`Groovy`,import:(()=>W(()=>import(`./groovy-CacY0gHj.js`),[]))},{id:`hack`,name:`Hack`,import:(()=>W(()=>import(`./hack-1-RmdN54.js`),__vite__mapDeps([53,1,2,3,16])))},{id:`haml`,name:`Ruby Haml`,import:(()=>W(()=>import(`./haml-CJTw6KCx.js`).then(e=>e.n),__vite__mapDeps([35,2,3])))},{id:`handlebars`,name:`Handlebars`,aliases:[`hbs`],import:(()=>W(()=>import(`./handlebars-BjfB5oJv.js`),__vite__mapDeps([54,2,3,1,39])))},{id:`haskell`,name:`Haskell`,aliases:[`hs`],import:(()=>W(()=>import(`./haskell-D8IpX4py.js`),[]))},{id:`haxe`,name:`Haxe`,import:(()=>W(()=>import(`./haxe-C8oCnwJJ.js`),[]))},{id:`hcl`,name:`HashiCorp HCL`,import:(()=>W(()=>import(`./hcl-Dh228itO.js`),[]))},{id:`hjson`,name:`Hjson`,import:(()=>W(()=>import(`./hjson-CxZEssPk.js`),[]))},{id:`hlsl`,name:`HLSL`,import:(()=>W(()=>import(`./hlsl-Cvrh5tZx.js`),[]))},{id:`html`,name:`HTML`,import:(()=>W(()=>import(`./html-CQSL4Rts.js`).then(e=>e.n),__vite__mapDeps([1,2,3])))},{id:`html-derivative`,name:`HTML (Derivative)`,import:(()=>W(()=>import(`./html-derivative-Xrtwll_i.js`),__vite__mapDeps([15,1,2,3])))},{id:`http`,name:`HTTP`,import:(()=>W(()=>import(`./http-DiFBXl1d.js`),__vite__mapDeps([55,7,8,9,29,36,2,11,13,37])))},{id:`hurl`,name:`Hurl`,import:(()=>W(()=>import(`./hurl-DTMKKsTz.js`),__vite__mapDeps([56,7,8,57,36,2,11,13,37])))},{id:`hxml`,name:`HXML`,import:(()=>W(()=>import(`./hxml-Dcm88srW.js`),__vite__mapDeps([58,59])))},{id:`hy`,name:`Hy`,import:(()=>W(()=>import(`./hy-CZbG8q4J.js`),[]))},{id:`imba`,name:`Imba`,import:(()=>W(()=>import(`./imba-DsUTQ-LC.js`),[]))},{id:`ini`,name:`INI`,aliases:[`properties`],import:(()=>W(()=>import(`./ini-B5eOa1yu.js`),[]))},{id:`java`,name:`Java`,import:(()=>W(()=>import(`./java-BwygYcjv.js`).then(e=>e.n),[]))},{id:`javascript`,name:`JavaScript`,aliases:[`js`,`cjs`,`mjs`],import:(()=>W(()=>import(`./javascript-cZ915vnh.js`).then(e=>e.n),[]))},{id:`jinja`,name:`Jinja`,import:(()=>W(()=>import(`./jinja-BZ56G71o.js`),__vite__mapDeps([60,1,2,3])))},{id:`jison`,name:`Jison`,import:(()=>W(()=>import(`./jison-CrMHkA5T.js`),__vite__mapDeps([61,2])))},{id:`json`,name:`JSON`,import:(()=>W(()=>import(`./json-xe-_kEqr.js`).then(e=>e.n),[]))},{id:`json5`,name:`JSON5`,import:(()=>W(()=>import(`./json5-BR5RXkoi.js`),[]))},{id:`jsonc`,name:`JSON with Comments`,import:(()=>W(()=>import(`./jsonc-CYpm1nAK.js`),[]))},{id:`jsonl`,name:`JSON Lines`,import:(()=>W(()=>import(`./jsonl-CmCQp5Yx.js`),[]))},{id:`jsonnet`,name:`Jsonnet`,import:(()=>W(()=>import(`./jsonnet-CJTPZ8u_.js`),[]))},{id:`jssm`,name:`JSSM`,aliases:[`fsl`],import:(()=>W(()=>import(`./jssm-DXw9l8Rf.js`),[]))},{id:`jsx`,name:`JSX`,import:(()=>W(()=>import(`./jsx-BaQikP4I.js`).then(e=>e.n),[]))},{id:`julia`,name:`Julia`,aliases:[`jl`],import:(()=>W(()=>import(`./julia-DOQr_yfw.js`),__vite__mapDeps([62,2,16,20,25,26,27,22,63])))},{id:`just`,name:`Just`,aliases:[`justfile`],import:(()=>W(()=>import(`./just-DJjQ6wca.js`),__vite__mapDeps([64,2,11,20,29,34,3,1,7,8,16,22,25,26,27,35,36,13,37,38,39,65])))},{id:`kdl`,name:`KDL`,import:(()=>W(()=>import(`./kdl-CsD5j6eV.js`),[]))},{id:`kotlin`,name:`Kotlin`,aliases:[`kt`,`kts`],import:(()=>W(()=>import(`./kotlin-DhhofPvG.js`),[]))},{id:`kusto`,name:`Kusto`,aliases:[`kql`],import:(()=>W(()=>import(`./kusto-C7mF5XQf.js`),[]))},{id:`latex`,name:`LaTeX`,import:(()=>W(()=>import(`./latex-BR2yZEm8.js`),__vite__mapDeps([66,67,63])))},{id:`lean`,name:`Lean 4`,aliases:[`lean4`],import:(()=>W(()=>import(`./lean-CewbzKMR.js`),[]))},{id:`less`,name:`Less`,import:(()=>W(()=>import(`./less-DVTAwKKz.js`),[]))},{id:`liquid`,name:`Liquid`,import:(()=>W(()=>import(`./liquid-BW4tFZT5.js`),__vite__mapDeps([68,2,3,1,9])))},{id:`llvm`,name:`LLVM IR`,import:(()=>W(()=>import(`./llvm-DqHOMS-s.js`),[]))},{id:`log`,name:`Log file`,import:(()=>W(()=>import(`./log-BNLmms1o.js`),[]))},{id:`logo`,name:`Logo`,import:(()=>W(()=>import(`./logo-Cluzi2Zq.js`),[]))},{id:`lua`,name:`Lua`,import:(()=>W(()=>import(`./lua-BMwKRpUS.js`).then(e=>e.n),__vite__mapDeps([38,22])))},{id:`luau`,name:`Luau`,import:(()=>W(()=>import(`./luau-C2pBCSgt.js`),[]))},{id:`make`,name:`Makefile`,aliases:[`makefile`],import:(()=>W(()=>import(`./make-Dixweg8N.js`),[]))},{id:`markdown`,name:`Markdown`,aliases:[`md`],import:(()=>W(()=>import(`./markdown-BYOwaDjH.js`),[]))},{id:`marko`,name:`Marko`,import:(()=>W(()=>import(`./marko-_k-1VAV1.js`),__vite__mapDeps([69,3,5,11,70])))},{id:`matlab`,name:`MATLAB`,import:(()=>W(()=>import(`./matlab-D7qyCx1q.js`),[]))},{id:`mdc`,name:`MDC`,import:(()=>W(()=>import(`./mdc-Bpi8gJ8w.js`),__vite__mapDeps([71,15,1,2,3,39,41])))},{id:`mdx`,name:`MDX`,import:(()=>W(()=>import(`./mdx-DQZ5AkYe.js`),[]))},{id:`mermaid`,name:`Mermaid`,aliases:[`mmd`],import:(()=>W(()=>import(`./mermaid-BxpfTIzt.js`),[]))},{id:`mipsasm`,name:`MIPS Assembly`,aliases:[`mips`],import:(()=>W(()=>import(`./mipsasm-BMqwQI7S.js`),[]))},{id:`mojo`,name:`Mojo`,import:(()=>W(()=>import(`./mojo-fg40_ntQ.js`),[]))},{id:`moonbit`,name:`MoonBit`,aliases:[`mbt`,`mbti`],import:(()=>W(()=>import(`./moonbit-DgjMoLWr.js`),[]))},{id:`move`,name:`Move`,import:(()=>W(()=>import(`./move-BYnGhZoM.js`),[]))},{id:`narrat`,name:`Narrat Language`,aliases:[`nar`],import:(()=>W(()=>import(`./narrat-_X_XdTYD.js`),[]))},{id:`nextflow`,name:`Nextflow`,aliases:[`nf`],import:(()=>W(()=>import(`./nextflow-BJtWHP5T.js`),__vite__mapDeps([72,73])))},{id:`nextflow-groovy`,name:`Nextflow Groovy`,import:(()=>W(()=>import(`./nextflow-groovy-DJMQeKeT.js`),[]))},{id:`nginx`,name:`Nginx`,import:(()=>W(()=>import(`./nginx-Bqz6odJ0.js`),__vite__mapDeps([74,38,22])))},{id:`nim`,name:`Nim`,import:(()=>W(()=>import(`./nim-DUfzkSYY.js`),__vite__mapDeps([75,2,3,1,7,8,22,27,41])))},{id:`nix`,name:`Nix`,import:(()=>W(()=>import(`./nix-IvuFDN5E.js`),[]))},{id:`nsis`,name:`NSIS`,import:(()=>W(()=>import(`./nsis-CjNLYCLg.js`),[]))},{id:`nushell`,name:`nushell`,aliases:[`nu`],import:(()=>W(()=>import(`./nushell-DHYfO66s.js`),[]))},{id:`objective-c`,name:`Objective-C`,aliases:[`objc`],import:(()=>W(()=>import(`./objective-c-D1A_Heim.js`),[]))},{id:`objective-cpp`,name:`Objective-C++`,import:(()=>W(()=>import(`./objective-cpp-BsSzOQcm.js`),[]))},{id:`ocaml`,name:`OCaml`,import:(()=>W(()=>import(`./ocaml-O90oeIOV.js`),[]))},{id:`odin`,name:`Odin`,import:(()=>W(()=>import(`./odin-B1RWQWA5.js`),[]))},{id:`openscad`,name:`OpenSCAD`,aliases:[`scad`],import:(()=>W(()=>import(`./openscad-BUDT5pXO.js`),[]))},{id:`org`,name:`Org Markup`,import:(()=>W(()=>import(`./org-hCFMncj0.js`),__vite__mapDeps([76,2,3,1,5,8,7,9,11,13,16,22,20,77,24,26,25,27,29,78,79,49,80,31,38,39,34,35,36,37,41,40,48,50,81,82,83,63,65,66,67,70,84,75,85,86,87,88,89,90,91,92,93])))},{id:`pascal`,name:`Pascal`,import:(()=>W(()=>import(`./pascal-4ZHwLPI5.js`),[]))},{id:`perl`,name:`Perl`,import:(()=>W(()=>import(`./perl-BOSN-lJd.js`),__vite__mapDeps([65,2,3,1,7,8,16])))},{id:`php`,name:`PHP`,import:(()=>W(()=>import(`./php-BcxfUlb0.js`),__vite__mapDeps([87,2,3,1,7,8,9,16])))},{id:`pkl`,name:`Pkl`,import:(()=>W(()=>import(`./pkl-ot-7Btpt.js`),[]))},{id:`plsql`,name:`PL/SQL`,import:(()=>W(()=>import(`./plsql-DGHpHOYJ.js`),[]))},{id:`po`,name:`Gettext PO`,aliases:[`pot`,`potx`],import:(()=>W(()=>import(`./po-BiJDBrnU.js`),[]))},{id:`polar`,name:`Polar`,import:(()=>W(()=>import(`./polar-C7UOKdEL.js`),[]))},{id:`postcss`,name:`PostCSS`,import:(()=>W(()=>import(`./postcss-BXeXVLqQ.js`),[]))},{id:`powerquery`,name:`PowerQuery`,import:(()=>W(()=>import(`./powerquery-DNMTfnFr.js`),[]))},{id:`powershell`,name:`PowerShell`,aliases:[`ps`,`ps1`,`pwsh`],import:(()=>W(()=>import(`./powershell-CCSX75yM.js`),[]))},{id:`prisma`,name:`Prisma`,import:(()=>W(()=>import(`./prisma-DMgNhnYS.js`),[]))},{id:`prolog`,name:`Prolog`,import:(()=>W(()=>import(`./prolog-iXnhIJG7.js`),[]))},{id:`proto`,name:`Protocol Buffer 3`,aliases:[`protobuf`],import:(()=>W(()=>import(`./proto-DB4EqR-F.js`),[]))},{id:`pug`,name:`Pug`,aliases:[`jade`],import:(()=>W(()=>import(`./pug-CCacKbEP.js`),__vite__mapDeps([94,2,3,1])))},{id:`puppet`,name:`Puppet`,import:(()=>W(()=>import(`./puppet-CDv2pdJW.js`),[]))},{id:`purescript`,name:`PureScript`,import:(()=>W(()=>import(`./purescript-9MfHhQsQ.js`),[]))},{id:`python`,name:`Python`,aliases:[`py`],import:(()=>W(()=>import(`./python-gzcpVVnB.js`),[]))},{id:`qml`,name:`QML`,import:(()=>W(()=>import(`./qml-BJ3i-i8V.js`),__vite__mapDeps([95,2])))},{id:`qmldir`,name:`QML Directory`,import:(()=>W(()=>import(`./qmldir-DCQb3MpD.js`),[]))},{id:`qss`,name:`Qt Style Sheets`,import:(()=>W(()=>import(`./qss-Fe1Jh2GI.js`),[]))},{id:`r`,name:`R`,import:(()=>W(()=>import(`./r-Cq3JeZGS.js`).then(e=>e.n),[]))},{id:`racket`,name:`Racket`,import:(()=>W(()=>import(`./racket-DcIDlBhZ.js`),[]))},{id:`raku`,name:`Raku`,aliases:[`perl6`],import:(()=>W(()=>import(`./raku-B3gFvitq.js`),[]))},{id:`razor`,name:`ASP.NET Razor`,import:(()=>W(()=>import(`./razor-D4KIaiN4.js`),__vite__mapDeps([96,1,2,3,78])))},{id:`rbs`,name:`RBS`,aliases:[`ruby-signature`],import:(()=>W(()=>import(`./rbs-C0MpOrj4.js`),[]))},{id:`reg`,name:`Windows Registry Script`,import:(()=>W(()=>import(`./reg-CRGYupPL.js`),[]))},{id:`regexp`,name:`RegExp`,aliases:[`regex`],import:(()=>W(()=>import(`./regexp-BtVX3oxr.js`).then(e=>e.n),[]))},{id:`rel`,name:`Rel`,import:(()=>W(()=>import(`./rel-BtDbiS_P.js`),[]))},{id:`riscv`,name:`RISC-V`,import:(()=>W(()=>import(`./riscv-Ckw8ddFX.js`),[]))},{id:`ron`,name:`RON`,import:(()=>W(()=>import(`./ron-VUp2lXgN.js`),[]))},{id:`rosmsg`,name:`ROS Interface`,import:(()=>W(()=>import(`./rosmsg-CAekHB0j.js`),[]))},{id:`rst`,name:`reStructuredText`,import:(()=>W(()=>import(`./rst-yziTZ18z.js`),__vite__mapDeps([97,2,15,1,3,20,98,25,26,27,22,29,39,34,7,8,16,35,36,11,13,37,38])))},{id:`ruby`,name:`Ruby`,aliases:[`rb`],import:(()=>W(()=>import(`./ruby-CxwDFG51.js`),__vite__mapDeps([34,2,3,1,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39])))},{id:`rust`,name:`Rust`,aliases:[`rs`],import:(()=>W(()=>import(`./rust-Cfkwpbl8.js`),[]))},{id:`sas`,name:`SAS`,import:(()=>W(()=>import(`./sas-DwRcM5a3.js`),__vite__mapDeps([99,16])))},{id:`sass`,name:`Sass`,import:(()=>W(()=>import(`./sass-DXrisJhu.js`),[]))},{id:`scala`,name:`Scala`,import:(()=>W(()=>import(`./scala-BiFt_7mu.js`),[]))},{id:`scheme`,name:`Scheme`,import:(()=>W(()=>import(`./scheme-DQCgrYNe.js`),[]))},{id:`scss`,name:`SCSS`,import:(()=>W(()=>import(`./scss-B8r4RXCT.js`).then(e=>e.n),__vite__mapDeps([5,3])))},{id:`sdbl`,name:`1C (Query)`,aliases:[`1c-query`],import:(()=>W(()=>import(`./sdbl-bTVj8UrX.js`),[]))},{id:`shaderlab`,name:`ShaderLab`,aliases:[`shader`],import:(()=>W(()=>import(`./shaderlab-TOUzSsQk.js`),__vite__mapDeps([100,101])))},{id:`shellscript`,name:`Shell`,aliases:[`bash`,`sh`,`shell`,`zsh`],import:(()=>W(()=>import(`./shellscript-CE8jMVsJ.js`).then(e=>e.n),[]))},{id:`shellsession`,name:`Shell Session`,aliases:[`console`],import:(()=>W(()=>import(`./shellsession-CxmlJTEF.js`),__vite__mapDeps([102,29])))},{id:`smalltalk`,name:`GNU Smalltalk`,import:(()=>W(()=>import(`./smalltalk-BHpQb5nM.js`),[]))},{id:`smithy`,name:`Smithy`,import:(()=>W(()=>import(`./smithy-Dgaz7aur.js`),[]))},{id:`solidity`,name:`Solidity`,import:(()=>W(()=>import(`./solidity-Bj7E1mRn.js`),[]))},{id:`soy`,name:`Closure Templates`,aliases:[`closure-templates`],import:(()=>W(()=>import(`./soy-BzTEIhUJ.js`),__vite__mapDeps([103,1,2,3])))},{id:`sparql`,name:`SPARQL`,import:(()=>W(()=>import(`./sparql-D_iOobhT.js`),__vite__mapDeps([104,105])))},{id:`splunk`,name:`Splunk Query Language`,aliases:[`spl`],import:(()=>W(()=>import(`./splunk-BC2Px7Mm.js`),[]))},{id:`sql`,name:`SQL`,import:(()=>W(()=>import(`./sql-ClIVuo9t.js`).then(e=>e.n),[]))},{id:`ssh-config`,name:`SSH Config`,import:(()=>W(()=>import(`./ssh-config-BgfXC-Er.js`),[]))},{id:`stata`,name:`Stata`,import:(()=>W(()=>import(`./stata-BB9tap1y.js`),__vite__mapDeps([106,16])))},{id:`stylus`,name:`Stylus`,aliases:[`styl`],import:(()=>W(()=>import(`./stylus-B6D30XZt.js`),[]))},{id:`surrealql`,name:`SurrealQL`,aliases:[`surql`],import:(()=>W(()=>import(`./surrealql-CI8AgyIv.js`),__vite__mapDeps([107,2])))},{id:`svelte`,name:`Svelte`,import:(()=>W(()=>import(`./svelte-D1eIrOoP.js`),__vite__mapDeps([108,2,3,11,12])))},{id:`swift`,name:`Swift`,import:(()=>W(()=>import(`./swift-CyEgAFGc.js`),[]))},{id:`system-verilog`,name:`SystemVerilog`,import:(()=>W(()=>import(`./system-verilog-Dh5ihWbf.js`),[]))},{id:`systemd`,name:`Systemd Units`,import:(()=>W(()=>import(`./systemd-BxMlprV5.js`),[]))},{id:`talonscript`,name:`TalonScript`,aliases:[`talon`],import:(()=>W(()=>import(`./talonscript-CohzipZa.js`),[]))},{id:`tasl`,name:`Tasl`,import:(()=>W(()=>import(`./tasl-DMoTqEGO.js`),[]))},{id:`tcl`,name:`Tcl`,import:(()=>W(()=>import(`./tcl-CZd0xW_V.js`),[]))},{id:`templ`,name:`Templ`,import:(()=>W(()=>import(`./templ-Bw4hFTpq.js`),__vite__mapDeps([109,2,3,81])))},{id:`terraform`,name:`Terraform`,aliases:[`tf`,`tfvars`],import:(()=>W(()=>import(`./terraform-DswuEJGm.js`),[]))},{id:`tex`,name:`TeX`,import:(()=>W(()=>import(`./tex-BZ8j5Ki8.js`).then(e=>e.n),__vite__mapDeps([67,63])))},{id:`toml`,name:`TOML`,import:(()=>W(()=>import(`./toml-CcmNWLt0.js`),[]))},{id:`ts-tags`,name:`TypeScript with Tags`,aliases:[`lit`],import:(()=>W(()=>import(`./ts-tags-CJWRyznG.js`),__vite__mapDeps([110,2,3,1,7,8,11,16,27,22])))},{id:`tsv`,name:`TSV`,import:(()=>W(()=>import(`./tsv-sltzmVWM.js`),[]))},{id:`tsx`,name:`TSX`,import:(()=>W(()=>import(`./tsx-C7U7cVa6.js`).then(e=>e.n),[]))},{id:`turtle`,name:`Turtle`,import:(()=>W(()=>import(`./turtle-ByJddavk.js`),[]))},{id:`twig`,name:`Twig`,import:(()=>W(()=>import(`./twig-ChWsK9Nr.js`),__vite__mapDeps([111,2,3,5,20,34,1,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39,87,9])))},{id:`typescript`,name:`TypeScript`,aliases:[`ts`,`cts`,`mts`],import:(()=>W(()=>import(`./typescript-Dxzp_mdn.js`).then(e=>e.n),[]))},{id:`typespec`,name:`TypeSpec`,aliases:[`tsp`],import:(()=>W(()=>import(`./typespec-BRdr0IET.js`),[]))},{id:`typst`,name:`Typst`,aliases:[`typ`],import:(()=>W(()=>import(`./typst-DsfTC6LO.js`),__vite__mapDeps([112,2,3,1,5,8,7,9,11,13,113,114,16,22,20,77,24,26,25,27,29,78,79,49,80,31,38,39,34,35,36,37,41,40,44,48,50,81,82,54,83,115,63,62,65,66,67,70,116,84,85,87,88,89,90,91,93,117,94,118,119,111,120])))},{id:`v`,name:`V`,import:(()=>W(()=>import(`./v-DBj4K9d_.js`),[]))},{id:`vala`,name:`Vala`,import:(()=>W(()=>import(`./vala-zf12oZj6.js`),[]))},{id:`vb`,name:`Visual Basic`,import:(()=>W(()=>import(`./vb-DOwzaHZ0.js`),[]))},{id:`verilog`,name:`Verilog`,import:(()=>W(()=>import(`./verilog-B2gwz-sJ.js`),[]))},{id:`vhdl`,name:`VHDL`,import:(()=>W(()=>import(`./vhdl-BroJfC0k.js`),[]))},{id:`viml`,name:`Vim Script`,aliases:[`vim`,`vimscript`],import:(()=>W(()=>import(`./viml-DvXPmvsu.js`),[]))},{id:`vue`,name:`Vue`,import:(()=>W(()=>import(`./vue-tc09nslQ.js`),__vite__mapDeps([121,2,3,1,9,11,15])))},{id:`vue-html`,name:`Vue HTML`,import:(()=>W(()=>import(`./vue-html-DNMTIoNH.js`),__vite__mapDeps([122,2])))},{id:`vue-vine`,name:`Vue Vine`,import:(()=>W(()=>import(`./vue-vine-CJXT0Vnu.js`),__vite__mapDeps([123,2,3,5,12,70,124])))},{id:`vyper`,name:`Vyper`,aliases:[`vy`],import:(()=>W(()=>import(`./vyper-CgoNMtux.js`),[]))},{id:`wasm`,name:`WebAssembly`,import:(()=>W(()=>import(`./wasm-ByWQv1Qj.js`),[]))},{id:`wenyan`,name:`Wenyan`,aliases:[`文言`],import:(()=>W(()=>import(`./wenyan-C8pVoKbM.js`),[]))},{id:`wgsl`,name:`WGSL`,import:(()=>W(()=>import(`./wgsl-BsKzXJz4.js`),[]))},{id:`wikitext`,name:`Wikitext`,aliases:[`mediawiki`,`wiki`],import:(()=>W(()=>import(`./wikitext-ClFFjSW2.js`),[]))},{id:`wit`,name:`WebAssembly Interface Types`,import:(()=>W(()=>import(`./wit-DdvCle-K.js`),[]))},{id:`wolfram`,name:`Wolfram`,aliases:[`wl`],import:(()=>W(()=>import(`./wolfram-DLL8P-h_.js`),[]))},{id:`xml`,name:`XML`,import:(()=>W(()=>import(`./xml-BOKYiS6A.js`).then(e=>e.n),__vite__mapDeps([7,8])))},{id:`xsl`,name:`XSL`,import:(()=>W(()=>import(`./xsl-BpdVMO9A.js`),__vite__mapDeps([93,7,8])))},{id:`yaml`,name:`YAML`,aliases:[`yml`],import:(()=>W(()=>import(`./yaml-BmrUBDE7.js`).then(e=>e.n),[]))},{id:`zenscript`,name:`ZenScript`,import:(()=>W(()=>import(`./zenscript-BnlCZFoB.js`),[]))},{id:`zig`,name:`Zig`,import:(()=>W(()=>import(`./zig-CMLA9XwU.js`),[]))}],Ge=Object.fromEntries(We.map(e=>[e.id,e.import])),Ke=Object.fromEntries(We.flatMap(e=>e.aliases?.map(t=>[t,e.import])||[])),qe={...Ge,...Ke},Je=Object.fromEntries([{id:`andromeeda`,displayName:`Andromeeda`,type:`dark`,import:(()=>W(()=>import(`./andromeeda-vGVdxbeo.js`),[]))},{id:`aurora-x`,displayName:`Aurora X`,type:`dark`,import:(()=>W(()=>import(`./aurora-x-CDeNXAV0.js`),[]))},{id:`ayu-dark`,displayName:`Ayu Dark`,type:`dark`,import:(()=>W(()=>import(`./ayu-dark-DluEY0Gj.js`),[]))},{id:`ayu-light`,displayName:`Ayu Light`,type:`light`,import:(()=>W(()=>import(`./ayu-light-C3h-C4tm.js`),[]))},{id:`ayu-mirage`,displayName:`Ayu Mirage`,type:`dark`,import:(()=>W(()=>import(`./ayu-mirage-Bqwy1Gya.js`),[]))},{id:`catppuccin-frappe`,displayName:`Catppuccin Frappé`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-frappe-C9Q5zVZY.js`),[]))},{id:`catppuccin-latte`,displayName:`Catppuccin Latte`,type:`light`,import:(()=>W(()=>import(`./catppuccin-latte-CtsyrtPq.js`),[]))},{id:`catppuccin-macchiato`,displayName:`Catppuccin Macchiato`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-macchiato-R8nAf1vR.js`),[]))},{id:`catppuccin-mocha`,displayName:`Catppuccin Mocha`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-mocha-DjuaAJKi.js`),[]))},{id:`dark-plus`,displayName:`Dark Plus`,type:`dark`,import:(()=>W(()=>import(`./dark-plus-Cs2F2srj.js`),[]))},{id:`dracula`,displayName:`Dracula Theme`,type:`dark`,import:(()=>W(()=>import(`./dracula-BHWKrbxM.js`),[]))},{id:`dracula-soft`,displayName:`Dracula Theme Soft`,type:`dark`,import:(()=>W(()=>import(`./dracula-soft-5eyTD99u.js`),[]))},{id:`everforest-dark`,displayName:`Everforest Dark`,type:`dark`,import:(()=>W(()=>import(`./everforest-dark-sB-x3p7T.js`),[]))},{id:`everforest-light`,displayName:`Everforest Light`,type:`light`,import:(()=>W(()=>import(`./everforest-light-Df2xbC6M.js`),[]))},{id:`github-dark`,displayName:`GitHub Dark`,type:`dark`,import:(()=>W(()=>import(`./github-dark-C-LZuMrd.js`),[]))},{id:`github-dark-default`,displayName:`GitHub Dark Default`,type:`dark`,import:(()=>W(()=>import(`./github-dark-default-DXG-b-1a.js`),[]))},{id:`github-dark-dimmed`,displayName:`GitHub Dark Dimmed`,type:`dark`,import:(()=>W(()=>import(`./github-dark-dimmed-Bx1FflLF.js`),[]))},{id:`github-dark-high-contrast`,displayName:`GitHub Dark High Contrast`,type:`dark`,import:(()=>W(()=>import(`./github-dark-high-contrast-B_tTalzw.js`),[]))},{id:`github-light`,displayName:`GitHub Light`,type:`light`,import:(()=>W(()=>import(`./github-light-EUqPIrTm.js`),[]))},{id:`github-light-default`,displayName:`GitHub Light Default`,type:`light`,import:(()=>W(()=>import(`./github-light-default-BXViO-2h.js`),[]))},{id:`github-light-high-contrast`,displayName:`GitHub Light High Contrast`,type:`light`,import:(()=>W(()=>import(`./github-light-high-contrast-B68TUdTA.js`),[]))},{id:`gruvbox-dark-hard`,displayName:`Gruvbox Dark Hard`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-hard-C820rvS2.js`),[]))},{id:`gruvbox-dark-medium`,displayName:`Gruvbox Dark Medium`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-medium-BPjhmG05.js`),[]))},{id:`gruvbox-dark-soft`,displayName:`Gruvbox Dark Soft`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-soft-MrdJrrXF.js`),[]))},{id:`gruvbox-light-hard`,displayName:`Gruvbox Light Hard`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-hard-BC_s9l72.js`),[]))},{id:`gruvbox-light-medium`,displayName:`Gruvbox Light Medium`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-medium-BAWPOn9u.js`),[]))},{id:`gruvbox-light-soft`,displayName:`Gruvbox Light Soft`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-soft-BSMLrYjP.js`),[]))},{id:`horizon`,displayName:`Horizon`,type:`dark`,import:(()=>W(()=>import(`./horizon-CE9ld1lL.js`),[]))},{id:`horizon-bright`,displayName:`Horizon Bright`,type:`light`,import:(()=>W(()=>import(`./horizon-bright-DSNQnXHK.js`),[]))},{id:`houston`,displayName:`Houston`,type:`dark`,import:(()=>W(()=>import(`./houston-CsvMBhTu.js`),[]))},{id:`kanagawa-dragon`,displayName:`Kanagawa Dragon`,type:`dark`,import:(()=>W(()=>import(`./kanagawa-dragon-Bozd7klA.js`),[]))},{id:`kanagawa-lotus`,displayName:`Kanagawa Lotus`,type:`light`,import:(()=>W(()=>import(`./kanagawa-lotus-BmuOG9ZW.js`),[]))},{id:`kanagawa-wave`,displayName:`Kanagawa Wave`,type:`dark`,import:(()=>W(()=>import(`./kanagawa-wave-BML5mF2J.js`),[]))},{id:`laserwave`,displayName:`LaserWave`,type:`dark`,import:(()=>W(()=>import(`./laserwave-C_8bwKvT.js`),[]))},{id:`light-plus`,displayName:`Light Plus`,type:`light`,import:(()=>W(()=>import(`./light-plus-DVQuIRkW.js`),[]))},{id:`material-theme`,displayName:`Material Theme`,type:`dark`,import:(()=>W(()=>import(`./material-theme-Bm3Qr25_.js`),[]))},{id:`material-theme-darker`,displayName:`Material Theme Darker`,type:`dark`,import:(()=>W(()=>import(`./material-theme-darker-2IIEA8gg.js`),[]))},{id:`material-theme-lighter`,displayName:`Material Theme Lighter`,type:`light`,import:(()=>W(()=>import(`./material-theme-lighter-uhdI0v04.js`),[]))},{id:`material-theme-ocean`,displayName:`Material Theme Ocean`,type:`dark`,import:(()=>W(()=>import(`./material-theme-ocean-CHQ94UKr.js`),[]))},{id:`material-theme-palenight`,displayName:`Material Theme Palenight`,type:`dark`,import:(()=>W(()=>import(`./material-theme-palenight-B5W6OYN7.js`),[]))},{id:`min-dark`,displayName:`Min Dark`,type:`dark`,import:(()=>W(()=>import(`./min-dark-BSWPekZh.js`),[]))},{id:`min-light`,displayName:`Min Light`,type:`light`,import:(()=>W(()=>import(`./min-light-DDpmG2fV.js`),[]))},{id:`monokai`,displayName:`Monokai`,type:`dark`,import:(()=>W(()=>import(`./monokai-B_bV9PQ9.js`),[]))},{id:`night-owl`,displayName:`Night Owl`,type:`dark`,import:(()=>W(()=>import(`./night-owl-DhmEMT88.js`),[]))},{id:`night-owl-light`,displayName:`Night Owl Light`,type:`light`,import:(()=>W(()=>import(`./night-owl-light-eJ-hLW7d.js`),[]))},{id:`nord`,displayName:`Nord`,type:`dark`,import:(()=>W(()=>import(`./nord-Cb4Vim4T.js`),[]))},{id:`one-dark-pro`,displayName:`One Dark Pro`,type:`dark`,import:(()=>W(()=>import(`./one-dark-pro-CLwyXe_n.js`),[]))},{id:`one-light`,displayName:`One Light`,type:`light`,import:(()=>W(()=>import(`./one-light-D7Lr4KcI.js`),[]))},{id:`plastic`,displayName:`Plastic`,type:`dark`,import:(()=>W(()=>import(`./plastic-DQwYfKfQ.js`),[]))},{id:`poimandres`,displayName:`Poimandres`,type:`dark`,import:(()=>W(()=>import(`./poimandres-DRFjx7u4.js`),[]))},{id:`red`,displayName:`Red`,type:`dark`,import:(()=>W(()=>import(`./red-DX1BQOs8.js`),[]))},{id:`rose-pine`,displayName:`Rosé Pine`,type:`dark`,import:(()=>W(()=>import(`./rose-pine-aMsaMD1D.js`),[]))},{id:`rose-pine-dawn`,displayName:`Rosé Pine Dawn`,type:`light`,import:(()=>W(()=>import(`./rose-pine-dawn-8PwUyIlP.js`),[]))},{id:`rose-pine-moon`,displayName:`Rosé Pine Moon`,type:`dark`,import:(()=>W(()=>import(`./rose-pine-moon-DO-qXg-I.js`),[]))},{id:`slack-dark`,displayName:`Slack Dark`,type:`dark`,import:(()=>W(()=>import(`./slack-dark-DnToyrRv.js`),[]))},{id:`slack-ochin`,displayName:`Slack Ochin`,type:`light`,import:(()=>W(()=>import(`./slack-ochin-B2OO5cIa.js`),[]))},{id:`snazzy-light`,displayName:`Snazzy Light`,type:`light`,import:(()=>W(()=>import(`./snazzy-light-4G7pJPwS.js`),[]))},{id:`solarized-dark`,displayName:`Solarized Dark`,type:`dark`,import:(()=>W(()=>import(`./solarized-dark-UdsmMDCL.js`),[]))},{id:`solarized-light`,displayName:`Solarized Light`,type:`light`,import:(()=>W(()=>import(`./solarized-light-C1IUL_tW.js`),[]))},{id:`synthwave-84`,displayName:`Synthwave '84`,type:`dark`,import:(()=>W(()=>import(`./synthwave-84-nFMaYfgc.js`),[]))},{id:`tokyo-night`,displayName:`Tokyo Night`,type:`dark`,import:(()=>W(()=>import(`./tokyo-night-oM2G3aXe.js`),[]))},{id:`vesper`,displayName:`Vesper`,type:`dark`,import:(()=>W(()=>import(`./vesper-DdrHHSXu.js`),[]))},{id:`vitesse-black`,displayName:`Vitesse Black`,type:`dark`,import:(()=>W(()=>import(`./vitesse-black-fwtXNY1n.js`),[]))},{id:`vitesse-dark`,displayName:`Vitesse Dark`,type:`dark`,import:(()=>W(()=>import(`./vitesse-dark-BZCL-v6S.js`),[]))},{id:`vitesse-light`,displayName:`Vitesse Light`,type:`light`,import:(()=>W(()=>import(`./vitesse-light-VbXTXTou.js`),[]))}].map(e=>[e.id,e.import])),Ye=s({createOnigurumaEngine:()=>Ct,getDefaultWasmLoader:()=>St,loadWasm:()=>gt,setDefaultWasmLoader:()=>xt}),Xe=class extends Error{constructor(e){super(e),this.name=`ShikiError`}};function Ze(){return 2147483648}function Qe(){return typeof performance<`u`?performance.now():Date.now()}var $e=(e,t)=>e+(t-e%t)%t;async function et(e){let t,n,r={};function i(e){n=e,r.HEAPU8=new Uint8Array(e),r.HEAPU32=new Uint32Array(e)}function a(e,t,n){r.HEAPU8.copyWithin(e,t,t+n)}function o(e){try{return t.grow(e-n.byteLength+65535>>>16),i(t.buffer),1}catch{}}function s(e){let t=r.HEAPU8.length;e>>>=0;let n=Ze();if(e>n)return!1;for(let r=1;r<=4;r*=2){let i=t*(1+.2/r);if(i=Math.min(i,e+100663296),o(Math.min(n,$e(Math.max(e,i),65536))))return!0}return!1}let c=typeof TextDecoder<`u`?new TextDecoder(`utf8`):void 0;function l(e,t,n=1024){let r=t+n,i=t;for(;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&c)return c.decode(e.subarray(t,i));let a=``;for(;t>10,56320|e&1023)}}return a}function u(e,t){return e?l(r.HEAPU8,e,t):``}let d={emscripten_get_now:Qe,emscripten_memcpy_big:a,emscripten_resize_heap:s,fd_write:()=>0};async function f(){let n=await e({env:d,wasi_snapshot_preview1:d});t=n.memory,i(t.buffer),Object.assign(r,n),r.UTF8ToString=u}return await f(),r}var tt=Object.defineProperty,nt=(e,t,n)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rt=(e,t,n)=>nt(e,typeof t==`symbol`?t:t+``,n),it=null;function at(e){throw new Xe(e.UTF8ToString(e.getLastOnigError()))}var ot=class e{constructor(t){rt(this,`utf16Length`),rt(this,`utf8Length`),rt(this,`utf16Value`),rt(this,`utf8Value`),rt(this,`utf16OffsetToUtf8`),rt(this,`utf8OffsetToUtf16`);let n=t.length,r=e._utf8ByteLength(t),i=r!==n,a=i?new Uint32Array(n+1):null;i&&(a[n]=r);let o=i?new Uint32Array(r+1):null;i&&(o[r]=n);let s=new Uint8Array(r),c=0;for(let e=0;e=55296&&r<=56319&&e+1=56320&&n<=57343&&(l=(r-55296<<10)+65536|n-56320,u=!0)}i&&(a[e]=c,u&&(a[e+1]=c),l<=127?o[c+0]=e:l<=2047?(o[c+0]=e,o[c+1]=e):l<=65535?(o[c+0]=e,o[c+1]=e,o[c+2]=e):(o[c+0]=e,o[c+1]=e,o[c+2]=e,o[c+3]=e)),l<=127?s[c++]=l:l<=2047?(s[c++]=192|(l&1984)>>>6,s[c++]=128|(l&63)>>>0):l<=65535?(s[c++]=224|(l&61440)>>>12,s[c++]=128|(l&4032)>>>6,s[c++]=128|(l&63)>>>0):(s[c++]=240|(l&1835008)>>>18,s[c++]=128|(l&258048)>>>12,s[c++]=128|(l&4032)>>>6,s[c++]=128|(l&63)>>>0),u&&e++}this.utf16Length=n,this.utf8Length=r,this.utf16Value=t,this.utf8Value=s,this.utf16OffsetToUtf8=a,this.utf8OffsetToUtf16=o}static _utf8ByteLength(e){let t=0;for(let n=0,r=e.length;n=55296&&i<=56319&&n+1=56320&&t<=57343&&(a=(i-55296<<10)+65536|t-56320,o=!0)}t+=a<=127?1:a<=2047?2:a<=65535?3:4,o&&n++}return t}createString(e){let t=e.omalloc(this.utf8Length);return e.HEAPU8.set(this.utf8Value,t),t}},st=class e{constructor(t){if(rt(this,`id`,++e.LAST_ID),rt(this,`_onigBinding`),rt(this,`content`),rt(this,`utf16Length`),rt(this,`utf8Length`),rt(this,`utf16OffsetToUtf8`),rt(this,`utf8OffsetToUtf16`),rt(this,`ptr`),!it)throw new Xe(`Must invoke loadWasm first.`);this._onigBinding=it,this.content=t;let n=new ot(t);this.utf16Length=n.utf16Length,this.utf8Length=n.utf8Length,this.utf16OffsetToUtf8=n.utf16OffsetToUtf8,this.utf8OffsetToUtf16=n.utf8OffsetToUtf16,this.utf8Length<1e4&&!e._sharedPtrInUse?(e._sharedPtr||=it.omalloc(1e4),e._sharedPtrInUse=!0,it.HEAPU8.set(n.utf8Value,e._sharedPtr),this.ptr=e._sharedPtr):this.ptr=n.createString(it)}convertUtf8OffsetToUtf16(e){return this.utf8OffsetToUtf16?e<0?0:e>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[e]:e}convertUtf16OffsetToUtf8(e){return this.utf16OffsetToUtf8?e<0?0:e>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[e]:e}dispose(){this.ptr===e._sharedPtr?e._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};rt(st,`LAST_ID`,0),rt(st,`_sharedPtr`,0),rt(st,`_sharedPtrInUse`,!1);var ct=st,lt=class{constructor(e){if(rt(this,`_onigBinding`),rt(this,`_ptr`),!it)throw new Xe(`Must invoke loadWasm first.`);let t=[],n=[];for(let r=0,i=e.length;r{let n=e;return n=await n,typeof n==`function`&&(n=await n(t)),typeof n==`function`&&(n=await n(t)),ut(n)?n=await n.instantiator(t):dt(n)?n=await n.default(t):(ft(n)&&(n=n.data),pt(n)?n=typeof WebAssembly.instantiateStreaming==`function`?await vt(n)(t):await yt(n)(t):mt(n)||n instanceof WebAssembly.Module?n=await _t(n)(t):`default`in n&&n.default instanceof WebAssembly.Module&&(n=await _t(n.default)(t))),`instance`in n&&(n=n.instance),`exports`in n&&(n=n.exports),n})}return ht=t(),ht}function _t(e){return t=>WebAssembly.instantiate(e,t)}function vt(e){return t=>WebAssembly.instantiateStreaming(e,t)}function yt(e){return async t=>{let n=await e.arrayBuffer();return WebAssembly.instantiate(n,t)}}var bt;function xt(e){bt=e}function St(){return bt}async function Ct(e){return e&&await gt(e),{createScanner(e){return new lt(e.map(e=>typeof e==`string`?e:e.source))},createString(e){return new ct(e)}}}var wt=Re({});Be(wt,Ye);var Tt=class extends Error{constructor(e){super(e),this.name=`ShikiError`}};function Et(e){return Dt(e)}function Dt(e){return Array.isArray(e)?Ot(e):e instanceof RegExp?e:typeof e==`object`?kt(e):e}function Ot(e){let t=[];for(let n=0,r=e.length;n{for(let n in t)e[n]=t[n]}),e}function jt(e){let t=~e.lastIndexOf(`/`)||~e.lastIndexOf(`\\`);return t===0?e:~t===e.length-1?jt(e.substring(0,e.length-1)):e.substr(~t+1)}var Mt=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,Nt=class{static hasCaptures(e){return e!==null&&(Mt.lastIndex=0,Mt.test(e))}static replaceCaptures(e,t,n){return e.replace(Mt,(e,r,i,a)=>{let o=n[parseInt(r||i,10)];if(o){let e=t.substring(o.start,o.end);for(;e[0]===`.`;)e=e.substring(1);switch(a){case`downcase`:return e.toLowerCase();case`upcase`:return e.toUpperCase();default:return e}}else return e})}};function Pt(e,t){return et)}function Ft(e,t){if(e===null&&t===null)return 0;if(!e)return-1;if(!t)return 1;let n=e.length,r=t.length;if(n===r){for(let r=0;rthis._root.match(e));getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;let t=e.scopeName,n=this._cachedMatchRoot.get(t).find(t=>Vt(e.parent,t.parentScopes));return n?new Ut(n.fontStyle,n.foreground,n.background):null}},Bt=class e{constructor(e,t){this.parent=e,this.scopeName=t}static push(t,n){for(let r of n)t=new e(t,r);return t}static from(...t){let n=null;for(let r=0;r`){if(n===t.length-1)return!1;r=t[++n],i=!0}for(;e&&!Ht(e.scopeName,r);){if(i)return!1;e=e.parent}if(!e)return!1;e=e.parent}return!0}function Ht(e,t){return t===e||e.startsWith(t)&&e[t.length]===`.`}var Ut=class{constructor(e,t,n){this.fontStyle=e,this.foregroundId=t,this.backgroundId=n}};function Wt(e){if(!e||!e.settings||!Array.isArray(e.settings))return[];let t=e.settings,n=[],r=0;for(let e=0,i=t.length;e1&&(u=i.slice(0,i.length-1),u.reverse()),n[r++]=new Gt(l,u,e,o,s,c)}}return n}var Gt=class{constructor(e,t,n,r,i,a){this.scope=e,this.parentScopes=t,this.index=n,this.fontStyle=r,this.foreground=i,this.background=a}},Kt=(e=>(e[e.NotSet=-1]=`NotSet`,e[e.None=0]=`None`,e[e.Italic=1]=`Italic`,e[e.Bold=2]=`Bold`,e[e.Underline=4]=`Underline`,e[e.Strikethrough=8]=`Strikethrough`,e))(Kt||{});function qt(e,t){e.sort((e,t)=>{let n=Pt(e.scope,t.scope);return n!==0||(n=Ft(e.parentScopes,t.parentScopes),n!==0)?n:e.index-t.index});let n=0,r=`#000000`,i=`#ffffff`;for(;e.length>=1&&e[0].scope===``;){let t=e.shift();t.fontStyle!==-1&&(n=t.fontStyle),t.foreground!==null&&(r=t.foreground),t.background!==null&&(i=t.background)}let a=new Jt(t),o=new Ut(n,a.getId(r),a.getId(i)),s=new Zt(new Xt(0,null,-1,0,0),[]);for(let t=0,n=e.length;te?console.log(`how did this happen?`):this.scopeDepth=e,t!==-1&&(this.fontStyle=t),n!==0&&(this.foreground=n),r!==0&&(this.background=r)}},Zt=class e{constructor(e,t=[],n={}){this._mainRule=e,this._children=n,this._rulesWithParentScopes=t}_rulesWithParentScopes;static _cmpBySpecificity(e,t){if(e.scopeDepth!==t.scopeDepth)return t.scopeDepth-e.scopeDepth;let n=0,r=0;for(;e.parentScopes[n]===`>`&&n++,t.parentScopes[r]===`>`&&r++,!(n>=e.parentScopes.length||r>=t.parentScopes.length);){let i=t.parentScopes[r].length-e.parentScopes[n].length;if(i!==0)return i;n++,r++}return t.parentScopes.length-e.parentScopes.length}match(t){if(t!==``){let e=t.indexOf(`.`),n,r;if(e===-1?(n=t,r=``):(n=t.substring(0,e),r=t.substring(e+1)),this._children.hasOwnProperty(n))return this._children[n].match(r)}let n=this._rulesWithParentScopes.concat(this._mainRule);return n.sort(e._cmpBySpecificity),n}insert(t,n,r,i,a,o){if(n===``){this._doInsertHere(t,r,i,a,o);return}let s=n.indexOf(`.`),c,l;s===-1?(c=n,l=``):(c=n.substring(0,s),l=n.substring(s+1));let u;this._children.hasOwnProperty(c)?u=this._children[c]:(u=new e(this._mainRule.clone(),Xt.cloneArr(this._rulesWithParentScopes)),this._children[c]=u),u.insert(t+1,l,r,i,a,o)}_doInsertHere(e,t,n,r,i){if(t===null){this._mainRule.acceptOverwrite(e,n,r,i);return}for(let a=0,o=this._rulesWithParentScopes.length;a>>0}static getTokenType(e){return(e&768)>>>8}static containsBalancedBrackets(e){return!!(e&1024)}static getFontStyle(e){return(e&30720)>>>11}static getForeground(e){return(e&16744448)>>>15}static getBackground(e){return(e&4278190080)>>>24}static set(t,n,r,i,a,o,s){let c=e.getLanguageId(t),l=e.getTokenType(t),u=+!!e.containsBalancedBrackets(t),d=e.getFontStyle(t),f=e.getForeground(t),p=e.getBackground(t);return n!==0&&(c=n),r!==8&&(l=en(r)),i!==null&&(u=+!!i),a!==-1&&(d=a),o!==0&&(f=o),s!==0&&(p=s),(c<<0|l<<8|u<<10|d<<11|f<<15|p<<24)>>>0}};function $t(e){return e}function en(e){return e}function tn(e,t){let n=[],r=rn(e),i=r.next();for(;i!==null;){let e=0;if(i.length===2&&i.charAt(1)===`:`){switch(i.charAt(0)){case`R`:e=1;break;case`L`:e=-1;break;default:console.log(`Unknown priority ${i} in scope selector`)}i=r.next()}let t=o();if(n.push({matcher:t,priority:e}),i!==`,`)break;i=r.next()}return n;function a(){if(i===`-`){i=r.next();let e=a();return t=>!!e&&!e(t)}if(i===`(`){i=r.next();let e=s();return i===`)`&&(i=r.next()),e}if(nn(i)){let e=[];do e.push(i),i=r.next();while(nn(i));return n=>t(e,n)}return null}function o(){let e=[],t=a();for(;t;)e.push(t),t=a();return t=>e.every(e=>e(t))}function s(){let e=[],t=o();for(;t&&(e.push(t),i===`|`||i===`,`);){do i=r.next();while(i===`|`||i===`,`);t=o()}return t=>e.some(e=>e(t))}}function nn(e){return!!e&&!!e.match(/[\w\.:]+/)}function rn(e){let t=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,n=t.exec(e);return{next:()=>{if(!n)return null;let r=n[0];return n=t.exec(e),r}}}function an(e){typeof e.dispose==`function`&&e.dispose()}var on=class{constructor(e){this.scopeName=e}toKey(){return this.scopeName}},sn=class{constructor(e,t){this.scopeName=e,this.ruleName=t}toKey(){return`${this.scopeName}#${this.ruleName}`}},cn=class{_references=[];_seenReferenceKeys=new Set;get references(){return this._references}visitedRule=new Set;add(e){let t=e.toKey();this._seenReferenceKeys.has(t)||(this._seenReferenceKeys.add(t),this._references.push(e))}},ln=class{constructor(e,t){this.repo=e,this.initialScopeName=t,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new on(this.initialScopeName)]}seenFullScopeRequests=new Set;seenPartialScopeRequests=new Set;Q;processQueue(){let e=this.Q;this.Q=[];let t=new cn;for(let n of e)un(n,this.initialScopeName,this.repo,t);for(let e of t.references)if(e instanceof on){if(this.seenFullScopeRequests.has(e.scopeName))continue;this.seenFullScopeRequests.add(e.scopeName),this.Q.push(e)}else{if(this.seenFullScopeRequests.has(e.scopeName)||this.seenPartialScopeRequests.has(e.toKey()))continue;this.seenPartialScopeRequests.add(e.toKey()),this.Q.push(e)}}};function un(e,t,n,r){let i=n.lookup(e.scopeName);if(!i){if(e.scopeName===t)throw Error(`No grammar provided for <${t}>`);return}let a=n.lookup(t);e instanceof on?fn({baseGrammar:a,selfGrammar:i},r):dn(e.ruleName,{baseGrammar:a,selfGrammar:i,repository:i.repository},r);let o=n.injections(e.scopeName);if(o)for(let e of o)r.add(new on(e))}function dn(e,t,n){if(t.repository&&t.repository[e]){let r=t.repository[e];pn([r],t,n)}}function fn(e,t){e.selfGrammar.patterns&&Array.isArray(e.selfGrammar.patterns)&&pn(e.selfGrammar.patterns,{...e,repository:e.selfGrammar.repository},t),e.selfGrammar.injections&&pn(Object.values(e.selfGrammar.injections),{...e,repository:e.selfGrammar.repository},t)}function pn(e,t,n){for(let r of e){if(n.visitedRule.has(r))continue;n.visitedRule.add(r);let e=r.repository?At({},t.repository,r.repository):t.repository;Array.isArray(r.patterns)&&pn(r.patterns,{...t,repository:e},n);let i=r.include;if(!i)continue;let a=yn(i);switch(a.kind){case 0:fn({...t,selfGrammar:t.baseGrammar},n);break;case 1:fn(t,n);break;case 2:dn(a.ruleName,{...t,repository:e},n);break;case 3:case 4:let r=a.scopeName===t.selfGrammar.scopeName?t.selfGrammar:a.scopeName===t.baseGrammar.scopeName?t.baseGrammar:void 0;if(r){let i={baseGrammar:t.baseGrammar,selfGrammar:r,repository:e};a.kind===4?dn(a.ruleName,i,n):fn(i,n)}else a.kind===4?n.add(new sn(a.scopeName,a.ruleName)):n.add(new on(a.scopeName))}}}var mn=class{kind=0},hn=class{kind=1},gn=class{constructor(e){this.ruleName=e}kind=2},_n=class{constructor(e){this.scopeName=e}kind=3},vn=class{constructor(e,t){this.scopeName=e,this.ruleName=t}kind=4};function yn(e){if(e===`$base`)return new mn;if(e===`$self`)return new hn;let t=e.indexOf(`#`);return t===-1?new _n(e):t===0?new gn(e.substring(1)):new vn(e.substring(0,t),e.substring(t+1))}var bn=/\\(\d+)/,xn=/\\(\d+)/g,Sn=-1,Cn=-2;function wn(e){return e}function Tn(e){return e}var En=class{$location;id;_nameIsCapturing;_name;_contentNameIsCapturing;_contentName;constructor(e,t,n,r){this.$location=e,this.id=t,this._name=n||null,this._nameIsCapturing=Nt.hasCaptures(this._name),this._contentName=r||null,this._contentNameIsCapturing=Nt.hasCaptures(this._contentName)}get debugName(){let e=this.$location?`${jt(this.$location.filename)}:${this.$location.line}`:`unknown`;return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,t){return!this._nameIsCapturing||this._name===null||e===null||t===null?this._name:Nt.replaceCaptures(this._name,e,t)}getContentName(e,t){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:Nt.replaceCaptures(this._contentName,e,t)}},Dn=class extends En{retokenizeCapturedWithRuleId;constructor(e,t,n,r,i){super(e,t,n,r),this.retokenizeCapturedWithRuleId=i}dispose(){}collectPatterns(e,t){throw Error(`Not supported!`)}compile(e,t){throw Error(`Not supported!`)}compileAG(e,t,n,r){throw Error(`Not supported!`)}},On=class extends En{_match;captures;_cachedCompiledPatterns;constructor(e,t,n,r,i){super(e,t,n,null),this._match=new Nn(r,this.id),this.captures=i,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,t){t.push(this._match)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Pn,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},kn=class extends En{hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,r,i){super(e,t,n,r),this.patterns=i.patterns,this.hasMissingPatterns=i.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}collectPatterns(e,t){for(let n of this.patterns)e.getRule(n).collectPatterns(e,t)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Pn,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},An=class extends En{_begin;beginCaptures;_end;endHasBackReferences;endCaptures;applyEndPatternLast;hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,r,i,a,o,s,c,l){super(e,t,n,r),this._begin=new Nn(i,this.id),this.beginCaptures=a,this._end=new Nn(o||`￿`,-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=s,this.applyEndPatternLast=c||!1,this.patterns=l.patterns,this.hasMissingPatterns=l.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,t){return this._end.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e,t).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e,t).compileAG(e,n,r)}_getCachedCompiledPatterns(e,t){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Pn;for(let t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,t):this._cachedCompiledPatterns.setSource(0,t)),this._cachedCompiledPatterns}},jn=class extends En{_begin;beginCaptures;whileCaptures;_while;whileHasBackReferences;hasMissingPatterns;patterns;_cachedCompiledPatterns;_cachedCompiledWhilePatterns;constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r),this._begin=new Nn(i,this.id),this.beginCaptures=a,this.whileCaptures=s,this._while=new Nn(o,Cn),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null),this._cachedCompiledWhilePatterns&&=(this._cachedCompiledWhilePatterns.dispose(),null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,t){return this._while.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Pn;for(let t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,t){return this._getCachedCompiledWhilePatterns(e,t).compile(e)}compileWhileAG(e,t,n,r){return this._getCachedCompiledWhilePatterns(e,t).compileAG(e,n,r)}_getCachedCompiledWhilePatterns(e,t){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new Pn,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,t||`￿`),this._cachedCompiledWhilePatterns}},Mn=class e{static createCaptureRule(e,t,n,r,i){return e.registerRule(e=>new Dn(t,e,n,r,i))}static getCompiledRuleId(t,n,r){return t.id||n.registerRule(i=>{if(t.id=i,t.match)return new On(t.$vscodeTextmateLocation,t.id,t.name,t.match,e._compileCaptures(t.captures,n,r));if(t.begin===void 0){t.repository&&(r=At({},r,t.repository));let i=t.patterns;return i===void 0&&t.include&&(i=[{include:t.include}]),new kn(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,e._compilePatterns(i,n,r))}return t.while?new jn(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,e._compileCaptures(t.beginCaptures||t.captures,n,r),t.while,e._compileCaptures(t.whileCaptures||t.captures,n,r),e._compilePatterns(t.patterns,n,r)):new An(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,e._compileCaptures(t.beginCaptures||t.captures,n,r),t.end,e._compileCaptures(t.endCaptures||t.captures,n,r),t.applyEndPatternLast,e._compilePatterns(t.patterns,n,r))}),t.id}static _compileCaptures(t,n,r){let i=[];if(t){let a=0;for(let e in t){if(e===`$vscodeTextmateLocation`)continue;let t=parseInt(e,10);t>a&&(a=t)}for(let e=0;e<=a;e++)i[e]=null;for(let a in t){if(a===`$vscodeTextmateLocation`)continue;let o=parseInt(a,10),s=0;t[a].patterns&&(s=e.getCompiledRuleId(t[a],n,r)),i[o]=e.createCaptureRule(n,t[a].$vscodeTextmateLocation,t[a].name,t[a].contentName,s)}}return i}static _compilePatterns(t,n,r){let i=[];if(t)for(let a=0,o=t.length;ae.substring(t.start,t.end));return xn.lastIndex=0,this.source.replace(xn,(e,t)=>Lt(n[parseInt(t,10)]||``))}_buildAnchorCache(){if(typeof this.source!=`string`)throw Error(`This method should only be called if the source is a string`);let e=[],t=[],n=[],r=[],i,a,o,s;for(i=0,a=this.source.length;ie.source);this._cached=new Fn(e,t,this._items.map(e=>e.ruleId))}return this._cached}compileAG(e,t,n){return this._hasAnchors?t?n?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G0):n?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G0):this.compile(e)}_resolveAnchors(e,t,n){return new Fn(e,this._items.map(e=>e.resolveAnchors(t,n)),this._items.map(e=>e.ruleId))}},Fn=class{constructor(e,t,n){this.regExps=t,this.rules=n,this.scanner=e.createOnigScanner(t)}scanner;dispose(){typeof this.scanner.dispose==`function`&&this.scanner.dispose()}toString(){let e=[];for(let t=0,n=this.rules.length;ti.map(i=>d[i]); +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=l(d(),1);function p(e){let t=(0,f.useRef)(e);return(0,f.useInsertionEffect)(()=>void(t.current=e)),(0,f.useCallback)((...e)=>t.current(...e),[])}var m=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),h=o(((e,t)=>{t.exports=m()}))(),g=(0,f.createContext)(void 0);function _(){return(0,f.useContext)(g)}var v={position:`absolute`,top:0,bottom:0,textAlign:`center`,whiteSpace:`normal`,touchAction:`none`},y={display:`contents`},b=`diffs-container`,x=(()=>{try{return!1}catch{return!1}})(),S=/(?=^From [a-f0-9]+ .+$)/m,C=/(?=^diff --git)/gm,w=/(?<=\n)/,T=/^(---|\+\+\+)\s+([^\t\r\n]+)/,E=/^(---|\+\+\+)\s+[ab]\/([^\t\r\n]+)/,D=/^diff --git (?:"a\/(.+?)"|a\/(.+?)) (?:"b\/(.+?)"|b\/(.+?))$/,O=/^index ([0-9a-f]+)\.\.([0-9a-f]+)(?: (\d+))?$/i,k=`header-prefix`,A=`header-filename-suffix`,j=`header-metadata`,M=`header-custom`,N={dark:`pierre-dark`,light:`pierre-light`},P=`data-theme-css`,F=`data-unsafe-css`,I=`data-diffs-scrollbar-measure`,L=`data-diffs-code-view-header`,R=`data-diffs-code-view-footer`,z=`--diffs-scrollbar-gutter-measured`,B=1e5,V={hunkLineCount:50,lineHeight:20,diffHeaderHeight:44,spacing:8},H={...V,hunkLineCount:1},ee={paddingTop:8,paddingBottom:8,gap:8},te={omega:.015,positionEpsilon:.5,velocityEpsilon:.05},ne=Object.freeze({fromStart:0,fromEnd:0}),U={startingLine:0,totalLines:1/0,bufferBefore:0,bufferAfter:0},re={startingLine:0,totalLines:0,bufferBefore:0,bufferAfter:0};function ie(e){return`annotation-${`side`in e?`${e.side}-`:``}${e.lineNumber}`}function ae({hunkIndex:e,lineIndex:t,conflictIndex:n}){return`merge-conflict-action-${e}-${t}-${n}`}function oe(e,t){return e-(t===0?0:1)}function se(e,t){return oe(e,t)+t}function ce(e,t){let n=t.hunks[e.hunkIndex];if(n!=null)return{hunkIndex:e.hunkIndex,lineIndex:le(n,e.startContentIndex)}}function le(e,t){let n=e.unifiedLineStart;for(let r=0;r(0,h.jsx)(`div`,{slot:f(e),children:o(e)},t)),t!=null&&c!=null&&d!=null&&t.map(t=>{if(t==null)return;let n=de(t,e);return(0,h.jsx)(`div`,{slot:n,style:y,children:c(t,d)},n)}),s!=null&&(0,h.jsx)(`div`,{slot:`gutter-utility-slot`,style:v,children:s(u)})]})}function de(e,t){let n=ce(e,t);return n==null?void 0:ae({hunkIndex:n.hunkIndex,lineIndex:n.lineIndex,conflictIndex:e.conflictIndex})}function fe({file:e,renderCustomHeader:t,renderHeaderPrefix:n,renderHeaderFilenameSuffix:r,renderHeaderMetadata:i,renderAnnotation:a,lineAnnotations:o,renderGutterUtility:s,getHoveredLine:c,getAnnotationSlotName:l=ie}){let u=t?.(e),d=n?.(e),f=r?.(e),p=i?.(e);return(0,h.jsxs)(h.Fragment,{children:[u==null?(0,h.jsxs)(h.Fragment,{children:[d!=null&&(0,h.jsx)(`div`,{slot:`header-prefix`,children:d}),f!=null&&(0,h.jsx)(`div`,{slot:`header-filename-suffix`,children:f}),p!=null&&(0,h.jsx)(`div`,{slot:`header-metadata`,children:p})]}):(0,h.jsx)(`div`,{slot:M,children:u}),a!=null&&o?.map((e,t)=>(0,h.jsx)(`div`,{slot:l(e),children:a(e)},t)),s!=null&&(0,h.jsx)(`div`,{slot:`gutter-utility-slot`,style:v,children:s(c)})]})}var pe=new Map,me=new Map,he=new Map,ge=new Set;function _e(e){for(let t of Array.isArray(e)?e:[e])if(t!==`text`&&t!==`ansi`&&!ge.has(t))return!1;return!0}function ve(e=N){let t=[];return typeof e==`string`?t.push(e):(t.push(e.dark),t.push(e.light)),t}var ye=new Set;function be(e){let t=[],n=new Set;for(let r of xe(e.themes)){let e=we(r)?r.getThemes():[r];for(let r of e){if(n.has(r.name))throw Error(`Theme collection already contains theme "${r.name}"`);n.add(r.name),t.push(r)}}let r=Object.freeze([...t]),i=Object.freeze(r.filter(e=>e.colorScheme===`light`)),a=Object.freeze(r.filter(e=>e.colorScheme===`dark`)),o=new Map(r.map(e=>[e.name,e])),s=Object.freeze(r.map(e=>e.name)),c=Object.freeze(i.map(e=>e.name)),l=Object.freeze(a.map(e=>e.name));function u(e){if(e==null)return r;let{colorScheme:t,collection:n}=e;return n==null?t===`light`?i:t===`dark`?a:r:r.filter(e=>e.collection===n?t==null||e.colorScheme===t:!1)}return{getTheme(e){return o.get(e)},getThemes(e){return u(e)},getThemeNames(e){return e?.collection==null?e?.colorScheme===`light`?c:e?.colorScheme===`dark`?l:s:u(e).map(e=>e.name)},hasTheme(e){return o.has(e)},orderBy(e){return be({themes:r.map((e,t)=>({descriptor:e,index:t})).sort((t,n)=>{let r=e(t.descriptor,n.descriptor);return r===0?t.index-n.index:r}).map(e=>e.descriptor)})},pick(e){let t=[],n=new Set;for(let r of e){if(n.has(r))throw Error(`Theme collection pick already includes theme "${r}"`);n.add(r);let e=o.get(r);if(e==null)throw Error(`Theme collection does not contain theme "${r}"`);t.push(e)}return be({themes:t})},registerInto(e){for(let t of r)e.registerThemeIfAbsent(t.name,t.load)}}}function xe(e){return Se(e)?[e]:e}function Se(e){return we(e)||Ce(e)}function Ce(e){return typeof e.name==`string`&&typeof e.load==`function`}function we(e){return typeof e.getThemes==`function`}function Te(e){return typeof e==`object`&&e&&`default`in e?e.default:e}var Ee=class extends Error{constructor(e){super(`Theme "${e}" is already registered`),this.name=`DuplicateThemeError`}},De=class extends Error{constructor(e){super(`No loader registered for theme "${e}"`),this.name=`UnregisteredThemeError`}},Oe=class extends Error{constructor(e){super(`Theme "${e}" has not been resolved`),this.name=`UnresolvedThemeError`}};function ke(){let e=new Map,t=new Map,n=new Map,r=0;function i(t,n){if(e.has(t))throw new Ee(t);e.set(t,n)}function a(t,n){return!e.has(t)&&(e.set(t,n),!0)}function o(t){return e.has(t)}function s(i){let a=t.get(i);if(a!==void 0)return Promise.resolve(a);let o=n.get(i);if(o!==void 0)return o;let s=e.get(i);if(s===void 0)return Promise.reject(new De(i));let c=r,l=s().then(e=>{let a=Te(e);return c===r&&t.set(i,a),n.get(i)===l&&n.delete(i),a}).catch(e=>{throw n.get(i)===l&&n.delete(i),e});return n.set(i,l),l}function c(e){return Promise.all(e.map(e=>s(e)))}function l(e,n){t.set(e,n)}function u(e){for(let[t,n]of e)l(t,n)}function d(e){return t.get(e)}function f(e){let n=[];for(let r of e){let e=t.get(r);if(e===void 0)throw new Oe(r);n.push(e)}return n}function p(e){return t.has(e)}function m(e){for(let n of e)if(!t.has(n))return!1;return!0}function h(e){let n=t.get(e);return n===void 0?s(e):n}function g(){r++,t.clear(),n.clear()}return{clearResolvedThemes:g,getResolvedOrResolveTheme:h,getResolvedTheme:d,getResolvedThemes:f,hasRegisteredTheme:o,hasResolvedTheme:p,hasResolvedThemes:m,registerTheme:i,registerThemeIfAbsent:a,resolveTheme:s,resolveThemes:c,seedResolvedTheme:l,seedResolvedThemes:u}}var Ae=ke();function je(e,t){e=Array.isArray(e)?e:[e];for(let n of e){let e;if(typeof n==`string`){if(e=Ae.getResolvedTheme(n),e==null)throw Error(`loadResolvedThemes: ${n} is not resolved, you must resolve it before calling loadResolvedThemes`)}else e=n,n=n.name,Ae.getResolvedTheme(n)??Ae.seedResolvedTheme(n,e);ye.has(n)||(ye.add(n),t.loadThemeSync(e))}}function Me(e,t){e=Array.isArray(e)?e:[e];for(let n of e){if(ge.has(n.name))continue;let e=pe.get(n.name);e??(e=n,pe.set(n.name,e)),ge.add(e.name),t.loadLanguageSync(e.data)}}function Ne(){return typeof WorkerGlobalScope<`u`&&typeof self<`u`&&self instanceof WorkerGlobalScope}var Pe=Object.defineProperty,Fe=Object.getOwnPropertyDescriptor,Ie=Object.getOwnPropertyNames,Le=Object.prototype.hasOwnProperty,Re=(e,t)=>{let n={};for(var r in e)Pe(n,r,{get:e[r],enumerable:!0});return t||Pe(n,Symbol.toStringTag,{value:`Module`}),n},ze=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=Ie(t),a=0,o=i.length,s;at[e]).bind(null,s),enumerable:!(r=Fe(t,s))||r.enumerable});return e},Be=(e,t,n)=>(ze(e,t,`default`),n&&ze(n,t,`default`)),Ve=`modulepreload`,He=function(e){return`/`+e},Ue={},W=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=He(t,n),t=s(t),t in Ue)return;Ue[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ve,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},We=[{id:`abap`,name:`ABAP`,import:(()=>W(()=>import(`./abap-CLvhMVsD.js`),[]))},{id:`actionscript-3`,name:`ActionScript`,aliases:[`actionscript`,`as3`],import:(()=>W(()=>import(`./actionscript-3-Cs6JJXT5.js`),[]))},{id:`ada`,name:`Ada`,import:(()=>W(()=>import(`./ada-C5qYipkI.js`),[]))},{id:`ahk`,name:`AutoHotkey`,aliases:[`ahk1`],import:(()=>W(()=>import(`./ahk-CA9gdOdF.js`),[]))},{id:`ahk2`,name:`AutoHotkey2`,import:(()=>W(()=>import(`./ahk2-_6rzW9BS.js`),[]))},{id:`angular-html`,name:`Angular HTML`,import:(()=>W(()=>import(`./angular-html-CLXnbU8d.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3])))},{id:`angular-ts`,name:`Angular TypeScript`,import:(()=>W(()=>import(`./angular-ts-DBfR-Atp.js`),__vite__mapDeps([4,0,1,2,3,5])))},{id:`apache`,name:`Apache Conf`,import:(()=>W(()=>import(`./apache-U0d_L8uA.js`),[]))},{id:`apex`,name:`Apex`,import:(()=>W(()=>import(`./apex-KFGFyKwG.js`),[]))},{id:`apl`,name:`APL`,import:(()=>W(()=>import(`./apl-9Rn687tQ.js`),__vite__mapDeps([6,2,3,1,7,8,9])))},{id:`applescript`,name:`AppleScript`,import:(()=>W(()=>import(`./applescript-CCn79oCD.js`),[]))},{id:`ara`,name:`Ara`,import:(()=>W(()=>import(`./ara-4CJ0cIlV.js`),[]))},{id:`asciidoc`,name:`AsciiDoc`,aliases:[`adoc`],import:(()=>W(()=>import(`./asciidoc-SCjQUq34.js`),[]))},{id:`asm`,name:`Assembly`,import:(()=>W(()=>import(`./asm-Cmm7eHzH.js`),[]))},{id:`astro`,name:`Astro`,import:(()=>W(()=>import(`./astro-BdYFGcnW.js`),__vite__mapDeps([10,2,3,9,11,12,13])))},{id:`awk`,name:`AWK`,import:(()=>W(()=>import(`./awk-BWXHIvNe.js`),[]))},{id:`ballerina`,name:`Ballerina`,import:(()=>W(()=>import(`./ballerina-B7ZEbQpA.js`),[]))},{id:`bat`,name:`Batch File`,aliases:[`batch`,`cmd`],import:(()=>W(()=>import(`./bat-qdxAdBWQ.js`),[]))},{id:`beancount`,name:`Beancount`,import:(()=>W(()=>import(`./beancount-D-usSTwE.js`),[]))},{id:`berry`,name:`Berry`,aliases:[`be`],import:(()=>W(()=>import(`./berry-DKpUyyne.js`),[]))},{id:`bibtex`,name:`BibTeX`,import:(()=>W(()=>import(`./bibtex-Ci_nEsc7.js`),[]))},{id:`bicep`,name:`Bicep`,import:(()=>W(()=>import(`./bicep-CUHmPFLl.js`),[]))},{id:`bird2`,name:`BIRD2 Configuration`,aliases:[`bird`],import:(()=>W(()=>import(`./bird2-CYIUgYqB.js`),[]))},{id:`blade`,name:`Blade`,import:(()=>W(()=>import(`./blade-Dv4XuYG7.js`),__vite__mapDeps([14,2,3,1,7,8,9,15,16])))},{id:`bsl`,name:`1C (Enterprise)`,aliases:[`1c`],import:(()=>W(()=>import(`./bsl-_VjlB9mv.js`),__vite__mapDeps([17,18])))},{id:`c`,name:`C`,import:(()=>W(()=>import(`./c-BFOYLRr0.js`).then(e=>e.n),[]))},{id:`c3`,name:`C3`,import:(()=>W(()=>import(`./c3-D0apG41V.js`),[]))},{id:`cadence`,name:`Cadence`,aliases:[`cdc`],import:(()=>W(()=>import(`./cadence-CQ2zXKGN.js`),[]))},{id:`cairo`,name:`Cairo`,import:(()=>W(()=>import(`./cairo-DLTphjLi.js`),__vite__mapDeps([19,20])))},{id:`chapel`,name:`Chapel`,aliases:[`chpl`],import:(()=>W(()=>import(`./chapel-C8gtur09.js`),__vite__mapDeps([21,22])))},{id:`clarity`,name:`Clarity`,import:(()=>W(()=>import(`./clarity-CtfBBspg.js`),[]))},{id:`clojure`,name:`Clojure`,aliases:[`clj`],import:(()=>W(()=>import(`./clojure-DqKBuwfJ.js`),[]))},{id:`cmake`,name:`CMake`,import:(()=>W(()=>import(`./cmake-Bj61d0ZC.js`),[]))},{id:`cobol`,name:`COBOL`,import:(()=>W(()=>import(`./cobol-B11mWRHr.js`),__vite__mapDeps([23,1,2,3,8])))},{id:`codeowners`,name:`CODEOWNERS`,import:(()=>W(()=>import(`./codeowners-C8r90Shi.js`),[]))},{id:`codeql`,name:`CodeQL`,aliases:[`ql`],import:(()=>W(()=>import(`./codeql-oeQT6MSM.js`),[]))},{id:`coffee`,name:`CoffeeScript`,aliases:[`coffeescript`],import:(()=>W(()=>import(`./coffee-DaQZRolb.js`),__vite__mapDeps([24,2])))},{id:`common-lisp`,name:`Common Lisp`,aliases:[`lisp`],import:(()=>W(()=>import(`./common-lisp-Cv5bFMCO.js`),[]))},{id:`coq`,name:`Rocq`,import:(()=>W(()=>import(`./coq-DuBRPxYg.js`),[]))},{id:`cpp`,name:`C++`,aliases:[`c++`],import:(()=>W(()=>import(`./cpp-lH9GYSm7.js`).then(e=>e.n),__vite__mapDeps([25,26,27,22])))},{id:`crystal`,name:`Crystal`,import:(()=>W(()=>import(`./crystal-Ctp3VANd.js`),__vite__mapDeps([28,2,3,1,16,22,29])))},{id:`csharp`,name:`C#`,aliases:[`c#`,`cs`],import:(()=>W(()=>import(`./csharp-oqKa8noW.js`),[]))},{id:`css`,name:`CSS`,import:(()=>W(()=>import(`./css-EYEy3Xlb.js`).then(e=>e.n),[]))},{id:`csv`,name:`CSV`,import:(()=>W(()=>import(`./csv-Dx-8-gkx.js`),[]))},{id:`cue`,name:`CUE`,import:(()=>W(()=>import(`./cue-CE9AQfxI.js`),[]))},{id:`cypher`,name:`Cypher`,aliases:[`cql`],import:(()=>W(()=>import(`./cypher-ClKdZ_lG.js`),[]))},{id:`d`,name:`D`,import:(()=>W(()=>import(`./d-qD-0Kul2.js`),[]))},{id:`dart`,name:`Dart`,import:(()=>W(()=>import(`./dart-CnvKMtbv.js`),[]))},{id:`dax`,name:`DAX`,import:(()=>W(()=>import(`./dax-BkyTk9wS.js`),[]))},{id:`desktop`,name:`Desktop`,import:(()=>W(()=>import(`./desktop-Dlh5hvp9.js`),[]))},{id:`diff`,name:`Diff`,import:(()=>W(()=>import(`./diff-woXpYk--.js`),[]))},{id:`docker`,name:`Dockerfile`,aliases:[`dockerfile`],import:(()=>W(()=>import(`./docker-IyjqRm3v.js`),[]))},{id:`dotenv`,name:`dotEnv`,import:(()=>W(()=>import(`./dotenv-_5a1GRtc.js`),[]))},{id:`dream-maker`,name:`Dream Maker`,import:(()=>W(()=>import(`./dream-maker-DW3nJb8Q.js`),[]))},{id:`edge`,name:`Edge`,import:(()=>W(()=>import(`./edge-f80K2VIZ.js`),__vite__mapDeps([30,1,2,3,11,15])))},{id:`elixir`,name:`Elixir`,import:(()=>W(()=>import(`./elixir-ht5CMTKg.js`),__vite__mapDeps([31,1,2,3])))},{id:`elm`,name:`Elm`,import:(()=>W(()=>import(`./elm-CIXzGuv_.js`),__vite__mapDeps([32,27,22])))},{id:`emacs-lisp`,name:`Emacs Lisp`,aliases:[`elisp`],import:(()=>W(()=>import(`./emacs-lisp-c_oH4hRZ.js`),[]))},{id:`erb`,name:`ERB`,import:(()=>W(()=>import(`./erb-BIc8Omep.js`),__vite__mapDeps([33,1,2,3,34,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39])))},{id:`erlang`,name:`Erlang`,aliases:[`erl`],import:(()=>W(()=>import(`./erlang-Cphh6RMH.js`),__vite__mapDeps([40,41])))},{id:`fennel`,name:`Fennel`,import:(()=>W(()=>import(`./fennel-DQxkIbk2.js`),[]))},{id:`fish`,name:`Fish`,import:(()=>W(()=>import(`./fish-BJitypiv.js`),[]))},{id:`fluent`,name:`Fluent`,aliases:[`ftl`],import:(()=>W(()=>import(`./fluent-C03EYrpw.js`),[]))},{id:`fortran-fixed-form`,name:`Fortran (Fixed Form)`,aliases:[`f`,`for`,`f77`],import:(()=>W(()=>import(`./fortran-fixed-form-DEKoE2YW.js`),__vite__mapDeps([42,43])))},{id:`fortran-free-form`,name:`Fortran (Free Form)`,aliases:[`f90`,`f95`,`f03`,`f08`,`f18`],import:(()=>W(()=>import(`./fortran-free-form-CYNrtFtB.js`),[]))},{id:`fsharp`,name:`F#`,aliases:[`f#`,`fs`],import:(()=>W(()=>import(`./fsharp-D13ZGOAj.js`),__vite__mapDeps([44,41])))},{id:`gdresource`,name:`GDResource`,aliases:[`tscn`,`tres`],import:(()=>W(()=>import(`./gdresource-xMC7jr7x.js`),__vite__mapDeps([45,46,47])))},{id:`gdscript`,name:`GDScript`,aliases:[`gd`],import:(()=>W(()=>import(`./gdscript-DYvRD3hg.js`),[]))},{id:`gdshader`,name:`GDShader`,import:(()=>W(()=>import(`./gdshader-CBce3t8t.js`),[]))},{id:`genie`,name:`Genie`,import:(()=>W(()=>import(`./genie-CV2tkWYe.js`),[]))},{id:`gherkin`,name:`Gherkin`,import:(()=>W(()=>import(`./gherkin-DExj1W_8.js`),[]))},{id:`git-commit`,name:`Git Commit Message`,import:(()=>W(()=>import(`./git-commit-BSykSTBG.js`),__vite__mapDeps([48,49])))},{id:`git-rebase`,name:`Git Rebase Message`,import:(()=>W(()=>import(`./git-rebase-BdIZdJUH.js`),__vite__mapDeps([50,29])))},{id:`gleam`,name:`Gleam`,import:(()=>W(()=>import(`./gleam-CSRkHgEL.js`),[]))},{id:`glimmer-js`,name:`Glimmer JS`,aliases:[`gjs`],import:(()=>W(()=>import(`./glimmer-js-D-2dfiTn.js`),__vite__mapDeps([51,2,3,1,11])))},{id:`glimmer-ts`,name:`Glimmer TS`,aliases:[`gts`],import:(()=>W(()=>import(`./glimmer-ts-BHHXO3rp.js`),__vite__mapDeps([52,2,3,1,11])))},{id:`glsl`,name:`GLSL`,import:(()=>W(()=>import(`./glsl-BYnWR4Hv.js`).then(e=>e.n),__vite__mapDeps([27,22])))},{id:`gn`,name:`GN`,import:(()=>W(()=>import(`./gn-ilITqXS6.js`),[]))},{id:`gnuplot`,name:`Gnuplot`,import:(()=>W(()=>import(`./gnuplot-7GGW24-e.js`),[]))},{id:`go`,name:`Go`,import:(()=>W(()=>import(`./go-rLFTqkRN.js`),[]))},{id:`graphql`,name:`GraphQL`,aliases:[`gql`],import:(()=>W(()=>import(`./graphql-ClvnBbMm.js`).then(e=>e.n),__vite__mapDeps([36,2,11,13,37])))},{id:`groovy`,name:`Groovy`,import:(()=>W(()=>import(`./groovy-CacY0gHj.js`),[]))},{id:`hack`,name:`Hack`,import:(()=>W(()=>import(`./hack-BCf1gOIX.js`),__vite__mapDeps([53,1,2,3,16])))},{id:`haml`,name:`Ruby Haml`,import:(()=>W(()=>import(`./haml-Bmn5-Yjh.js`).then(e=>e.n),__vite__mapDeps([35,2,3])))},{id:`handlebars`,name:`Handlebars`,aliases:[`hbs`],import:(()=>W(()=>import(`./handlebars-C7MKIi0r.js`),__vite__mapDeps([54,2,3,1,39])))},{id:`haskell`,name:`Haskell`,aliases:[`hs`],import:(()=>W(()=>import(`./haskell-D8IpX4py.js`),[]))},{id:`haxe`,name:`Haxe`,import:(()=>W(()=>import(`./haxe-C8oCnwJJ.js`),[]))},{id:`hcl`,name:`HashiCorp HCL`,import:(()=>W(()=>import(`./hcl-Dh228itO.js`),[]))},{id:`hjson`,name:`Hjson`,import:(()=>W(()=>import(`./hjson-CxZEssPk.js`),[]))},{id:`hlsl`,name:`HLSL`,import:(()=>W(()=>import(`./hlsl-Cvrh5tZx.js`),[]))},{id:`html`,name:`HTML`,import:(()=>W(()=>import(`./html-rbi5PgIL.js`).then(e=>e.n),__vite__mapDeps([1,2,3])))},{id:`html-derivative`,name:`HTML (Derivative)`,import:(()=>W(()=>import(`./html-derivative-ClIm4xpX.js`),__vite__mapDeps([15,1,2,3])))},{id:`http`,name:`HTTP`,import:(()=>W(()=>import(`./http-B2PGq0eK.js`),__vite__mapDeps([55,7,8,9,29,36,2,11,13,37])))},{id:`hurl`,name:`Hurl`,import:(()=>W(()=>import(`./hurl-CqQcMAR7.js`),__vite__mapDeps([56,7,8,57,36,2,11,13,37])))},{id:`hxml`,name:`HXML`,import:(()=>W(()=>import(`./hxml-Dcm88srW.js`),__vite__mapDeps([58,59])))},{id:`hy`,name:`Hy`,import:(()=>W(()=>import(`./hy-CZbG8q4J.js`),[]))},{id:`imba`,name:`Imba`,import:(()=>W(()=>import(`./imba-DsUTQ-LC.js`),[]))},{id:`ini`,name:`INI`,aliases:[`properties`],import:(()=>W(()=>import(`./ini-B5eOa1yu.js`),[]))},{id:`java`,name:`Java`,import:(()=>W(()=>import(`./java-BFOUMeCc.js`).then(e=>e.n),[]))},{id:`javascript`,name:`JavaScript`,aliases:[`js`,`cjs`,`mjs`],import:(()=>W(()=>import(`./javascript-CR5GavSE.js`).then(e=>e.n),[]))},{id:`jinja`,name:`Jinja`,import:(()=>W(()=>import(`./jinja-BeguzEd0.js`),__vite__mapDeps([60,1,2,3])))},{id:`jison`,name:`Jison`,import:(()=>W(()=>import(`./jison-CCx2qNB9.js`),__vite__mapDeps([61,2])))},{id:`json`,name:`JSON`,import:(()=>W(()=>import(`./json-I28f8KUm.js`).then(e=>e.n),[]))},{id:`json5`,name:`JSON5`,import:(()=>W(()=>import(`./json5-BR5RXkoi.js`),[]))},{id:`jsonc`,name:`JSON with Comments`,import:(()=>W(()=>import(`./jsonc-CYpm1nAK.js`),[]))},{id:`jsonl`,name:`JSON Lines`,import:(()=>W(()=>import(`./jsonl-CmCQp5Yx.js`),[]))},{id:`jsonnet`,name:`Jsonnet`,import:(()=>W(()=>import(`./jsonnet-CJTPZ8u_.js`),[]))},{id:`jssm`,name:`JSSM`,aliases:[`fsl`],import:(()=>W(()=>import(`./jssm-DXw9l8Rf.js`),[]))},{id:`jsx`,name:`JSX`,import:(()=>W(()=>import(`./jsx-CrD-Ow3U.js`).then(e=>e.n),[]))},{id:`julia`,name:`Julia`,aliases:[`jl`],import:(()=>W(()=>import(`./julia-DdSuU0oJ.js`),__vite__mapDeps([62,2,16,20,25,26,27,22,63])))},{id:`just`,name:`Just`,aliases:[`justfile`],import:(()=>W(()=>import(`./just-DxOGI1MU.js`),__vite__mapDeps([64,2,11,20,29,34,3,1,7,8,16,22,25,26,27,35,36,13,37,38,39,65])))},{id:`kdl`,name:`KDL`,import:(()=>W(()=>import(`./kdl-CsD5j6eV.js`),[]))},{id:`kotlin`,name:`Kotlin`,aliases:[`kt`,`kts`],import:(()=>W(()=>import(`./kotlin-DhhofPvG.js`),[]))},{id:`kusto`,name:`Kusto`,aliases:[`kql`],import:(()=>W(()=>import(`./kusto-C7mF5XQf.js`),[]))},{id:`latex`,name:`LaTeX`,import:(()=>W(()=>import(`./latex-BTFSxgVs.js`),__vite__mapDeps([66,67,63])))},{id:`lean`,name:`Lean 4`,aliases:[`lean4`],import:(()=>W(()=>import(`./lean-CewbzKMR.js`),[]))},{id:`less`,name:`Less`,import:(()=>W(()=>import(`./less-DVTAwKKz.js`),[]))},{id:`liquid`,name:`Liquid`,import:(()=>W(()=>import(`./liquid-WYMJQfxi.js`),__vite__mapDeps([68,2,3,1,9])))},{id:`llvm`,name:`LLVM IR`,import:(()=>W(()=>import(`./llvm-DqHOMS-s.js`),[]))},{id:`log`,name:`Log file`,import:(()=>W(()=>import(`./log-BNLmms1o.js`),[]))},{id:`logo`,name:`Logo`,import:(()=>W(()=>import(`./logo-Cluzi2Zq.js`),[]))},{id:`lua`,name:`Lua`,import:(()=>W(()=>import(`./lua-NdL_hgi8.js`).then(e=>e.n),__vite__mapDeps([38,22])))},{id:`luau`,name:`Luau`,import:(()=>W(()=>import(`./luau-C2pBCSgt.js`),[]))},{id:`make`,name:`Makefile`,aliases:[`makefile`],import:(()=>W(()=>import(`./make-Dixweg8N.js`),[]))},{id:`markdown`,name:`Markdown`,aliases:[`md`],import:(()=>W(()=>import(`./markdown-BYOwaDjH.js`),[]))},{id:`marko`,name:`Marko`,import:(()=>W(()=>import(`./marko-BXDrtGB_.js`),__vite__mapDeps([69,3,5,11,70])))},{id:`matlab`,name:`MATLAB`,import:(()=>W(()=>import(`./matlab-D7qyCx1q.js`),[]))},{id:`mdc`,name:`MDC`,import:(()=>W(()=>import(`./mdc-DFT9jeFB.js`),__vite__mapDeps([71,15,1,2,3,39,41])))},{id:`mdx`,name:`MDX`,import:(()=>W(()=>import(`./mdx-DQZ5AkYe.js`),[]))},{id:`mermaid`,name:`Mermaid`,aliases:[`mmd`],import:(()=>W(()=>import(`./mermaid-BxpfTIzt.js`),[]))},{id:`mipsasm`,name:`MIPS Assembly`,aliases:[`mips`],import:(()=>W(()=>import(`./mipsasm-BMqwQI7S.js`),[]))},{id:`mojo`,name:`Mojo`,import:(()=>W(()=>import(`./mojo-fg40_ntQ.js`),[]))},{id:`moonbit`,name:`MoonBit`,aliases:[`mbt`,`mbti`],import:(()=>W(()=>import(`./moonbit-DgjMoLWr.js`),[]))},{id:`move`,name:`Move`,import:(()=>W(()=>import(`./move-BYnGhZoM.js`),[]))},{id:`narrat`,name:`Narrat Language`,aliases:[`nar`],import:(()=>W(()=>import(`./narrat-_X_XdTYD.js`),[]))},{id:`nextflow`,name:`Nextflow`,aliases:[`nf`],import:(()=>W(()=>import(`./nextflow-BJtWHP5T.js`),__vite__mapDeps([72,73])))},{id:`nextflow-groovy`,name:`Nextflow Groovy`,import:(()=>W(()=>import(`./nextflow-groovy-DJMQeKeT.js`),[]))},{id:`nginx`,name:`Nginx`,import:(()=>W(()=>import(`./nginx-BGimcMtc.js`),__vite__mapDeps([74,38,22])))},{id:`nim`,name:`Nim`,import:(()=>W(()=>import(`./nim-Boc8nMzF.js`),__vite__mapDeps([75,2,3,1,7,8,22,27,41])))},{id:`nix`,name:`Nix`,import:(()=>W(()=>import(`./nix-IvuFDN5E.js`),[]))},{id:`nsis`,name:`NSIS`,import:(()=>W(()=>import(`./nsis-CjNLYCLg.js`),[]))},{id:`nushell`,name:`nushell`,aliases:[`nu`],import:(()=>W(()=>import(`./nushell-DHYfO66s.js`),[]))},{id:`objective-c`,name:`Objective-C`,aliases:[`objc`],import:(()=>W(()=>import(`./objective-c-D1A_Heim.js`),[]))},{id:`objective-cpp`,name:`Objective-C++`,import:(()=>W(()=>import(`./objective-cpp-BsSzOQcm.js`),[]))},{id:`ocaml`,name:`OCaml`,import:(()=>W(()=>import(`./ocaml-O90oeIOV.js`),[]))},{id:`odin`,name:`Odin`,import:(()=>W(()=>import(`./odin-B1RWQWA5.js`),[]))},{id:`openscad`,name:`OpenSCAD`,aliases:[`scad`],import:(()=>W(()=>import(`./openscad-BUDT5pXO.js`),[]))},{id:`org`,name:`Org Markup`,import:(()=>W(()=>import(`./org-IUMfWevQ.js`),__vite__mapDeps([76,2,3,1,5,8,7,9,11,13,16,22,20,77,24,26,25,27,29,78,79,49,80,31,38,39,34,35,36,37,41,40,48,50,81,82,83,63,65,66,67,70,84,75,85,86,87,88,89,90,91,92,93])))},{id:`pascal`,name:`Pascal`,import:(()=>W(()=>import(`./pascal-4ZHwLPI5.js`),[]))},{id:`perl`,name:`Perl`,import:(()=>W(()=>import(`./perl-Dlk0_VJm.js`),__vite__mapDeps([65,2,3,1,7,8,16])))},{id:`php`,name:`PHP`,import:(()=>W(()=>import(`./php-BCj8cGx_.js`),__vite__mapDeps([87,2,3,1,7,8,9,16])))},{id:`pkl`,name:`Pkl`,import:(()=>W(()=>import(`./pkl-ot-7Btpt.js`),[]))},{id:`plsql`,name:`PL/SQL`,import:(()=>W(()=>import(`./plsql-DGHpHOYJ.js`),[]))},{id:`po`,name:`Gettext PO`,aliases:[`pot`,`potx`],import:(()=>W(()=>import(`./po-BiJDBrnU.js`),[]))},{id:`polar`,name:`Polar`,import:(()=>W(()=>import(`./polar-C7UOKdEL.js`),[]))},{id:`postcss`,name:`PostCSS`,import:(()=>W(()=>import(`./postcss-BXeXVLqQ.js`),[]))},{id:`powerquery`,name:`PowerQuery`,import:(()=>W(()=>import(`./powerquery-DNMTfnFr.js`),[]))},{id:`powershell`,name:`PowerShell`,aliases:[`ps`,`ps1`,`pwsh`],import:(()=>W(()=>import(`./powershell-CCSX75yM.js`),[]))},{id:`prisma`,name:`Prisma`,import:(()=>W(()=>import(`./prisma-DMgNhnYS.js`),[]))},{id:`prolog`,name:`Prolog`,import:(()=>W(()=>import(`./prolog-iXnhIJG7.js`),[]))},{id:`proto`,name:`Protocol Buffer 3`,aliases:[`protobuf`],import:(()=>W(()=>import(`./proto-DB4EqR-F.js`),[]))},{id:`pug`,name:`Pug`,aliases:[`jade`],import:(()=>W(()=>import(`./pug-DVicUvHI.js`),__vite__mapDeps([94,2,3,1])))},{id:`puppet`,name:`Puppet`,import:(()=>W(()=>import(`./puppet-CDv2pdJW.js`),[]))},{id:`purescript`,name:`PureScript`,import:(()=>W(()=>import(`./purescript-9MfHhQsQ.js`),[]))},{id:`python`,name:`Python`,aliases:[`py`],import:(()=>W(()=>import(`./python-gzcpVVnB.js`),[]))},{id:`qml`,name:`QML`,import:(()=>W(()=>import(`./qml-CAGCQzHi.js`),__vite__mapDeps([95,2])))},{id:`qmldir`,name:`QML Directory`,import:(()=>W(()=>import(`./qmldir-DCQb3MpD.js`),[]))},{id:`qss`,name:`Qt Style Sheets`,import:(()=>W(()=>import(`./qss-Fe1Jh2GI.js`),[]))},{id:`r`,name:`R`,import:(()=>W(()=>import(`./r-DPCSjHhB.js`).then(e=>e.n),[]))},{id:`racket`,name:`Racket`,import:(()=>W(()=>import(`./racket-DcIDlBhZ.js`),[]))},{id:`raku`,name:`Raku`,aliases:[`perl6`],import:(()=>W(()=>import(`./raku-B3gFvitq.js`),[]))},{id:`razor`,name:`ASP.NET Razor`,import:(()=>W(()=>import(`./razor-DaR4FNlZ.js`),__vite__mapDeps([96,1,2,3,78])))},{id:`rbs`,name:`RBS`,aliases:[`ruby-signature`],import:(()=>W(()=>import(`./rbs-C0MpOrj4.js`),[]))},{id:`reg`,name:`Windows Registry Script`,import:(()=>W(()=>import(`./reg-CRGYupPL.js`),[]))},{id:`regexp`,name:`RegExp`,aliases:[`regex`],import:(()=>W(()=>import(`./regexp-DD5bv9lN.js`).then(e=>e.n),[]))},{id:`rel`,name:`Rel`,import:(()=>W(()=>import(`./rel-BtDbiS_P.js`),[]))},{id:`riscv`,name:`RISC-V`,import:(()=>W(()=>import(`./riscv-Ckw8ddFX.js`),[]))},{id:`ron`,name:`RON`,import:(()=>W(()=>import(`./ron-VUp2lXgN.js`),[]))},{id:`rosmsg`,name:`ROS Interface`,import:(()=>W(()=>import(`./rosmsg-CAekHB0j.js`),[]))},{id:`rst`,name:`reStructuredText`,import:(()=>W(()=>import(`./rst-CwnrqHo7.js`),__vite__mapDeps([97,2,15,1,3,20,98,25,26,27,22,29,39,34,7,8,16,35,36,11,13,37,38])))},{id:`ruby`,name:`Ruby`,aliases:[`rb`],import:(()=>W(()=>import(`./ruby-DLg3GxA3.js`),__vite__mapDeps([34,2,3,1,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39])))},{id:`rust`,name:`Rust`,aliases:[`rs`],import:(()=>W(()=>import(`./rust-Cfkwpbl8.js`),[]))},{id:`sas`,name:`SAS`,import:(()=>W(()=>import(`./sas-7kC5yJIB.js`),__vite__mapDeps([99,16])))},{id:`sass`,name:`Sass`,import:(()=>W(()=>import(`./sass-DXrisJhu.js`),[]))},{id:`scala`,name:`Scala`,import:(()=>W(()=>import(`./scala-BiFt_7mu.js`),[]))},{id:`scheme`,name:`Scheme`,import:(()=>W(()=>import(`./scheme-DQCgrYNe.js`),[]))},{id:`scss`,name:`SCSS`,import:(()=>W(()=>import(`./scss-TPfA2Rl9.js`).then(e=>e.n),__vite__mapDeps([5,3])))},{id:`sdbl`,name:`1C (Query)`,aliases:[`1c-query`],import:(()=>W(()=>import(`./sdbl-bTVj8UrX.js`),[]))},{id:`shaderlab`,name:`ShaderLab`,aliases:[`shader`],import:(()=>W(()=>import(`./shaderlab-TOUzSsQk.js`),__vite__mapDeps([100,101])))},{id:`shellscript`,name:`Shell`,aliases:[`bash`,`sh`,`shell`,`zsh`],import:(()=>W(()=>import(`./shellscript-BxUYTJbB.js`).then(e=>e.n),[]))},{id:`shellsession`,name:`Shell Session`,aliases:[`console`],import:(()=>W(()=>import(`./shellsession-D8Detfs1.js`),__vite__mapDeps([102,29])))},{id:`smalltalk`,name:`GNU Smalltalk`,import:(()=>W(()=>import(`./smalltalk-BHpQb5nM.js`),[]))},{id:`smithy`,name:`Smithy`,import:(()=>W(()=>import(`./smithy-Dgaz7aur.js`),[]))},{id:`solidity`,name:`Solidity`,import:(()=>W(()=>import(`./solidity-Bj7E1mRn.js`),[]))},{id:`soy`,name:`Closure Templates`,aliases:[`closure-templates`],import:(()=>W(()=>import(`./soy-DgmP-rkN.js`),__vite__mapDeps([103,1,2,3])))},{id:`sparql`,name:`SPARQL`,import:(()=>W(()=>import(`./sparql-D_iOobhT.js`),__vite__mapDeps([104,105])))},{id:`splunk`,name:`Splunk Query Language`,aliases:[`spl`],import:(()=>W(()=>import(`./splunk-BC2Px7Mm.js`),[]))},{id:`sql`,name:`SQL`,import:(()=>W(()=>import(`./sql-WfIMpFBo.js`).then(e=>e.n),[]))},{id:`ssh-config`,name:`SSH Config`,import:(()=>W(()=>import(`./ssh-config-BgfXC-Er.js`),[]))},{id:`stata`,name:`Stata`,import:(()=>W(()=>import(`./stata-BoXU_fVr.js`),__vite__mapDeps([106,16])))},{id:`stylus`,name:`Stylus`,aliases:[`styl`],import:(()=>W(()=>import(`./stylus-B6D30XZt.js`),[]))},{id:`surrealql`,name:`SurrealQL`,aliases:[`surql`],import:(()=>W(()=>import(`./surrealql-BZp4t379.js`),__vite__mapDeps([107,2])))},{id:`svelte`,name:`Svelte`,import:(()=>W(()=>import(`./svelte-D0JzGzh-.js`),__vite__mapDeps([108,2,3,11,12])))},{id:`swift`,name:`Swift`,import:(()=>W(()=>import(`./swift-CyEgAFGc.js`),[]))},{id:`system-verilog`,name:`SystemVerilog`,import:(()=>W(()=>import(`./system-verilog-Dh5ihWbf.js`),[]))},{id:`systemd`,name:`Systemd Units`,import:(()=>W(()=>import(`./systemd-BxMlprV5.js`),[]))},{id:`talonscript`,name:`TalonScript`,aliases:[`talon`],import:(()=>W(()=>import(`./talonscript-CohzipZa.js`),[]))},{id:`tasl`,name:`Tasl`,import:(()=>W(()=>import(`./tasl-DMoTqEGO.js`),[]))},{id:`tcl`,name:`Tcl`,import:(()=>W(()=>import(`./tcl-CZd0xW_V.js`),[]))},{id:`templ`,name:`Templ`,import:(()=>W(()=>import(`./templ-BuDeFWw_.js`),__vite__mapDeps([109,2,3,81])))},{id:`terraform`,name:`Terraform`,aliases:[`tf`,`tfvars`],import:(()=>W(()=>import(`./terraform-DswuEJGm.js`),[]))},{id:`tex`,name:`TeX`,import:(()=>W(()=>import(`./tex-hxvblT0F.js`).then(e=>e.n),__vite__mapDeps([67,63])))},{id:`toml`,name:`TOML`,import:(()=>W(()=>import(`./toml-CcmNWLt0.js`),[]))},{id:`ts-tags`,name:`TypeScript with Tags`,aliases:[`lit`],import:(()=>W(()=>import(`./ts-tags-Ca4r_vit.js`),__vite__mapDeps([110,2,3,1,7,8,11,16,27,22])))},{id:`tsv`,name:`TSV`,import:(()=>W(()=>import(`./tsv-sltzmVWM.js`),[]))},{id:`tsx`,name:`TSX`,import:(()=>W(()=>import(`./tsx-B01kvZiV.js`).then(e=>e.n),[]))},{id:`turtle`,name:`Turtle`,import:(()=>W(()=>import(`./turtle-ByJddavk.js`),[]))},{id:`twig`,name:`Twig`,import:(()=>W(()=>import(`./twig-B7e2eWcZ.js`),__vite__mapDeps([111,2,3,5,20,34,1,7,8,16,22,25,26,27,29,35,36,11,13,37,38,39,87,9])))},{id:`typescript`,name:`TypeScript`,aliases:[`ts`,`cts`,`mts`],import:(()=>W(()=>import(`./typescript-DeMv-M_d.js`).then(e=>e.n),[]))},{id:`typespec`,name:`TypeSpec`,aliases:[`tsp`],import:(()=>W(()=>import(`./typespec-BRdr0IET.js`),[]))},{id:`typst`,name:`Typst`,aliases:[`typ`],import:(()=>W(()=>import(`./typst-IzvzibIJ.js`),__vite__mapDeps([112,2,3,1,5,8,7,9,11,13,113,114,16,22,20,77,24,26,25,27,29,78,79,49,80,31,38,39,34,35,36,37,41,40,44,48,50,81,82,54,83,115,63,62,65,66,67,70,116,84,85,87,88,89,90,91,93,117,94,118,119,111,120])))},{id:`v`,name:`V`,import:(()=>W(()=>import(`./v-DBj4K9d_.js`),[]))},{id:`vala`,name:`Vala`,import:(()=>W(()=>import(`./vala-zf12oZj6.js`),[]))},{id:`vb`,name:`Visual Basic`,import:(()=>W(()=>import(`./vb-DOwzaHZ0.js`),[]))},{id:`verilog`,name:`Verilog`,import:(()=>W(()=>import(`./verilog-B2gwz-sJ.js`),[]))},{id:`vhdl`,name:`VHDL`,import:(()=>W(()=>import(`./vhdl-BroJfC0k.js`),[]))},{id:`viml`,name:`Vim Script`,aliases:[`vim`,`vimscript`],import:(()=>W(()=>import(`./viml-DvXPmvsu.js`),[]))},{id:`vue`,name:`Vue`,import:(()=>W(()=>import(`./vue-BC0QlAe5.js`),__vite__mapDeps([121,2,3,1,9,11,15])))},{id:`vue-html`,name:`Vue HTML`,import:(()=>W(()=>import(`./vue-html-B_B1dAIw.js`),__vite__mapDeps([122,2])))},{id:`vue-vine`,name:`Vue Vine`,import:(()=>W(()=>import(`./vue-vine-CwdEpNh4.js`),__vite__mapDeps([123,2,3,5,12,70,124])))},{id:`vyper`,name:`Vyper`,aliases:[`vy`],import:(()=>W(()=>import(`./vyper-CgoNMtux.js`),[]))},{id:`wasm`,name:`WebAssembly`,import:(()=>W(()=>import(`./wasm-ByWQv1Qj.js`),[]))},{id:`wenyan`,name:`Wenyan`,aliases:[`文言`],import:(()=>W(()=>import(`./wenyan-C8pVoKbM.js`),[]))},{id:`wgsl`,name:`WGSL`,import:(()=>W(()=>import(`./wgsl-BsKzXJz4.js`),[]))},{id:`wikitext`,name:`Wikitext`,aliases:[`mediawiki`,`wiki`],import:(()=>W(()=>import(`./wikitext-ClFFjSW2.js`),[]))},{id:`wit`,name:`WebAssembly Interface Types`,import:(()=>W(()=>import(`./wit-DdvCle-K.js`),[]))},{id:`wolfram`,name:`Wolfram`,aliases:[`wl`],import:(()=>W(()=>import(`./wolfram-DLL8P-h_.js`),[]))},{id:`xml`,name:`XML`,import:(()=>W(()=>import(`./xml-DpeacbYS.js`).then(e=>e.n),__vite__mapDeps([7,8])))},{id:`xsl`,name:`XSL`,import:(()=>W(()=>import(`./xsl-xmhovwJb.js`),__vite__mapDeps([93,7,8])))},{id:`yaml`,name:`YAML`,aliases:[`yml`],import:(()=>W(()=>import(`./yaml-CR2Q4Kv2.js`).then(e=>e.n),[]))},{id:`zenscript`,name:`ZenScript`,import:(()=>W(()=>import(`./zenscript-BnlCZFoB.js`),[]))},{id:`zig`,name:`Zig`,import:(()=>W(()=>import(`./zig-CMLA9XwU.js`),[]))}],Ge=Object.fromEntries(We.map(e=>[e.id,e.import])),Ke=Object.fromEntries(We.flatMap(e=>e.aliases?.map(t=>[t,e.import])||[])),qe={...Ge,...Ke},Je=Object.fromEntries([{id:`andromeeda`,displayName:`Andromeeda`,type:`dark`,import:(()=>W(()=>import(`./andromeeda-vGVdxbeo.js`),[]))},{id:`aurora-x`,displayName:`Aurora X`,type:`dark`,import:(()=>W(()=>import(`./aurora-x-CDeNXAV0.js`),[]))},{id:`ayu-dark`,displayName:`Ayu Dark`,type:`dark`,import:(()=>W(()=>import(`./ayu-dark-DluEY0Gj.js`),[]))},{id:`ayu-light`,displayName:`Ayu Light`,type:`light`,import:(()=>W(()=>import(`./ayu-light-C3h-C4tm.js`),[]))},{id:`ayu-mirage`,displayName:`Ayu Mirage`,type:`dark`,import:(()=>W(()=>import(`./ayu-mirage-Bqwy1Gya.js`),[]))},{id:`catppuccin-frappe`,displayName:`Catppuccin Frappé`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-frappe-C9Q5zVZY.js`),[]))},{id:`catppuccin-latte`,displayName:`Catppuccin Latte`,type:`light`,import:(()=>W(()=>import(`./catppuccin-latte-CtsyrtPq.js`),[]))},{id:`catppuccin-macchiato`,displayName:`Catppuccin Macchiato`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-macchiato-R8nAf1vR.js`),[]))},{id:`catppuccin-mocha`,displayName:`Catppuccin Mocha`,type:`dark`,import:(()=>W(()=>import(`./catppuccin-mocha-DjuaAJKi.js`),[]))},{id:`dark-plus`,displayName:`Dark Plus`,type:`dark`,import:(()=>W(()=>import(`./dark-plus-Cs2F2srj.js`),[]))},{id:`dracula`,displayName:`Dracula Theme`,type:`dark`,import:(()=>W(()=>import(`./dracula-BHWKrbxM.js`),[]))},{id:`dracula-soft`,displayName:`Dracula Theme Soft`,type:`dark`,import:(()=>W(()=>import(`./dracula-soft-5eyTD99u.js`),[]))},{id:`everforest-dark`,displayName:`Everforest Dark`,type:`dark`,import:(()=>W(()=>import(`./everforest-dark-sB-x3p7T.js`),[]))},{id:`everforest-light`,displayName:`Everforest Light`,type:`light`,import:(()=>W(()=>import(`./everforest-light-Df2xbC6M.js`),[]))},{id:`github-dark`,displayName:`GitHub Dark`,type:`dark`,import:(()=>W(()=>import(`./github-dark-C-LZuMrd.js`),[]))},{id:`github-dark-default`,displayName:`GitHub Dark Default`,type:`dark`,import:(()=>W(()=>import(`./github-dark-default-DXG-b-1a.js`),[]))},{id:`github-dark-dimmed`,displayName:`GitHub Dark Dimmed`,type:`dark`,import:(()=>W(()=>import(`./github-dark-dimmed-Bx1FflLF.js`),[]))},{id:`github-dark-high-contrast`,displayName:`GitHub Dark High Contrast`,type:`dark`,import:(()=>W(()=>import(`./github-dark-high-contrast-B_tTalzw.js`),[]))},{id:`github-light`,displayName:`GitHub Light`,type:`light`,import:(()=>W(()=>import(`./github-light-EUqPIrTm.js`),[]))},{id:`github-light-default`,displayName:`GitHub Light Default`,type:`light`,import:(()=>W(()=>import(`./github-light-default-BXViO-2h.js`),[]))},{id:`github-light-high-contrast`,displayName:`GitHub Light High Contrast`,type:`light`,import:(()=>W(()=>import(`./github-light-high-contrast-B68TUdTA.js`),[]))},{id:`gruvbox-dark-hard`,displayName:`Gruvbox Dark Hard`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-hard-C820rvS2.js`),[]))},{id:`gruvbox-dark-medium`,displayName:`Gruvbox Dark Medium`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-medium-BPjhmG05.js`),[]))},{id:`gruvbox-dark-soft`,displayName:`Gruvbox Dark Soft`,type:`dark`,import:(()=>W(()=>import(`./gruvbox-dark-soft-MrdJrrXF.js`),[]))},{id:`gruvbox-light-hard`,displayName:`Gruvbox Light Hard`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-hard-BC_s9l72.js`),[]))},{id:`gruvbox-light-medium`,displayName:`Gruvbox Light Medium`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-medium-BAWPOn9u.js`),[]))},{id:`gruvbox-light-soft`,displayName:`Gruvbox Light Soft`,type:`light`,import:(()=>W(()=>import(`./gruvbox-light-soft-BSMLrYjP.js`),[]))},{id:`horizon`,displayName:`Horizon`,type:`dark`,import:(()=>W(()=>import(`./horizon-CE9ld1lL.js`),[]))},{id:`horizon-bright`,displayName:`Horizon Bright`,type:`light`,import:(()=>W(()=>import(`./horizon-bright-DSNQnXHK.js`),[]))},{id:`houston`,displayName:`Houston`,type:`dark`,import:(()=>W(()=>import(`./houston-CsvMBhTu.js`),[]))},{id:`kanagawa-dragon`,displayName:`Kanagawa Dragon`,type:`dark`,import:(()=>W(()=>import(`./kanagawa-dragon-Bozd7klA.js`),[]))},{id:`kanagawa-lotus`,displayName:`Kanagawa Lotus`,type:`light`,import:(()=>W(()=>import(`./kanagawa-lotus-BmuOG9ZW.js`),[]))},{id:`kanagawa-wave`,displayName:`Kanagawa Wave`,type:`dark`,import:(()=>W(()=>import(`./kanagawa-wave-BML5mF2J.js`),[]))},{id:`laserwave`,displayName:`LaserWave`,type:`dark`,import:(()=>W(()=>import(`./laserwave-C_8bwKvT.js`),[]))},{id:`light-plus`,displayName:`Light Plus`,type:`light`,import:(()=>W(()=>import(`./light-plus-DVQuIRkW.js`),[]))},{id:`material-theme`,displayName:`Material Theme`,type:`dark`,import:(()=>W(()=>import(`./material-theme-Bm3Qr25_.js`),[]))},{id:`material-theme-darker`,displayName:`Material Theme Darker`,type:`dark`,import:(()=>W(()=>import(`./material-theme-darker-2IIEA8gg.js`),[]))},{id:`material-theme-lighter`,displayName:`Material Theme Lighter`,type:`light`,import:(()=>W(()=>import(`./material-theme-lighter-uhdI0v04.js`),[]))},{id:`material-theme-ocean`,displayName:`Material Theme Ocean`,type:`dark`,import:(()=>W(()=>import(`./material-theme-ocean-CHQ94UKr.js`),[]))},{id:`material-theme-palenight`,displayName:`Material Theme Palenight`,type:`dark`,import:(()=>W(()=>import(`./material-theme-palenight-B5W6OYN7.js`),[]))},{id:`min-dark`,displayName:`Min Dark`,type:`dark`,import:(()=>W(()=>import(`./min-dark-BSWPekZh.js`),[]))},{id:`min-light`,displayName:`Min Light`,type:`light`,import:(()=>W(()=>import(`./min-light-DDpmG2fV.js`),[]))},{id:`monokai`,displayName:`Monokai`,type:`dark`,import:(()=>W(()=>import(`./monokai-B_bV9PQ9.js`),[]))},{id:`night-owl`,displayName:`Night Owl`,type:`dark`,import:(()=>W(()=>import(`./night-owl-DhmEMT88.js`),[]))},{id:`night-owl-light`,displayName:`Night Owl Light`,type:`light`,import:(()=>W(()=>import(`./night-owl-light-eJ-hLW7d.js`),[]))},{id:`nord`,displayName:`Nord`,type:`dark`,import:(()=>W(()=>import(`./nord-Cb4Vim4T.js`),[]))},{id:`one-dark-pro`,displayName:`One Dark Pro`,type:`dark`,import:(()=>W(()=>import(`./one-dark-pro-CLwyXe_n.js`),[]))},{id:`one-light`,displayName:`One Light`,type:`light`,import:(()=>W(()=>import(`./one-light-D7Lr4KcI.js`),[]))},{id:`plastic`,displayName:`Plastic`,type:`dark`,import:(()=>W(()=>import(`./plastic-DQwYfKfQ.js`),[]))},{id:`poimandres`,displayName:`Poimandres`,type:`dark`,import:(()=>W(()=>import(`./poimandres-DRFjx7u4.js`),[]))},{id:`red`,displayName:`Red`,type:`dark`,import:(()=>W(()=>import(`./red-DX1BQOs8.js`),[]))},{id:`rose-pine`,displayName:`Rosé Pine`,type:`dark`,import:(()=>W(()=>import(`./rose-pine-aMsaMD1D.js`),[]))},{id:`rose-pine-dawn`,displayName:`Rosé Pine Dawn`,type:`light`,import:(()=>W(()=>import(`./rose-pine-dawn-8PwUyIlP.js`),[]))},{id:`rose-pine-moon`,displayName:`Rosé Pine Moon`,type:`dark`,import:(()=>W(()=>import(`./rose-pine-moon-DO-qXg-I.js`),[]))},{id:`slack-dark`,displayName:`Slack Dark`,type:`dark`,import:(()=>W(()=>import(`./slack-dark-DnToyrRv.js`),[]))},{id:`slack-ochin`,displayName:`Slack Ochin`,type:`light`,import:(()=>W(()=>import(`./slack-ochin-B2OO5cIa.js`),[]))},{id:`snazzy-light`,displayName:`Snazzy Light`,type:`light`,import:(()=>W(()=>import(`./snazzy-light-4G7pJPwS.js`),[]))},{id:`solarized-dark`,displayName:`Solarized Dark`,type:`dark`,import:(()=>W(()=>import(`./solarized-dark-UdsmMDCL.js`),[]))},{id:`solarized-light`,displayName:`Solarized Light`,type:`light`,import:(()=>W(()=>import(`./solarized-light-C1IUL_tW.js`),[]))},{id:`synthwave-84`,displayName:`Synthwave '84`,type:`dark`,import:(()=>W(()=>import(`./synthwave-84-nFMaYfgc.js`),[]))},{id:`tokyo-night`,displayName:`Tokyo Night`,type:`dark`,import:(()=>W(()=>import(`./tokyo-night-oM2G3aXe.js`),[]))},{id:`vesper`,displayName:`Vesper`,type:`dark`,import:(()=>W(()=>import(`./vesper-DdrHHSXu.js`),[]))},{id:`vitesse-black`,displayName:`Vitesse Black`,type:`dark`,import:(()=>W(()=>import(`./vitesse-black-fwtXNY1n.js`),[]))},{id:`vitesse-dark`,displayName:`Vitesse Dark`,type:`dark`,import:(()=>W(()=>import(`./vitesse-dark-BZCL-v6S.js`),[]))},{id:`vitesse-light`,displayName:`Vitesse Light`,type:`light`,import:(()=>W(()=>import(`./vitesse-light-VbXTXTou.js`),[]))}].map(e=>[e.id,e.import])),Ye=s({createOnigurumaEngine:()=>Ct,getDefaultWasmLoader:()=>St,loadWasm:()=>gt,setDefaultWasmLoader:()=>xt}),Xe=class extends Error{constructor(e){super(e),this.name=`ShikiError`}};function Ze(){return 2147483648}function Qe(){return typeof performance<`u`?performance.now():Date.now()}var $e=(e,t)=>e+(t-e%t)%t;async function et(e){let t,n,r={};function i(e){n=e,r.HEAPU8=new Uint8Array(e),r.HEAPU32=new Uint32Array(e)}function a(e,t,n){r.HEAPU8.copyWithin(e,t,t+n)}function o(e){try{return t.grow(e-n.byteLength+65535>>>16),i(t.buffer),1}catch{}}function s(e){let t=r.HEAPU8.length;e>>>=0;let n=Ze();if(e>n)return!1;for(let r=1;r<=4;r*=2){let i=t*(1+.2/r);if(i=Math.min(i,e+100663296),o(Math.min(n,$e(Math.max(e,i),65536))))return!0}return!1}let c=typeof TextDecoder<`u`?new TextDecoder(`utf8`):void 0;function l(e,t,n=1024){let r=t+n,i=t;for(;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&c)return c.decode(e.subarray(t,i));let a=``;for(;t>10,56320|e&1023)}}return a}function u(e,t){return e?l(r.HEAPU8,e,t):``}let d={emscripten_get_now:Qe,emscripten_memcpy_big:a,emscripten_resize_heap:s,fd_write:()=>0};async function f(){let n=await e({env:d,wasi_snapshot_preview1:d});t=n.memory,i(t.buffer),Object.assign(r,n),r.UTF8ToString=u}return await f(),r}var tt=Object.defineProperty,nt=(e,t,n)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rt=(e,t,n)=>nt(e,typeof t==`symbol`?t:t+``,n),it=null;function at(e){throw new Xe(e.UTF8ToString(e.getLastOnigError()))}var ot=class e{constructor(t){rt(this,`utf16Length`),rt(this,`utf8Length`),rt(this,`utf16Value`),rt(this,`utf8Value`),rt(this,`utf16OffsetToUtf8`),rt(this,`utf8OffsetToUtf16`);let n=t.length,r=e._utf8ByteLength(t),i=r!==n,a=i?new Uint32Array(n+1):null;i&&(a[n]=r);let o=i?new Uint32Array(r+1):null;i&&(o[r]=n);let s=new Uint8Array(r),c=0;for(let e=0;e=55296&&r<=56319&&e+1=56320&&n<=57343&&(l=(r-55296<<10)+65536|n-56320,u=!0)}i&&(a[e]=c,u&&(a[e+1]=c),l<=127?o[c+0]=e:l<=2047?(o[c+0]=e,o[c+1]=e):l<=65535?(o[c+0]=e,o[c+1]=e,o[c+2]=e):(o[c+0]=e,o[c+1]=e,o[c+2]=e,o[c+3]=e)),l<=127?s[c++]=l:l<=2047?(s[c++]=192|(l&1984)>>>6,s[c++]=128|(l&63)>>>0):l<=65535?(s[c++]=224|(l&61440)>>>12,s[c++]=128|(l&4032)>>>6,s[c++]=128|(l&63)>>>0):(s[c++]=240|(l&1835008)>>>18,s[c++]=128|(l&258048)>>>12,s[c++]=128|(l&4032)>>>6,s[c++]=128|(l&63)>>>0),u&&e++}this.utf16Length=n,this.utf8Length=r,this.utf16Value=t,this.utf8Value=s,this.utf16OffsetToUtf8=a,this.utf8OffsetToUtf16=o}static _utf8ByteLength(e){let t=0;for(let n=0,r=e.length;n=55296&&i<=56319&&n+1=56320&&t<=57343&&(a=(i-55296<<10)+65536|t-56320,o=!0)}t+=a<=127?1:a<=2047?2:a<=65535?3:4,o&&n++}return t}createString(e){let t=e.omalloc(this.utf8Length);return e.HEAPU8.set(this.utf8Value,t),t}},st=class e{constructor(t){if(rt(this,`id`,++e.LAST_ID),rt(this,`_onigBinding`),rt(this,`content`),rt(this,`utf16Length`),rt(this,`utf8Length`),rt(this,`utf16OffsetToUtf8`),rt(this,`utf8OffsetToUtf16`),rt(this,`ptr`),!it)throw new Xe(`Must invoke loadWasm first.`);this._onigBinding=it,this.content=t;let n=new ot(t);this.utf16Length=n.utf16Length,this.utf8Length=n.utf8Length,this.utf16OffsetToUtf8=n.utf16OffsetToUtf8,this.utf8OffsetToUtf16=n.utf8OffsetToUtf16,this.utf8Length<1e4&&!e._sharedPtrInUse?(e._sharedPtr||=it.omalloc(1e4),e._sharedPtrInUse=!0,it.HEAPU8.set(n.utf8Value,e._sharedPtr),this.ptr=e._sharedPtr):this.ptr=n.createString(it)}convertUtf8OffsetToUtf16(e){return this.utf8OffsetToUtf16?e<0?0:e>this.utf8Length?this.utf16Length:this.utf8OffsetToUtf16[e]:e}convertUtf16OffsetToUtf8(e){return this.utf16OffsetToUtf8?e<0?0:e>this.utf16Length?this.utf8Length:this.utf16OffsetToUtf8[e]:e}dispose(){this.ptr===e._sharedPtr?e._sharedPtrInUse=!1:this._onigBinding.ofree(this.ptr)}};rt(st,`LAST_ID`,0),rt(st,`_sharedPtr`,0),rt(st,`_sharedPtrInUse`,!1);var ct=st,lt=class{constructor(e){if(rt(this,`_onigBinding`),rt(this,`_ptr`),!it)throw new Xe(`Must invoke loadWasm first.`);let t=[],n=[];for(let r=0,i=e.length;r{let n=e;return n=await n,typeof n==`function`&&(n=await n(t)),typeof n==`function`&&(n=await n(t)),ut(n)?n=await n.instantiator(t):dt(n)?n=await n.default(t):(ft(n)&&(n=n.data),pt(n)?n=typeof WebAssembly.instantiateStreaming==`function`?await vt(n)(t):await yt(n)(t):mt(n)||n instanceof WebAssembly.Module?n=await _t(n)(t):`default`in n&&n.default instanceof WebAssembly.Module&&(n=await _t(n.default)(t))),`instance`in n&&(n=n.instance),`exports`in n&&(n=n.exports),n})}return ht=t(),ht}function _t(e){return t=>WebAssembly.instantiate(e,t)}function vt(e){return t=>WebAssembly.instantiateStreaming(e,t)}function yt(e){return async t=>{let n=await e.arrayBuffer();return WebAssembly.instantiate(n,t)}}var bt;function xt(e){bt=e}function St(){return bt}async function Ct(e){return e&&await gt(e),{createScanner(e){return new lt(e.map(e=>typeof e==`string`?e:e.source))},createString(e){return new ct(e)}}}var wt=Re({});Be(wt,Ye);var Tt=class extends Error{constructor(e){super(e),this.name=`ShikiError`}};function Et(e){return Dt(e)}function Dt(e){return Array.isArray(e)?Ot(e):e instanceof RegExp?e:typeof e==`object`?kt(e):e}function Ot(e){let t=[];for(let n=0,r=e.length;n{for(let n in t)e[n]=t[n]}),e}function jt(e){let t=~e.lastIndexOf(`/`)||~e.lastIndexOf(`\\`);return t===0?e:~t===e.length-1?jt(e.substring(0,e.length-1)):e.substr(~t+1)}var Mt=/\$(\d+)|\${(\d+):\/(downcase|upcase)}/g,Nt=class{static hasCaptures(e){return e!==null&&(Mt.lastIndex=0,Mt.test(e))}static replaceCaptures(e,t,n){return e.replace(Mt,(e,r,i,a)=>{let o=n[parseInt(r||i,10)];if(o){let e=t.substring(o.start,o.end);for(;e[0]===`.`;)e=e.substring(1);switch(a){case`downcase`:return e.toLowerCase();case`upcase`:return e.toUpperCase();default:return e}}else return e})}};function Pt(e,t){return et)}function Ft(e,t){if(e===null&&t===null)return 0;if(!e)return-1;if(!t)return 1;let n=e.length,r=t.length;if(n===r){for(let r=0;rthis._root.match(e));getColorMap(){return this._colorMap.getColorMap()}getDefaults(){return this._defaults}match(e){if(e===null)return this._defaults;let t=e.scopeName,n=this._cachedMatchRoot.get(t).find(t=>Vt(e.parent,t.parentScopes));return n?new Ut(n.fontStyle,n.foreground,n.background):null}},Bt=class e{constructor(e,t){this.parent=e,this.scopeName=t}static push(t,n){for(let r of n)t=new e(t,r);return t}static from(...t){let n=null;for(let r=0;r`){if(n===t.length-1)return!1;r=t[++n],i=!0}for(;e&&!Ht(e.scopeName,r);){if(i)return!1;e=e.parent}if(!e)return!1;e=e.parent}return!0}function Ht(e,t){return t===e||e.startsWith(t)&&e[t.length]===`.`}var Ut=class{constructor(e,t,n){this.fontStyle=e,this.foregroundId=t,this.backgroundId=n}};function Wt(e){if(!e||!e.settings||!Array.isArray(e.settings))return[];let t=e.settings,n=[],r=0;for(let e=0,i=t.length;e1&&(u=i.slice(0,i.length-1),u.reverse()),n[r++]=new Gt(l,u,e,o,s,c)}}return n}var Gt=class{constructor(e,t,n,r,i,a){this.scope=e,this.parentScopes=t,this.index=n,this.fontStyle=r,this.foreground=i,this.background=a}},Kt=(e=>(e[e.NotSet=-1]=`NotSet`,e[e.None=0]=`None`,e[e.Italic=1]=`Italic`,e[e.Bold=2]=`Bold`,e[e.Underline=4]=`Underline`,e[e.Strikethrough=8]=`Strikethrough`,e))(Kt||{});function qt(e,t){e.sort((e,t)=>{let n=Pt(e.scope,t.scope);return n!==0||(n=Ft(e.parentScopes,t.parentScopes),n!==0)?n:e.index-t.index});let n=0,r=`#000000`,i=`#ffffff`;for(;e.length>=1&&e[0].scope===``;){let t=e.shift();t.fontStyle!==-1&&(n=t.fontStyle),t.foreground!==null&&(r=t.foreground),t.background!==null&&(i=t.background)}let a=new Jt(t),o=new Ut(n,a.getId(r),a.getId(i)),s=new Zt(new Xt(0,null,-1,0,0),[]);for(let t=0,n=e.length;te?console.log(`how did this happen?`):this.scopeDepth=e,t!==-1&&(this.fontStyle=t),n!==0&&(this.foreground=n),r!==0&&(this.background=r)}},Zt=class e{constructor(e,t=[],n={}){this._mainRule=e,this._children=n,this._rulesWithParentScopes=t}_rulesWithParentScopes;static _cmpBySpecificity(e,t){if(e.scopeDepth!==t.scopeDepth)return t.scopeDepth-e.scopeDepth;let n=0,r=0;for(;e.parentScopes[n]===`>`&&n++,t.parentScopes[r]===`>`&&r++,!(n>=e.parentScopes.length||r>=t.parentScopes.length);){let i=t.parentScopes[r].length-e.parentScopes[n].length;if(i!==0)return i;n++,r++}return t.parentScopes.length-e.parentScopes.length}match(t){if(t!==``){let e=t.indexOf(`.`),n,r;if(e===-1?(n=t,r=``):(n=t.substring(0,e),r=t.substring(e+1)),this._children.hasOwnProperty(n))return this._children[n].match(r)}let n=this._rulesWithParentScopes.concat(this._mainRule);return n.sort(e._cmpBySpecificity),n}insert(t,n,r,i,a,o){if(n===``){this._doInsertHere(t,r,i,a,o);return}let s=n.indexOf(`.`),c,l;s===-1?(c=n,l=``):(c=n.substring(0,s),l=n.substring(s+1));let u;this._children.hasOwnProperty(c)?u=this._children[c]:(u=new e(this._mainRule.clone(),Xt.cloneArr(this._rulesWithParentScopes)),this._children[c]=u),u.insert(t+1,l,r,i,a,o)}_doInsertHere(e,t,n,r,i){if(t===null){this._mainRule.acceptOverwrite(e,n,r,i);return}for(let a=0,o=this._rulesWithParentScopes.length;a>>0}static getTokenType(e){return(e&768)>>>8}static containsBalancedBrackets(e){return!!(e&1024)}static getFontStyle(e){return(e&30720)>>>11}static getForeground(e){return(e&16744448)>>>15}static getBackground(e){return(e&4278190080)>>>24}static set(t,n,r,i,a,o,s){let c=e.getLanguageId(t),l=e.getTokenType(t),u=+!!e.containsBalancedBrackets(t),d=e.getFontStyle(t),f=e.getForeground(t),p=e.getBackground(t);return n!==0&&(c=n),r!==8&&(l=en(r)),i!==null&&(u=+!!i),a!==-1&&(d=a),o!==0&&(f=o),s!==0&&(p=s),(c<<0|l<<8|u<<10|d<<11|f<<15|p<<24)>>>0}};function $t(e){return e}function en(e){return e}function tn(e,t){let n=[],r=rn(e),i=r.next();for(;i!==null;){let e=0;if(i.length===2&&i.charAt(1)===`:`){switch(i.charAt(0)){case`R`:e=1;break;case`L`:e=-1;break;default:console.log(`Unknown priority ${i} in scope selector`)}i=r.next()}let t=o();if(n.push({matcher:t,priority:e}),i!==`,`)break;i=r.next()}return n;function a(){if(i===`-`){i=r.next();let e=a();return t=>!!e&&!e(t)}if(i===`(`){i=r.next();let e=s();return i===`)`&&(i=r.next()),e}if(nn(i)){let e=[];do e.push(i),i=r.next();while(nn(i));return n=>t(e,n)}return null}function o(){let e=[],t=a();for(;t;)e.push(t),t=a();return t=>e.every(e=>e(t))}function s(){let e=[],t=o();for(;t&&(e.push(t),i===`|`||i===`,`);){do i=r.next();while(i===`|`||i===`,`);t=o()}return t=>e.some(e=>e(t))}}function nn(e){return!!e&&!!e.match(/[\w\.:]+/)}function rn(e){let t=/([LR]:|[\w\.:][\w\.:\-]*|[\,\|\-\(\)])/g,n=t.exec(e);return{next:()=>{if(!n)return null;let r=n[0];return n=t.exec(e),r}}}function an(e){typeof e.dispose==`function`&&e.dispose()}var on=class{constructor(e){this.scopeName=e}toKey(){return this.scopeName}},sn=class{constructor(e,t){this.scopeName=e,this.ruleName=t}toKey(){return`${this.scopeName}#${this.ruleName}`}},cn=class{_references=[];_seenReferenceKeys=new Set;get references(){return this._references}visitedRule=new Set;add(e){let t=e.toKey();this._seenReferenceKeys.has(t)||(this._seenReferenceKeys.add(t),this._references.push(e))}},ln=class{constructor(e,t){this.repo=e,this.initialScopeName=t,this.seenFullScopeRequests.add(this.initialScopeName),this.Q=[new on(this.initialScopeName)]}seenFullScopeRequests=new Set;seenPartialScopeRequests=new Set;Q;processQueue(){let e=this.Q;this.Q=[];let t=new cn;for(let n of e)un(n,this.initialScopeName,this.repo,t);for(let e of t.references)if(e instanceof on){if(this.seenFullScopeRequests.has(e.scopeName))continue;this.seenFullScopeRequests.add(e.scopeName),this.Q.push(e)}else{if(this.seenFullScopeRequests.has(e.scopeName)||this.seenPartialScopeRequests.has(e.toKey()))continue;this.seenPartialScopeRequests.add(e.toKey()),this.Q.push(e)}}};function un(e,t,n,r){let i=n.lookup(e.scopeName);if(!i){if(e.scopeName===t)throw Error(`No grammar provided for <${t}>`);return}let a=n.lookup(t);e instanceof on?fn({baseGrammar:a,selfGrammar:i},r):dn(e.ruleName,{baseGrammar:a,selfGrammar:i,repository:i.repository},r);let o=n.injections(e.scopeName);if(o)for(let e of o)r.add(new on(e))}function dn(e,t,n){if(t.repository&&t.repository[e]){let r=t.repository[e];pn([r],t,n)}}function fn(e,t){e.selfGrammar.patterns&&Array.isArray(e.selfGrammar.patterns)&&pn(e.selfGrammar.patterns,{...e,repository:e.selfGrammar.repository},t),e.selfGrammar.injections&&pn(Object.values(e.selfGrammar.injections),{...e,repository:e.selfGrammar.repository},t)}function pn(e,t,n){for(let r of e){if(n.visitedRule.has(r))continue;n.visitedRule.add(r);let e=r.repository?At({},t.repository,r.repository):t.repository;Array.isArray(r.patterns)&&pn(r.patterns,{...t,repository:e},n);let i=r.include;if(!i)continue;let a=yn(i);switch(a.kind){case 0:fn({...t,selfGrammar:t.baseGrammar},n);break;case 1:fn(t,n);break;case 2:dn(a.ruleName,{...t,repository:e},n);break;case 3:case 4:let r=a.scopeName===t.selfGrammar.scopeName?t.selfGrammar:a.scopeName===t.baseGrammar.scopeName?t.baseGrammar:void 0;if(r){let i={baseGrammar:t.baseGrammar,selfGrammar:r,repository:e};a.kind===4?dn(a.ruleName,i,n):fn(i,n)}else a.kind===4?n.add(new sn(a.scopeName,a.ruleName)):n.add(new on(a.scopeName))}}}var mn=class{kind=0},hn=class{kind=1},gn=class{constructor(e){this.ruleName=e}kind=2},_n=class{constructor(e){this.scopeName=e}kind=3},vn=class{constructor(e,t){this.scopeName=e,this.ruleName=t}kind=4};function yn(e){if(e===`$base`)return new mn;if(e===`$self`)return new hn;let t=e.indexOf(`#`);return t===-1?new _n(e):t===0?new gn(e.substring(1)):new vn(e.substring(0,t),e.substring(t+1))}var bn=/\\(\d+)/,xn=/\\(\d+)/g,Sn=-1,Cn=-2;function wn(e){return e}function Tn(e){return e}var En=class{$location;id;_nameIsCapturing;_name;_contentNameIsCapturing;_contentName;constructor(e,t,n,r){this.$location=e,this.id=t,this._name=n||null,this._nameIsCapturing=Nt.hasCaptures(this._name),this._contentName=r||null,this._contentNameIsCapturing=Nt.hasCaptures(this._contentName)}get debugName(){let e=this.$location?`${jt(this.$location.filename)}:${this.$location.line}`:`unknown`;return`${this.constructor.name}#${this.id} @ ${e}`}getName(e,t){return!this._nameIsCapturing||this._name===null||e===null||t===null?this._name:Nt.replaceCaptures(this._name,e,t)}getContentName(e,t){return!this._contentNameIsCapturing||this._contentName===null?this._contentName:Nt.replaceCaptures(this._contentName,e,t)}},Dn=class extends En{retokenizeCapturedWithRuleId;constructor(e,t,n,r,i){super(e,t,n,r),this.retokenizeCapturedWithRuleId=i}dispose(){}collectPatterns(e,t){throw Error(`Not supported!`)}compile(e,t){throw Error(`Not supported!`)}compileAG(e,t,n,r){throw Error(`Not supported!`)}},On=class extends En{_match;captures;_cachedCompiledPatterns;constructor(e,t,n,r,i){super(e,t,n,null),this._match=new Nn(r,this.id),this.captures=i,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}get debugMatchRegExp(){return`${this._match.source}`}collectPatterns(e,t){t.push(this._match)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Pn,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},kn=class extends En{hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,r,i){super(e,t,n,r),this.patterns=i.patterns,this.hasMissingPatterns=i.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}collectPatterns(e,t){for(let n of this.patterns)e.getRule(n).collectPatterns(e,t)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){return this._cachedCompiledPatterns||(this._cachedCompiledPatterns=new Pn,this.collectPatterns(e,this._cachedCompiledPatterns)),this._cachedCompiledPatterns}},An=class extends En{_begin;beginCaptures;_end;endHasBackReferences;endCaptures;applyEndPatternLast;hasMissingPatterns;patterns;_cachedCompiledPatterns;constructor(e,t,n,r,i,a,o,s,c,l){super(e,t,n,r),this._begin=new Nn(i,this.id),this.beginCaptures=a,this._end=new Nn(o||`￿`,-1),this.endHasBackReferences=this._end.hasBackReferences,this.endCaptures=s,this.applyEndPatternLast=c||!1,this.patterns=l.patterns,this.hasMissingPatterns=l.hasMissingPatterns,this._cachedCompiledPatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugEndRegExp(){return`${this._end.source}`}getEndWithResolvedBackReferences(e,t){return this._end.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e,t).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e,t).compileAG(e,n,r)}_getCachedCompiledPatterns(e,t){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Pn;for(let t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns);this.applyEndPatternLast?this._cachedCompiledPatterns.push(this._end.hasBackReferences?this._end.clone():this._end):this._cachedCompiledPatterns.unshift(this._end.hasBackReferences?this._end.clone():this._end)}return this._end.hasBackReferences&&(this.applyEndPatternLast?this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length()-1,t):this._cachedCompiledPatterns.setSource(0,t)),this._cachedCompiledPatterns}},jn=class extends En{_begin;beginCaptures;whileCaptures;_while;whileHasBackReferences;hasMissingPatterns;patterns;_cachedCompiledPatterns;_cachedCompiledWhilePatterns;constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r),this._begin=new Nn(i,this.id),this.beginCaptures=a,this.whileCaptures=s,this._while=new Nn(o,Cn),this.whileHasBackReferences=this._while.hasBackReferences,this.patterns=c.patterns,this.hasMissingPatterns=c.hasMissingPatterns,this._cachedCompiledPatterns=null,this._cachedCompiledWhilePatterns=null}dispose(){this._cachedCompiledPatterns&&=(this._cachedCompiledPatterns.dispose(),null),this._cachedCompiledWhilePatterns&&=(this._cachedCompiledWhilePatterns.dispose(),null)}get debugBeginRegExp(){return`${this._begin.source}`}get debugWhileRegExp(){return`${this._while.source}`}getWhileWithResolvedBackReferences(e,t){return this._while.resolveBackReferences(e,t)}collectPatterns(e,t){t.push(this._begin)}compile(e,t){return this._getCachedCompiledPatterns(e).compile(e)}compileAG(e,t,n,r){return this._getCachedCompiledPatterns(e).compileAG(e,n,r)}_getCachedCompiledPatterns(e){if(!this._cachedCompiledPatterns){this._cachedCompiledPatterns=new Pn;for(let t of this.patterns)e.getRule(t).collectPatterns(e,this._cachedCompiledPatterns)}return this._cachedCompiledPatterns}compileWhile(e,t){return this._getCachedCompiledWhilePatterns(e,t).compile(e)}compileWhileAG(e,t,n,r){return this._getCachedCompiledWhilePatterns(e,t).compileAG(e,n,r)}_getCachedCompiledWhilePatterns(e,t){return this._cachedCompiledWhilePatterns||(this._cachedCompiledWhilePatterns=new Pn,this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences?this._while.clone():this._while)),this._while.hasBackReferences&&this._cachedCompiledWhilePatterns.setSource(0,t||`￿`),this._cachedCompiledWhilePatterns}},Mn=class e{static createCaptureRule(e,t,n,r,i){return e.registerRule(e=>new Dn(t,e,n,r,i))}static getCompiledRuleId(t,n,r){return t.id||n.registerRule(i=>{if(t.id=i,t.match)return new On(t.$vscodeTextmateLocation,t.id,t.name,t.match,e._compileCaptures(t.captures,n,r));if(t.begin===void 0){t.repository&&(r=At({},r,t.repository));let i=t.patterns;return i===void 0&&t.include&&(i=[{include:t.include}]),new kn(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,e._compilePatterns(i,n,r))}return t.while?new jn(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,e._compileCaptures(t.beginCaptures||t.captures,n,r),t.while,e._compileCaptures(t.whileCaptures||t.captures,n,r),e._compilePatterns(t.patterns,n,r)):new An(t.$vscodeTextmateLocation,t.id,t.name,t.contentName,t.begin,e._compileCaptures(t.beginCaptures||t.captures,n,r),t.end,e._compileCaptures(t.endCaptures||t.captures,n,r),t.applyEndPatternLast,e._compilePatterns(t.patterns,n,r))}),t.id}static _compileCaptures(t,n,r){let i=[];if(t){let a=0;for(let e in t){if(e===`$vscodeTextmateLocation`)continue;let t=parseInt(e,10);t>a&&(a=t)}for(let e=0;e<=a;e++)i[e]=null;for(let a in t){if(a===`$vscodeTextmateLocation`)continue;let o=parseInt(a,10),s=0;t[a].patterns&&(s=e.getCompiledRuleId(t[a],n,r)),i[o]=e.createCaptureRule(n,t[a].$vscodeTextmateLocation,t[a].name,t[a].contentName,s)}}return i}static _compilePatterns(t,n,r){let i=[];if(t)for(let a=0,o=t.length;ae.substring(t.start,t.end));return xn.lastIndex=0,this.source.replace(xn,(e,t)=>Lt(n[parseInt(t,10)]||``))}_buildAnchorCache(){if(typeof this.source!=`string`)throw Error(`This method should only be called if the source is a string`);let e=[],t=[],n=[],r=[],i,a,o,s;for(i=0,a=this.source.length;ie.source);this._cached=new Fn(e,t,this._items.map(e=>e.ruleId))}return this._cached}compileAG(e,t,n){return this._hasAnchors?t?n?(this._anchorCache.A1_G1||(this._anchorCache.A1_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G1):(this._anchorCache.A1_G0||(this._anchorCache.A1_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A1_G0):n?(this._anchorCache.A0_G1||(this._anchorCache.A0_G1=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G1):(this._anchorCache.A0_G0||(this._anchorCache.A0_G0=this._resolveAnchors(e,t,n)),this._anchorCache.A0_G0):this.compile(e)}_resolveAnchors(e,t,n){return new Fn(e,this._items.map(e=>e.resolveAnchors(t,n)),this._items.map(e=>e.ruleId))}},Fn=class{constructor(e,t,n){this.regExps=t,this.rules=n,this.scanner=e.createOnigScanner(t)}scanner;dispose(){typeof this.scanner.dispose==`function`&&this.scanner.dispose()}toString(){let e=[];for(let t=0,n=this.rules.length;tnew In(this._scopeToLanguage(e),this._toStandardTokenType(e)));_scopeToLanguage(e){return this._embeddedLanguagesMatcher.match(e)||0}_toStandardTokenType(t){let n=t.match(e.STANDARD_TOKEN_TYPE_REGEXP);if(!n)return 8;switch(n[1]){case`comment`:return 1;case`string`:return 2;case`regex`:return 3;case`meta.embedded`:return 0}throw Error(`Unexpected match for standard token type!`)}static STANDARD_TOKEN_TYPE_REGEXP=/\b(comment|string|regex|meta\.embedded)\b/},Rn=class{values;scopesRegExp;constructor(e){if(e.length===0)this.values=null,this.scopesRegExp=null;else{this.values=new Map(e);let t=e.map(([e,t])=>Lt(e));t.sort(),t.reverse(),this.scopesRegExp=RegExp(`^((${t.join(`)|(`)}))($|\\.)`,``)}}match(e){if(!this.scopesRegExp)return;let t=e.match(this.scopesRegExp);if(t)return this.values.get(t[1])}};typeof process<`u`&&{}.VSCODE_TEXTMATE_DEBUG;var zn=class{constructor(e,t){this.stack=e,this.stoppedEarly=t}};function Bn(e,t,n,r,i,a,o,s){let c=t.content.length,l=!1,u=-1;if(o){let o=Vn(e,t,n,r,i,a);i=o.stack,r=o.linePos,n=o.isFirstLine,u=o.anchorPosition}let d=Date.now();for(;!l;){if(s!==0&&Date.now()-d>s)return new zn(i,!0);f()}return new zn(i,!1);function f(){let o=Hn(e,t,n,r,i,u);if(!o){a.produce(i,c),l=!0;return}let s=o.captureIndices,d=o.matchedRuleId,f=s&&s.length>0?s[0].end>r:!1;if(d===Sn){let o=i.getRule(e);a.produce(i,s[0].start),i=i.withContentNameScopesList(i.nameScopesList),qn(e,t,n,i,a,o.endCaptures,s),a.produce(i,s[0].end);let d=i;if(i=i.parent,u=d.getAnchorPos(),!f&&d.getEnterPos()===r){i=d,a.produce(i,c),l=!0;return}}else{let o=e.getRule(d);a.produce(i,s[0].start);let p=i,m=o.getName(t.content,s),h=i.contentNameScopesList.pushAttributed(m,e);if(i=i.push(d,r,u,s[0].end===c,null,h,h),o instanceof An){let r=o;qn(e,t,n,i,a,r.beginCaptures,s),a.produce(i,s[0].end),u=s[0].end;let d=r.getContentName(t.content,s),m=h.pushAttributed(d,e);if(i=i.withContentNameScopesList(m),r.endHasBackReferences&&(i=i.withEndRule(r.getEndWithResolvedBackReferences(t.content,s))),!f&&p.hasSameRuleAs(i)){i=i.pop(),a.produce(i,c),l=!0;return}}else if(o instanceof jn){let r=o;qn(e,t,n,i,a,r.beginCaptures,s),a.produce(i,s[0].end),u=s[0].end;let d=r.getContentName(t.content,s),m=h.pushAttributed(d,e);if(i=i.withContentNameScopesList(m),r.whileHasBackReferences&&(i=i.withEndRule(r.getWhileWithResolvedBackReferences(t.content,s))),!f&&p.hasSameRuleAs(i)){i=i.pop(),a.produce(i,c),l=!0;return}}else if(qn(e,t,n,i,a,o.captures,s),a.produce(i,s[0].end),i=i.pop(),!f){i=i.safePop(),a.produce(i,c),l=!0;return}}s[0].end>r&&(r=s[0].end,n=!1)}}function Vn(e,t,n,r,i,a){let o=i.beginRuleCapturedEOL?0:-1,s=[];for(let t=i;t;t=t.pop()){let n=t.getRule(e);n instanceof jn&&s.push({rule:n,stack:t})}for(let c=s.pop();c;c=s.pop()){let{ruleScanner:s,findOptions:l}=Kn(c.rule,e,c.stack.endRule,n,r===o),u=s.findNextMatchSync(t,r,l);if(u){if(u.ruleId!==Cn){i=c.stack.pop();break}u.captureIndices&&u.captureIndices.length&&(a.produce(c.stack,u.captureIndices[0].start),qn(e,t,n,c.stack,a,c.rule.whileCaptures,u.captureIndices),a.produce(c.stack,u.captureIndices[0].end),o=u.captureIndices[0].end,u.captureIndices[0].end>r&&(r=u.captureIndices[0].end,n=!1))}else{i=c.stack.pop();break}}return{stack:i,linePos:r,anchorPosition:o,isFirstLine:n}}function Hn(e,t,n,r,i,a){let o=Un(e,t,n,r,i,a),s=e.getInjections();if(s.length===0)return o;let c=Wn(s,e,t,n,r,i,a);if(!c)return o;if(!o)return c;let l=o.captureIndices[0].start,u=c.captureIndices[0].start;return u=s)&&(s=g,c=h.captureIndices,l=h.ruleId,u=f.priority,s===i))break}return c?{priorityMatch:u===-1,captureIndices:c,matchedRuleId:l}:null}function Gn(e,t,n,r,i){return{ruleScanner:e.compileAG(t,n,r,i),findOptions:0}}function Kn(e,t,n,r,i){return{ruleScanner:e.compileWhileAG(t,n,r,i),findOptions:0}}function qn(e,t,n,r,i,a,o){if(a.length===0)return;let s=t.content,c=Math.min(a.length,o.length),l=[],u=o[0].end;for(let t=0;tu)break;for(;l.length>0&&l[l.length-1].endPos<=d.start;)i.produceFromScopes(l[l.length-1].scopes,l[l.length-1].endPos),l.pop();if(l.length>0?i.produceFromScopes(l[l.length-1].scopes,d.start):i.produce(r,d.start),c.retokenizeCapturedWithRuleId){let t=c.getName(s,o),a=r.contentNameScopesList.pushAttributed(t,e),l=c.getContentName(s,o),u=a.pushAttributed(l,e),f=r.push(c.retokenizeCapturedWithRuleId,d.start,-1,!1,null,a,u),p=e.createOnigString(s.substring(0,d.end));Bn(e,p,n&&d.start===0,d.start,f,i,!1,0),an(p);continue}let f=c.getName(s,o);if(f!==null){let t=(l.length>0?l[l.length-1].scopes:r.contentNameScopesList).pushAttributed(f,e);l.push(new Jn(t,d.end))}}for(;l.length>0;)i.produceFromScopes(l[l.length-1].scopes,l[l.length-1].endPos),l.pop()}var Jn=class{scopes;endPos;constructor(e,t){this.scopes=e,this.endPos=t}};function Yn(e,t,n,r,i,a,o,s){return new $n(e,t,n,r,i,a,o,s)}function Xn(e,t,n,r,i){let a=tn(t,Zn),o=Mn.getCompiledRuleId(n,r,i.repository);for(let n of a)e.push({debugSelector:t,matcher:n.matcher,ruleId:o,grammar:i,priority:n.priority})}function Zn(e,t){if(t.length{for(let r=n;rn&&e.substr(0,n)===t&&e[n]===`.`}var $n=class{constructor(e,t,n,r,i,a,o,s){if(this._rootScopeName=e,this.balancedBracketSelectors=a,this._onigLib=s,this._basicScopeAttributesProvider=new Ln(n,r),this._rootId=-1,this._lastRuleId=0,this._ruleId2desc=[null],this._includedGrammars={},this._grammarRepository=o,this._grammar=er(t,null),this._injections=null,this._tokenTypeMatchers=[],i)for(let e of Object.keys(i)){let t=tn(e,Zn);for(let n of t)this._tokenTypeMatchers.push({matcher:n.matcher,type:i[e]})}}_rootId;_lastRuleId;_ruleId2desc;_includedGrammars;_grammarRepository;_grammar;_injections;_basicScopeAttributesProvider;_tokenTypeMatchers;get themeProvider(){return this._grammarRepository}dispose(){for(let e of this._ruleId2desc)e&&e.dispose()}createOnigScanner(e){return this._onigLib.createOnigScanner(e)}createOnigString(e){return this._onigLib.createOnigString(e)}getMetadataForScope(e){return this._basicScopeAttributesProvider.getBasicScopeAttributes(e)}_collectInjections(){let e={lookup:e=>e===this._rootScopeName?this._grammar:this.getExternalGrammar(e),injections:e=>this._grammarRepository.injections(e)},t=[],n=this._rootScopeName,r=e.lookup(n);if(r){let e=r.injections;if(e)for(let n in e)Xn(t,n,e[n],this,r);let i=this._grammarRepository.injections(n);i&&i.forEach(e=>{let n=this.getExternalGrammar(e);if(n){let e=n.injectionSelector;e&&Xn(t,e,n,this,n)}})}return t.sort((e,t)=>e.priority-t.priority),t}getInjections(){return this._injections===null&&(this._injections=this._collectInjections()),this._injections}registerRule(e){let t=++this._lastRuleId,n=e(wn(t));return this._ruleId2desc[t]=n,n}getRule(e){return this._ruleId2desc[Tn(e)]}getExternalGrammar(e,t){if(this._includedGrammars[e])return this._includedGrammars[e];if(this._grammarRepository){let n=this._grammarRepository.lookup(e);if(n)return this._includedGrammars[e]=er(n,t&&t.$base),this._includedGrammars[e]}}tokenizeLine(e,t,n=0){let r=this._tokenize(e,t,!1,n);return{tokens:r.lineTokens.getResult(r.ruleStack,r.lineLength),ruleStack:r.ruleStack,stoppedEarly:r.stoppedEarly}}tokenizeLine2(e,t,n=0){let r=this._tokenize(e,t,!0,n);return{tokens:r.lineTokens.getBinaryResult(r.ruleStack,r.lineLength),ruleStack:r.ruleStack,stoppedEarly:r.stoppedEarly}}_tokenize(e,t,n,r){this._rootId===-1&&(this._rootId=Mn.getCompiledRuleId(this._grammar.repository.$self,this,this._grammar.repository),this.getInjections());let i;if(!t||t===nr.NULL){i=!0;let e=this._basicScopeAttributesProvider.getDefaultAttributes(),n=this.themeProvider.getDefaults(),r=Qt.set(0,e.languageId,e.tokenType,null,n.fontStyle,n.foregroundId,n.backgroundId),a=this.getRule(this._rootId).getName(null,null),o;o=a?tr.createRootAndLookUpScopeName(a,r,this):tr.createRoot(`unknown`,r),t=new nr(null,this._rootId,-1,-1,!1,null,o,o)}else i=!1,t.reset();e+=` `;let a=this.createOnigString(e),o=a.content.length,s=new ir(n,e,this._tokenTypeMatchers,this.balancedBracketSelectors),c=Bn(this,a,i,0,t,s,!0,r);return an(a),{lineLength:o,lineTokens:s,ruleStack:c.stack,stoppedEarly:c.stoppedEarly}}};function er(e,t){return e=Et(e),e.repository=e.repository||{},e.repository.$self={$vscodeTextmateLocation:e.$vscodeTextmateLocation,patterns:e.patterns,name:e.scopeName},e.repository.$base=t||e.repository.$self,e}var tr=class e{constructor(e,t,n){this.parent=e,this.scopePath=t,this.tokenAttributes=n}static fromExtension(t,n){let r=t,i=t?.scopePath??null;for(let t of n)i=Bt.push(i,t.scopeNames),r=new e(r,i,t.encodedTokenAttributes);return r}static createRoot(t,n){return new e(null,new Bt(null,t),n)}static createRootAndLookUpScopeName(t,n,r){let i=r.getMetadataForScope(t),a=new Bt(null,t),o=r.themeProvider.themeMatch(a),s=e.mergeAttributes(n,i,o);return new e(null,a,s)}get scopeName(){return this.scopePath.scopeName}toString(){return this.getScopeNames().join(` `)}equals(t){return e.equals(this,t)}static equals(e,t){do{if(e===t||!e&&!t)return!0;if(!e||!t||e.scopeName!==t.scopeName||e.tokenAttributes!==t.tokenAttributes)return!1;e=e.parent,t=t.parent}while(1)}static mergeAttributes(e,t,n){let r=-1,i=0,a=0;return n!==null&&(r=n.fontStyle,i=n.foregroundId,a=n.backgroundId),Qt.set(e,t.languageId,t.tokenType,null,r,i,a)}pushAttributed(t,n){if(t===null)return this;if(t.indexOf(` `)===-1)return e._pushAttributed(this,t,n);let r=t.split(/ /g),i=this;for(let t of r)i=e._pushAttributed(i,t,n);return i}static _pushAttributed(t,n,r){let i=r.getMetadataForScope(n),a=t.scopePath.push(n),o=r.themeProvider.themeMatch(a),s=e.mergeAttributes(t.tokenAttributes,i,o);return new e(t,a,s)}getScopeNames(){return this.scopePath.getSegments()}getExtensionIfDefined(e){let t=[],n=this;for(;n&&n!==e;)t.push({encodedTokenAttributes:n.tokenAttributes,scopeNames:n.scopePath.getExtensionIfDefined(n.parent?.scopePath??null)}),n=n.parent;return n===e?t.reverse():void 0}},nr=class e{constructor(e,t,n,r,i,a,o,s){this.parent=e,this.ruleId=t,this.beginRuleCapturedEOL=i,this.endRule=a,this.nameScopesList=o,this.contentNameScopesList=s,this.depth=this.parent?this.parent.depth+1:1,this._enterPos=n,this._anchorPos=r}_stackElementBrand=void 0;static NULL=new e(null,0,0,0,!1,null,null,null);_enterPos;_anchorPos;depth;equals(t){return t!==null&&e._equals(this,t)}static _equals(e,t){return e===t?!0:this._structuralEquals(e,t)?tr.equals(e.contentNameScopesList,t.contentNameScopesList):!1}static _structuralEquals(e,t){do{if(e===t||!e&&!t)return!0;if(!e||!t||e.depth!==t.depth||e.ruleId!==t.ruleId||e.endRule!==t.endRule)return!1;e=e.parent,t=t.parent}while(1)}clone(){return this}static _reset(e){for(;e;)e._enterPos=-1,e._anchorPos=-1,e=e.parent}reset(){e._reset(this)}pop(){return this.parent}safePop(){return this.parent?this.parent:this}push(t,n,r,i,a,o,s){return new e(this,t,n,r,i,a,o,s)}getEnterPos(){return this._enterPos}getAnchorPos(){return this._anchorPos}getRule(e){return e.getRule(this.ruleId)}toString(){let e=[];return this._writeString(e,0),`[`+e.join(`,`)+`]`}_writeString(e,t){return this.parent&&(t=this.parent._writeString(e,t)),e[t++]=`(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`,t}withContentNameScopesList(e){return this.contentNameScopesList===e?this:this.parent.push(this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,this.endRule,this.nameScopesList,e)}withEndRule(t){return this.endRule===t?this:new e(this.parent,this.ruleId,this._enterPos,this._anchorPos,this.beginRuleCapturedEOL,t,this.nameScopesList,this.contentNameScopesList)}hasSameRuleAs(e){let t=this;for(;t&&t._enterPos===e._enterPos;){if(t.ruleId===e.ruleId)return!0;t=t.parent}return!1}toStateStackFrame(){return{ruleId:Tn(this.ruleId),beginRuleCapturedEOL:this.beginRuleCapturedEOL,endRule:this.endRule,nameScopesList:this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList??null)??[],contentNameScopesList:this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList)??[]}}static pushFrame(t,n){let r=tr.fromExtension(t?.nameScopesList??null,n.nameScopesList);return new e(t,wn(n.ruleId),n.enterPos??-1,n.anchorPos??-1,n.beginRuleCapturedEOL,n.endRule,r,tr.fromExtension(r,n.contentNameScopesList))}},rr=class{balancedBracketScopes;unbalancedBracketScopes;allowAny=!1;constructor(e,t){this.balancedBracketScopes=e.flatMap(e=>e===`*`?(this.allowAny=!0,[]):tn(e,Zn).map(e=>e.matcher)),this.unbalancedBracketScopes=t.flatMap(e=>tn(e,Zn).map(e=>e.matcher))}get matchesAlways(){return this.allowAny&&this.unbalancedBracketScopes.length===0}get matchesNever(){return this.balancedBracketScopes.length===0&&!this.allowAny}match(e){for(let t of this.unbalancedBracketScopes)if(t(e))return!1;for(let t of this.balancedBracketScopes)if(t(e))return!0;return this.allowAny}},ir=class{constructor(e,t,n,r){this.balancedBracketSelectors=r,this._emitBinaryTokens=e,this._tokenTypeOverrides=n,this._lineText=null,this._tokens=[],this._binaryTokens=[],this._lastTokenEndIndex=0}_emitBinaryTokens;_lineText;_tokens;_binaryTokens;_lastTokenEndIndex;_tokenTypeOverrides;produce(e,t){this.produceFromScopes(e.contentNameScopesList,t)}produceFromScopes(e,t){if(this._lastTokenEndIndex>=t)return;if(this._emitBinaryTokens){let n=e?.tokenAttributes??0,r=!1;if(this.balancedBracketSelectors?.matchesAlways&&(r=!0),this._tokenTypeOverrides.length>0||this.balancedBracketSelectors&&!this.balancedBracketSelectors.matchesAlways&&!this.balancedBracketSelectors.matchesNever){let t=e?.getScopeNames()??[];for(let e of this._tokenTypeOverrides)e.matcher(t)&&(n=Qt.set(n,0,$t(e.type),null,-1,0,0));this.balancedBracketSelectors&&(r=this.balancedBracketSelectors.match(t))}if(r&&(n=Qt.set(n,0,8,r,-1,0,0)),this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-1]===n){this._lastTokenEndIndex=t;return}this._binaryTokens.push(this._lastTokenEndIndex),this._binaryTokens.push(n),this._lastTokenEndIndex=t;return}let n=e?.getScopeNames()??[];this._tokens.push({startIndex:this._lastTokenEndIndex,endIndex:t,scopes:n}),this._lastTokenEndIndex=t}getResult(e,t){return this._tokens.length>0&&this._tokens[this._tokens.length-1].startIndex===t-1&&this._tokens.pop(),this._tokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._tokens[this._tokens.length-1].startIndex=0),this._tokens}getBinaryResult(e,t){this._binaryTokens.length>0&&this._binaryTokens[this._binaryTokens.length-2]===t-1&&(this._binaryTokens.pop(),this._binaryTokens.pop()),this._binaryTokens.length===0&&(this._lastTokenEndIndex=-1,this.produce(e,t),this._binaryTokens[this._binaryTokens.length-2]=0);let n=new Uint32Array(this._binaryTokens.length);for(let e=0,t=this._binaryTokens.length;e0;)a.Q.map(e=>this._loadSingleGrammar(e.scopeName)),a.processQueue();return this._grammarForScopeName(e,t,n,r,i)}_loadSingleGrammar(e){this._ensureGrammarCache.has(e)||(this._doLoadSingleGrammar(e),this._ensureGrammarCache.set(e,!0))}_doLoadSingleGrammar(e){let t=this._options.loadGrammar(e);if(t){let n=typeof this._options.getInjections==`function`?this._options.getInjections(e):void 0;this._syncRegistry.addGrammar(t,n)}}addGrammar(e,t=[],n=0,r=null){return this._syncRegistry.addGrammar(e,t),this._grammarForScopeName(e.scopeName,n,r)}_grammarForScopeName(e,t=0,n=null,r=null,i=null){return this._syncRegistry.grammarForScopeName(e,t,n,r,i)}},sr=nr.NULL;function cr(e,t){let n=typeof e==`string`?{}:{...e.colorReplacements},r=typeof e==`string`?e:e.name;for(let[e,i]of Object.entries(t?.colorReplacements||{}))typeof i==`string`?n[e]=i:e===r&&Object.assign(n,i);return n}function lr(e,t){return e&&(t?.[e?.toLowerCase()]||e)}function ur(e){return Array.isArray(e)?e:[e]}async function dr(e){return Promise.resolve(typeof e==`function`?e():e).then(e=>e.default||e)}function fr(e){return!e||[`plaintext`,`txt`,`text`,`plain`].includes(e)}function pr(e){return e===`ansi`||fr(e)}function mr(e){return e===`none`}function hr(e){return mr(e)}var gr=/(\r?\n)/g;function _r(e,t=!1){if(e.length===0)return[[``,0]];let n=e.split(gr),r=0,i=[];for(let e=0;e!e.name&&!e.scope):void 0;e?.settings?.foreground&&(r=e.settings.foreground),e?.settings?.background&&(n=e.settings.background),!r&&t?.colors?.[`editor.foreground`]&&(r=t.colors[`editor.foreground`]),!n&&t?.colors?.[`editor.background`]&&(n=t.colors[`editor.background`]),r||=t.type===`light`?vr.light:vr.dark,n||=t.type===`light`?yr.light:yr.dark,t.fg=r,t.bg=n}t.settings[0]&&t.settings[0].settings&&!t.settings[0].scope||t.settings.unshift({settings:{foreground:t.fg,background:t.bg}});let i=0,a=new Map;function o(e){if(a.has(e))return a.get(e);i+=1;let n=`#${i.toString(16).padStart(8,`0`).toLowerCase()}`;return t.colorReplacements?.[`#${n}`]?o(e):(a.set(e,n),n)}t.settings=t.settings.map(e=>{let n=e.settings?.foreground&&!e.settings.foreground.startsWith(`#`),r=e.settings?.background&&!e.settings.background.startsWith(`#`);if(!n&&!r)return e;let i={...e,settings:{...e.settings}};if(n){let n=o(e.settings.foreground);t.colorReplacements[n]=e.settings.foreground,i.settings.foreground=n}if(r){let n=o(e.settings.background);t.colorReplacements[n]=e.settings.background,i.settings.background=n}return i});for(let e of Object.keys(t.colors||{}))if((e===`editor.foreground`||e===`editor.background`||e.startsWith(`terminal.ansi`))&&!t.colors[e]?.startsWith(`#`)){let n=o(t.colors[e]);t.colorReplacements[n]=t.colors[e],t.colors[e]=n}return Object.defineProperty(t,br,{enumerable:!1,writable:!1,value:!0}),t}async function Sr(e){return[...new Set((await Promise.all(e.filter(e=>!pr(e)).map(async e=>await dr(e).then(e=>Array.isArray(e)?e:[e])))).flat())]}async function Cr(e){return(await Promise.all(e.map(async e=>hr(e)?null:xr(await dr(e))))).filter(e=>!!e)}function wr(e,t){if(!t)return e;if(t[e]){let n=new Set([e]);for(;t[e];){if(e=t[e],n.has(e))throw new Tt(`Circular alias \`${[...n].join(` -> `)} -> ${e}\``);n.add(e)}}return e}var Tr=class extends or{_resolver;_themes;_langs;_alias;_resolvedThemes=new Map;_resolvedGrammars=new Map;_langMap=new Map;_langGraph=new Map;_textmateThemeCache=new WeakMap;_loadedThemesCache=null;_loadedLanguagesCache=null;constructor(e,t,n,r={}){super(e),this._resolver=e,this._themes=t,this._langs=n,this._alias=r,this._themes.map(e=>this.loadTheme(e)),this.loadLanguages(this._langs)}getTheme(e){return typeof e==`string`?this._resolvedThemes.get(e):this.loadTheme(e)}loadTheme(e){let t=xr(e);return t.name&&(this._resolvedThemes.set(t.name,t),this._loadedThemesCache=null),t}getLoadedThemes(){return this._loadedThemesCache||=[...this._resolvedThemes.keys()],this._loadedThemesCache}setTheme(e){let t=this._textmateThemeCache.get(e);t||(t=zt.createFromRawTheme(e),this._textmateThemeCache.set(e,t)),this._syncRegistry.setTheme(t)}getGrammar(e){return e=wr(e,this._alias),this._resolvedGrammars.get(e)}loadLanguage(e){if(this.getGrammar(e.name))return;let t=new Set([...this._langMap.values()].filter(t=>t.embeddedLangsLazy?.includes(e.name)));this._resolver.addLanguage(e);let n={balancedBracketSelectors:e.balancedBracketSelectors||[`*`],unbalancedBracketSelectors:e.unbalancedBracketSelectors||[]};this._syncRegistry._rawGrammars.set(e.scopeName,e);let r=this.loadGrammarWithConfiguration(e.scopeName,1,n);if(r.name=e.name,this._resolvedGrammars.set(e.name,r),e.aliases&&e.aliases.forEach(t=>{this._alias[t]=e.name}),this._loadedLanguagesCache=null,t.size)for(let e of t)this._resolvedGrammars.delete(e.name),this._loadedLanguagesCache=null,this._syncRegistry?._injectionGrammars?.delete(e.scopeName),this._syncRegistry?._grammars?.delete(e.scopeName),this.loadLanguage(this._langMap.get(e.name))}dispose(){super.dispose(),this._resolvedThemes.clear(),this._resolvedGrammars.clear(),this._langMap.clear(),this._langGraph.clear(),this._loadedThemesCache=null}loadLanguages(e){for(let t of e)this.resolveEmbeddedLanguages(t);let t=[...this._langGraph.entries()],n=t.filter(([e,t])=>!t);if(n.length){let e=t.filter(([e,t])=>t?(t.embeddedLanguages||t.embeddedLangs)?.some(e=>n.map(([e])=>e).includes(e)):!1).filter(e=>!n.includes(e));throw new Tt(`Missing languages ${n.map(([e])=>`\`${e}\``).join(`, `)}, required by ${e.map(([e])=>`\`${e}\``).join(`, `)}`)}for(let[e,n]of t)this._resolver.addLanguage(n);for(let[e,n]of t)this.loadLanguage(n)}getLoadedLanguages(){return this._loadedLanguagesCache||=[...new Set([...this._resolvedGrammars.keys(),...Object.keys(this._alias)])],this._loadedLanguagesCache}resolveEmbeddedLanguages(e){this._langMap.set(e.name,e),this._langGraph.set(e.name,e);let t=e.embeddedLanguages??e.embeddedLangs;if(t)for(let e of t)this._langGraph.set(e,this._langMap.get(e))}},Er=class{_langs=new Map;_scopeToLang=new Map;_injections=new Map;_onigLib;constructor(e,t){this._onigLib={createOnigScanner:t=>e.createScanner(t),createOnigString:t=>e.createString(t)},t.forEach(e=>this.addLanguage(e))}get onigLib(){return this._onigLib}getLangRegistration(e){return this._langs.get(e)}loadGrammar(e){return this._scopeToLang.get(e)}addLanguage(e){this._langs.set(e.name,e),e.aliases&&e.aliases.forEach(t=>{this._langs.set(t,e)}),this._scopeToLang.set(e.scopeName,e),e.injectTo&&e.injectTo.forEach(t=>{this._injections.get(t)||this._injections.set(t,[]),this._injections.get(t).push(e.scopeName)})}getInjections(e){let t=e.split(`.`),n=[];for(let e=1;e<=t.length;e++){let r=t.slice(0,e).join(`.`);n=[...n,...this._injections.get(r)||[]]}return n}},Dr=0;function Or(e){Dr+=1,e.warnings!==!1&&Dr>=10&&Dr%10==0&&console.warn(`[Shiki] ${Dr} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \`highlighter.dispose()\` to release unused instances.`);let t=!1;if(!e.engine)throw new Tt("`engine` option is required for synchronous mode");let n=(e.langs||[]).flat(1),r=(e.themes||[]).flat(1).map(xr),i=new Tr(new Er(e.engine,n),r,n,e.langAlias),a;function o(t){return wr(t,e.langAlias)}function s(e){g();let t=i.getGrammar(typeof e==`string`?e:e.name);if(!t)throw new Tt(`Language \`${e}\` not found, you may need to load it first`);return t}function c(e){if(e===`none`)return{bg:``,fg:``,name:`none`,settings:[],type:`dark`};g();let t=i.getTheme(e);if(!t)throw new Tt(`Theme \`${e}\` not found, you may need to load it first`);return t}function l(e){g();let t=c(e);return a!==e&&(i.setTheme(t),a=e),{theme:t,colorMap:i.getColorMap()}}function u(){return g(),i.getLoadedThemes()}function d(){return g(),i.getLoadedLanguages()}function f(...e){g(),i.loadLanguages(e.flat(1))}async function p(...e){return f(await Sr(e))}function m(...e){g();for(let t of e.flat(1))i.loadTheme(t)}async function h(...e){return g(),m(await Cr(e))}function g(){if(t)throw new Tt(`Shiki instance has been disposed`)}function _(){t||(t=!0,i.dispose(),--Dr)}return{setTheme:l,getTheme:c,getLanguage:s,getLoadedThemes:u,getLoadedLanguages:d,resolveLangAlias:o,loadLanguage:p,loadLanguageSync:f,loadTheme:h,loadThemeSync:m,dispose:_,[Symbol.dispose]:_}}async function kr(e){e.engine||console.warn("`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.");let[t,n,r]=await Promise.all([Cr(e.themes||[]),Sr(e.langs||[]),e.engine]);return Or({...e,themes:t,langs:n,engine:r})}var Ar=new WeakMap;function jr(e,t){Ar.set(e,t)}function Mr(e){return Ar.get(e)}var Nr=class e{_stacks={};lang;get themes(){return Object.keys(this._stacks)}get theme(){return this.themes[0]}get _stack(){return this._stacks[this.theme]}static initial(t,n){return new e(Object.fromEntries(ur(n).map(e=>[e,sr])),t)}constructor(...e){if(e.length===2){let[t,n]=e;this.lang=n,this._stacks=t}else{let[t,n,r]=e;this.lang=n,this._stacks={[r]:t}}}getInternalStack(e=this.theme){return this._stacks[e]}getScopes(e=this.theme){return Pr(this._stacks[e])}toJSON(){return{lang:this.lang,theme:this.theme,themes:this.themes,scopes:this.getScopes()}}};function Pr(e){let t=[],n=new Set;function r(e){if(n.has(e))return;n.add(e);let i=e?.nameScopesList?.scopeName;i&&t.push(i),e.parent&&r(e.parent)}return r(e),t}function Fr(e,t){if(!(e instanceof Nr))throw new Tt(`Invalid grammar state`);return e.getInternalStack(t)}var Ir=/,/,Lr=/ /;function Rr(e,t,n={}){let{theme:r=e.getLoadedThemes()[0]}=n;if(fr(e.resolveLangAlias(n.lang||`text`))||mr(r))return _r(t).map(e=>[{content:e[0],offset:e[1]}]);let{theme:i,colorMap:a}=e.setTheme(r),o=e.getLanguage(n.lang||`text`);if(n.grammarState){if(n.grammarState.lang!==o.name)throw new Tt(`Grammar state language "${n.grammarState.lang}" does not match highlight language "${o.name}"`);if(!n.grammarState.themes.includes(i.name))throw new Tt(`Grammar state themes "${n.grammarState.themes}" do not contain highlight theme "${i.name}"`)}return Br(t,o,i,a,n)}function zr(...e){if(e.length===2)return Mr(e[1]);let[t,n,r={}]=e,{lang:i=`text`,theme:a=t.getLoadedThemes()[0]}=r;if(fr(i)||mr(a))throw new Tt(`Plain language does not have grammar state`);if(i===`ansi`)throw new Tt(`ANSI language does not have grammar state`);let{theme:o,colorMap:s}=t.setTheme(a),c=t.getLanguage(i);return new Nr(Vr(n,c,o,s,r).stateStack,c.name,o.name)}function Br(e,t,n,r,i){let a=Vr(e,t,n,r,i),o=new Nr(a.stateStack,t.name,n.name);return jr(a.tokens,o),a.tokens}function Vr(e,t,n,r,i){let a=cr(n,i),{tokenizeMaxLineLength:o=0,tokenizeTimeLimit:s=500,includeExplanation:c=!1}=i,l=_r(e),u=i.grammarState?Fr(i.grammarState,n.name)??sr:i.grammarContextCode==null?sr:Vr(i.grammarContextCode,t,n,r,{...i,grammarState:void 0,grammarContextCode:void 0}).stateStack,d=[],f=[];for(let e=0,i=l.length;e0&&i.length>=o){d=[],f.push([{content:i,offset:p,color:``,fontStyle:0}]);continue}let m,h,g;c&&c!==`tokenType`&&(m=t.tokenizeLine(i,u,s),h=m.tokens,g=0);let _=t.tokenizeLine2(i,u,s),v=_.tokens.length/2;for(let e=0;ee.trim());break;case`object`:n=t.scope;break;default:continue}e.push({settings:t,selectors:n.map(e=>e.split(Lr))})}f.explanation=[];let r=0;for(;t+r({scopeName:e}))}function Ur(e,t){let n=[];for(let r=0,i=t.length;r=0&&i>=0;)Wr(e[r],n[i])&&--r,--i;return r===-1}function Kr(e,t,n){let r=[];for(let{selectors:i,settings:a}of e)for(let e of i)if(Gr(e,t,n)){r.push(a);break}return r}function qr(e,t,n,r=Rr){let i=Object.entries(n.themes).filter(e=>e[1]).map(e=>({color:e[0],theme:e[1]})),a=i.map(i=>{let a=r(e,t,{...n,theme:i.theme});return{tokens:a,state:Mr(a),theme:typeof i.theme==`string`?i.theme:i.theme.name}}),o=Jr(...a.map(e=>e.tokens)),s=o[0].map((e,t)=>e.map((e,r)=>{let a={content:e.content,variants:{},offset:e.offset};return`includeExplanation`in n&&n.includeExplanation&&(a.explanation=e.explanation),o.forEach((e,n)=>{let{content:o,explanation:s,offset:c,...l}=e[t][r];a.variants[i[n].color]=l}),a})),c=a[0].state?new Nr(Object.fromEntries(a.map(e=>[e.theme,e.state?.getInternalStack(e.theme)])),a[0].state.lang):void 0;return c&&jr(s,c),s}function Jr(...e){let t=e.map(()=>[]),n=e.length;for(let r=0;re[r]),a=t.map(()=>[]);t.forEach((e,t)=>e.push(a[t]));let o=i.map(()=>0),s=i.map(e=>e[0]);for(;s.every(e=>e);){let e=Math.min(...s.map(e=>e.content.length));for(let t=0;tG,booleanish:()=>ni,commaOrSpaceSeparated:()=>oi,commaSeparated:()=>ai,number:()=>K,overloadedBoolean:()=>ri,spaceSeparated:()=>ii}),ti=0,G=si(),ni=si(),ri=si(),K=si(),ii=si(),ai=si(),oi=si();function si(){return 2**++ti}var ci=Object.keys(ei),li=class extends $r{constructor(e,t,n,r){let i=-1;if(super(e,t),ui(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&Si.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(xi,Ti);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!xi.test(e)){let n=e.replace(bi,wi);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=li}return new i(r,t)}function wi(e){return`-`+e.toLowerCase()}function Ti(e){return e.charAt(1).toUpperCase()}var Ei=Zr([fi,hi,_i,vi,yi],`html`),Di=Zr([fi,gi,_i,vi,yi],`svg`),Oi={}.hasOwnProperty;function ki(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&Oi.call(t,e)){let n=String(t[e]);i=Oi.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var Ai=/["&'<>`]/g,ji=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Mi=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,Ni=/[|\\{}()[\]^$+*?.]/g,Pi=new WeakMap;function Fi(e,t){if(e=e.replace(t.subset?Ii(t.subset):Ai,r),t.subset||t.escapeOnly)return e;return e.replace(ji,n).replace(Mi,r);function n(e,n,r){return t.format((e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536,r.charCodeAt(n+2),t)}function r(e,n,r){return t.format(e.charCodeAt(0),r.charCodeAt(n+1),t)}}function Ii(e){let t=Pi.get(e);return t||(t=Li(e),Pi.set(e,t)),t}function Li(e){let t=[],n=-1;for(;++n`,OElig:`Œ`,oelig:`œ`,Scaron:`Š`,scaron:`š`,Yuml:`Ÿ`,circ:`ˆ`,tilde:`˜`,ensp:` `,emsp:` `,thinsp:` `,zwnj:`‌`,zwj:`‍`,lrm:`‎`,rlm:`‏`,ndash:`–`,mdash:`—`,lsquo:`‘`,rsquo:`’`,sbquo:`‚`,ldquo:`“`,rdquo:`”`,bdquo:`„`,dagger:`†`,Dagger:`‡`,permil:`‰`,lsaquo:`‹`,rsaquo:`›`,euro:`€`},Wi=[`cent`,`copy`,`divide`,`gt`,`lt`,`not`,`para`,`times`],Gi={}.hasOwnProperty,Ki={},qi;for(qi in Ui)Gi.call(Ui,qi)&&(Ki[Ui[qi]]=qi);var Ji=/[^\dA-Za-z]/;function Yi(e,t,n,r){let i=String.fromCharCode(e);if(Gi.call(Ki,i)){let e=Ki[i],a=`&`+e;return n&&Hi.includes(e)&&!Wi.includes(e)&&(!r||t&&t!==61&&Ji.test(String.fromCharCode(t)))?a:a+`;`}return``}function Xi(e,t,n){let r=zi(e,t,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=Yi(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){let i=Vi(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|`],ea=[`<`,`>`];function ta(e,t,n,r){return r.settings.bogusComments?``:``;function i(e){return Zi(e,Object.assign({},r.settings.characterReferences,{subset:ea}))}}function na(e,t,n,r){return``}function ra(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}function ia(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function aa(e){return e.join(` `).trim()}var oa=/[ \t\n\f\r]/g;function sa(e){return typeof e==`object`?e.type===`text`&&ca(e.value):ca(e)}function ca(e){return e.replace(oa,``)===``}var la=fa(1),ua=fa(-1),da=[];function fa(e){return t;function t(t,n,r){let i=t?t.children:da,a=(n||0)+e,o=i[a];if(!r)for(;o&&sa(o);)a+=e,o=i[a];return o}}var pa={}.hasOwnProperty;function ma(e){return t;function t(t,n,r){return pa.call(e,t.tagName)&&e[t.tagName](t,n,r)}}var ha=ma({body:va,caption:ga,colgroup:ga,dd:Sa,dt:xa,head:ga,html:_a,li:ba,optgroup:wa,option:Ta,p:ya,rp:Ca,rt:Ca,tbody:Da,td:Aa,tfoot:Oa,th:Aa,thead:Ea,tr:ka});function ga(e,t,n){let r=la(n,t,!0);return!r||r.type!==`comment`&&!(r.type===`text`&&sa(r.value.charAt(0)))}function _a(e,t,n){let r=la(n,t);return!r||r.type!==`comment`}function va(e,t,n){let r=la(n,t);return!r||r.type!==`comment`}function ya(e,t,n){let r=la(n,t);return r?r.type===`element`&&(r.tagName===`address`||r.tagName===`article`||r.tagName===`aside`||r.tagName===`blockquote`||r.tagName===`details`||r.tagName===`div`||r.tagName===`dl`||r.tagName===`fieldset`||r.tagName===`figcaption`||r.tagName===`figure`||r.tagName===`footer`||r.tagName===`form`||r.tagName===`h1`||r.tagName===`h2`||r.tagName===`h3`||r.tagName===`h4`||r.tagName===`h5`||r.tagName===`h6`||r.tagName===`header`||r.tagName===`hgroup`||r.tagName===`hr`||r.tagName===`main`||r.tagName===`menu`||r.tagName===`nav`||r.tagName===`ol`||r.tagName===`p`||r.tagName===`pre`||r.tagName===`section`||r.tagName===`table`||r.tagName===`ul`):!n||n.type!==`element`||n.tagName!==`a`&&n.tagName!==`audio`&&n.tagName!==`del`&&n.tagName!==`ins`&&n.tagName!==`map`&&n.tagName!==`noscript`&&n.tagName!==`video`}function ba(e,t,n){let r=la(n,t);return!r||r.type===`element`&&r.tagName===`li`}function xa(e,t,n){let r=la(n,t);return!(!r||r.type!==`element`||r.tagName!==`dt`&&r.tagName!==`dd`)}function Sa(e,t,n){let r=la(n,t);return!r||r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`)}function Ca(e,t,n){let r=la(n,t);return!r||r.type===`element`&&(r.tagName===`rp`||r.tagName===`rt`)}function wa(e,t,n){let r=la(n,t);return!r||r.type===`element`&&r.tagName===`optgroup`}function Ta(e,t,n){let r=la(n,t);return!r||r.type===`element`&&(r.tagName===`option`||r.tagName===`optgroup`)}function Ea(e,t,n){let r=la(n,t);return!(!r||r.type!==`element`||r.tagName!==`tbody`&&r.tagName!==`tfoot`)}function Da(e,t,n){let r=la(n,t);return!r||r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`)}function Oa(e,t,n){return!la(n,t)}function ka(e,t,n){let r=la(n,t);return!r||r.type===`element`&&r.tagName===`tr`}function Aa(e,t,n){let r=la(n,t);return!r||r.type===`element`&&(r.tagName===`td`||r.tagName===`th`)}var ja=ma({body:Pa,colgroup:Fa,head:Na,html:Ma,tbody:Ia});function Ma(e){let t=la(e,-1);return!t||t.type!==`comment`}function Na(e){let t=new Set;for(let n of e.children)if(n.type===`element`&&(n.tagName===`base`||n.tagName===`title`)){if(t.has(n.tagName))return!1;t.add(n.tagName)}let n=e.children[0];return!n||n.type===`element`}function Pa(e){let t=la(e,-1,!0);return!t||t.type!==`comment`&&!(t.type===`text`&&sa(t.value.charAt(0)))&&(t.type!==`element`||t.tagName!==`meta`&&t.tagName!==`link`&&t.tagName!==`script`&&t.tagName!==`style`&&t.tagName!==`template`)}function Fa(e,t,n){let r=ua(n,t),i=la(e,-1,!0);return n&&r&&r.type===`element`&&r.tagName===`colgroup`&&ha(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`col`)}function Ia(e,t,n){let r=ua(n,t),i=la(e,-1);return n&&r&&r.type===`element`&&(r.tagName===`thead`||r.tagName===`tbody`)&&ha(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`tr`)}var La={name:[[` \f\r &/=>`.split(``),` @@ -1532,10 +1532,10 @@ diff --git`)}function t_(e,t){if(e.length===0)return[``];let n=`\n${t}`,r=e.star `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{le=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?ce(n):``}function de(e,t){switch(e.tag){case 26:case 27:case 5:return ce(e.type);case 16:return ce(`Lazy`);case 13:return e.child!==t&&t!==null?ce(`Suspense Fallback`):ce(`Suspense`);case 19:return ce(`SuspenseList`);case 0:case 15:return ue(e.type,!1);case 11:return ue(e.type.render,!1);case 1:return ue(e.type,!0);case 31:return ce(`Activity`);default:return``}}function fe(e){try{var t=``,n=null;do t+=de(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var pe=Object.prototype.hasOwnProperty,me=t.unstable_scheduleCallback,he=t.unstable_cancelCallback,ge=t.unstable_shouldYield,_e=t.unstable_requestPaint,ve=t.unstable_now,ye=t.unstable_getCurrentPriorityLevel,be=t.unstable_ImmediatePriority,xe=t.unstable_UserBlockingPriority,Se=t.unstable_NormalPriority,Ce=t.unstable_LowPriority,we=t.unstable_IdlePriority,Te=t.log,Ee=t.unstable_setDisableYieldValue,De=null,Oe=null;function ke(e){if(typeof Te==`function`&&Ee(e),Oe&&typeof Oe.setStrictMode==`function`)try{Oe.setStrictMode(De,e)}catch{}}var Ae=Math.clz32?Math.clz32:Ne,je=Math.log,Me=Math.LN2;function Ne(e){return e>>>=0,e===0?32:31-(je(e)/Me|0)|0}var Pe=256,Fe=262144,Ie=4194304;function Le(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Re(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Le(n))):i=Le(o):i=Le(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Le(n))):i=Le(o)):i=Le(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function ze(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Be(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ve(){var e=Ie;return Ie<<=1,!(Ie&62914560)&&(Ie=4194304),e}function He(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ue(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function W(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),tn=!1;if(en)try{var nn={};Object.defineProperty(nn,"passive",{get:function(){tn=!0}}),window.addEventListener(`test`,nn,nn),window.removeEventListener(`test`,nn,nn)}catch{tn=!1}var rn=null,an=null,on=null;function sn(){if(on)return on;var e,t=an,n=t.length,r,i=`value`in rn?rn.value:rn.textContent,a=i.length;for(e=0;e=zn),Hn=` `,Un=!1;function Wn(e,t){switch(e){case`keyup`:return Ln.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Gn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Kn=!1;function qn(e,t){switch(e){case`compositionend`:return Gn(t);case`keypress`:return t.which===32?(Un=!0,Hn):null;case`textInput`:return e=t.data,e===Hn&&Un?null:e;default:return null}}function Jn(e,t){if(Kn)return e===`compositionend`||!Rn&&Wn(e,t)?(e=sn(),on=an=rn=null,Kn=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=gr(n)}}function vr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?vr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function yr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ot(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ot(e.document)}return t}function br(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var xr=en&&`documentMode`in document&&11>=document.documentMode,Sr=null,Cr=null,wr=null,Tr=!1;function Er(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Tr||Sr==null||Sr!==Ot(r)||(r=Sr,`selectionStart`in r&&br(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),wr&&hr(wr,r)||(wr=r,r=Y(Cr,`onSelect`),0>=o,i-=o,gi=1<<32-Ae(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Ti&&vi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Ti&&vi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return Ti&&vi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Ti&&vi(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===_&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case h:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===_){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===E&&ya(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ea(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===_?(c=K(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=ri(o.type,o.key,o.props,null,e.mode,c),Ea(c,o),c.return=e,e=c)}return s(e);case g:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=oi(o,e.mode,c),c.return=e,e=c}return s(e);case E:return o=ya(o),b(e,r,o,c)}if(N(o))return v(e,r,o,c);if(A(o)){if(l=A(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),y(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Ta(o),c);if(o.$$typeof===x)return b(e,r,qi(e,o),c);Da(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=ii(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{wa=0;var i=b(e,t,n,r);return Ca=null,i}catch(t){if(t===pa||t===ha)throw t;var a=ei(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var ka=Oa(!0),Aa=Oa(!1),ja=!1;function Ma(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Na(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Pa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Fa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Pl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Zr(e),Xr(e,null,n),t}return qr(e,r,t,n),Zr(e)}function Ia(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Ge(e,n)}}function La(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ra=!1;function za(){if(Ra){var e=ia;if(e!==null)throw e}}function Ba(e,t,n,r){Ra=!1;var i=e.updateQueue;ja=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,m=f!==s.lane;if(m?(Ll&f)===f:(r&f)===f){f!==0&&f===ra&&(Ra=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=p({},d,f);break a;case 2:ja=!0}}f=s.callback,f!==null&&(e.flags|=64,m&&(e.flags|=8192),m=i.callbacks,m===null?i.callbacks=[f]:m.push(f))}else m={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=m,c=d):u=u.next=m,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;m=s,s=m.next,m.next=null,i.lastBaseUpdate=m,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Va(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Ha(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=P.T,s={};P.T=s,Os(e,!1,t,n);try{var c=i(),l=P.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ds(e,t,sa(c,r),pu(e)):Ds(e,t,r,pu(e))}catch(n){Ds(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{F.p=a,o!==null&&s.types!==null&&(o.types=s.types),P.T=o}}function _s(){}function vs(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ys(e).queue;gs(e,a,t,I,n===null?_s:function(){return bs(e),n(r)})}function ys(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:I,baseState:I,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:I},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function bs(e){var t=ys(e);t.next===null&&(t=e.alternate.memoizedState),Ds(e,t.next.queue,{},pu())}function xs(){return Ki(ep)}function Ss(){return wo().memoizedState}function Cs(){return wo().memoizedState}function ws(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Pa(n);var r=Fa(t,e,n);r!==null&&(hu(r,t,n),Ia(r,t,n)),t={cache:$i()},e.payload=t;return}t=t.return}}function Ts(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},ks(e)?As(t,n):(n=Jr(e,t,n,r),n!==null&&(hu(n,e,r),js(n,t,r)))}function Es(e,t,n){Ds(e,t,n,pu())}function Ds(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(ks(e))As(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,mr(s,o))return qr(e,t,i,0),Fl===null&&Kr(),!1}catch{}if(n=Jr(e,t,i,r),n!==null)return hu(n,e,r),js(n,t,r),!0}return!1}function Os(e,t,n,r){if(r={lane:2,revertLane:fd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},ks(e)){if(t)throw Error(i(479))}else t=Jr(e,n,r,2),t!==null&&hu(t,e,2)}function ks(e){var t=e.alternate;return e===q||t!==null&&t===q}function As(e,t){so=oo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function js(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Ge(e,n)}}var Ms={readContext:Ki,use:Do,useCallback:mo,useContext:mo,useEffect:mo,useImperativeHandle:mo,useLayoutEffect:mo,useInsertionEffect:mo,useMemo:mo,useReducer:mo,useRef:mo,useState:mo,useDebugValue:mo,useDeferredValue:mo,useTransition:mo,useSyncExternalStore:mo,useId:mo,useHostTransitionStatus:mo,useFormState:mo,useActionState:mo,useOptimistic:mo,useMemoCache:mo,useCacheRefresh:mo};Ms.useEffectEvent=mo;var Ns={readContext:Ki,use:Do,useCallback:function(e,t){return Co().memoizedState=[e,t===void 0?null:t],e},useContext:Ki,useEffect:rs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ts(4194308,4,ls.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ts(4194308,4,e,t)},useInsertionEffect:function(e,t){ts(4,2,e,t)},useMemo:function(e,t){var n=Co();t=t===void 0?null:t;var r=e();if(co){ke(!0);try{e()}finally{ke(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Co();if(n!==void 0){var i=n(t);if(co){ke(!0);try{n(t)}finally{ke(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ts.bind(null,q,e),[r.memoizedState,e]},useRef:function(e){var t=Co();return e={current:e},t.memoizedState=e},useState:function(e){e=zo(e);var t=e.queue,n=Es.bind(null,q,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:ds,useDeferredValue:function(e,t){return ms(Co(),e,t)},useTransition:function(){var e=zo(!1);return e=gs.bind(null,q,e.queue,!0,!1),Co().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=q,a=Co();if(Ti){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Fl===null)throw Error(i(349));Ll&127||Po(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,rs(Io.bind(null,r,o,e),[e]),r.flags|=2048,$o(9,{destroy:void 0},Fo.bind(null,r,o,n,t),null),n},useId:function(){var e=Co(),t=Fl.identifierPrefix;if(Ti){var n=_i,r=gi;n=(r&~(1<<32-Ae(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=lo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[Qe]=t,o[$e]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Id(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Dc(t)}}return Mc(t),Oc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Dc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=te.current,Mi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ci,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[Qe]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Nd(e.nodeValue,n)),e||ki(t,!0)}else e=Hd(e).createTextNode(r),e[Qe]=t,t.stateNode=e}return Mc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Mi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[Qe]=t}else Ni(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Mc(t),e=!1}else n=Pi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(eo(t),t):(eo(t),null);if(t.flags&128)throw Error(i(558))}return Mc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Mi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[Qe]=t}else Ni(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Mc(t),a=!1}else a=Pi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(eo(t),t):(eo(t),null)}return eo(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ac(t,t.updateQueue),Mc(t),null);case 4:return re(),e===null&&wd(t.stateNode.containerInfo),Mc(t),null;case 10:return Bi(t.type),Mc(t),null;case 19:if(B(to),r=t.memoizedState,r===null)return Mc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)jc(r,!1);else{if(Wl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=no(e),o!==null){for(t.flags|=128,jc(r,!1),e=o.updateQueue,t.updateQueue=e,Ac(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ni(n,e),n=n.sibling;return V(to,to.current&1|2),Ti&&vi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&ve()>tu&&(t.flags|=128,a=!0,jc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=no(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ac(t,e),jc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Ti)return Mc(t),null}else 2*ve()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,jc(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Mc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=ve(),e.sibling=null,n=to.current,V(to,a?n&1|2:n&1),Ti&&vi(t,r.treeForkCount),e);case 22:case 23:return eo(t),qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Mc(t),t.subtreeFlags&6&&(t.flags|=8192)):Mc(t),n=t.updateQueue,n!==null&&Ac(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&B(la),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Bi(Qi),Mc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Pc(e,t){switch(xi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Bi(Qi),re(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ae(t),null;case 31:if(t.memoizedState!==null){if(eo(t),t.alternate===null)throw Error(i(340));Ni()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(eo(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ni()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(to),null;case 4:return re(),null;case 10:return Bi(t.type),null;case 22:case 23:return eo(t),qa(),e!==null&&B(la),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Bi(Qi),null;case 25:return null;default:return null}}function Fc(e,t){switch(xi(t),t.tag){case 3:Bi(Qi),re();break;case 26:case 27:case 5:ae(t);break;case 4:re();break;case 31:t.memoizedState!==null&&eo(t);break;case 13:eo(t);break;case 19:B(to);break;case 10:Bi(t.type);break;case 22:case 23:eo(t),qa(),e!==null&&B(la);break;case 24:Bi(Qi)}}function Ic(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Gu(t,t.return,e)}}function Lc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Gu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Gu(t,t.return,e)}}function Rc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Ha(t,n)}catch(t){Gu(e,e.return,t)}}}function zc(e,t,n){n.props=Bs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Gu(e,t,n)}}function Bc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Gu(e,t,n)}}function Vc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Gu(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Gu(e,t,n)}else n.current=null}}function Hc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Gu(e,e.return,t)}}function Uc(e,t,n){try{var r=e.stateNode;Ld(r,e.type,n,t),r[$e]=t}catch(t){Gu(e,e.return,t)}}function Wc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&$d(e.type)||e.tag===4}function Gc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Wc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&$d(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Kc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Gt));else if(r!==4&&(r===27&&$d(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Kc(e,t,n),e=e.sibling;e!==null;)Kc(e,t,n),e=e.sibling}function qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&$d(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(qc(e,t,n),e=e.sibling;e!==null;)qc(e,t,n),e=e.sibling}function Jc(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Id(t,r,n),t[Qe]=e,t[$e]=n}catch(t){Gu(e,e.return,t)}}var Yc=!1,Xc=!1,Zc=!1,Qc=typeof WeakSet==`function`?WeakSet:Set,$c=null;function el(e,t){if(e=e.containerInfo,Bd=lp,e=yr(e),br(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Vd={focusedElem:e,selectionRange:n},lp=!1,$c=t;$c!==null;)if(t=$c,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,$c=e;else for(;$c!==null;){switch(t=$c,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Id(o,r,n),o[Qe]=e,dt(o),r=o;break a;case`link`:var s=Uf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=_r(s,h),v=_r(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,P.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,Pl&6)throw Error(i(331));var c=Pl;if(Pl|=4,kl(o.current),xl(o,o.current,s,n),Pl=c,ad(0,!1),Oe&&typeof Oe.onPostCommitFiberRoot==`function`)try{Oe.onPostCommitFiberRoot(De,o)}catch{}return!0}finally{F.p=a,P.T=r,Vu(e,t)}}function Wu(e,t,n){t=ci(n,t),t=Ks(e.stateNode,t,2),e=Fa(e,t,2),e!==null&&(Ue(e,2),id(e))}function Gu(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=ci(n,e),n=qs(2),r=Fa(t,n,2),r!==null&&(Js(n,r,t,e),Ue(r,2),id(r));break}}t=t.return}}function Ku(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Nl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Hl=!0,i.add(n),e=qu.bind(null,e,t,n),t.then(e,e))}function qu(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Fl===e&&(Ll&n)===n&&(Wl===4||Wl===3&&(Ll&62914560)===Ll&&300>ve()-$l?!(Pl&2)&&Su(e,0):ql|=n,Yl===Ll&&(Yl=0)),id(e)}function Ju(e,t){t===0&&(t=Ve()),e=Yr(e,t),e!==null&&(Ue(e,t),id(e))}function Yu(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Ju(e,n)}function Xu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),Ju(e,n)}function Zu(e,t){return me(e,t)}var Qu=null,$u=null,ed=!1,td=!1,nd=!1,rd=0;function id(e){e!==$u&&e.next===null&&($u===null?Qu=$u=e:$u=$u.next=e),td=!0,ed||(ed=!0,dd())}function ad(e,t){if(!nd&&td){nd=!0;do for(var n=!1,r=Qu;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ae(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ud(r,a))}else a=Ll,a=Re(r,r===Fl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||ze(r,a)||(n=!0,ud(r,a))}r=r.next}while(n);nd=!1}}function od(){sd()}function sd(){td=ed=!1;var e=0;rd!==0&&qd()&&(e=rd);for(var t=ve(),n=null,r=Qu;r!==null;){var i=r.next,a=cd(r,t);a===0?(r.next=null,n===null?Qu=i:n.next=i,i===null&&($u=n)):(n=r,(e!==0||a&3)&&(td=!0)),r=i}iu!==0&&iu!==5||ad(e,!1),rd!==0&&(rd=0)}function cd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Rd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function Cf(e,t,n){var r=Sf;if(r&&typeof t==`string`&&t){var i=At(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),_f.has(i)||(_f.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Id(t,`link`,e),dt(t),r.head.appendChild(t)))}}function wf(e){yf.D(e),Cf(`dns-prefetch`,e,null)}function Tf(e,t){yf.C(e,t),Cf(`preconnect`,e,t)}function Ef(e,t,n){yf.L(e,t,n);var r=Sf;if(r&&e&&t){var i=`link[rel="preload"][as="`+At(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+At(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+At(n.imageSizes)+`"]`)):i+=`[href="`+At(e)+`"]`;var a=i;switch(t){case`style`:a=Mf(e);break;case`script`:a=If(e)}gf.has(a)||(e=p({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),gf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Nf(a))||t===`script`&&r.querySelector(Lf(a))||(t=r.createElement(`link`),Id(t,`link`,e),dt(t),r.head.appendChild(t)))}}function Df(e,t){yf.m(e,t);var n=Sf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+At(r)+`"][href="`+At(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=If(e)}if(!gf.has(a)&&(e=p({rel:`modulepreload`,href:e},t),gf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Lf(a)))return}r=n.createElement(`link`),Id(r,`link`,e),dt(r),n.head.appendChild(r)}}}function Of(e,t,n){yf.S(e,t,n);var r=Sf;if(r&&e){var i=ut(r).hoistableStyles,a=Mf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Nf(a)))s.loading=5;else{e=p({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=gf.get(a))&&Bf(e,n);var c=o=r.createElement(`link`);dt(c),Id(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,zf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function kf(e,t){yf.X(e,t);var n=Sf;if(n&&e){var r=ut(n).hoistableScripts,i=If(e),a=r.get(i);a||(a=n.querySelector(Lf(i)),a||(e=p({src:e,async:!0},t),(t=gf.get(i))&&Vf(e,t),a=n.createElement(`script`),dt(a),Id(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Af(e,t){yf.M(e,t);var n=Sf;if(n&&e){var r=ut(n).hoistableScripts,i=If(e),a=r.get(i);a||(a=n.querySelector(Lf(i)),a||(e=p({src:e,async:!0,type:`module`},t),(t=gf.get(i))&&Vf(e,t),a=n.createElement(`script`),dt(a),Id(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t,n,r){var a=(a=te.current)?vf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Mf(n.href),n=ut(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Mf(n.href);var o=ut(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Nf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),gf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},gf.set(e,n),o||Ff(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=If(n),n=ut(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Mf(e){return`href="`+At(e)+`"`}function Nf(e){return`link[rel="stylesheet"][`+e+`]`}function Pf(e){return p({},e,{"data-precedence":e.precedence,precedence:null})}function Ff(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Id(t,`link`,n),dt(t),e.head.appendChild(t))}function If(e){return`[src="`+At(e)+`"]`}function Lf(e){return`script[async]`+e}function Rf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+At(n.href)+`"]`);if(r)return t.instance=r,dt(r),r;var a=p({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),dt(r),Id(r,`style`,a),zf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Mf(n.href);var o=e.querySelector(Nf(a));if(o)return t.state.loading|=4,t.instance=o,dt(o),o;r=Pf(n),(a=gf.get(a))&&Bf(r,a),o=(e.ownerDocument||e).createElement(`link`),dt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Id(o,`link`,r),t.state.loading|=4,zf(o,n.precedence,e),t.instance=o;case`script`:return o=If(n.src),(a=e.querySelector(Lf(o)))?(t.instance=a,dt(a),a):(r=n,(a=gf.get(o))&&(r=p({},n),Vf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),dt(a),Id(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,zf(r,n.precedence,e));return t.instance}function zf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Gf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Kf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function qf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Mf(r.href),a=t.querySelector(Nf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Xf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,dt(a);return}a=t.ownerDocument||t,r=Pf(r),(i=gf.get(i))&&Bf(r,i),a=a.createElement(`link`),dt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Id(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Xf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Jf=0;function Yf(e,t){return e.stylesheets&&e.count===0&&Qf(e,e.stylesheets),0Jf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Xf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Qf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Zf=null;function Qf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Zf=new Map,t.forEach($f,e),Zf=null,Xf.call(e))}function $f(e,t){if(!(t.state.loading&4)){var n=Zf.get(e);if(n)var r=n.get(null);else{n=new Map,Zf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Zy()}))(),$y=/\{[^{}]+\}/g,eb=()=>typeof process==`object`&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function tb(){return Math.random().toString(36).slice(2,11)}function nb(e){let{baseUrl:t=``,Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:o,headers:s,requestInitExt:c=void 0,...l}={...e};c=eb()?c:void 0,t=db(t);let u=[];async function d(e,d){let{baseUrl:f,fetch:p=r,Request:m=n,headers:h,params:g={},parseAs:_=`json`,querySerializer:v,bodySerializer:y=a??cb,pathSerializer:b,body:x,middleware:S=[],...C}=d||{},w=t;f&&(w=db(f)??t);let T=typeof i==`function`?i:ob(i);v&&(T=typeof v==`function`?v:ob({...typeof i==`object`?i:{},...v}));let E=b||o||sb,D=x===void 0?void 0:y(x,ub(s,h,g.header)),O=ub(D===void 0||D instanceof FormData?{}:{"Content-Type":`application/json`},s,h,g.header),k=[...u,...S],A={redirect:`follow`,...l,...C,body:D,headers:O},j,M,N=new m(lb(e,{baseUrl:w,params:g,querySerializer:T,pathSerializer:E}),A),P;for(let e in C)e in N||(N[e]=C[e]);if(k.length){j=tb(),M=Object.freeze({baseUrl:w,fetch:p,parseAs:_,querySerializer:T,bodySerializer:y,pathSerializer:E});for(let t of k)if(t&&typeof t==`object`&&typeof t.onRequest==`function`){let n=await t.onRequest({request:N,schemaPath:e,params:g,options:M,id:j});if(n){if(n instanceof m)N=n;else if(n instanceof Response){P=n;break}else throw Error(`onRequest: must return new Request() or Response() when modifying the request`)}}}if(!P){try{P=await p(N,c)}catch(t){let n=t;if(k.length)for(let t=k.length-1;t>=0;t--){let r=k[t];if(r&&typeof r==`object`&&typeof r.onError==`function`){let t=await r.onError({request:N,error:n,schemaPath:e,params:g,options:M,id:j});if(t){if(t instanceof Response){n=void 0,P=t;break}if(t instanceof Error){n=t;continue}throw Error(`onError: must return new Response() or instance of Error`)}}}if(n)throw n}if(k.length)for(let t=k.length-1;t>=0;t--){let n=k[t];if(n&&typeof n==`object`&&typeof n.onResponse==`function`){let t=await n.onResponse({request:N,response:P,schemaPath:e,params:g,options:M,id:j});if(t){if(!(t instanceof Response))throw Error(`onResponse: must return new Response() when modifying the response`);P=t}}}}let F=P.headers.get(`Content-Length`);if(P.status===204||N.method===`HEAD`||F===`0`&&!P.headers.get(`Transfer-Encoding`)?.includes(`chunked`))return P.ok?{data:void 0,response:P}:{error:void 0,response:P};if(P.ok)return{data:await(async()=>{if(_===`stream`)return P.body;if(_===`json`&&!F){let e=await P.text();return e?JSON.parse(e):void 0}return await P[_]()})(),response:P};let I=await P.text();try{I=JSON.parse(I)}catch{}return{error:I,response:P}}return{request(e,t,n){return d(t,{...n,method:e.toUpperCase()})},GET(e,t){return d(e,{...t,method:`GET`})},PUT(e,t){return d(e,{...t,method:`PUT`})},POST(e,t){return d(e,{...t,method:`POST`})},DELETE(e,t){return d(e,{...t,method:`DELETE`})},OPTIONS(e,t){return d(e,{...t,method:`OPTIONS`})},HEAD(e,t){return d(e,{...t,method:`HEAD`})},PATCH(e,t){return d(e,{...t,method:`PATCH`})},TRACE(e,t){return d(e,{...t,method:`TRACE`})},use(...e){for(let t of e)if(t){if(typeof t!=`object`||!(`onRequest`in t||`onResponse`in t||`onError`in t))throw Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");u.push(t)}},eject(...e){for(let t of e){let e=u.indexOf(t);e!==-1&&u.splice(e,1)}}}}function rb(e,t,n){if(t==null)return``;if(typeof t==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${n?.allowReserved===!0?t:encodeURIComponent(t)}`}function ib(e,t,n){if(!t||typeof t!=`object`)return``;let r=[],i={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`;if(n.style!==`deepObject`&&n.explode===!1){for(let e in t)r.push(e,n.allowReserved===!0?t[e]:encodeURIComponent(t[e]));let i=r.join(`,`);switch(n.style){case`form`:return`${e}=${i}`;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return i}}for(let i in t){let a=n.style===`deepObject`?`${e}[${i}]`:i;r.push(rb(a,t[i],n))}let a=r.join(i);return n.style===`label`||n.style===`matrix`?`${i}${a}`:a}function ab(e,t,n){if(!Array.isArray(t))return``;if(n.explode===!1){let r={form:`,`,spaceDelimited:`%20`,pipeDelimited:`|`}[n.style]||`,`,i=(n.allowReserved===!0?t:t.map(e=>encodeURIComponent(e))).join(r);switch(n.style){case`simple`:return i;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return`${e}=${i}`}}let r={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`,i=[];for(let r of t)n.style===`simple`||n.style===`label`?i.push(n.allowReserved===!0?r:encodeURIComponent(r)):i.push(rb(e,r,n));return n.style===`label`||n.style===`matrix`?`${r}${i.join(r)}`:i.join(r)}function ob(e){return function(t){let n=[];if(t&&typeof t==`object`)for(let r in t){let i=t[r];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;n.push(ab(r,i,{style:`form`,explode:!0,...e?.array,allowReserved:e?.allowReserved||!1}));continue}if(typeof i==`object`){n.push(ib(r,i,{style:`deepObject`,explode:!0,...e?.object,allowReserved:e?.allowReserved||!1}));continue}n.push(rb(r,i,e))}}return n.join(`&`)}}function sb(e,t){let n=e;for(let r of e.match($y)??[]){let e=r.substring(1,r.length-1),i=!1,a=`simple`;if(e.endsWith(`*`)&&(i=!0,e=e.substring(0,e.length-1)),e.startsWith(`.`)?(a=`label`,e=e.substring(1)):e.startsWith(`;`)&&(a=`matrix`,e=e.substring(1)),!t||t[e]===void 0||t[e]===null)continue;let o=t[e];if(Array.isArray(o)){n=n.replace(r,ab(e,o,{style:a,explode:i}));continue}if(typeof o==`object`){n=n.replace(r,ib(e,o,{style:a,explode:i}));continue}if(a===`matrix`){n=n.replace(r,`;${rb(e,o)}`);continue}n=n.replace(r,a===`label`?`.${encodeURIComponent(o)}`:encodeURIComponent(o))}return n}function cb(e,t){return e instanceof FormData?e:t&&(t.get instanceof Function?t.get(`Content-Type`)??t.get(`content-type`):t[`Content-Type`]??t[`content-type`])===`application/x-www-form-urlencoded`?new URLSearchParams(e).toString():JSON.stringify(e)}function lb(e,t){let n=`${t.baseUrl}${e}`;t.params?.path&&(n=t.pathSerializer(n,t.params.path));let r=t.querySerializer(t.params.query??{});return r.startsWith(`?`)&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function ub(...e){let t=new Headers;for(let n of e){if(!n||typeof n!=`object`)continue;let e=n instanceof Headers?n.entries():Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,r)}return t}function db(e){return e.endsWith(`/`)?e.substring(0,e.length-1):e}function fb({baseUrl:e}={}){return nb({...e===void 0?{}:{baseUrl:e}})}var pb=fb();function mb(e,t){return e instanceof Error?e.message:typeof e==`object`&&e&&`detail`in e&&typeof e.detail==`string`?e.detail:t}function hb(){return typeof window<`u`}function gb(e){return yb(e)?(e.nodeName||``).toLowerCase():`#document`}function _b(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function vb(e){return((yb(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function yb(e){return hb()?e instanceof Node||e instanceof _b(e).Node:!1}function bb(e){return hb()?e instanceof Element||e instanceof _b(e).Element:!1}function xb(e){return hb()?e instanceof HTMLElement||e instanceof _b(e).HTMLElement:!1}function Sb(e){return!hb()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof _b(e).ShadowRoot}function Cb(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Pb(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function wb(e){return/^(table|td|th)$/.test(gb(e))}function Tb(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Eb=/transform|translate|scale|rotate|perspective|filter/,Db=/paint|layout|strict|content/,Ob=e=>!!e&&e!==`none`,kb;function Ab(e){let t=bb(e)?Pb(e):e;return Ob(t.transform)||Ob(t.translate)||Ob(t.scale)||Ob(t.rotate)||Ob(t.perspective)||!Mb()&&(Ob(t.backdropFilter)||Ob(t.filter))||Eb.test(t.willChange||``)||Db.test(t.contain||``)}function jb(e){let t=Ib(e);for(;xb(t)&&!Nb(t);){if(Ab(t))return t;if(Tb(t))return null;t=Ib(t)}return null}function Mb(){return kb??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),kb}function Nb(e){return/^(html|body|#document)$/.test(gb(e))}function Pb(e){return _b(e).getComputedStyle(e)}function Fb(e){return bb(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ib(e){if(gb(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Sb(e)&&e.host||vb(e);return Sb(t)?t.host:t}function Lb(e){let t=Ib(e);return Nb(t)?(e.ownerDocument||e).body:xb(t)&&Cb(t)?t:Lb(t)}function Rb(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Lb(e),i=r===e.ownerDocument?.body,a=_b(r);if(i){let e=zb(a);return t.concat(a,a.visualViewport||[],Cb(r)?r:[],e&&n?Rb(e):[])}return t.concat(r,Rb(r,[],n))}function zb(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var Bb={...f},Vb={};function Hb(e,t){let n=f.useRef(Vb);return n.current===Vb&&(n.current=e(t)),n}var Ub=Bb.useInsertionEffect,Wb=Ub&&Ub!==Bb.useLayoutEffect?Ub:e=>e();function X(e){let t=Hb(Gb).current;return t.next=e,Wb(t.effect),t.trampoline}function Gb(){let e={next:void 0,callback:Kb,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function Kb(){}var Z=typeof document<`u`?f.useLayoutEffect:()=>{};function qb(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}var Jb={};function Yb(e,t,n,r,i){if(!n&&!r&&!i&&!e)return Zb(t);let a=Zb(e);return t&&(a=Qb(a,t)),n&&(a=Qb(a,n)),r&&(a=Qb(a,r)),i&&(a=Qb(a,i)),a}function Xb(e){if(e.length===0)return Jb;if(e.length===1)return Zb(e[0]);let t=Zb(e[0]);for(let n=1;n=65&&i<=90&&(typeof t==`function`||t===void 0)}function nx(e){return typeof e==`function`}function rx(e,t){return nx(e)?e(t):e??Jb}function ix(e,t){return t?e?(...n)=>{let r=n[0];if(cx(r)){let i=r;ox(i);let a=t(...n);return i.baseUIHandlerPrevented||e?.(...n),a}let i=t(...n);return e?.(...n),i}:ax(t):e}function ax(e){return e&&((...t)=>{let n=t[0];return cx(n)&&ox(n),e(...t)})}function ox(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function sx(e,t){return t?e?t+` `+e:t:e}function cx(e){return typeof e==`object`&&!!e&&`nativeEvent`in e}function lx(e,t){return function(n,...r){let i=new URL(e);return i.searchParams.set(`code`,n.toString()),r.forEach(e=>i.searchParams.append(`args[]`,e)),`${t} error #${n}; visit ${i} for the full message.`}}var ux=lx(`https://base-ui.com/production-error`,`Base UI`),dx=f.createContext(void 0);function fx(e=!1){let t=f.useContext(dx);if(t===void 0&&!e)throw Error(ux(16));return t}function px(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:i=0,isNativeButton:a}=e,o=r&&t!==!1,s=r&&t===!1;return{props:f.useMemo(()=>{let e={onKeyDown(e){n&&t&&e.key!==`Tab`&&e.preventDefault()}};return r||(e.tabIndex=i,!a&&n&&(e.tabIndex=t?i:-1)),(a&&(t||o)||!a&&n)&&(e[`aria-disabled`]=n),a&&(!t||s)&&(e.disabled=n),e},[r,n,t,o,s,a,i])}}function mx(e){return e?.ownerDocument||document}function hx(e,t,{detail:n=0}={}){e.dispatchEvent(new(_b(e)).PointerEvent(`click`,{bubbles:!0,cancelable:!0,composed:!0,detail:n,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function gx(e={}){let{disabled:t=!1,focusableWhenDisabled:n,tabIndex:r=0,native:i=!0,composite:a}=e,o=f.useRef(null),s=fx(!0),c=a??s!==void 0,{props:l}=px({focusableWhenDisabled:n,disabled:t,composite:c,tabIndex:r,isNativeButton:i}),u=f.useCallback(()=>{let e=o.current;_x(e)&&c&&t&&l.disabled===void 0&&e.disabled&&(e.disabled=!1)},[t,l.disabled,c]);return Z(u,[u]),{getButtonProps:f.useCallback((e={})=>{let{onClick:n,onMouseDown:r,onKeyUp:a,onKeyDown:o,onPointerDown:s,...u}=e;return Yb({onClick(e){if(t){e.preventDefault();return}n?.(e)},onMouseDown(e){t||r?.(e)},onKeyDown(e){if(t||(ox(e),o?.(e),e.baseUIHandlerPrevented))return;let n=e.target===e.currentTarget,r=e.currentTarget,a=_x(r),s=!i&&vx(r),l=n&&(i?a:!s),u=e.key===`Enter`,d=e.key===` `,f=r.getAttribute(`role`),p=f?.startsWith(`menuitem`)||f===`option`||f===`gridcell`;if(n&&c&&d){if(e.defaultPrevented&&p)return;e.preventDefault(),(!i||a)&&(e.preventBaseUIHandler(),hx(r,e));return}if(!l||i||!d&&!u){n&&s&&d&&e.preventDefault();return}e.defaultPrevented||(e.preventDefault(),u&&(e.preventBaseUIHandler(),hx(r,e)))},onKeyUp(e){if(!t){if(ox(e),a?.(e),e.target===e.currentTarget&&i&&c&&_x(e.currentTarget)&&e.key===` `){e.preventDefault();return}e.baseUIHandlerPrevented||e.target===e.currentTarget&&!i&&!c&&!e.defaultPrevented&&e.key===` `&&(e.preventBaseUIHandler(),hx(e.currentTarget,e))}},onPointerDown(e){if(t){e.preventDefault();return}s?.(e)}},i?{type:`button`}:{role:`button`},l,u)},[t,l,c,i]),buttonRef:X(e=>{o.current=e,u()})}}function _x(e){return xb(e)&&e.tagName===`BUTTON`}function vx(e){return xb(e)&&e.tagName===`A`&&!!e.href}function yx(e,t,n,r){let i=Hb(xx).current;return Sx(i,e,t,n,r)&&wx(i,[e,t,n,r]),i.callback}function bx(e){let t=Hb(xx).current;return Cx(t,e)&&wx(t,e),t.callback}function xx(){return{callback:null,cleanup:null,refs:[]}}function Sx(e,t,n,r,i){return e.refs[0]!==t||e.refs[1]!==n||e.refs[2]!==r||e.refs[3]!==i}function Cx(e,t){return e.refs.length!==t.length||e.refs.some((e,n)=>e!==t[n])}function wx(e,t){if(e.refs=t,t.every(e=>e==null)){e.callback=null;return}e.callback=n=>{if(e.cleanup&&=(e.cleanup(),null),n!=null){let r=Array(t.length).fill(null);for(let e=0;e{for(let e=0;e=e}function Dx(e){if(!f.isValidElement(e))return null;let t=e,n=t.props;return(Ex(19)?n?.ref:t.ref)??null}function Ox(){}var kx=Object.freeze([]),Ax=Object.freeze({});function jx(e,t){let n={};for(let r in e){let i=e[r];if(t?.hasOwnProperty(r)){let e=t[r](i);e!=null&&Object.assign(n,e);continue}i===!0?n[`data-${r.toLowerCase()}`]=``:i&&(n[`data-${r.toLowerCase()}`]=i.toString())}return n}function Mx(e,t){return typeof e==`function`?e(t):e}function Nx(e,t){return typeof e==`function`?e(t):e}function Px(e,t,n={}){let r=t.render;n.enabled!==!1&&(r=Rx(r));let i=Fx(t,n,r);if(n.enabled===!1)return null;let a=n.state??Ax;return zx(e,r,i,a)}function Fx(e,t,n){let{className:r,style:i}=e,{state:a=Ax,ref:o,props:s,stateAttributesMapping:c,enabled:l=!0}=t,u=l?Mx(r,a):void 0,d=l?Nx(i,a):void 0,f=l?jx(a,c):Ax,p=l&&s?Ix(s):void 0,m=l?qb(f,p)??{}:Ax;return typeof document<`u`&&(l?m.ref=Array.isArray(o)?bx([m.ref,Dx(n),...o]):yx(m.ref,Dx(n),o):yx(null,null)),l?(u!==void 0&&(m.className=sx(m.className,u)),d!==void 0&&(m.style=qb(m.style,d)),m):Ax}function Ix(e){return Array.isArray(e)?Xb(e):Yb(void 0,e)}var Lx=Symbol.for(`react.lazy`);function Rx(e){if(e?.$$typeof!==Lx)return e;let t=f.Children.toArray(e)[0];return f.isValidElement(t)?t:e}function zx(e,t,n,r){if(t){if(typeof t==`function`)return t(n,r);let e=Yb(n,t.props);return e.ref=n.ref,f.cloneElement(t,e)}if(e&&typeof e==`string`)return Bx(e,n);throw Error(ux(8))}function Bx(e,t){return e===`button`?(0,f.createElement)(`button`,{type:`button`,...t,key:t.key}):e===`img`?(0,f.createElement)(`img`,{alt:``,...t,key:t.key}):f.createElement(e,t)}var Vx=f.forwardRef(function(e,t){let{render:n,className:r,disabled:i=!1,focusableWhenDisabled:a=!1,nativeButton:o=!0,style:s,...c}=e,{getButtonProps:l,buttonRef:u}=gx({disabled:i,focusableWhenDisabled:a,native:o});return Px(`button`,e,{state:{disabled:i},ref:[t,u],props:[c,l]})});function Hx(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,Gx=Ux,Kx=(e,t)=>n=>{if(t?.variants==null)return Gx(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=Wx(t)||Wx(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return Gx(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},qx=48,Jx=(e,t=0)=>{let n=new Int32Array(e.length);for(let r=0;r{let t=new Int32Array(e.length+1);for(let n=0;n{let t=new Int32Array(e.length),n=0;for(let r=0;r>>1^-(i&1),t[r]=n}return t},Zx=384,Qx=[],$x=Yx(Jx(`E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010`)),eS=Yx(Jx(`:11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3`)),tS=`@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom`,nS=(()=>{let e=$x.length-1,t=new Int32Array(e);for(let n=e-1;n>=0;n--){let e=1,r=n+1;for(let i=$x[n];i<$x[n+1];i++)e+=t[r],r+=t[r];t[n]=e}let n=new Int32Array($x[e]),r=0;for(let i=0;iE?F@03263243255B:032523853:0325B:8GA032542HE?3257D>03258432585:0325B:;0328B:032`),oS=Jx(`012123445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EJK4444::EJ4444441691;644444114244444:;L6666555555555555555999666664444444444444444444444226?6:66644M9N?D:111::::6DJ199`),sS=Xx(`0202002020020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200`),cS=(()=>{let e=new Int32Array(319).fill(-1),t=Xx(`02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222`),n=Xx(`02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222`);for(let r=0;r