onbuzz 4.7.2 → 4.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/grounding-bench/bench.mjs +300 -0
- package/scripts/grounding-bench/cases.js +173 -0
- package/scripts/grounding-bench/imageBuilder.js +119 -0
- package/src/core/__tests__/agentScheduler.nativePromptPick.test.js +319 -0
- package/src/core/__tests__/agentScheduler.test.js +74 -0
- package/src/core/agentPool.js +12 -0
- package/src/core/agentScheduler.js +233 -7
- package/src/index.js +36 -0
- package/src/interfaces/webServer.js +42 -0
- package/src/services/__tests__/memoryService.test.js +521 -450
- package/src/services/__tests__/modelRouterNaming.test.js +111 -0
- package/src/services/__tests__/modelRouterService.test.js +477 -388
- package/src/services/aiService.js +136 -1
- package/src/services/grounding/GroundingModel.js +116 -0
- package/src/services/grounding/KimiAdapter.js +427 -0
- package/src/services/grounding/MockAdapter.js +125 -0
- package/src/services/grounding/__tests__/KimiAdapter.test.js +475 -0
- package/src/services/grounding/__tests__/MockAdapter.test.js +66 -0
- package/src/services/grounding/__tests__/groundingMetrics.test.js +156 -0
- package/src/services/grounding/__tests__/registry.test.js +122 -0
- package/src/services/grounding/constants.js +121 -0
- package/src/services/grounding/groundingMetrics.js +121 -0
- package/src/services/grounding/index.js +53 -0
- package/src/services/grounding/registry.js +125 -0
- package/src/services/grounding/types.js +108 -0
- package/src/services/memoryService.js +559 -521
- package/src/services/modelRouterService.js +433 -364
- package/src/services/tokenCountingService.js +2 -2
- package/src/tools/__tests__/agentCommunicationTool.test.js +752 -717
- package/src/tools/__tests__/baseTool.test.js +164 -0
- package/src/tools/__tests__/codeMapTool.test.js +388 -0
- package/src/tools/__tests__/foundryWebSearchTool.test.js +252 -0
- package/src/tools/__tests__/memoryTool.reminisce.test.js +364 -363
- package/src/tools/__tests__/memoryTool.test.js +391 -297
- package/src/tools/__tests__/parserHelpers.test.js +233 -0
- package/src/tools/__tests__/webTool.e2e.test.js +13 -1
- package/src/tools/agentCommunicationTool.js +1399 -1385
- package/src/tools/baseTool.js +102 -5
- package/src/tools/codeMapTool.js +794 -130
- package/src/tools/desktop/DesktopTool.js +638 -0
- package/src/tools/desktop/__tests__/DesktopTool.e2e.test.js +306 -0
- package/src/tools/desktop/__tests__/DesktopTool.test.js +507 -0
- package/src/tools/desktop/__tests__/osCapabilities.test.js +106 -0
- package/src/tools/desktop/__tests__/osController.test.js +364 -0
- package/src/tools/desktop/osCapabilities.js +248 -0
- package/src/tools/desktop/osController.js +491 -0
- package/src/tools/foundryWebSearchTool.js +273 -0
- package/src/tools/memoryTool.js +892 -820
- package/src/tools/openaiFunctionSchemas.js +14 -0
- package/src/tools/parserHelpers.js +296 -0
- package/src/tools/skillsTool.js +282 -277
- package/src/utilities/__tests__/planInjection.test.js +125 -0
- package/src/utilities/__tests__/tagParser.test.js +943 -887
- package/src/utilities/constants.js +19 -1
- package/src/utilities/planInjection.js +103 -0
- package/src/utilities/tagParser.js +918 -896
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-DGpIT7i5.js +1 -0
- package/web-ui/build/static/abap-5wFDdWLh.js +1 -0
- package/web-ui/build/static/abnf-BP1dpNSE.js +1 -0
- package/web-ui/build/static/abnf-DBEIAl8g.js +1 -0
- package/web-ui/build/static/accesslog-CWSM_T5E.js +1 -0
- package/web-ui/build/static/actionscript-DONkco1J.js +1 -0
- package/web-ui/build/static/actionscript-FqBYk5er.js +1 -0
- package/web-ui/build/static/ada-C2JLRIaM.js +1 -0
- package/web-ui/build/static/ada-gKiygTRK.js +1 -0
- package/web-ui/build/static/agda-CkSODqK2.js +1 -0
- package/web-ui/build/static/al-BJ_YR6p7.js +1 -0
- package/web-ui/build/static/angelscript-Dg2byMGg.js +1 -0
- package/web-ui/build/static/antlr4-BnpyaFNr.js +1 -0
- package/web-ui/build/static/apache-Dffxsd7O.js +1 -0
- package/web-ui/build/static/apacheconf-DLitjtWj.js +1 -0
- package/web-ui/build/static/apex-Drr_IvU2.js +1 -0
- package/web-ui/build/static/apl-CF6qxmXG.js +1 -0
- package/web-ui/build/static/applescript-CjOlw3b_.js +1 -0
- package/web-ui/build/static/applescript-DjkSl1Ry.js +1 -0
- package/web-ui/build/static/aql-KwVmK1gP.js +1 -0
- package/web-ui/build/static/arcade-CENSXx0R.js +1 -0
- package/web-ui/build/static/arduino-B3Ta9Fll.js +1 -0
- package/web-ui/build/static/arduino-CzcsaB9_.js +1 -0
- package/web-ui/build/static/arff-CMJSVt_O.js +1 -0
- package/web-ui/build/static/armasm-0zSgSPB4.js +1 -0
- package/web-ui/build/static/asciidoc-B8K5ctWq.js +1 -0
- package/web-ui/build/static/asciidoc-bk2Sg6b6.js +1 -0
- package/web-ui/build/static/asm6502-ji6zm4FQ.js +1 -0
- package/web-ui/build/static/asmatmel-DJqObM4Y.js +1 -0
- package/web-ui/build/static/aspectj-DqQKI7J5.js +1 -0
- package/web-ui/build/static/aspnet-9cenTxW7.js +1 -0
- package/web-ui/build/static/autohotkey-C6EhiZvl.js +1 -0
- package/web-ui/build/static/autohotkey-sTGJOvMM.js +1 -0
- package/web-ui/build/static/autoit-B0Im8iQ1.js +1 -0
- package/web-ui/build/static/autoit-CO6pUD0H.js +1 -0
- package/web-ui/build/static/avisynth-OvOHTfj5.js +1 -0
- package/web-ui/build/static/avrasm-BLWZ5Mye.js +1 -0
- package/web-ui/build/static/avro-idl-BB2ODvnw.js +1 -0
- package/web-ui/build/static/awk-_jhMabQ0.js +1 -0
- package/web-ui/build/static/axapta-DdBRgoYy.js +1 -0
- package/web-ui/build/static/bash-CsaRGXBQ.js +1 -0
- package/web-ui/build/static/bash-CxLFkwAC.js +1 -0
- package/web-ui/build/static/basic-BJyy7JJE.js +1 -0
- package/web-ui/build/static/basic-CrMb-gv0.js +1 -0
- package/web-ui/build/static/batch-BvcykMe5.js +1 -0
- package/web-ui/build/static/bbcode-EOBuY5Y6.js +1 -0
- package/web-ui/build/static/bicep-QkDJBA34.js +1 -0
- package/web-ui/build/static/birb-TAOxKurn.js +1 -0
- package/web-ui/build/static/bison-BEK6cnad.js +1 -0
- package/web-ui/build/static/bnf-DfEODxsr.js +1 -0
- package/web-ui/build/static/bnf-DhbMjsuA.js +1 -0
- package/web-ui/build/static/brainfuck-BoVocOa7.js +1 -0
- package/web-ui/build/static/brainfuck-DDC5QXPK.js +1 -0
- package/web-ui/build/static/brightscript-DNN598w2.js +1 -0
- package/web-ui/build/static/bro-Cn_jjZ8P.js +1 -0
- package/web-ui/build/static/bsl-CMCN75Gu.js +1 -0
- package/web-ui/build/static/c-DbOGQnEJ.js +1 -0
- package/web-ui/build/static/c-kggwYFsy.js +1 -0
- package/web-ui/build/static/c-like-BIsuUvof.js +1 -0
- package/web-ui/build/static/cal-DpgMsBZE.js +1 -0
- package/web-ui/build/static/capnproto-C1AHYI-M.js +1 -0
- package/web-ui/build/static/ceylon-pvJffDe1.js +1 -0
- package/web-ui/build/static/cfscript-C1qylu52.js +1 -0
- package/web-ui/build/static/chaiscript-D417WKRI.js +1 -0
- package/web-ui/build/static/cil-CjbZHbcY.js +1 -0
- package/web-ui/build/static/clean-Dvc6R-F2.js +1 -0
- package/web-ui/build/static/clojure-CSVRQPMQ.js +1 -0
- package/web-ui/build/static/clojure-ig1Vkg7X.js +1 -0
- package/web-ui/build/static/clojure-repl-C1uyEabk.js +1 -0
- package/web-ui/build/static/cmake-DSbVcAB3.js +1 -0
- package/web-ui/build/static/cmake-Zp8kPwnH.js +1 -0
- package/web-ui/build/static/cobol-OsZSiK_P.js +1 -0
- package/web-ui/build/static/coffeescript-D8r0416S.js +1 -0
- package/web-ui/build/static/coffeescript-DCpgClxh.js +1 -0
- package/web-ui/build/static/concurnas-DKnsxUOc.js +1 -0
- package/web-ui/build/static/coq-BQFlywVI.js +1 -0
- package/web-ui/build/static/coq-BvS9mQB2.js +1 -0
- package/web-ui/build/static/cos-D3ze2791.js +1 -0
- package/web-ui/build/static/cpp-Bw-cV3P1.js +1 -0
- package/web-ui/build/static/cpp-vi1p7XpB.js +1 -0
- package/web-ui/build/static/crmsh-BClnJTeQ.js +1 -0
- package/web-ui/build/static/crystal-DGzOUYZq.js +1 -0
- package/web-ui/build/static/crystal-DMzk6EvA.js +1 -0
- package/web-ui/build/static/csharp-BTom8s2X.js +1 -0
- package/web-ui/build/static/csharp-Cp2V3jfR.js +1 -0
- package/web-ui/build/static/cshtml-Dmtt9Kto.js +1 -0
- package/web-ui/build/static/csp-WPVsLe9_.js +1 -0
- package/web-ui/build/static/csp-qddj5fu_.js +1 -0
- package/web-ui/build/static/css-B0FAm7kj.js +1 -0
- package/web-ui/build/static/css-extras-Bx3pvjiG.js +1 -0
- package/web-ui/build/static/csv-CH-edgS5.js +1 -0
- package/web-ui/build/static/cypher-c3G8Leew.js +1 -0
- package/web-ui/build/static/d-BMDSy22_.js +1 -0
- package/web-ui/build/static/d-BdH4oW8-.js +1 -0
- package/web-ui/build/static/dart-C-r72q-O.js +1 -0
- package/web-ui/build/static/dart-CwpBMrKa.js +1 -0
- package/web-ui/build/static/dataweave-BPvqdt4k.js +1 -0
- package/web-ui/build/static/dax-Eyy6ixcN.js +1 -0
- package/web-ui/build/static/delphi-DhEbPj_5.js +1 -0
- package/web-ui/build/static/dhall-Ct1L8sN1.js +1 -0
- package/web-ui/build/static/diff-CSTqCgwn.js +1 -0
- package/web-ui/build/static/diff-Da97B5vW.js +1 -0
- package/web-ui/build/static/django-DGit_lCg.js +1 -0
- package/web-ui/build/static/django-DPgqFB8k.js +1 -0
- package/web-ui/build/static/dns-DUyXuZ-a.js +1 -0
- package/web-ui/build/static/dns-zone-file-D79MDxVG.js +1 -0
- package/web-ui/build/static/docker-DTiy4o38.js +1 -0
- package/web-ui/build/static/dockerfile-CvwPP8wE.js +1 -0
- package/web-ui/build/static/dos-CaIUWxvb.js +1 -0
- package/web-ui/build/static/dot-D3504w6Y.js +1 -0
- package/web-ui/build/static/dsconfig-Smy1eeX_.js +1 -0
- package/web-ui/build/static/dts-DyTYSXZj.js +1 -0
- package/web-ui/build/static/dust-CrJyi6qA.js +1 -0
- package/web-ui/build/static/ebnf-C8nqfkBH.js +1 -0
- package/web-ui/build/static/ebnf-Cuh5Vh2-.js +1 -0
- package/web-ui/build/static/editorconfig-C7pTGl6n.js +1 -0
- package/web-ui/build/static/eiffel-C75MSJCA.js +1 -0
- package/web-ui/build/static/ejs-Dyo7DF5w.js +1 -0
- package/web-ui/build/static/elixir-D4yJefOc.js +1 -0
- package/web-ui/build/static/elixir-DKRow2SJ.js +1 -0
- package/web-ui/build/static/elm-CgbdDlkT.js +1 -0
- package/web-ui/build/static/elm-D3N-UgU0.js +1 -0
- package/web-ui/build/static/erb-BsITh8qW.js +1 -0
- package/web-ui/build/static/erb-lY_LyKyS.js +1 -0
- package/web-ui/build/static/erlang-BCnPiYmB.js +1 -0
- package/web-ui/build/static/erlang-JEghiPXc.js +1 -0
- package/web-ui/build/static/erlang-repl-DzU97ugC.js +1 -0
- package/web-ui/build/static/etlua-CsBo8cJa.js +1 -0
- package/web-ui/build/static/excel-formula-C2piiCYa.js +1 -0
- package/web-ui/build/static/excel-kqNypwQD.js +1 -0
- package/web-ui/build/static/factor-DZTOhkyU.js +1 -0
- package/web-ui/build/static/false-yLjhfaSw.js +1 -0
- package/web-ui/build/static/firestore-security-rules-oaQNoH8l.js +1 -0
- package/web-ui/build/static/fix-C9IfnTuS.js +1 -0
- package/web-ui/build/static/flix-EmJ_JhPo.js +1 -0
- package/web-ui/build/static/flow-DCUl7IAQ.js +1 -0
- package/web-ui/build/static/fortran-DvyxJmFN.js +1 -0
- package/web-ui/build/static/fortran-EEP9R3S5.js +1 -0
- package/web-ui/build/static/fsharp-D_98s3RX.js +1 -0
- package/web-ui/build/static/fsharp-Dt9jOO5G.js +1 -0
- package/web-ui/build/static/ftl-C8gMHWLo.js +1 -0
- package/web-ui/build/static/gams-BHxVPb4z.js +1 -0
- package/web-ui/build/static/gap-DFtyHk-q.js +1 -0
- package/web-ui/build/static/gauss-BwhJWUcg.js +1 -0
- package/web-ui/build/static/gcode-BvmXwp09.js +1 -0
- package/web-ui/build/static/gcode-gWcD6Vc7.js +1 -0
- package/web-ui/build/static/gdscript-btHoX8RE.js +1 -0
- package/web-ui/build/static/gedcom-MgPs9iqh.js +1 -0
- package/web-ui/build/static/gherkin-B9c_Q16A.js +1 -0
- package/web-ui/build/static/gherkin-BvOgkK6h.js +1 -0
- package/web-ui/build/static/git-D9XWOVcQ.js +1 -0
- package/web-ui/build/static/glsl-CshBHxHY.js +1 -0
- package/web-ui/build/static/glsl-fNRUMTDr.js +1 -0
- package/web-ui/build/static/gml-B78deHK8.js +1 -0
- package/web-ui/build/static/gml-Cj7d2u8O.js +1 -0
- package/web-ui/build/static/gn-CJLD-mF1.js +1 -0
- package/web-ui/build/static/go-CT93BEkL.js +1 -0
- package/web-ui/build/static/go-CTTlNuQO.js +1 -0
- package/web-ui/build/static/go-module-BgnXboUE.js +1 -0
- package/web-ui/build/static/golo-2S5tXS-l.js +1 -0
- package/web-ui/build/static/gradle-8W8DCcWJ.js +1 -0
- package/web-ui/build/static/graphql-DZfp6FNU.js +1 -0
- package/web-ui/build/static/groovy-BfsyMb3X.js +1 -0
- package/web-ui/build/static/groovy-Dxov7ENz.js +1 -0
- package/web-ui/build/static/haml-BlUFsdVV.js +1 -0
- package/web-ui/build/static/haml-CjVj6vvW.js +1 -0
- package/web-ui/build/static/handlebars-DxrQFkyA.js +1 -0
- package/web-ui/build/static/handlebars-FE6fotYl.js +1 -0
- package/web-ui/build/static/haskell-B6z0RCD_.js +1 -0
- package/web-ui/build/static/haskell-JBFmJTRy.js +1 -0
- package/web-ui/build/static/haxe-BtMZMi-_.js +1 -0
- package/web-ui/build/static/haxe-C1J8n-fH.js +1 -0
- package/web-ui/build/static/hcl-DJP-bFWE.js +1 -0
- package/web-ui/build/static/hlsl-DrGjhs1b.js +1 -0
- package/web-ui/build/static/hoon-Cg-ZhqIT.js +1 -0
- package/web-ui/build/static/hpkp-D07vgmoZ.js +1 -0
- package/web-ui/build/static/hsp-CsypPWoA.js +1 -0
- package/web-ui/build/static/hsts-B6DMRxvP.js +1 -0
- package/web-ui/build/static/htmlbars-BI7_Hw4e.js +1 -0
- package/web-ui/build/static/http-90ihEi4s.js +1 -0
- package/web-ui/build/static/http-Dp4QXj9E.js +1 -0
- package/web-ui/build/static/hy-BMgKvP4K.js +1 -0
- package/web-ui/build/static/ichigojam-D6wKvJDb.js +1 -0
- package/web-ui/build/static/icon-CrgkmCwl.js +1 -0
- package/web-ui/build/static/icu-message-format-Bi2JxCXs.js +1 -0
- package/web-ui/build/static/idris-DbUsyZt5.js +1 -0
- package/web-ui/build/static/iecst-CQZ9t8fW.js +1 -0
- package/web-ui/build/static/ignore-BaFgtNMs.js +1 -0
- package/web-ui/build/static/index-DEWSWosh.css +1 -0
- package/web-ui/build/static/index-Di1bjCFA.js +13 -0
- package/web-ui/build/static/index-otR_WSsL.js +1 -0
- package/web-ui/build/static/index-whZPU4as.js +1183 -0
- package/web-ui/build/static/inform7-ClyX1Gro.js +1 -0
- package/web-ui/build/static/inform7-tZHBS5XP.js +1 -0
- package/web-ui/build/static/ini-BrP5JNYL.js +1 -0
- package/web-ui/build/static/ini-CVkrAhwV.js +1 -0
- package/web-ui/build/static/io-BJ1Y6Bdc.js +1 -0
- package/web-ui/build/static/irpf90-fjjcKS_8.js +1 -0
- package/web-ui/build/static/isbl-ClpvfUIz.js +1 -0
- package/web-ui/build/static/j-CICW77xS.js +1 -0
- package/web-ui/build/static/java-B9DFK-0E.js +1 -0
- package/web-ui/build/static/java-BL_6rYko.js +1 -0
- package/web-ui/build/static/javadoc-Cc4HKpKK.js +1 -0
- package/web-ui/build/static/javadoclike-CgNkUDOm.js +1 -0
- package/web-ui/build/static/javascript-CM40ZECq.js +1 -0
- package/web-ui/build/static/javastacktrace-BHSqXfG5.js +1 -0
- package/web-ui/build/static/jboss-cli-Bv5NhVSZ.js +1 -0
- package/web-ui/build/static/jexl--Ohk_keA.js +1 -0
- package/web-ui/build/static/jolie-DMTN5Vdf.js +1 -0
- package/web-ui/build/static/jq-nXRLldXX.js +1 -0
- package/web-ui/build/static/js-extras-eLwv3frs.js +1 -0
- package/web-ui/build/static/js-templates-Ca0owlrg.js +1 -0
- package/web-ui/build/static/jsdoc-KERXp0da.js +1 -0
- package/web-ui/build/static/json-BTjLaRsy.js +1 -0
- package/web-ui/build/static/json-p7pU0qdW.js +1 -0
- package/web-ui/build/static/json5-Cxjy1udc.js +1 -0
- package/web-ui/build/static/jsonp-CO52H7Gy.js +1 -0
- package/web-ui/build/static/jsstacktrace-8YKfoyJP.js +1 -0
- package/web-ui/build/static/jsx-Ct_05KbM.js +1 -0
- package/web-ui/build/static/julia-23I1ubCE.js +1 -0
- package/web-ui/build/static/julia-d8rVGed_.js +1 -0
- package/web-ui/build/static/julia-repl-mwnHedW_.js +1 -0
- package/web-ui/build/static/keepalived-E85Rx_fF.js +1 -0
- package/web-ui/build/static/keyman-aWd3QUDq.js +1 -0
- package/web-ui/build/static/kotlin-Cu370hQq.js +1 -0
- package/web-ui/build/static/kotlin-DoJ2WnmZ.js +1 -0
- package/web-ui/build/static/kumir-oiOgqcQO.js +1 -0
- package/web-ui/build/static/kusto-Bp-B02K5.js +1 -0
- package/web-ui/build/static/lasso-BxoQVwOO.js +1 -0
- package/web-ui/build/static/latex-CANm5vsX.js +1 -0
- package/web-ui/build/static/latex-PMroeNch.js +1 -0
- package/web-ui/build/static/latte-2ErU_2XF.js +1 -0
- package/web-ui/build/static/ldif-ChPn_F7o.js +1 -0
- package/web-ui/build/static/leaf-UkCugDgG.js +1 -0
- package/web-ui/build/static/less-CCH5RA89.js +1 -0
- package/web-ui/build/static/less-CGZbVU1g.js +1 -0
- package/web-ui/build/static/lilypond-BoyM37sv.js +1 -0
- package/web-ui/build/static/liquid-DGJVpRBi.js +1 -0
- package/web-ui/build/static/lisp-93nne61u.js +1 -0
- package/web-ui/build/static/lisp-DYjIRsXz.js +1 -0
- package/web-ui/build/static/livecodeserver-CfNaxIE4.js +1 -0
- package/web-ui/build/static/livescript-C8kDlQkz.js +1 -0
- package/web-ui/build/static/livescript-CoarnRHq.js +1 -0
- package/web-ui/build/static/llvm-CBVyNmAh.js +1 -0
- package/web-ui/build/static/llvm-DGxq8a7u.js +1 -0
- package/web-ui/build/static/log-BivgwFql.js +1 -0
- package/web-ui/build/static/lolcode-l5sK2cZz.js +1 -0
- package/web-ui/build/static/lsl-Xm44xLRQ.js +1 -0
- package/web-ui/build/static/lua-CGvrzfKp.js +1 -0
- package/web-ui/build/static/lua-nHwXeY4c.js +1 -0
- package/web-ui/build/static/magma-DmNItmna.js +1 -0
- package/web-ui/build/static/makefile-CKJNNHGb.js +1 -0
- package/web-ui/build/static/makefile-DI6y5Qml.js +1 -0
- package/web-ui/build/static/markdown-BgpbxKd-.js +1 -0
- package/web-ui/build/static/markdown-CvcxA4yk.js +1 -0
- package/web-ui/build/static/markup-templating-DijqesiA.js +1 -0
- package/web-ui/build/static/mathematica-Cxll1Q10.js +1 -0
- package/web-ui/build/static/matlab-BJo2T1A-.js +1 -0
- package/web-ui/build/static/matlab-C6DlZX4l.js +1 -0
- package/web-ui/build/static/maxima-DJXO4sbL.js +1 -0
- package/web-ui/build/static/maxscript-DdLpUYBs.js +1 -0
- package/web-ui/build/static/mel-BIpfnSyZ.js +1 -0
- package/web-ui/build/static/mel-BYcTUZJW.js +1 -0
- package/web-ui/build/static/mercury-C_LSpbD8.js +1 -0
- package/web-ui/build/static/mermaid-D9yBWnrT.js +1 -0
- package/web-ui/build/static/mipsasm-nR_K2Ue-.js +1 -0
- package/web-ui/build/static/mizar-BeLUPncD.js +1 -0
- package/web-ui/build/static/mizar-BesIbZd9.js +1 -0
- package/web-ui/build/static/mojolicious-cBx3OWa-.js +1 -0
- package/web-ui/build/static/mongodb-DTWKy9ac.js +1 -0
- package/web-ui/build/static/monkey-B72bZC3c.js +1 -0
- package/web-ui/build/static/monkey-G9XELYPQ.js +1 -0
- package/web-ui/build/static/moonscript-BXYVQiqj.js +1 -0
- package/web-ui/build/static/moonscript-sDd-5knz.js +1 -0
- package/web-ui/build/static/n1ql-0vKSfFAO.js +1 -0
- package/web-ui/build/static/n1ql-C9_BSZfz.js +1 -0
- package/web-ui/build/static/n4js-B7Ct8dds.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-p9gpphTM.js +1 -0
- package/web-ui/build/static/naniscript-6ZVr8Aug.js +1 -0
- package/web-ui/build/static/nasm-Ca73yTUt.js +1 -0
- package/web-ui/build/static/neon-DNP49oyX.js +1 -0
- package/web-ui/build/static/nevod-Qhgt7Bce.js +1 -0
- package/web-ui/build/static/nginx-D5e7lu62.js +1 -0
- package/web-ui/build/static/nginx-DobnyESB.js +1 -0
- package/web-ui/build/static/nim-BPBivUOV.js +1 -0
- package/web-ui/build/static/nim-Baoug1Wa.js +1 -0
- package/web-ui/build/static/nix-CSPTQs5y.js +1 -0
- package/web-ui/build/static/nix-Dk4eNw49.js +1 -0
- package/web-ui/build/static/node-repl-NJNL8VFR.js +1 -0
- package/web-ui/build/static/nsis-BZ0oMzEw.js +1 -0
- package/web-ui/build/static/nsis-CKPCjtCU.js +1 -0
- package/web-ui/build/static/objectivec-BkfIRhhV.js +1 -0
- package/web-ui/build/static/objectivec-CnQgqhbJ.js +1 -0
- package/web-ui/build/static/ocaml-9rGNzRrK.js +1 -0
- package/web-ui/build/static/ocaml-CTolCqxL.js +1 -0
- package/web-ui/build/static/opencl-9Q3vRDxv.js +1 -0
- package/web-ui/build/static/openqasm-D2QiuFBp.js +1 -0
- package/web-ui/build/static/openscad-C3HyuzpB.js +1 -0
- package/web-ui/build/static/oxygene-4gi-VYy_.js +1 -0
- package/web-ui/build/static/oz-BGDEB-1A.js +1 -0
- package/web-ui/build/static/parigp-CfZzp1uE.js +1 -0
- package/web-ui/build/static/parser-UbGteTcy.js +1 -0
- package/web-ui/build/static/parser3-C-Jx-fy7.js +1 -0
- package/web-ui/build/static/pascal-D1_R0gW-.js +1 -0
- package/web-ui/build/static/pascaligo-B8C-98Np.js +1 -0
- package/web-ui/build/static/pcaxis-TGnlUKNs.js +1 -0
- package/web-ui/build/static/peoplecode-C5Vf1AH0.js +1 -0
- package/web-ui/build/static/perl-CBp1N62T.js +1 -0
- package/web-ui/build/static/perl-Z59j904t.js +1 -0
- package/web-ui/build/static/pf-Cq8B_xwQ.js +1 -0
- package/web-ui/build/static/pgsql-ofJbUHkL.js +1 -0
- package/web-ui/build/static/php-OlH7HLQJ.js +1 -0
- package/web-ui/build/static/php-extras-GqtrxLuk.js +1 -0
- package/web-ui/build/static/php-r09kMDOB.js +1 -0
- package/web-ui/build/static/php-template-18uT97Qo.js +1 -0
- package/web-ui/build/static/phpdoc-9tRFvup9.js +1 -0
- package/web-ui/build/static/plaintext-DsYT6Mu-.js +1 -0
- package/web-ui/build/static/plsql-RhWQNJVb.js +1 -0
- package/web-ui/build/static/pony-DD6JMLYI.js +1 -0
- package/web-ui/build/static/powerquery-CALow-bt.js +1 -0
- package/web-ui/build/static/powershell-C2QvIuKF.js +1 -0
- package/web-ui/build/static/powershell-yrbJEhCh.js +1 -0
- package/web-ui/build/static/processing-1T5w_Q03.js +1 -0
- package/web-ui/build/static/processing-DBim_dO-.js +1 -0
- package/web-ui/build/static/profile-Cdloh8mZ.js +1 -0
- package/web-ui/build/static/prolog-DRSsNnns.js +1 -0
- package/web-ui/build/static/prolog-D_ajweDr.js +1 -0
- package/web-ui/build/static/promql-BRuwn6Bn.js +1 -0
- package/web-ui/build/static/properties-D5Wyl4X4.js +1 -0
- package/web-ui/build/static/properties-kn4fl1bl.js +1 -0
- package/web-ui/build/static/protobuf-BMO76zWi.js +1 -0
- package/web-ui/build/static/protobuf-CTUCF-U-.js +1 -0
- package/web-ui/build/static/psl-CiqYdQbY.js +1 -0
- package/web-ui/build/static/pug-BLE2Qayj.js +1 -0
- package/web-ui/build/static/puppet-CFKLWXft.js +1 -0
- package/web-ui/build/static/puppet-DQci0Dl5.js +1 -0
- package/web-ui/build/static/pure-D2h_GynV.js +1 -0
- package/web-ui/build/static/purebasic-BF8MVw8V.js +1 -0
- package/web-ui/build/static/purebasic-BTtHiCkh.js +1 -0
- package/web-ui/build/static/purescript-D1ZSh-sH.js +1 -0
- package/web-ui/build/static/python-Cp9_Vdhb.js +1 -0
- package/web-ui/build/static/python-DdgNw8IW.js +1 -0
- package/web-ui/build/static/python-repl-DvK89VMC.js +1 -0
- package/web-ui/build/static/q-COaIgwhT.js +1 -0
- package/web-ui/build/static/q-Cm0dQkW8.js +1 -0
- package/web-ui/build/static/qml-BpsOqqJM.js +1 -0
- package/web-ui/build/static/qml-BziQXlU4.js +1 -0
- package/web-ui/build/static/qore-Cutz6g-2.js +1 -0
- package/web-ui/build/static/qsharp-B16619X1.js +1 -0
- package/web-ui/build/static/r-CFUIj5Hd.js +1 -0
- package/web-ui/build/static/r-CPrwCi5w.js +1 -0
- package/web-ui/build/static/racket-Bh08DFXF.js +1 -0
- package/web-ui/build/static/reason-BxjDq4e-.js +1 -0
- package/web-ui/build/static/reasonml-Ds5SsGP8.js +1 -0
- package/web-ui/build/static/regex-DhBIDIMI.js +1 -0
- package/web-ui/build/static/rego-DCwxZXcB.js +1 -0
- package/web-ui/build/static/renpy-C2fuQfqb.js +1 -0
- package/web-ui/build/static/rest-C52ZpxWQ.js +1 -0
- package/web-ui/build/static/rib-Cbl2Mzyj.js +1 -0
- package/web-ui/build/static/rip-BTOu5ZIE.js +1 -0
- package/web-ui/build/static/roboconf-3Oi2wuVk.js +1 -0
- package/web-ui/build/static/roboconf-ndLZLE39.js +1 -0
- package/web-ui/build/static/robotframework-BzHXiIj1.js +1 -0
- package/web-ui/build/static/routeros-CkpPoqx-.js +1 -0
- package/web-ui/build/static/rsl-C0bwOQ38.js +1 -0
- package/web-ui/build/static/ruby-C_hIhtuQ.js +1 -0
- package/web-ui/build/static/ruby-DvKfZPzj.js +1 -0
- package/web-ui/build/static/ruleslanguage-CbZJlddz.js +1 -0
- package/web-ui/build/static/rust-BFPIhB-X.js +1 -0
- package/web-ui/build/static/rust-sBpUq-qE.js +1 -0
- package/web-ui/build/static/sas-BCXvYN9x.js +1 -0
- package/web-ui/build/static/sas-D7GAsTY3.js +1 -0
- package/web-ui/build/static/sass-BdaErGMN.js +1 -0
- package/web-ui/build/static/scala-Cj81oCl9.js +1 -0
- package/web-ui/build/static/scala-CvbksfY6.js +1 -0
- package/web-ui/build/static/scheme-BM5ZqKnl.js +1 -0
- package/web-ui/build/static/scheme-BPvlu9Tk.js +1 -0
- package/web-ui/build/static/scilab-CJanLKQN.js +1 -0
- package/web-ui/build/static/scss-C53YF_7f.js +1 -0
- package/web-ui/build/static/scss-DPp8UZbr.js +1 -0
- package/web-ui/build/static/shell-CC9bQXMe.js +1 -0
- package/web-ui/build/static/shell-session-CuR3fbf-.js +1 -0
- package/web-ui/build/static/smali-CUgLls3D.js +1 -0
- package/web-ui/build/static/smali-YODSX8qt.js +1 -0
- package/web-ui/build/static/smalltalk-BMJQ4bbs.js +1 -0
- package/web-ui/build/static/smalltalk-BVGY3CTl.js +1 -0
- package/web-ui/build/static/smarty-C9aNt4-p.js +1 -0
- package/web-ui/build/static/sml-C3BIHhfq.js +1 -0
- package/web-ui/build/static/sml-DTipyRmY.js +1 -0
- package/web-ui/build/static/solidity-1yuPUqoC.js +1 -0
- package/web-ui/build/static/solution-file-BgzK4GOU.js +1 -0
- package/web-ui/build/static/soy-CFJXRvqc.js +1 -0
- package/web-ui/build/static/sparql-CAosYMpl.js +1 -0
- package/web-ui/build/static/splunk-spl-DkINtWr8.js +1 -0
- package/web-ui/build/static/sqf-DbrWIS2M.js +1 -0
- package/web-ui/build/static/sqf-nq8Q9J2W.js +1 -0
- package/web-ui/build/static/sql-9bwClhZQ.js +1 -0
- package/web-ui/build/static/sql-CqPkY-lX.js +1 -0
- package/web-ui/build/static/sql_more-CsY5ts77.js +1 -0
- package/web-ui/build/static/squirrel-BuqtzRBD.js +1 -0
- package/web-ui/build/static/stan-BNxBSglc.js +1 -0
- package/web-ui/build/static/stan-CZVMc34l.js +1 -0
- package/web-ui/build/static/stata-DKnVdHCd.js +1 -0
- package/web-ui/build/static/step21-Cu_TaBGF.js +1 -0
- package/web-ui/build/static/stylus-BS7-OJew.js +1 -0
- package/web-ui/build/static/stylus-DtFrp1Nk.js +1 -0
- package/web-ui/build/static/subunit-DDCoWkkc.js +1 -0
- package/web-ui/build/static/swift-BaguUZbl.js +1 -0
- package/web-ui/build/static/swift-mwBsb8Bx.js +1 -0
- package/web-ui/build/static/systemd-D6PpyDKk.js +1 -0
- package/web-ui/build/static/t4-cs-Cem8g4Ck.js +1 -0
- package/web-ui/build/static/t4-templating-BZo-HjmD.js +1 -0
- package/web-ui/build/static/t4-vb-B4oVnKa4.js +1 -0
- package/web-ui/build/static/taggerscript-DweAZ5pw.js +1 -0
- package/web-ui/build/static/tap-DpuvKHHF.js +1 -0
- package/web-ui/build/static/tap-hUKmJObZ.js +1 -0
- package/web-ui/build/static/tcl-BUvhAi7u.js +1 -0
- package/web-ui/build/static/tcl-Dsck63d8.js +1 -0
- package/web-ui/build/static/textile-CgKbqJ-j.js +1 -0
- package/web-ui/build/static/thrift-B5H6rApp.js +1 -0
- package/web-ui/build/static/toml-DggTpfOo.js +1 -0
- package/web-ui/build/static/tp-CazB2P2X.js +1 -0
- package/web-ui/build/static/tremor-B1jy7S5p.js +1 -0
- package/web-ui/build/static/tsx-BqF2lVDi.js +1 -0
- package/web-ui/build/static/tt2-BNoNXpEe.js +1 -0
- package/web-ui/build/static/turtle-B0evd5mn.js +1 -0
- package/web-ui/build/static/twig-B5A7nMdv.js +1 -0
- package/web-ui/build/static/twig-DZnLWvh8.js +1 -0
- package/web-ui/build/static/typescript-Bbe_P093.js +1 -0
- package/web-ui/build/static/typescript-BfhvmSSG.js +1 -0
- package/web-ui/build/static/typoscript-BjuZEIgw.js +1 -0
- package/web-ui/build/static/unrealscript-C3iUCFRi.js +1 -0
- package/web-ui/build/static/uorazor-CbZXwzIj.js +1 -0
- package/web-ui/build/static/uri-xMPSnp6m.js +1 -0
- package/web-ui/build/static/v-BKcGo5I6.js +1 -0
- package/web-ui/build/static/vala-BRoBE4am.js +1 -0
- package/web-ui/build/static/vala-B__Iyrma.js +1 -0
- package/web-ui/build/static/vbnet-DBxlMRvN.js +1 -0
- package/web-ui/build/static/vbnet-DjAXt5BE.js +1 -0
- package/web-ui/build/static/vbscript-BNA4oANi.js +1 -0
- package/web-ui/build/static/vbscript-html-o8ckLPKG.js +1 -0
- package/web-ui/build/static/velocity-D7sc5ggA.js +1 -0
- package/web-ui/build/static/verilog-BWJfMIng.js +1 -0
- package/web-ui/build/static/verilog-jW2GPC--.js +1 -0
- package/web-ui/build/static/vhdl-BIVlXRPa.js +1 -0
- package/web-ui/build/static/vhdl-BeqdhhxD.js +1 -0
- package/web-ui/build/static/vim-712lI4-g.js +1 -0
- package/web-ui/build/static/vim-DMROTzr0.js +1 -0
- package/web-ui/build/static/visual-basic-CQfbM-ta.js +1 -0
- package/web-ui/build/static/warpscript-DFAvCXFQ.js +1 -0
- package/web-ui/build/static/wasm-CiYoxBl0.js +1 -0
- package/web-ui/build/static/web-idl-DoCkPK8y.js +1 -0
- package/web-ui/build/static/wiki-bvz0AGzB.js +1 -0
- package/web-ui/build/static/wolfram-fBuyFEgU.js +1 -0
- package/web-ui/build/static/wren-DvATFxjF.js +1 -0
- package/web-ui/build/static/x86asm-r4bPbUR_.js +1 -0
- package/web-ui/build/static/xeora-B6iOnDJY.js +1 -0
- package/web-ui/build/static/xl-Ce6B5slc.js +1 -0
- package/web-ui/build/static/xml-DNjyPmhQ.js +1 -0
- package/web-ui/build/static/xml-doc-DydogmZD.js +1 -0
- package/web-ui/build/static/xojo-DCQLltvr.js +1 -0
- package/web-ui/build/static/xquery-C-fAnA0H.js +1 -0
- package/web-ui/build/static/xquery-CNeqzhLO.js +1 -0
- package/web-ui/build/static/yaml-BsVaGsk5.js +1 -0
- package/web-ui/build/static/yaml-kVZvwv_C.js +1 -0
- package/web-ui/build/static/yang-B_gq9JEq.js +1 -0
- package/web-ui/build/static/zephir-ECIXgXhX.js +1 -0
- package/web-ui/build/static/zig-DY325EKG.js +1 -0
- package/web-ui/build/static/1c-BLo2-5GS.js +0 -1
- package/web-ui/build/static/abap-BjUneMMr.js +0 -1
- package/web-ui/build/static/abnf-CZTz-l7P.js +0 -1
- package/web-ui/build/static/abnf-ITJ5mkBo.js +0 -1
- package/web-ui/build/static/accesslog-Dj78lZOU.js +0 -1
- package/web-ui/build/static/actionscript-Chivtu59.js +0 -1
- package/web-ui/build/static/actionscript-CrvMFXnx.js +0 -1
- package/web-ui/build/static/ada-DdJtyoYe.js +0 -1
- package/web-ui/build/static/ada-GIvogaLi.js +0 -1
- package/web-ui/build/static/agda-DbPp4fQi.js +0 -1
- package/web-ui/build/static/al-BZ24KwRS.js +0 -1
- package/web-ui/build/static/angelscript-DzsFypYt.js +0 -1
- package/web-ui/build/static/antlr4-3qb4rD3S.js +0 -1
- package/web-ui/build/static/apache-DF0P5ZRm.js +0 -1
- package/web-ui/build/static/apacheconf-C8KuNf9c.js +0 -1
- package/web-ui/build/static/apex-CPV-DeVE.js +0 -1
- package/web-ui/build/static/apl-C60bVxxW.js +0 -1
- package/web-ui/build/static/applescript-uz0i0tu1.js +0 -1
- package/web-ui/build/static/applescript-xcPRUBia.js +0 -1
- package/web-ui/build/static/aql-CRh4IGkA.js +0 -1
- package/web-ui/build/static/arcade-CmLedeqc.js +0 -1
- package/web-ui/build/static/arduino-3pr1BvXB.js +0 -1
- package/web-ui/build/static/arduino-C2BejAip.js +0 -1
- package/web-ui/build/static/arff-DE6Wr9MU.js +0 -1
- package/web-ui/build/static/armasm-DXodTfP4.js +0 -1
- package/web-ui/build/static/asciidoc-BU2BDFme.js +0 -1
- package/web-ui/build/static/asciidoc-CgvtvdeC.js +0 -1
- package/web-ui/build/static/asm6502-BMuYCKmP.js +0 -1
- package/web-ui/build/static/asmatmel-Dwxzg4kq.js +0 -1
- package/web-ui/build/static/aspectj-XZIldIRI.js +0 -1
- package/web-ui/build/static/aspnet-UxY2bZ9O.js +0 -1
- package/web-ui/build/static/autohotkey-BdZoQT7s.js +0 -1
- package/web-ui/build/static/autohotkey-DLWs6p8o.js +0 -1
- package/web-ui/build/static/autoit-CxcZx_kh.js +0 -1
- package/web-ui/build/static/autoit-HY_BHh1p.js +0 -1
- package/web-ui/build/static/avisynth-4Q4be9zq.js +0 -1
- package/web-ui/build/static/avrasm-CFqVJML2.js +0 -1
- package/web-ui/build/static/avro-idl-DVTV2YZm.js +0 -1
- package/web-ui/build/static/awk-C1Udi4As.js +0 -1
- package/web-ui/build/static/axapta-B9lexIDC.js +0 -1
- package/web-ui/build/static/bash-DDZrx0R1.js +0 -1
- package/web-ui/build/static/bash-Uuijyc_K.js +0 -1
- package/web-ui/build/static/basic-B29QFWwp.js +0 -1
- package/web-ui/build/static/basic-DKDOc42O.js +0 -1
- package/web-ui/build/static/batch-CA3q9wRr.js +0 -1
- package/web-ui/build/static/bbcode-DkUDcqrp.js +0 -1
- package/web-ui/build/static/bicep-AHSQiVgQ.js +0 -1
- package/web-ui/build/static/birb-BsAnN1j3.js +0 -1
- package/web-ui/build/static/bison-BIq5-ZXo.js +0 -1
- package/web-ui/build/static/bnf-BexLm6hz.js +0 -1
- package/web-ui/build/static/bnf-Dm46EM5S.js +0 -1
- package/web-ui/build/static/brainfuck-CBG8MHhD.js +0 -1
- package/web-ui/build/static/brainfuck-DrHuUFVv.js +0 -1
- package/web-ui/build/static/brightscript-CoQ7s_l3.js +0 -1
- package/web-ui/build/static/bro-Cz5RmvoK.js +0 -1
- package/web-ui/build/static/bsl-C9wXomkX.js +0 -1
- package/web-ui/build/static/c-BZFEFWwC.js +0 -1
- package/web-ui/build/static/c-CfFWLEL7.js +0 -1
- package/web-ui/build/static/c-like-CvIii1QP.js +0 -1
- package/web-ui/build/static/cal-be-Dz3GC.js +0 -1
- package/web-ui/build/static/capnproto-Bcaxak1e.js +0 -1
- package/web-ui/build/static/ceylon-QH_iQXnW.js +0 -1
- package/web-ui/build/static/cfscript-BRgBlxCO.js +0 -1
- package/web-ui/build/static/chaiscript-DSBx5kyN.js +0 -1
- package/web-ui/build/static/cil-C90LIbge.js +0 -1
- package/web-ui/build/static/clean-D2X3fSKw.js +0 -1
- package/web-ui/build/static/clojure-CvKE0e-3.js +0 -1
- package/web-ui/build/static/clojure-Cy3Zg4vZ.js +0 -1
- package/web-ui/build/static/clojure-repl-D0kONHv2.js +0 -1
- package/web-ui/build/static/cmake-DIDVe3n_.js +0 -1
- package/web-ui/build/static/cmake-DPijEs9c.js +0 -1
- package/web-ui/build/static/cobol-BPEjLjGY.js +0 -1
- package/web-ui/build/static/coffeescript-CoSx9MQU.js +0 -1
- package/web-ui/build/static/coffeescript-L5CBXrnP.js +0 -1
- package/web-ui/build/static/concurnas-q5sXhVU4.js +0 -1
- package/web-ui/build/static/coq-BAEq82zI.js +0 -1
- package/web-ui/build/static/coq-BBgtQZwi.js +0 -1
- package/web-ui/build/static/cos-9FdwfBC5.js +0 -1
- package/web-ui/build/static/cpp-CYt8UYn2.js +0 -1
- package/web-ui/build/static/cpp-CZ2lOXlm.js +0 -1
- package/web-ui/build/static/crmsh-C_TZWkES.js +0 -1
- package/web-ui/build/static/crystal-BDf_0NDz.js +0 -1
- package/web-ui/build/static/crystal-BrTR9dGT.js +0 -1
- package/web-ui/build/static/csharp-BSBrba50.js +0 -1
- package/web-ui/build/static/csharp-Cerqyqbn.js +0 -1
- package/web-ui/build/static/cshtml-heNA_ya5.js +0 -1
- package/web-ui/build/static/csp-CJprtNTl.js +0 -1
- package/web-ui/build/static/csp-CyYfNNga.js +0 -1
- package/web-ui/build/static/css-ClMfqSLF.js +0 -1
- package/web-ui/build/static/css-extras-BRU-Fmfk.js +0 -1
- package/web-ui/build/static/csv-VxPQSCnT.js +0 -1
- package/web-ui/build/static/cypher-COR7lVoB.js +0 -1
- package/web-ui/build/static/d-CjJIoaqU.js +0 -1
- package/web-ui/build/static/d-DrTea74c.js +0 -1
- package/web-ui/build/static/dart-Dx1CtbrO.js +0 -1
- package/web-ui/build/static/dart-Kqlt_5Iy.js +0 -1
- package/web-ui/build/static/dataweave-DpoRPYaa.js +0 -1
- package/web-ui/build/static/dax-BdRNDjXh.js +0 -1
- package/web-ui/build/static/delphi-C6ZfxFVF.js +0 -1
- package/web-ui/build/static/dhall-DZrga6Gc.js +0 -1
- package/web-ui/build/static/diff-BuMvzPYe.js +0 -1
- package/web-ui/build/static/diff-DZYXzKCb.js +0 -1
- package/web-ui/build/static/django-D_vRowuc.js +0 -1
- package/web-ui/build/static/django-NYcglI2i.js +0 -1
- package/web-ui/build/static/dns-Cd7tDS1i.js +0 -1
- package/web-ui/build/static/dns-zone-file-C3-2vwxy.js +0 -1
- package/web-ui/build/static/docker-DQ7ZFefk.js +0 -1
- package/web-ui/build/static/dockerfile-BpU0w0F-.js +0 -1
- package/web-ui/build/static/dos-B1_ZGbVG.js +0 -1
- package/web-ui/build/static/dot-BGB_tXU7.js +0 -1
- package/web-ui/build/static/dsconfig-BbDxyV_e.js +0 -1
- package/web-ui/build/static/dts-BfjOjY8l.js +0 -1
- package/web-ui/build/static/dust-BdwQ-7T_.js +0 -1
- package/web-ui/build/static/ebnf-BQTMmaYU.js +0 -1
- package/web-ui/build/static/ebnf-BwwBWilG.js +0 -1
- package/web-ui/build/static/editorconfig-DWS4VSOM.js +0 -1
- package/web-ui/build/static/eiffel-DVvlc0AI.js +0 -1
- package/web-ui/build/static/ejs-DsD496m-.js +0 -1
- package/web-ui/build/static/elixir-CLxuo9eh.js +0 -1
- package/web-ui/build/static/elixir-Cnyg3Ezx.js +0 -1
- package/web-ui/build/static/elm-CMAIkLMI.js +0 -1
- package/web-ui/build/static/elm-DZBnlwPV.js +0 -1
- package/web-ui/build/static/erb-B5xezjly.js +0 -1
- package/web-ui/build/static/erb-CJr8Ab4S.js +0 -1
- package/web-ui/build/static/erlang-BKy_rMFs.js +0 -1
- package/web-ui/build/static/erlang-DtaEL15_.js +0 -1
- package/web-ui/build/static/erlang-repl-CC5OZ0oZ.js +0 -1
- package/web-ui/build/static/etlua-1AfbSbi_.js +0 -1
- package/web-ui/build/static/excel-AEWYaJMN.js +0 -1
- package/web-ui/build/static/excel-formula-DXCH31eV.js +0 -1
- package/web-ui/build/static/factor-BvZsNxRC.js +0 -1
- package/web-ui/build/static/false-Y69sPjTa.js +0 -1
- package/web-ui/build/static/firestore-security-rules-BAYXaIU_.js +0 -1
- package/web-ui/build/static/fix-D7wVox5L.js +0 -1
- package/web-ui/build/static/flix-xYG3kZl-.js +0 -1
- package/web-ui/build/static/flow-zBPh0c8a.js +0 -1
- package/web-ui/build/static/fortran-C7OgAOwk.js +0 -1
- package/web-ui/build/static/fortran-D7HqnRra.js +0 -1
- package/web-ui/build/static/fsharp-Dz8jq_YD.js +0 -1
- package/web-ui/build/static/fsharp-wem8e879.js +0 -1
- package/web-ui/build/static/ftl-BNZhFjQT.js +0 -1
- package/web-ui/build/static/gams-C0WL3JTk.js +0 -1
- package/web-ui/build/static/gap-C3QTJPj2.js +0 -1
- package/web-ui/build/static/gauss-HDeDt6Js.js +0 -1
- package/web-ui/build/static/gcode-B6xVa-Q4.js +0 -1
- package/web-ui/build/static/gcode-KfjFk59Y.js +0 -1
- package/web-ui/build/static/gdscript-CZWTW6OT.js +0 -1
- package/web-ui/build/static/gedcom-DGTBZtDe.js +0 -1
- package/web-ui/build/static/gherkin-BM2fti5q.js +0 -1
- package/web-ui/build/static/gherkin-BsD-keLP.js +0 -1
- package/web-ui/build/static/git-CwXnrvg5.js +0 -1
- package/web-ui/build/static/glsl-CEL-DKdu.js +0 -1
- package/web-ui/build/static/glsl-DClg1hhL.js +0 -1
- package/web-ui/build/static/gml-BuyC2nUx.js +0 -1
- package/web-ui/build/static/gml-CaV0fexF.js +0 -1
- package/web-ui/build/static/gn-RZ4XHU09.js +0 -1
- package/web-ui/build/static/go-2fZP5dFL.js +0 -1
- package/web-ui/build/static/go-B-2r4QAR.js +0 -1
- package/web-ui/build/static/go-module-DSWZUUGo.js +0 -1
- package/web-ui/build/static/golo-BLZaLyU5.js +0 -1
- package/web-ui/build/static/gradle--RLe7WtU.js +0 -1
- package/web-ui/build/static/graphql-Dersm5rs.js +0 -1
- package/web-ui/build/static/groovy-BhCtzyFe.js +0 -1
- package/web-ui/build/static/groovy-CvbHavu3.js +0 -1
- package/web-ui/build/static/haml-CQhB89Xl.js +0 -1
- package/web-ui/build/static/haml-CemWzAX2.js +0 -1
- package/web-ui/build/static/handlebars-B39jLKjQ.js +0 -1
- package/web-ui/build/static/handlebars-Cl4dI91M.js +0 -1
- package/web-ui/build/static/haskell-CO9Ug-Kw.js +0 -1
- package/web-ui/build/static/haskell-EXme4CFR.js +0 -1
- package/web-ui/build/static/haxe-BDkCyqBy.js +0 -1
- package/web-ui/build/static/haxe-ahczQlFA.js +0 -1
- package/web-ui/build/static/hcl-liOTbdHr.js +0 -1
- package/web-ui/build/static/hlsl-Bnkb1zrP.js +0 -1
- package/web-ui/build/static/hoon-DCXHuTNp.js +0 -1
- package/web-ui/build/static/hpkp-CPJOGDF_.js +0 -1
- package/web-ui/build/static/hsp-BdeT0enM.js +0 -1
- package/web-ui/build/static/hsts-BoIN2VGK.js +0 -1
- package/web-ui/build/static/htmlbars-B5Ruf2zT.js +0 -1
- package/web-ui/build/static/http-BacVzmeC.js +0 -1
- package/web-ui/build/static/http-DifjpER4.js +0 -1
- package/web-ui/build/static/hy-DQ-M6mjk.js +0 -1
- package/web-ui/build/static/ichigojam-CcVrpthd.js +0 -1
- package/web-ui/build/static/icon-B4N1Fnx2.js +0 -1
- package/web-ui/build/static/icu-message-format-aDIl6Oaf.js +0 -1
- package/web-ui/build/static/idris-DKvV6i27.js +0 -1
- package/web-ui/build/static/iecst-zqZH79Dw.js +0 -1
- package/web-ui/build/static/ignore-BBbP-u2O.js +0 -1
- package/web-ui/build/static/index-CkhVK4lF.js +0 -1164
- package/web-ui/build/static/index-Cm1gK3R7.css +0 -1
- package/web-ui/build/static/index-D9JNKR2k.js +0 -13
- package/web-ui/build/static/index-DqZhvIWG.js +0 -1
- package/web-ui/build/static/inform7-BwvEArfL.js +0 -1
- package/web-ui/build/static/inform7-YkPDg57k.js +0 -1
- package/web-ui/build/static/ini-DU4drXRb.js +0 -1
- package/web-ui/build/static/ini-OhDTn0L5.js +0 -1
- package/web-ui/build/static/io-4thQGR-r.js +0 -1
- package/web-ui/build/static/irpf90-BnhmotbX.js +0 -1
- package/web-ui/build/static/isbl-BKcWS-M5.js +0 -1
- package/web-ui/build/static/j-Bw6CUCl9.js +0 -1
- package/web-ui/build/static/java-8IzvJ-mZ.js +0 -1
- package/web-ui/build/static/java-_jaQp1m2.js +0 -1
- package/web-ui/build/static/javadoc-D6KaHkhq.js +0 -1
- package/web-ui/build/static/javadoclike-B-DnR3Tl.js +0 -1
- package/web-ui/build/static/javascript-CfOOSye9.js +0 -1
- package/web-ui/build/static/javastacktrace-DHyDfhlB.js +0 -1
- package/web-ui/build/static/jboss-cli-zEH5UaRS.js +0 -1
- package/web-ui/build/static/jexl-CRpgdJ2f.js +0 -1
- package/web-ui/build/static/jolie-C5S16-nE.js +0 -1
- package/web-ui/build/static/jq-Dy-2LJZM.js +0 -1
- package/web-ui/build/static/js-extras-CNfXr3kE.js +0 -1
- package/web-ui/build/static/js-templates-DCJ1syUw.js +0 -1
- package/web-ui/build/static/jsdoc-BamyoRCh.js +0 -1
- package/web-ui/build/static/json-Buz-eeND.js +0 -1
- package/web-ui/build/static/json-D4xr_AK1.js +0 -1
- package/web-ui/build/static/json5-CS3uAaJP.js +0 -1
- package/web-ui/build/static/jsonp-CmEAdOcH.js +0 -1
- package/web-ui/build/static/jsstacktrace-D35jXpCN.js +0 -1
- package/web-ui/build/static/jsx-DRMEK-Qn.js +0 -1
- package/web-ui/build/static/julia-BgYJV7ho.js +0 -1
- package/web-ui/build/static/julia-CRsGDmxp.js +0 -1
- package/web-ui/build/static/julia-repl-D0vTZKUn.js +0 -1
- package/web-ui/build/static/keepalived-BlhBatvM.js +0 -1
- package/web-ui/build/static/keyman-B_-J66sg.js +0 -1
- package/web-ui/build/static/kotlin-B7HqYBGK.js +0 -1
- package/web-ui/build/static/kotlin-CszxhoS4.js +0 -1
- package/web-ui/build/static/kumir-B_wpMfXS.js +0 -1
- package/web-ui/build/static/kusto-BrHkOiE1.js +0 -1
- package/web-ui/build/static/lasso-xizuiq1s.js +0 -1
- package/web-ui/build/static/latex-62pryLTa.js +0 -1
- package/web-ui/build/static/latex-D7Tnbs2l.js +0 -1
- package/web-ui/build/static/latte-B_8xJj-y.js +0 -1
- package/web-ui/build/static/ldif-B69eIciC.js +0 -1
- package/web-ui/build/static/leaf-DPnh4k7N.js +0 -1
- package/web-ui/build/static/less-Bg3xuki-.js +0 -1
- package/web-ui/build/static/less-Cm-zhk4i.js +0 -1
- package/web-ui/build/static/lilypond-BFSXmrKQ.js +0 -1
- package/web-ui/build/static/liquid-D_jMXN_8.js +0 -1
- package/web-ui/build/static/lisp-CDWjXhWU.js +0 -1
- package/web-ui/build/static/lisp-DAu9fWrQ.js +0 -1
- package/web-ui/build/static/livecodeserver-BNgd6rBu.js +0 -1
- package/web-ui/build/static/livescript-C6sYNsdz.js +0 -1
- package/web-ui/build/static/livescript-CMOawYYt.js +0 -1
- package/web-ui/build/static/llvm-Yx2vcmJw.js +0 -1
- package/web-ui/build/static/llvm-w4vVb6qs.js +0 -1
- package/web-ui/build/static/log-CqhluDSP.js +0 -1
- package/web-ui/build/static/lolcode-Ck0rxP3x.js +0 -1
- package/web-ui/build/static/lsl-BwPX-Qjm.js +0 -1
- package/web-ui/build/static/lua-4H_Ijh4D.js +0 -1
- package/web-ui/build/static/lua-dDdlvQ6u.js +0 -1
- package/web-ui/build/static/magma-2nRRraug.js +0 -1
- package/web-ui/build/static/makefile-C887R9mV.js +0 -1
- package/web-ui/build/static/makefile-hlNtZePL.js +0 -1
- package/web-ui/build/static/markdown-DCALPnuW.js +0 -1
- package/web-ui/build/static/markdown-DGM_Z5tW.js +0 -1
- package/web-ui/build/static/markup-templating-PAvYDmBZ.js +0 -1
- package/web-ui/build/static/mathematica-CGL-Gomp.js +0 -1
- package/web-ui/build/static/matlab-C46ZZzlH.js +0 -1
- package/web-ui/build/static/matlab-WUgx8roJ.js +0 -1
- package/web-ui/build/static/maxima-Dd_TIy4H.js +0 -1
- package/web-ui/build/static/maxscript-f8SP9Ybn.js +0 -1
- package/web-ui/build/static/mel-6l2ZAh7F.js +0 -1
- package/web-ui/build/static/mel-BYdNMJzZ.js +0 -1
- package/web-ui/build/static/mercury-CdHf1buq.js +0 -1
- package/web-ui/build/static/mermaid-IRgUMtb1.js +0 -1
- package/web-ui/build/static/mipsasm-CRPpDKP4.js +0 -1
- package/web-ui/build/static/mizar-B4DBCLSi.js +0 -1
- package/web-ui/build/static/mizar-DiuZyDh7.js +0 -1
- package/web-ui/build/static/mojolicious-ChuQv8wb.js +0 -1
- package/web-ui/build/static/mongodb-CE5Epj0T.js +0 -1
- package/web-ui/build/static/monkey-BAz4pIwb.js +0 -1
- package/web-ui/build/static/monkey-i_g3gMkJ.js +0 -1
- package/web-ui/build/static/moonscript-BNaNpboV.js +0 -1
- package/web-ui/build/static/moonscript-uHlQVjxf.js +0 -1
- package/web-ui/build/static/n1ql-CBDLma2D.js +0 -1
- package/web-ui/build/static/n1ql-u4YLlLfk.js +0 -1
- package/web-ui/build/static/n4js-IVFjZEMP.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-Ba72aD32.js +0 -1
- package/web-ui/build/static/naniscript-CjMhybrb.js +0 -1
- package/web-ui/build/static/nasm-DjKhk70h.js +0 -1
- package/web-ui/build/static/neon-JEhMoh8P.js +0 -1
- package/web-ui/build/static/nevod-6tgpQVCA.js +0 -1
- package/web-ui/build/static/nginx-C6NwXcw_.js +0 -1
- package/web-ui/build/static/nginx-CquSTZbP.js +0 -1
- package/web-ui/build/static/nim-0bOOYxfL.js +0 -1
- package/web-ui/build/static/nim-aCQGMs_4.js +0 -1
- package/web-ui/build/static/nix-BV4kRCY_.js +0 -1
- package/web-ui/build/static/nix-FvSL2V8j.js +0 -1
- package/web-ui/build/static/node-repl-GtjTvb93.js +0 -1
- package/web-ui/build/static/nsis-DsftItKH.js +0 -1
- package/web-ui/build/static/nsis-pu7O80Pq.js +0 -1
- package/web-ui/build/static/objectivec-Bx7Bj0U_.js +0 -1
- package/web-ui/build/static/objectivec-GtO6Znp9.js +0 -1
- package/web-ui/build/static/ocaml-B71sR3qa.js +0 -1
- package/web-ui/build/static/ocaml-BlhoK75p.js +0 -1
- package/web-ui/build/static/opencl-40JZ6XXw.js +0 -1
- package/web-ui/build/static/openqasm-cDL6l7w3.js +0 -1
- package/web-ui/build/static/openscad-BQ0gNGv9.js +0 -1
- package/web-ui/build/static/oxygene-1fX2ftBa.js +0 -1
- package/web-ui/build/static/oz-Cgq2yQZq.js +0 -1
- package/web-ui/build/static/parigp-DfRO3DxU.js +0 -1
- package/web-ui/build/static/parser-hZcHrq-n.js +0 -1
- package/web-ui/build/static/parser3-Cf2p4Ryg.js +0 -1
- package/web-ui/build/static/pascal-C6tg_yvS.js +0 -1
- package/web-ui/build/static/pascaligo-9U9PdOS6.js +0 -1
- package/web-ui/build/static/pcaxis-B5EnEKrt.js +0 -1
- package/web-ui/build/static/peoplecode-Cf2sGzFJ.js +0 -1
- package/web-ui/build/static/perl-C9FNSHZx.js +0 -1
- package/web-ui/build/static/perl-uzSwl6wJ.js +0 -1
- package/web-ui/build/static/pf-C7Bjci1q.js +0 -1
- package/web-ui/build/static/pgsql-IBD1Cka7.js +0 -1
- package/web-ui/build/static/php-19XvqtTQ.js +0 -1
- package/web-ui/build/static/php-CUjVuQ1J.js +0 -1
- package/web-ui/build/static/php-extras-GWBU2Qbm.js +0 -1
- package/web-ui/build/static/php-template-Chtii014.js +0 -1
- package/web-ui/build/static/phpdoc-BLcJXgrV.js +0 -1
- package/web-ui/build/static/plaintext-BX3hHjdj.js +0 -1
- package/web-ui/build/static/plsql-tCcTmmsx.js +0 -1
- package/web-ui/build/static/pony-CKD16QkU.js +0 -1
- package/web-ui/build/static/powerquery-DXj7kqMe.js +0 -1
- package/web-ui/build/static/powershell-0jB2gvRR.js +0 -1
- package/web-ui/build/static/powershell-Ca6UjZV2.js +0 -1
- package/web-ui/build/static/processing-CPjwH4wc.js +0 -1
- package/web-ui/build/static/processing-ItKy7l8u.js +0 -1
- package/web-ui/build/static/profile-6N_Rzycx.js +0 -1
- package/web-ui/build/static/prolog-BV3TgLfG.js +0 -1
- package/web-ui/build/static/prolog-C5UoVyBz.js +0 -1
- package/web-ui/build/static/promql-CZot8Bw3.js +0 -1
- package/web-ui/build/static/properties-C_r_5f7N.js +0 -1
- package/web-ui/build/static/properties-qycKL1T0.js +0 -1
- package/web-ui/build/static/protobuf-BmdKEOw6.js +0 -1
- package/web-ui/build/static/protobuf-CxWC8PvT.js +0 -1
- package/web-ui/build/static/psl-CFSNRM7z.js +0 -1
- package/web-ui/build/static/pug-8dv12FtI.js +0 -1
- package/web-ui/build/static/puppet-CNjskGXn.js +0 -1
- package/web-ui/build/static/puppet-Cf6xZODN.js +0 -1
- package/web-ui/build/static/pure-exFir566.js +0 -1
- package/web-ui/build/static/purebasic-Bm6QaKku.js +0 -1
- package/web-ui/build/static/purebasic-lfzND9Qp.js +0 -1
- package/web-ui/build/static/purescript-D1xRYVQG.js +0 -1
- package/web-ui/build/static/python-DgkOjU0T.js +0 -1
- package/web-ui/build/static/python-o7BJVaX6.js +0 -1
- package/web-ui/build/static/python-repl-6SyonvH1.js +0 -1
- package/web-ui/build/static/q-CiQ2AFzU.js +0 -1
- package/web-ui/build/static/q-g7rEIWgm.js +0 -1
- package/web-ui/build/static/qml-ARc9Akfg.js +0 -1
- package/web-ui/build/static/qml-rVumxss_.js +0 -1
- package/web-ui/build/static/qore-CUXpqOSx.js +0 -1
- package/web-ui/build/static/qsharp-DMPNcgaz.js +0 -1
- package/web-ui/build/static/r-DCIo6joW.js +0 -1
- package/web-ui/build/static/r-nUBzz4LB.js +0 -1
- package/web-ui/build/static/racket--fPY_Q4o.js +0 -1
- package/web-ui/build/static/reason-CeVN9vJx.js +0 -1
- package/web-ui/build/static/reasonml-49SEasi3.js +0 -1
- package/web-ui/build/static/regex-BS97XMMk.js +0 -1
- package/web-ui/build/static/rego-Brc7DU11.js +0 -1
- package/web-ui/build/static/renpy-C2sPWAHv.js +0 -1
- package/web-ui/build/static/rest-DlZ7ycRe.js +0 -1
- package/web-ui/build/static/rib-C8WsA4on.js +0 -1
- package/web-ui/build/static/rip-dd9bS3Ar.js +0 -1
- package/web-ui/build/static/roboconf-CAEw-rS3.js +0 -1
- package/web-ui/build/static/roboconf-D0TfrLeu.js +0 -1
- package/web-ui/build/static/robotframework-CkgVY4bX.js +0 -1
- package/web-ui/build/static/routeros-DIek1v-Z.js +0 -1
- package/web-ui/build/static/rsl-DExhHtA1.js +0 -1
- package/web-ui/build/static/ruby-BjvzODgO.js +0 -1
- package/web-ui/build/static/ruby-Dflr1gcA.js +0 -1
- package/web-ui/build/static/ruleslanguage-BgzP6UBl.js +0 -1
- package/web-ui/build/static/rust-DxIro-GW.js +0 -1
- package/web-ui/build/static/rust-qWzP5Jcw.js +0 -1
- package/web-ui/build/static/sas-BrCJWU_w.js +0 -1
- package/web-ui/build/static/sas-itaOGZ-D.js +0 -1
- package/web-ui/build/static/sass-BTk1_hyU.js +0 -1
- package/web-ui/build/static/scala-DEtImhEo.js +0 -1
- package/web-ui/build/static/scala-DdZCH_nS.js +0 -1
- package/web-ui/build/static/scheme-CiOCQffl.js +0 -1
- package/web-ui/build/static/scheme-WaU-JPJX.js +0 -1
- package/web-ui/build/static/scilab-03tyg0ft.js +0 -1
- package/web-ui/build/static/scss-DXl2WSdH.js +0 -1
- package/web-ui/build/static/scss-movJ3vcX.js +0 -1
- package/web-ui/build/static/shell-DWmlNcrf.js +0 -1
- package/web-ui/build/static/shell-session-lHcfQbT0.js +0 -1
- package/web-ui/build/static/smali-7RKwn9RZ.js +0 -1
- package/web-ui/build/static/smali-TEMQ7bRM.js +0 -1
- package/web-ui/build/static/smalltalk-B_nVEfab.js +0 -1
- package/web-ui/build/static/smalltalk-BsA9wucb.js +0 -1
- package/web-ui/build/static/smarty-DSf4s_8v.js +0 -1
- package/web-ui/build/static/sml-BDO_Hmie.js +0 -1
- package/web-ui/build/static/sml-DKuy82zG.js +0 -1
- package/web-ui/build/static/solidity-jtWv6laA.js +0 -1
- package/web-ui/build/static/solution-file-DcfiquuJ.js +0 -1
- package/web-ui/build/static/soy-DmBVrDYd.js +0 -1
- package/web-ui/build/static/sparql-_JOxZ7fM.js +0 -1
- package/web-ui/build/static/splunk-spl-CHeBtp33.js +0 -1
- package/web-ui/build/static/sqf-9wI8rp5o.js +0 -1
- package/web-ui/build/static/sqf-BuKh30bG.js +0 -1
- package/web-ui/build/static/sql-ClFFHGMY.js +0 -1
- package/web-ui/build/static/sql-DVXtimpW.js +0 -1
- package/web-ui/build/static/sql_more-CNw-JJON.js +0 -1
- package/web-ui/build/static/squirrel-Bdi8LbT5.js +0 -1
- package/web-ui/build/static/stan-Brcz64A8.js +0 -1
- package/web-ui/build/static/stan-C9Q08Juk.js +0 -1
- package/web-ui/build/static/stata-ES8hryw_.js +0 -1
- package/web-ui/build/static/step21-Cfmoq4Lb.js +0 -1
- package/web-ui/build/static/stylus-DMKHLSvm.js +0 -1
- package/web-ui/build/static/stylus-Dcs8vyW2.js +0 -1
- package/web-ui/build/static/subunit-DRjv565H.js +0 -1
- package/web-ui/build/static/swift-0x_T9zx8.js +0 -1
- package/web-ui/build/static/swift-CUvpRg4a.js +0 -1
- package/web-ui/build/static/systemd-Dl8xGVv9.js +0 -1
- package/web-ui/build/static/t4-cs-DqvXuZwc.js +0 -1
- package/web-ui/build/static/t4-templating-DjN2N1uM.js +0 -1
- package/web-ui/build/static/t4-vb-CZQn9IVK.js +0 -1
- package/web-ui/build/static/taggerscript-CPCJkC2t.js +0 -1
- package/web-ui/build/static/tap-BPfuLhe7.js +0 -1
- package/web-ui/build/static/tap-CSdsd38Q.js +0 -1
- package/web-ui/build/static/tcl-4BqhAKLC.js +0 -1
- package/web-ui/build/static/tcl-Bh0Jg8jj.js +0 -1
- package/web-ui/build/static/textile-BiD4awlU.js +0 -1
- package/web-ui/build/static/thrift-Br1-10xh.js +0 -1
- package/web-ui/build/static/toml-QlLCqVpQ.js +0 -1
- package/web-ui/build/static/tp-B2Ef9EBz.js +0 -1
- package/web-ui/build/static/tremor-DuZdAfVr.js +0 -1
- package/web-ui/build/static/tsx-W3KEjccO.js +0 -1
- package/web-ui/build/static/tt2-D_tdF-56.js +0 -1
- package/web-ui/build/static/turtle-DxrQkFoq.js +0 -1
- package/web-ui/build/static/twig-DD44ApyU.js +0 -1
- package/web-ui/build/static/twig-vA3ZwAxn.js +0 -1
- package/web-ui/build/static/typescript-BfbcKNOu.js +0 -1
- package/web-ui/build/static/typescript-CvKtq1ix.js +0 -1
- package/web-ui/build/static/typoscript-BEu84JpE.js +0 -1
- package/web-ui/build/static/unrealscript-ohUNsJGM.js +0 -1
- package/web-ui/build/static/uorazor-BWer-chm.js +0 -1
- package/web-ui/build/static/uri-CPLTr_NY.js +0 -1
- package/web-ui/build/static/v-gAkMRmmI.js +0 -1
- package/web-ui/build/static/vala-Bktj5SNB.js +0 -1
- package/web-ui/build/static/vala-D1fDPFxI.js +0 -1
- package/web-ui/build/static/vbnet-Cn0g0ohh.js +0 -1
- package/web-ui/build/static/vbnet-TiYHF2WM.js +0 -1
- package/web-ui/build/static/vbscript-BUV-Kjvs.js +0 -1
- package/web-ui/build/static/vbscript-html-s1RgByjf.js +0 -1
- package/web-ui/build/static/velocity-DTy-TOwB.js +0 -1
- package/web-ui/build/static/verilog-4jk4MMXN.js +0 -1
- package/web-ui/build/static/verilog-aR4U-DJX.js +0 -1
- package/web-ui/build/static/vhdl-D72XnBZR.js +0 -1
- package/web-ui/build/static/vhdl-DFdtG28B.js +0 -1
- package/web-ui/build/static/vim-BMqsbQ-a.js +0 -1
- package/web-ui/build/static/vim-Cc3UuKOs.js +0 -1
- package/web-ui/build/static/visual-basic-CyC2kNGV.js +0 -1
- package/web-ui/build/static/warpscript-DpKFeISB.js +0 -1
- package/web-ui/build/static/wasm-SPljCkFH.js +0 -1
- package/web-ui/build/static/web-idl-Cie2yHU9.js +0 -1
- package/web-ui/build/static/wiki-BfYfwsBk.js +0 -1
- package/web-ui/build/static/wolfram-Dgi1K2gQ.js +0 -1
- package/web-ui/build/static/wren-CFQxgLld.js +0 -1
- package/web-ui/build/static/x86asm-CBIt2r64.js +0 -1
- package/web-ui/build/static/xeora-e5JHDF1T.js +0 -1
- package/web-ui/build/static/xl-CPZe-czl.js +0 -1
- package/web-ui/build/static/xml-BEuPuoS1.js +0 -1
- package/web-ui/build/static/xml-doc-DTOJGYE2.js +0 -1
- package/web-ui/build/static/xojo-ByMSKdYJ.js +0 -1
- package/web-ui/build/static/xquery--5iaD5oE.js +0 -1
- package/web-ui/build/static/xquery-DJp5PXZo.js +0 -1
- package/web-ui/build/static/yaml-CH8EnM9M.js +0 -1
- package/web-ui/build/static/yaml-mKr8oN1v.js +0 -1
- package/web-ui/build/static/yang-Nqdvm2mQ.js +0 -1
- package/web-ui/build/static/zephir-BJZaDzrW.js +0 -1
- package/web-ui/build/static/zig-DRkhvZLn.js +0 -1
package/src/tools/codeMapTool.js
CHANGED
|
@@ -9,9 +9,33 @@
|
|
|
9
9
|
import { BaseTool } from './baseTool.js';
|
|
10
10
|
import fs from 'fs';
|
|
11
11
|
import path from 'path';
|
|
12
|
+
import {
|
|
13
|
+
isWhitespace,
|
|
14
|
+
skipWhitespace,
|
|
15
|
+
readIdent,
|
|
16
|
+
startsWithKeyword,
|
|
17
|
+
consumeKeyword,
|
|
18
|
+
consumeAnyKeyword,
|
|
19
|
+
trimmedStartsWithAny,
|
|
20
|
+
indexOfWord,
|
|
21
|
+
containsWord,
|
|
22
|
+
stripStringsAndLineComments,
|
|
23
|
+
countChar,
|
|
24
|
+
consumeDottedAssignTail,
|
|
25
|
+
trimmedEndsWith,
|
|
26
|
+
isIdentStart,
|
|
27
|
+
isWordChar,
|
|
28
|
+
} from './parserHelpers.js';
|
|
12
29
|
|
|
13
30
|
const CODE_MAP_CONFIG = {
|
|
14
|
-
SUPPORTED_EXTENSIONS: new Set([
|
|
31
|
+
SUPPORTED_EXTENSIONS: new Set([
|
|
32
|
+
'.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs', '.py',
|
|
33
|
+
// C / C++ via a focused regex pass — see _parseC below. The
|
|
34
|
+
// proper tree-sitter migration that would replace the JS + Python
|
|
35
|
+
// regex parsers also covers these and adds full accuracy; this
|
|
36
|
+
// pass is the v1 that unblocks `code-map` on C/CPP codebases today.
|
|
37
|
+
'.c', '.h', '.cc', '.cpp', '.cxx', '.hpp', '.hh', '.hxx',
|
|
38
|
+
]),
|
|
15
39
|
MAX_FILES: 500,
|
|
16
40
|
MAX_FILE_SIZE: 5 * 1024 * 1024, // 5MB per file
|
|
17
41
|
MAX_READ_RANGE: 500, // Max lines per read-range call
|
|
@@ -43,7 +67,7 @@ SKELETON LEVELS:
|
|
|
43
67
|
- B.0: All signatures (public + private + methods) — DEFAULT
|
|
44
68
|
- B.1: All signatures + comments/docstrings
|
|
45
69
|
|
|
46
|
-
Supported files: .js, .ts, .jsx, .tsx, .mjs, .cjs, .py
|
|
70
|
+
Supported files: .js, .ts, .jsx, .tsx, .mjs, .cjs, .py, .c, .h, .cc, .cpp, .cxx, .hpp, .hh, .hxx
|
|
47
71
|
Respects .gitignore rules. Skips node_modules, __pycache__, .git, dist, build.
|
|
48
72
|
|
|
49
73
|
USAGE — Skeleton scan:
|
|
@@ -270,7 +294,7 @@ XML format also supported:
|
|
|
270
294
|
totalFiles: 0,
|
|
271
295
|
totalEntries: 0,
|
|
272
296
|
message: 'No supported files found in the specified path.',
|
|
273
|
-
guidance: 'Try a different path or verify the directory contains .js, .ts, .jsx, .tsx, .mjs, .cjs,
|
|
297
|
+
guidance: 'Try a different path or verify the directory contains supported files (.js, .ts, .jsx, .tsx, .mjs, .cjs, .py, .c, .h, .cc, .cpp, .cxx, .hpp, .hh, .hxx).'
|
|
274
298
|
};
|
|
275
299
|
}
|
|
276
300
|
|
|
@@ -291,9 +315,10 @@ XML format also supported:
|
|
|
291
315
|
const lines = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
|
|
292
316
|
const lang = this._langOf(file);
|
|
293
317
|
|
|
294
|
-
const entries =
|
|
295
|
-
? this._parsePython(lines, parseOptions)
|
|
296
|
-
|
|
318
|
+
const entries =
|
|
319
|
+
lang === 'python' ? this._parsePython(lines, parseOptions) :
|
|
320
|
+
lang === 'c' ? this._parseC(lines, parseOptions) :
|
|
321
|
+
this._parseJS(lines, parseOptions);
|
|
297
322
|
|
|
298
323
|
if (entries.length === 0) continue;
|
|
299
324
|
|
|
@@ -564,10 +589,371 @@ XML format also supported:
|
|
|
564
589
|
// ── Language detection ────────────────────────────────────────────────────
|
|
565
590
|
|
|
566
591
|
_langOf(file) {
|
|
567
|
-
|
|
592
|
+
const ext = path.extname(file).toLowerCase();
|
|
593
|
+
if (ext === '.py') return 'python';
|
|
594
|
+
if (['.c', '.h', '.cc', '.cpp', '.cxx', '.hpp', '.hh', '.hxx'].includes(ext)) return 'c';
|
|
595
|
+
return 'js';
|
|
568
596
|
}
|
|
569
597
|
|
|
570
598
|
// ── JS / TS parser ────────────────────────────────────────────────────────
|
|
599
|
+
//
|
|
600
|
+
// No-regex implementation. Pattern matchers below each return either
|
|
601
|
+
// `true`/`false` or `null`/idx, using the primitives from
|
|
602
|
+
// parserHelpers.js. This trades five lines of regex for ten lines of
|
|
603
|
+
// explicit cursor-walking, but the result is far more debuggable and
|
|
604
|
+
// every behavior is locked by parserHelpers.test.js + codeMapTool.test.js.
|
|
605
|
+
|
|
606
|
+
// Modifier keywords that can precede a class-method name (used by the
|
|
607
|
+
// "method inside class" matcher).
|
|
608
|
+
static _METHOD_MODIFIERS = new Set([
|
|
609
|
+
'private', 'protected', 'public', 'readonly', 'abstract',
|
|
610
|
+
'override', 'async', 'static', 'get', 'set',
|
|
611
|
+
]);
|
|
612
|
+
|
|
613
|
+
// Reserved words that look like methods but aren't — `if (x) {` etc.
|
|
614
|
+
static _METHOD_KEYWORD_EXCLUDE = new Set([
|
|
615
|
+
'if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'new',
|
|
616
|
+
'typeof', 'delete', 'void', 'await', 'class', 'function',
|
|
617
|
+
'const', 'let', 'var', 'super', 'this',
|
|
618
|
+
]);
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Does the RHS of an assignment (starting at idx) look like a function
|
|
622
|
+
* or arrow expression? Recognizes:
|
|
623
|
+
* function …
|
|
624
|
+
* async function …
|
|
625
|
+
* () => … or (a, b) => …
|
|
626
|
+
* ident => … or async ident => …
|
|
627
|
+
*
|
|
628
|
+
* Returns true on hit. Allocation-free.
|
|
629
|
+
*/
|
|
630
|
+
_rhsLooksLikeFunction(s, idx) {
|
|
631
|
+
let i = skipWhitespace(s, idx);
|
|
632
|
+
// optional `async`
|
|
633
|
+
const afterAsync = consumeKeyword(s, 'async', i);
|
|
634
|
+
if (afterAsync !== -1) i = skipWhitespace(s, afterAsync);
|
|
635
|
+
if (startsWithKeyword(s, 'function', i)) return true;
|
|
636
|
+
|
|
637
|
+
// `(…) =>` — find a balanced paren run, then `=>`
|
|
638
|
+
if (s[i] === '(') {
|
|
639
|
+
let depth = 1; let j = i + 1;
|
|
640
|
+
while (j < s.length && depth > 0) {
|
|
641
|
+
if (s[j] === '(') depth += 1;
|
|
642
|
+
else if (s[j] === ')') depth -= 1;
|
|
643
|
+
j += 1;
|
|
644
|
+
}
|
|
645
|
+
const k = skipWhitespace(s, j);
|
|
646
|
+
if (s[k] === '=' && s[k + 1] === '>') return true;
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// `ident =>`
|
|
651
|
+
const id = readIdent(s, i);
|
|
652
|
+
if (id) {
|
|
653
|
+
const k = skipWhitespace(s, id.nextIdx);
|
|
654
|
+
if (s[k] === '=' && s[k + 1] === '>') return true;
|
|
655
|
+
}
|
|
656
|
+
return false;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/** Line is `import ...` (ESM). */
|
|
660
|
+
_isImportLine(raw) {
|
|
661
|
+
const i = skipWhitespace(raw, 0);
|
|
662
|
+
return startsWithKeyword(raw, 'import', i);
|
|
663
|
+
}
|
|
664
|
+
/** Line contains `require(` as a whole word call. */
|
|
665
|
+
_hasRequireCall(raw) {
|
|
666
|
+
const i = indexOfWord(raw, 'require');
|
|
667
|
+
if (i === -1) return false;
|
|
668
|
+
const j = skipWhitespace(raw, i + 'require'.length);
|
|
669
|
+
return raw[j] === '(';
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/** Walks across the prefix keywords `export default abstract async ...`. */
|
|
673
|
+
_skipDecoratorPrefix(raw) {
|
|
674
|
+
let i = skipWhitespace(raw, 0);
|
|
675
|
+
// export, then optional `default`
|
|
676
|
+
const afterExport = consumeKeyword(raw, 'export', i);
|
|
677
|
+
if (afterExport !== -1) i = skipWhitespace(raw, afterExport);
|
|
678
|
+
const afterDefault = consumeKeyword(raw, 'default', i);
|
|
679
|
+
if (afterDefault !== -1) i = skipWhitespace(raw, afterDefault);
|
|
680
|
+
const afterAbstract = consumeKeyword(raw, 'abstract', i);
|
|
681
|
+
if (afterAbstract !== -1) i = skipWhitespace(raw, afterAbstract);
|
|
682
|
+
const afterAsync = consumeKeyword(raw, 'async', i);
|
|
683
|
+
if (afterAsync !== -1) i = skipWhitespace(raw, afterAsync);
|
|
684
|
+
return i;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/**
|
|
688
|
+
* The line starts with one of these declaration keywords (after the
|
|
689
|
+
* optional `export [default] [abstract] [async]` prefix run):
|
|
690
|
+
* function | class | const | let | var | enum | interface | type
|
|
691
|
+
*
|
|
692
|
+
* Returns true if so.
|
|
693
|
+
*/
|
|
694
|
+
_isExportableDecl(raw) {
|
|
695
|
+
const i = this._skipDecoratorPrefix(raw);
|
|
696
|
+
return (
|
|
697
|
+
startsWithKeyword(raw, 'function', i) ||
|
|
698
|
+
startsWithKeyword(raw, 'class', i) ||
|
|
699
|
+
startsWithKeyword(raw, 'const', i) ||
|
|
700
|
+
startsWithKeyword(raw, 'let', i) ||
|
|
701
|
+
startsWithKeyword(raw, 'var', i) ||
|
|
702
|
+
startsWithKeyword(raw, 'enum', i) ||
|
|
703
|
+
startsWithKeyword(raw, 'interface', i) ||
|
|
704
|
+
startsWithKeyword(raw, 'type', i) ||
|
|
705
|
+
startsWithKeyword(raw, 'abstract', i) // bare `export abstract foo`
|
|
706
|
+
);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/** `module.exports = …` (whole or property: `module.exports.foo = …`). */
|
|
710
|
+
_isModuleExportsAssign(raw) {
|
|
711
|
+
const i = skipWhitespace(raw, 0);
|
|
712
|
+
if (!startsWithKeyword(raw, 'module', i)) return false;
|
|
713
|
+
let j = i + 'module'.length;
|
|
714
|
+
if (raw[j] !== '.') return false;
|
|
715
|
+
j += 1;
|
|
716
|
+
if (!startsWithKeyword(raw, 'exports', j)) return false;
|
|
717
|
+
j += 'exports'.length;
|
|
718
|
+
// optional `.ident`
|
|
719
|
+
if (raw[j] === '.') {
|
|
720
|
+
const id = readIdent(raw, j + 1);
|
|
721
|
+
if (!id) return false;
|
|
722
|
+
j = id.nextIdx;
|
|
723
|
+
}
|
|
724
|
+
j = skipWhitespace(raw, j);
|
|
725
|
+
return raw[j] === '=' && raw[j + 1] !== '=';
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/** `exports.foo = …` */
|
|
729
|
+
_isExportsAssign(raw) {
|
|
730
|
+
const i = skipWhitespace(raw, 0);
|
|
731
|
+
if (!startsWithKeyword(raw, 'exports', i)) return false;
|
|
732
|
+
let j = i + 'exports'.length;
|
|
733
|
+
if (raw[j] !== '.') return false;
|
|
734
|
+
const id = readIdent(raw, j + 1);
|
|
735
|
+
if (!id) return false;
|
|
736
|
+
j = skipWhitespace(raw, id.nextIdx);
|
|
737
|
+
return raw[j] === '=' && raw[j + 1] !== '=';
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
/** `(async) function name(…)` top-level form. */
|
|
741
|
+
_isTopLevelFunctionDecl(raw) {
|
|
742
|
+
let i = skipWhitespace(raw, 0);
|
|
743
|
+
const aa = consumeKeyword(raw, 'async', i);
|
|
744
|
+
if (aa !== -1) i = skipWhitespace(raw, aa);
|
|
745
|
+
if (!startsWithKeyword(raw, 'function', i)) return false;
|
|
746
|
+
i = skipWhitespace(raw, i + 'function'.length);
|
|
747
|
+
return readIdent(raw, i) !== null;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/** `(abstract) class Name`. */
|
|
751
|
+
_isTopLevelClassDecl(raw) {
|
|
752
|
+
let i = skipWhitespace(raw, 0);
|
|
753
|
+
const aa = consumeKeyword(raw, 'abstract', i);
|
|
754
|
+
if (aa !== -1) i = skipWhitespace(raw, aa);
|
|
755
|
+
if (!startsWithKeyword(raw, 'class', i)) return false;
|
|
756
|
+
i = skipWhitespace(raw, i + 'class'.length);
|
|
757
|
+
return readIdent(raw, i) !== null;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/** `const|let|var name = <function-ish>`. */
|
|
761
|
+
_isConstAssignedFunction(raw) {
|
|
762
|
+
let i = skipWhitespace(raw, 0);
|
|
763
|
+
const dk = consumeAnyKeyword(raw, ['const', 'let', 'var'], i);
|
|
764
|
+
if (!dk) return false;
|
|
765
|
+
i = skipWhitespace(raw, dk.nextIdx);
|
|
766
|
+
const id = readIdent(raw, i);
|
|
767
|
+
if (!id) return false;
|
|
768
|
+
i = skipWhitespace(raw, id.nextIdx);
|
|
769
|
+
if (raw[i] !== '=' || raw[i + 1] === '=' || raw[i + 1] === '>') return false;
|
|
770
|
+
return this._rhsLooksLikeFunction(raw, i + 1);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/** Class-with-an-opening-brace check for the brace stack. */
|
|
774
|
+
_isClassDeclWithOpenBrace(raw, opens) {
|
|
775
|
+
if (opens <= 0) return false;
|
|
776
|
+
let i = skipWhitespace(raw, 0);
|
|
777
|
+
const ex = consumeKeyword(raw, 'export', i);
|
|
778
|
+
if (ex !== -1) i = skipWhitespace(raw, ex);
|
|
779
|
+
const df = consumeKeyword(raw, 'default', i);
|
|
780
|
+
if (df !== -1) i = skipWhitespace(raw, df);
|
|
781
|
+
const ab = consumeKeyword(raw, 'abstract', i);
|
|
782
|
+
if (ab !== -1) i = skipWhitespace(raw, ab);
|
|
783
|
+
return startsWithKeyword(raw, 'class', i);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
/** IIFE prefix-op form: `!function`, `+function`, `~function`, `-function`. */
|
|
787
|
+
_isIifePrefixOp(raw) {
|
|
788
|
+
const i = skipWhitespace(raw, 0);
|
|
789
|
+
const ch = raw[i];
|
|
790
|
+
if (ch !== '!' && ch !== '+' && ch !== '~' && ch !== '-') return false;
|
|
791
|
+
let j = skipWhitespace(raw, i + 1);
|
|
792
|
+
const aa = consumeKeyword(raw, 'async', j);
|
|
793
|
+
if (aa !== -1) j = skipWhitespace(raw, aa);
|
|
794
|
+
return startsWithKeyword(raw, 'function', j);
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/** IIFE paren-wrapped form: `(function ...)` or `(async function ...)`. */
|
|
798
|
+
_isIifeParens(raw) {
|
|
799
|
+
const i = skipWhitespace(raw, 0);
|
|
800
|
+
if (raw[i] !== '(') return false;
|
|
801
|
+
let j = skipWhitespace(raw, i + 1);
|
|
802
|
+
const aa = consumeKeyword(raw, 'async', j);
|
|
803
|
+
if (aa !== -1) j = skipWhitespace(raw, aa);
|
|
804
|
+
return startsWithKeyword(raw, 'function', j);
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/**
|
|
808
|
+
* Global/namespace assignment of a function-ish value:
|
|
809
|
+
* window.X.Y = function / globalThis.X = () => / MyApp.foo = …
|
|
810
|
+
* Conditions:
|
|
811
|
+
* - LHS head is `window|globalThis|self` (and optional dotted tail)
|
|
812
|
+
* OR a TitleCase identifier followed by AT LEAST one dotted tail
|
|
813
|
+
* segment (so we don't grab bare `Foo = …`)
|
|
814
|
+
* - RHS is function or arrow
|
|
815
|
+
*/
|
|
816
|
+
_isGlobalAssign(raw) {
|
|
817
|
+
let i = skipWhitespace(raw, 0);
|
|
818
|
+
const headKw = consumeAnyKeyword(raw, ['window', 'globalThis', 'self'], i);
|
|
819
|
+
let after;
|
|
820
|
+
let hadGlobalHead = false;
|
|
821
|
+
if (headKw) {
|
|
822
|
+
hadGlobalHead = true;
|
|
823
|
+
after = consumeDottedAssignTail(raw, headKw.nextIdx);
|
|
824
|
+
} else {
|
|
825
|
+
// TitleCase ident + at least one dotted tail
|
|
826
|
+
const id = readIdent(raw, i);
|
|
827
|
+
if (!id) return false;
|
|
828
|
+
// TitleCase = uppercase first char
|
|
829
|
+
const first = id.ident[0];
|
|
830
|
+
if (first < 'A' || first > 'Z') return false;
|
|
831
|
+
// Need at least one '.ident' before '='
|
|
832
|
+
if (raw[id.nextIdx] !== '.') return false;
|
|
833
|
+
after = consumeDottedAssignTail(raw, id.nextIdx);
|
|
834
|
+
}
|
|
835
|
+
if (after === -1) return false;
|
|
836
|
+
return this._rhsLooksLikeFunction(raw, after);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Prototype-method assignment: `Foo.prototype.bar = function|=>…`.
|
|
841
|
+
* Note: leverages `_isGlobalAssign`'s tail logic but requires
|
|
842
|
+
* `.prototype.<ident>` somewhere in the LHS.
|
|
843
|
+
*/
|
|
844
|
+
_isPrototypeAssign(raw) {
|
|
845
|
+
let i = skipWhitespace(raw, 0);
|
|
846
|
+
const id = readIdent(raw, i);
|
|
847
|
+
if (!id) return false;
|
|
848
|
+
let j = id.nextIdx;
|
|
849
|
+
// walk `.ident*` until we hit `.prototype`
|
|
850
|
+
let sawPrototype = false;
|
|
851
|
+
while (raw[j] === '.') {
|
|
852
|
+
// peek the next ident
|
|
853
|
+
if (startsWithKeyword(raw, 'prototype', j + 1)) {
|
|
854
|
+
sawPrototype = true;
|
|
855
|
+
j = j + 1 + 'prototype'.length;
|
|
856
|
+
break;
|
|
857
|
+
}
|
|
858
|
+
const more = readIdent(raw, j + 1);
|
|
859
|
+
if (!more) return false;
|
|
860
|
+
j = more.nextIdx;
|
|
861
|
+
}
|
|
862
|
+
if (!sawPrototype) return false;
|
|
863
|
+
// Need `.ident` + `=` + function-ish
|
|
864
|
+
if (raw[j] !== '.') return false;
|
|
865
|
+
const methodId = readIdent(raw, j + 1);
|
|
866
|
+
if (!methodId) return false;
|
|
867
|
+
j = skipWhitespace(raw, methodId.nextIdx);
|
|
868
|
+
if (raw[j] !== '=' || raw[j + 1] === '=') return false;
|
|
869
|
+
return this._rhsLooksLikeFunction(raw, j + 1);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
/** jQuery-style plugin: `$.fn.X = function …` / `jQuery.fn.X = function …`. */
|
|
873
|
+
_isJqueryPluginAssign(raw) {
|
|
874
|
+
let i = skipWhitespace(raw, 0);
|
|
875
|
+
let afterHead;
|
|
876
|
+
if (raw[i] === '$') {
|
|
877
|
+
afterHead = i + 1;
|
|
878
|
+
} else if (startsWithKeyword(raw, 'jQuery', i)) {
|
|
879
|
+
afterHead = i + 'jQuery'.length;
|
|
880
|
+
} else {
|
|
881
|
+
return false;
|
|
882
|
+
}
|
|
883
|
+
if (raw[afterHead] !== '.') return false;
|
|
884
|
+
if (!startsWithKeyword(raw, 'fn', afterHead + 1)) return false;
|
|
885
|
+
let j = afterHead + 1 + 'fn'.length;
|
|
886
|
+
if (raw[j] !== '.') return false;
|
|
887
|
+
const id = readIdent(raw, j + 1);
|
|
888
|
+
if (!id) return false;
|
|
889
|
+
j = skipWhitespace(raw, id.nextIdx);
|
|
890
|
+
if (raw[j] !== '=' || raw[j + 1] === '=') return false;
|
|
891
|
+
// We only insist on `function` here (matches the original regex).
|
|
892
|
+
let r = skipWhitespace(raw, j + 1);
|
|
893
|
+
const aa = consumeKeyword(raw, 'async', r);
|
|
894
|
+
if (aa !== -1) r = skipWhitespace(raw, aa);
|
|
895
|
+
return startsWithKeyword(raw, 'function', r);
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/** `document.addEventListener(` or `window.addEventListener(`. */
|
|
899
|
+
_isAddEventListenerCall(raw) {
|
|
900
|
+
const i = skipWhitespace(raw, 0);
|
|
901
|
+
const head = consumeAnyKeyword(raw, ['document', 'window'], i);
|
|
902
|
+
if (!head) return false;
|
|
903
|
+
let j = head.nextIdx;
|
|
904
|
+
if (raw[j] !== '.') return false;
|
|
905
|
+
if (!startsWithKeyword(raw, 'addEventListener', j + 1)) return false;
|
|
906
|
+
j = skipWhitespace(raw, j + 1 + 'addEventListener'.length);
|
|
907
|
+
return raw[j] === '(';
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Method inside a class. Caller already established `classDepth > 0`
|
|
912
|
+
* and `braceDepthBeforeLine === methodDepth`. We just decide if the
|
|
913
|
+
* line LOOKS like a method declaration vs a method call.
|
|
914
|
+
*
|
|
915
|
+
* Returns the method name or null.
|
|
916
|
+
*/
|
|
917
|
+
_detectMethodName(raw) {
|
|
918
|
+
// Must start with at least one space (methods are indented).
|
|
919
|
+
if (raw[0] !== ' ' && raw[0] !== '\t') return null;
|
|
920
|
+
let i = skipWhitespace(raw, 0);
|
|
921
|
+
// Walk through any sequence of modifier keywords.
|
|
922
|
+
while (true) {
|
|
923
|
+
const id = readIdent(raw, i);
|
|
924
|
+
if (!id) return null;
|
|
925
|
+
if (!CodeMapTool._METHOD_MODIFIERS.has(id.ident)) {
|
|
926
|
+
// This is the method name candidate.
|
|
927
|
+
const afterName = skipWhitespace(raw, id.nextIdx);
|
|
928
|
+
if (raw[afterName] !== '(' && raw[afterName] !== '<') return null;
|
|
929
|
+
// Excluded reserved words (`if`, `for`, …)
|
|
930
|
+
if (CodeMapTool._METHOD_KEYWORD_EXCLUDE.has(id.ident)) return null;
|
|
931
|
+
// Is this a call rather than a definition?
|
|
932
|
+
// Calls end with `)` (optionally `;`) and have NO `) {` or `) : …`.
|
|
933
|
+
const trimmed = raw.trim();
|
|
934
|
+
const endsWithClose = trimmedEndsWith(trimmed, ')');
|
|
935
|
+
const endsWithCloseBrace = trimmedEndsWith(trimmed, ') {');
|
|
936
|
+
// `): Type` — a TS-style return-type annotation continuation
|
|
937
|
+
const hasReturnTypeAnnotation = (() => {
|
|
938
|
+
// Walk past the open paren to find the matching `)`, then check
|
|
939
|
+
// if the next non-ws char is `:` followed by a non-empty token.
|
|
940
|
+
let k = afterName + 1;
|
|
941
|
+
let depth = 1;
|
|
942
|
+
while (k < raw.length && depth > 0) {
|
|
943
|
+
if (raw[k] === '(') depth += 1;
|
|
944
|
+
else if (raw[k] === ')') depth -= 1;
|
|
945
|
+
k += 1;
|
|
946
|
+
}
|
|
947
|
+
k = skipWhitespace(raw, k);
|
|
948
|
+
return raw[k] === ':' && raw[k + 1] !== '\0' && raw[k + 1] !== undefined;
|
|
949
|
+
})();
|
|
950
|
+
if (endsWithClose && !endsWithCloseBrace && !hasReturnTypeAnnotation) return null;
|
|
951
|
+
return id.ident;
|
|
952
|
+
}
|
|
953
|
+
// It WAS a modifier — consume + continue.
|
|
954
|
+
i = skipWhitespace(raw, id.nextIdx);
|
|
955
|
+
}
|
|
956
|
+
}
|
|
571
957
|
|
|
572
958
|
_parseJS(lines, { publicOnly, withComments, includeImports }) {
|
|
573
959
|
const entries = [];
|
|
@@ -580,25 +966,24 @@ XML format also supported:
|
|
|
580
966
|
let braceDepth = 0;
|
|
581
967
|
let methodDepths = [];
|
|
582
968
|
|
|
583
|
-
for (let i = 0; i < lines.length; i
|
|
969
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
584
970
|
const lineNum = i + 1;
|
|
585
971
|
const raw = lines[i];
|
|
586
|
-
const
|
|
972
|
+
const start = skipWhitespace(raw, 0);
|
|
587
973
|
|
|
588
974
|
// block-comment tracking
|
|
589
975
|
if (inBlockComment) {
|
|
590
976
|
blockCommentLines.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
591
|
-
if (
|
|
977
|
+
if (raw.includes('*/')) {
|
|
592
978
|
inBlockComment = false;
|
|
593
979
|
pendingComments = blockCommentLines;
|
|
594
980
|
blockCommentLines = [];
|
|
595
981
|
}
|
|
596
982
|
continue;
|
|
597
983
|
}
|
|
598
|
-
|
|
599
|
-
if (trimmed.startsWith('/*')) {
|
|
984
|
+
if (raw[start] === '/' && raw[start + 1] === '*') {
|
|
600
985
|
blockCommentLines = [{ line: lineNum, text: raw, kind: 'comment' }];
|
|
601
|
-
if (
|
|
986
|
+
if (raw.slice(start + 2).includes('*/')) {
|
|
602
987
|
pendingComments = blockCommentLines;
|
|
603
988
|
blockCommentLines = [];
|
|
604
989
|
} else {
|
|
@@ -606,88 +991,75 @@ XML format also supported:
|
|
|
606
991
|
}
|
|
607
992
|
continue;
|
|
608
993
|
}
|
|
609
|
-
|
|
610
|
-
if (trimmed.startsWith('//')) {
|
|
994
|
+
if (raw[start] === '/' && raw[start + 1] === '/') {
|
|
611
995
|
pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
612
996
|
continue;
|
|
613
997
|
}
|
|
614
998
|
|
|
615
999
|
// imports
|
|
616
1000
|
if (includeImports) {
|
|
617
|
-
if (
|
|
1001
|
+
if (this._isImportLine(raw) || this._hasRequireCall(raw)) {
|
|
618
1002
|
entries.push({ line: lineNum, text: raw, kind: 'import' });
|
|
619
1003
|
pendingComments = [];
|
|
620
1004
|
continue;
|
|
621
1005
|
}
|
|
622
1006
|
}
|
|
623
1007
|
|
|
624
|
-
//
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
const opens = (stripped.match(/\{/g) || []).length;
|
|
631
|
-
const closes = (stripped.match(/\}/g) || []).length;
|
|
632
|
-
|
|
1008
|
+
// Brace tracking for class context — mask strings + line comments
|
|
1009
|
+
// before counting so e.g. `var s = "class Foo {"` doesn't push a
|
|
1010
|
+
// bogus class frame.
|
|
1011
|
+
const masked = stripStringsAndLineComments(raw);
|
|
1012
|
+
const opens = countChar(masked, '{');
|
|
1013
|
+
const closes = countChar(masked, '}');
|
|
633
1014
|
const braceDepthBeforeLine = braceDepth;
|
|
634
1015
|
|
|
635
|
-
if (
|
|
1016
|
+
if (this._isClassDeclWithOpenBrace(raw, opens)) {
|
|
636
1017
|
braceStack.push({ depth: braceDepth, type: 'class' });
|
|
637
1018
|
methodDepths.push(braceDepth + 1);
|
|
638
|
-
classDepth
|
|
1019
|
+
classDepth += 1;
|
|
639
1020
|
}
|
|
640
|
-
|
|
641
1021
|
braceDepth += opens - closes;
|
|
642
|
-
|
|
643
1022
|
while (braceStack.length > 0 && braceDepth <= braceStack[braceStack.length - 1].depth) {
|
|
644
1023
|
const popped = braceStack.pop();
|
|
645
1024
|
if (popped.type === 'class') {
|
|
646
|
-
classDepth
|
|
1025
|
+
classDepth -= 1;
|
|
647
1026
|
methodDepths.pop();
|
|
648
1027
|
}
|
|
649
1028
|
}
|
|
650
1029
|
|
|
651
|
-
//
|
|
652
|
-
const isExport
|
|
653
|
-
const isModuleExports
|
|
654
|
-
const isExportsAssign
|
|
655
|
-
const isPublic
|
|
1030
|
+
// Signature detection
|
|
1031
|
+
const isExport = startsWithKeyword(raw, 'export', start);
|
|
1032
|
+
const isModuleExports = this._isModuleExportsAssign(raw);
|
|
1033
|
+
const isExportsAssign = this._isExportsAssign(raw);
|
|
1034
|
+
const isPublic = isExport || isModuleExports || isExportsAssign;
|
|
656
1035
|
|
|
657
1036
|
let matched = false;
|
|
658
1037
|
|
|
659
|
-
if (isExport)
|
|
660
|
-
|
|
661
|
-
matched = true;
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
if (isModuleExports || isExportsAssign) {
|
|
666
|
-
matched = true;
|
|
667
|
-
}
|
|
1038
|
+
if (isExport && this._isExportableDecl(raw)) matched = true;
|
|
1039
|
+
if (isModuleExports || isExportsAssign) matched = true;
|
|
668
1040
|
|
|
669
1041
|
if (!matched && !publicOnly) {
|
|
670
|
-
if (
|
|
671
|
-
if (
|
|
672
|
-
if (
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
if (
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
1042
|
+
if (this._isTopLevelFunctionDecl(raw)) matched = true;
|
|
1043
|
+
if (this._isTopLevelClassDecl(raw)) matched = true;
|
|
1044
|
+
if (this._isConstAssignedFunction(raw)) matched = true;
|
|
1045
|
+
|
|
1046
|
+
// Browser-JS / pre-ESM patterns
|
|
1047
|
+
if (this._isIifePrefixOp(raw)) matched = true;
|
|
1048
|
+
if (this._isIifeParens(raw)) matched = true;
|
|
1049
|
+
if (this._isGlobalAssign(raw)) matched = true;
|
|
1050
|
+
if (this._isPrototypeAssign(raw)) matched = true;
|
|
1051
|
+
if (this._isJqueryPluginAssign(raw)) matched = true;
|
|
1052
|
+
if (this._isAddEventListenerCall(raw)) matched = true;
|
|
1053
|
+
|
|
1054
|
+
// Method inside class
|
|
1055
|
+
const atMethodDepth = methodDepths.length > 0 &&
|
|
1056
|
+
braceDepthBeforeLine === methodDepths[methodDepths.length - 1];
|
|
1057
|
+
if (classDepth > 0 && atMethodDepth && !isExport) {
|
|
1058
|
+
if (this._detectMethodName(raw)) matched = true;
|
|
686
1059
|
}
|
|
687
1060
|
}
|
|
688
1061
|
|
|
689
1062
|
if (!matched && isPublic) matched = true;
|
|
690
|
-
|
|
691
1063
|
if (matched && publicOnly && !isPublic) {
|
|
692
1064
|
pendingComments = [];
|
|
693
1065
|
continue;
|
|
@@ -703,11 +1075,58 @@ XML format also supported:
|
|
|
703
1075
|
pendingComments = [];
|
|
704
1076
|
}
|
|
705
1077
|
}
|
|
706
|
-
|
|
707
1078
|
return entries;
|
|
708
1079
|
}
|
|
709
1080
|
|
|
710
1081
|
// ── Python parser ─────────────────────────────────────────────────────────
|
|
1082
|
+
//
|
|
1083
|
+
// No-regex implementation. Identifiers are ASCII per PEP 8's
|
|
1084
|
+
// recommendation; this is a documented tradeoff vs. the previous
|
|
1085
|
+
// Unicode-aware (\p{L}) regex. The alternative — bundling a Unicode
|
|
1086
|
+
// category table — adds ~50 KB for a feature ~0.1 % of Python
|
|
1087
|
+
// codebases use. If users surface a non-ASCII-identifier Python
|
|
1088
|
+
// codebase the fix is to bring in tree-sitter (already planned for
|
|
1089
|
+
// #5 follow-on) which is Unicode-correct by default.
|
|
1090
|
+
|
|
1091
|
+
/** Try to read a `def` or `async def` head. Returns the function name or null. */
|
|
1092
|
+
_readPythonDefName(raw) {
|
|
1093
|
+
let i = skipWhitespace(raw, 0);
|
|
1094
|
+
// optional `async`
|
|
1095
|
+
const aa = consumeKeyword(raw, 'async', i);
|
|
1096
|
+
if (aa !== -1) i = skipWhitespace(raw, aa);
|
|
1097
|
+
if (!startsWithKeyword(raw, 'def', i)) return null;
|
|
1098
|
+
i = skipWhitespace(raw, i + 'def'.length);
|
|
1099
|
+
const id = readIdent(raw, i);
|
|
1100
|
+
if (!id) return null;
|
|
1101
|
+
i = skipWhitespace(raw, id.nextIdx);
|
|
1102
|
+
if (raw[i] !== '(') return null;
|
|
1103
|
+
return id.ident;
|
|
1104
|
+
}
|
|
1105
|
+
/** Try to read a `class Foo` head. Returns class name or null. */
|
|
1106
|
+
_readPythonClassName(raw) {
|
|
1107
|
+
let i = skipWhitespace(raw, 0);
|
|
1108
|
+
if (!startsWithKeyword(raw, 'class', i)) return null;
|
|
1109
|
+
i = skipWhitespace(raw, i + 'class'.length);
|
|
1110
|
+
const id = readIdent(raw, i);
|
|
1111
|
+
return id ? id.ident : null;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
/**
|
|
1115
|
+
* Returns true if `s` (at or after leading whitespace) starts with a
|
|
1116
|
+
* Python triple-quote prefix (`"""` or `'''`). Returns null otherwise.
|
|
1117
|
+
* On hit returns the 3-char quote string.
|
|
1118
|
+
*/
|
|
1119
|
+
_pythonTripleQuoteAtStart(s) {
|
|
1120
|
+
const i = skipWhitespace(s, 0);
|
|
1121
|
+
if (s[i] === '"' && s[i + 1] === '"' && s[i + 2] === '"') return '"""';
|
|
1122
|
+
if (s[i] === "'" && s[i + 1] === "'" && s[i + 2] === "'") return "'''";
|
|
1123
|
+
return null;
|
|
1124
|
+
}
|
|
1125
|
+
/** True if the single-line docstring on a triple-quote line is closed on the same line. */
|
|
1126
|
+
_pythonTripleQuoteClosedOnLine(s, quote) {
|
|
1127
|
+
const i = skipWhitespace(s, 0);
|
|
1128
|
+
return s.indexOf(quote, i + 3) !== -1;
|
|
1129
|
+
}
|
|
711
1130
|
|
|
712
1131
|
_parsePython(lines, { publicOnly, withComments, includeImports }) {
|
|
713
1132
|
const entries = [];
|
|
@@ -717,52 +1136,81 @@ XML format also supported:
|
|
|
717
1136
|
while (i < lines.length) {
|
|
718
1137
|
const lineNum = i + 1;
|
|
719
1138
|
const raw = lines[i];
|
|
720
|
-
const
|
|
1139
|
+
const start = skipWhitespace(raw, 0);
|
|
721
1140
|
|
|
722
|
-
// imports
|
|
1141
|
+
// imports — `import …` or `from <module> import …`
|
|
723
1142
|
if (includeImports) {
|
|
724
|
-
if (
|
|
1143
|
+
if (startsWithKeyword(raw, 'import', start)) {
|
|
725
1144
|
entries.push({ line: lineNum, text: raw, kind: 'import' });
|
|
726
1145
|
pendingComments = [];
|
|
727
|
-
i
|
|
728
|
-
|
|
1146
|
+
i += 1; continue;
|
|
1147
|
+
}
|
|
1148
|
+
if (startsWithKeyword(raw, 'from', start)) {
|
|
1149
|
+
// require a non-empty module then `import`
|
|
1150
|
+
let j = skipWhitespace(raw, start + 'from'.length);
|
|
1151
|
+
// Read the dotted module path; allow leading dots (relative).
|
|
1152
|
+
let progressed = false;
|
|
1153
|
+
while (j < raw.length && raw[j] === '.') { j += 1; progressed = true; }
|
|
1154
|
+
const id = readIdent(raw, j);
|
|
1155
|
+
if (id) { j = id.nextIdx; progressed = true; }
|
|
1156
|
+
while (raw[j] === '.') {
|
|
1157
|
+
const more = readIdent(raw, j + 1);
|
|
1158
|
+
if (!more) { progressed = true; break; }
|
|
1159
|
+
j = more.nextIdx;
|
|
1160
|
+
}
|
|
1161
|
+
j = skipWhitespace(raw, j);
|
|
1162
|
+
if (progressed && startsWithKeyword(raw, 'import', j)) {
|
|
1163
|
+
entries.push({ line: lineNum, text: raw, kind: 'import' });
|
|
1164
|
+
pendingComments = [];
|
|
1165
|
+
i += 1; continue;
|
|
1166
|
+
}
|
|
729
1167
|
}
|
|
730
1168
|
}
|
|
731
1169
|
|
|
732
1170
|
// # comments
|
|
733
|
-
if (
|
|
1171
|
+
if (raw[start] === '#') {
|
|
734
1172
|
pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
735
|
-
i
|
|
736
|
-
continue;
|
|
1173
|
+
i += 1; continue;
|
|
737
1174
|
}
|
|
738
|
-
|
|
739
1175
|
// decorators
|
|
740
|
-
if (
|
|
1176
|
+
if (raw[start] === '@') {
|
|
741
1177
|
pendingComments.push({ line: lineNum, text: raw, kind: 'decorator' });
|
|
742
|
-
i
|
|
743
|
-
continue;
|
|
1178
|
+
i += 1; continue;
|
|
744
1179
|
}
|
|
745
1180
|
|
|
746
1181
|
// def / async def / class
|
|
747
|
-
const
|
|
748
|
-
const
|
|
749
|
-
const
|
|
750
|
-
const sigMatch = defMatch || classMatch;
|
|
1182
|
+
const defName = this._readPythonDefName(raw);
|
|
1183
|
+
const className = defName ? null : this._readPythonClassName(raw);
|
|
1184
|
+
const name = defName || className;
|
|
751
1185
|
|
|
752
|
-
if (
|
|
753
|
-
const name = sigMatch[3];
|
|
1186
|
+
if (name) {
|
|
754
1187
|
const isPublic = !name.startsWith('_');
|
|
755
1188
|
|
|
1189
|
+
// Helper: continuation lines for a multi-line signature like
|
|
1190
|
+
// def foo(
|
|
1191
|
+
// x: int,
|
|
1192
|
+
// y: int,
|
|
1193
|
+
// ) -> int:
|
|
1194
|
+
// The original advanced past the line that closes with `):` or
|
|
1195
|
+
// a line starting with `)` containing `:`. Preserve that logic.
|
|
1196
|
+
const advancePastMultilineSig = () => {
|
|
1197
|
+
// Only def's have parameter parens; class doesn't.
|
|
1198
|
+
if (!defName) return;
|
|
1199
|
+
if (raw.includes('):')) return;
|
|
1200
|
+
if (raw.includes(')')) return;
|
|
1201
|
+
// walk forward
|
|
1202
|
+
while (i < lines.length) {
|
|
1203
|
+
const pline = lines[i].trim();
|
|
1204
|
+
i += 1;
|
|
1205
|
+
if (pline.includes('):') ||
|
|
1206
|
+
(pline.startsWith(')') && pline.includes(':'))) break;
|
|
1207
|
+
}
|
|
1208
|
+
};
|
|
1209
|
+
|
|
756
1210
|
if (publicOnly && !isPublic) {
|
|
757
1211
|
pendingComments = [];
|
|
758
|
-
i
|
|
759
|
-
|
|
760
|
-
while (i < lines.length) {
|
|
761
|
-
const pline = lines[i].trim();
|
|
762
|
-
i++;
|
|
763
|
-
if (pline.includes('):') || (pline.startsWith(')') && pline.includes(':'))) break;
|
|
764
|
-
}
|
|
765
|
-
}
|
|
1212
|
+
i += 1;
|
|
1213
|
+
advancePastMultilineSig();
|
|
766
1214
|
i = this._skipPythonDocstring(lines, i);
|
|
767
1215
|
continue;
|
|
768
1216
|
}
|
|
@@ -772,15 +1220,8 @@ XML format also supported:
|
|
|
772
1220
|
}
|
|
773
1221
|
entries.push({ line: lineNum, text: raw, kind: 'signature' });
|
|
774
1222
|
pendingComments = [];
|
|
775
|
-
i
|
|
776
|
-
|
|
777
|
-
if (defMatch && !raw.includes('):') && !raw.includes(')')) {
|
|
778
|
-
while (i < lines.length) {
|
|
779
|
-
const pline = lines[i].trim();
|
|
780
|
-
i++;
|
|
781
|
-
if (pline.includes('):') || (pline.startsWith(')') && pline.includes(':'))) break;
|
|
782
|
-
}
|
|
783
|
-
}
|
|
1223
|
+
i += 1;
|
|
1224
|
+
advancePastMultilineSig();
|
|
784
1225
|
|
|
785
1226
|
if (withComments) {
|
|
786
1227
|
const dsLines = this._collectPythonDocstring(lines, i);
|
|
@@ -792,26 +1233,34 @@ XML format also supported:
|
|
|
792
1233
|
continue;
|
|
793
1234
|
}
|
|
794
1235
|
|
|
795
|
-
//
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
1236
|
+
// Top-level assignments (data lines):
|
|
1237
|
+
// ident = expr (only when starting at column 0; indented
|
|
1238
|
+
// lines are method-internal and ignored)
|
|
1239
|
+
if (raw.length > 0 && !isWhitespace(raw[0]) && raw[0] !== '\n') {
|
|
1240
|
+
const id = readIdent(raw, 0);
|
|
1241
|
+
if (id) {
|
|
1242
|
+
let j = skipWhitespace(raw, id.nextIdx);
|
|
1243
|
+
if (raw[j] === '=' && raw[j + 1] !== '=') {
|
|
1244
|
+
// looks like `ident = …`
|
|
1245
|
+
// require there to BE an RHS — `name =` alone is invalid
|
|
1246
|
+
const afterEq = skipWhitespace(raw, j + 1);
|
|
1247
|
+
if (afterEq < raw.length) {
|
|
1248
|
+
const isPublicVar = !id.ident.startsWith('_');
|
|
1249
|
+
if (!publicOnly || isPublicVar) {
|
|
1250
|
+
if (withComments && pendingComments.length > 0) {
|
|
1251
|
+
for (const c of pendingComments) entries.push(c);
|
|
1252
|
+
}
|
|
1253
|
+
entries.push({ line: lineNum, text: raw, kind: 'data' });
|
|
1254
|
+
}
|
|
1255
|
+
pendingComments = [];
|
|
1256
|
+
i += 1; continue;
|
|
804
1257
|
}
|
|
805
|
-
entries.push({ line: lineNum, text: raw, kind: 'data' });
|
|
806
1258
|
}
|
|
807
1259
|
}
|
|
808
|
-
pendingComments = [];
|
|
809
|
-
i++;
|
|
810
|
-
continue;
|
|
811
1260
|
}
|
|
812
1261
|
|
|
813
1262
|
pendingComments = [];
|
|
814
|
-
i
|
|
1263
|
+
i += 1;
|
|
815
1264
|
}
|
|
816
1265
|
|
|
817
1266
|
return entries;
|
|
@@ -819,18 +1268,16 @@ XML format also supported:
|
|
|
819
1268
|
|
|
820
1269
|
_collectPythonDocstring(lines, startIdx) {
|
|
821
1270
|
if (startIdx >= lines.length) return [];
|
|
822
|
-
const first = lines[startIdx]
|
|
823
|
-
|
|
824
|
-
if (
|
|
825
|
-
|
|
1271
|
+
const first = lines[startIdx];
|
|
1272
|
+
const quote = this._pythonTripleQuoteAtStart(first);
|
|
1273
|
+
if (!quote) return [];
|
|
1274
|
+
// single-line case: triple-quote opens AND closes on the same line
|
|
1275
|
+
if (this._pythonTripleQuoteClosedOnLine(first, quote)) {
|
|
1276
|
+
return [{ line: startIdx + 1, text: first, kind: 'comment' }];
|
|
826
1277
|
}
|
|
827
|
-
|
|
828
|
-
const
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
const quote = tripleMatch[1];
|
|
832
|
-
const result = [{ line: startIdx + 1, text: lines[startIdx], kind: 'comment' }];
|
|
833
|
-
for (let j = startIdx + 1; j < lines.length; j++) {
|
|
1278
|
+
// multi-line: collect until the closing triple-quote
|
|
1279
|
+
const result = [{ line: startIdx + 1, text: first, kind: 'comment' }];
|
|
1280
|
+
for (let j = startIdx + 1; j < lines.length; j += 1) {
|
|
834
1281
|
result.push({ line: j + 1, text: lines[j], kind: 'comment' });
|
|
835
1282
|
if (lines[j].includes(quote)) break;
|
|
836
1283
|
}
|
|
@@ -839,18 +1286,235 @@ XML format also supported:
|
|
|
839
1286
|
|
|
840
1287
|
_skipPythonDocstring(lines, startIdx) {
|
|
841
1288
|
if (startIdx >= lines.length) return startIdx;
|
|
842
|
-
const first = lines[startIdx]
|
|
1289
|
+
const first = lines[startIdx];
|
|
1290
|
+
const quote = this._pythonTripleQuoteAtStart(first);
|
|
1291
|
+
if (!quote) return startIdx;
|
|
1292
|
+
if (this._pythonTripleQuoteClosedOnLine(first, quote)) return startIdx + 1;
|
|
1293
|
+
for (let j = startIdx + 1; j < lines.length; j += 1) {
|
|
1294
|
+
if (lines[j].includes(quote)) return j + 1;
|
|
1295
|
+
}
|
|
1296
|
+
return lines.length;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
// ── C / C++ parser ────────────────────────────────────────────────────────
|
|
1300
|
+
//
|
|
1301
|
+
// Regex-based, same approach as the JS path: walk lines, match a set
|
|
1302
|
+
// of declaration patterns. Mirrors what _parseJS does for JS — gets
|
|
1303
|
+
// the agent a high-level skeleton of any C/CPP file (functions,
|
|
1304
|
+
// classes/structs, includes, top-level macros) without bringing in
|
|
1305
|
+
// a full C parser. The proper tree-sitter migration (see #5 plan)
|
|
1306
|
+
// replaces this for full accuracy on edge cases like multi-line
|
|
1307
|
+
// function signatures, templated declarations, and trailing return
|
|
1308
|
+
// types — those work in 90 % of real code already because most
|
|
1309
|
+
// declarations fit on one line.
|
|
1310
|
+
//
|
|
1311
|
+
// Patterns covered:
|
|
1312
|
+
// - #include <...> / #include "..." → 'import' kind
|
|
1313
|
+
// - #define MACRO ... → 'signature' kind
|
|
1314
|
+
// - class Foo { → 'signature'
|
|
1315
|
+
// - struct Foo { → 'signature'
|
|
1316
|
+
// - enum class Foo { → 'signature'
|
|
1317
|
+
// - namespace foo { → 'signature'
|
|
1318
|
+
// - typedef … name; → 'signature'
|
|
1319
|
+
// - using name = …; → 'signature'
|
|
1320
|
+
// - free-function: `<type> name(args) {` → 'signature'
|
|
1321
|
+
// - method: `<type> Class::name(args) {` → 'signature'
|
|
1322
|
+
// - constructor: `Class::Class(args) {` → 'signature'
|
|
1323
|
+
// - destructor: `Class::~Class()` → 'signature'
|
|
1324
|
+
//
|
|
1325
|
+
// Skipped (intentional):
|
|
1326
|
+
// - Function prototypes (declarations w/o body) — too noisy in
|
|
1327
|
+
// headers; the user usually wants the definitions
|
|
1328
|
+
// - Lambdas — covered by treating the enclosing function as the
|
|
1329
|
+
// signature
|
|
1330
|
+
_parseC(lines, { publicOnly, withComments, includeImports }) {
|
|
1331
|
+
const entries = [];
|
|
1332
|
+
let pendingComments = [];
|
|
1333
|
+
let inBlockComment = false;
|
|
1334
|
+
|
|
1335
|
+
// C/C++ tokens we accept at the head of a function/type declaration.
|
|
1336
|
+
// The classifier walks them one at a time using consumeKeyword —
|
|
1337
|
+
// no regex. After the keyword run we require at least one
|
|
1338
|
+
// additional token before the `(` so we don't misidentify a bare
|
|
1339
|
+
// function call as a definition.
|
|
1340
|
+
const C_TYPE_KEYWORDS = [
|
|
1341
|
+
'static', 'inline', 'extern', 'constexpr', 'virtual', 'explicit',
|
|
1342
|
+
'friend', 'const', 'mutable', 'register', 'volatile',
|
|
1343
|
+
'signed', 'unsigned', 'short', 'long',
|
|
1344
|
+
// Built-in primitive types — frequently followed by an ident.
|
|
1345
|
+
'void', 'bool', 'char', 'int', 'float', 'double',
|
|
1346
|
+
'auto', 'wchar_t', 'char16_t', 'char32_t',
|
|
1347
|
+
];
|
|
1348
|
+
|
|
1349
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
1350
|
+
const lineNum = i + 1;
|
|
1351
|
+
const raw = lines[i];
|
|
1352
|
+
const start = skipWhitespace(raw, 0);
|
|
843
1353
|
|
|
844
|
-
|
|
1354
|
+
// ── block + line comments ────────────────────────────────────
|
|
1355
|
+
if (inBlockComment) {
|
|
1356
|
+
if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
1357
|
+
if (raw.includes('*/')) inBlockComment = false;
|
|
1358
|
+
continue;
|
|
1359
|
+
}
|
|
1360
|
+
if (raw[start] === '/' && raw[start + 1] === '*') {
|
|
1361
|
+
if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
1362
|
+
// The block-comment scan checks anywhere on the line; templates
|
|
1363
|
+
// / preproc lines don't typically contain '*/' so this is safe.
|
|
1364
|
+
if (!raw.slice(start + 2).includes('*/')) inBlockComment = true;
|
|
1365
|
+
continue;
|
|
1366
|
+
}
|
|
1367
|
+
if (raw[start] === '/' && raw[start + 1] === '/') {
|
|
1368
|
+
if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
|
|
1369
|
+
continue;
|
|
1370
|
+
}
|
|
845
1371
|
|
|
846
|
-
|
|
847
|
-
|
|
1372
|
+
// ── #include ─────────────────────────────────────────────────
|
|
1373
|
+
if (includeImports && raw[start] === '#') {
|
|
1374
|
+
const afterHash = skipWhitespace(raw, start + 1);
|
|
1375
|
+
if (startsWithKeyword(raw, 'include', afterHash)) {
|
|
1376
|
+
entries.push({ line: lineNum, text: raw, kind: 'import' });
|
|
1377
|
+
pendingComments = [];
|
|
1378
|
+
continue;
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
848
1381
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
1382
|
+
let matched = false;
|
|
1383
|
+
|
|
1384
|
+
// ── #define MACRO … ──────────────────────────────────────────
|
|
1385
|
+
if (raw[start] === '#') {
|
|
1386
|
+
const afterHash = skipWhitespace(raw, start + 1);
|
|
1387
|
+
if (startsWithKeyword(raw, 'define', afterHash)) {
|
|
1388
|
+
const afterKw = skipWhitespace(raw, afterHash + 'define'.length);
|
|
1389
|
+
if (readIdent(raw, afterKw)) matched = true;
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
// ── namespace / class / struct / union / enum (incl. `enum class`) ──
|
|
1394
|
+
// Tip: also handle a leading `template <…>` by skipping over it.
|
|
1395
|
+
let probeIdx = start;
|
|
1396
|
+
if (startsWithKeyword(raw, 'template', probeIdx)) {
|
|
1397
|
+
// skip "template" + optional whitespace + `<…>` if present
|
|
1398
|
+
let j = skipWhitespace(raw, probeIdx + 'template'.length);
|
|
1399
|
+
if (raw[j] === '<') {
|
|
1400
|
+
let depth = 1;
|
|
1401
|
+
j += 1;
|
|
1402
|
+
while (j < raw.length && depth > 0) {
|
|
1403
|
+
if (raw[j] === '<') depth += 1;
|
|
1404
|
+
else if (raw[j] === '>') depth -= 1;
|
|
1405
|
+
j += 1;
|
|
1406
|
+
}
|
|
1407
|
+
probeIdx = skipWhitespace(raw, j);
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
const typeHit = consumeAnyKeyword(raw, ['class', 'struct', 'union', 'enum', 'namespace'], probeIdx);
|
|
1411
|
+
if (typeHit) {
|
|
1412
|
+
let after = skipWhitespace(raw, typeHit.nextIdx);
|
|
1413
|
+
// `enum class Color` — accept either form
|
|
1414
|
+
if (typeHit.keyword === 'enum' && startsWithKeyword(raw, 'class', after)) {
|
|
1415
|
+
after = skipWhitespace(raw, after + 'class'.length);
|
|
1416
|
+
}
|
|
1417
|
+
if (readIdent(raw, after)) matched = true;
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
// ── typedef … name; ──────────────────────────────────────────
|
|
1421
|
+
if (!matched && startsWithKeyword(raw, 'typedef', start)) {
|
|
1422
|
+
// very permissive — just require a `;` somewhere after typedef
|
|
1423
|
+
if (raw.indexOf(';', start) !== -1) matched = true;
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
// ── using name = … ───────────────────────────────────────────
|
|
1427
|
+
if (!matched && startsWithKeyword(raw, 'using', start)) {
|
|
1428
|
+
const afterKw = skipWhitespace(raw, start + 'using'.length);
|
|
1429
|
+
const id = readIdent(raw, afterKw);
|
|
1430
|
+
if (id) {
|
|
1431
|
+
const afterId = skipWhitespace(raw, id.nextIdx);
|
|
1432
|
+
if (raw[afterId] === '=' && raw[afterId + 1] !== '=') matched = true;
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
// ── Function definition: <type-tokens> name(…) ───────────────
|
|
1437
|
+
// Walk past at least one type-ish token before the function name.
|
|
1438
|
+
// The "type-ish" tokens are either keywords from C_TYPE_KEYWORDS
|
|
1439
|
+
// or any plain identifier (could be a user-defined type) — we
|
|
1440
|
+
// require AT LEAST TWO tokens before the `(` so a bare call
|
|
1441
|
+
// `foo(x)` isn't misidentified.
|
|
1442
|
+
if (!matched) {
|
|
1443
|
+
let j = probeIdx;
|
|
1444
|
+
let tokensBeforeParen = 0;
|
|
1445
|
+
let lastWasIdent = false;
|
|
1446
|
+
while (j < raw.length) {
|
|
1447
|
+
// pointer / reference / qualifiers in between tokens
|
|
1448
|
+
if (raw[j] === '*' || raw[j] === '&') { j += 1; continue; }
|
|
1449
|
+
j = skipWhitespace(raw, j);
|
|
1450
|
+
if (j >= raw.length) break;
|
|
1451
|
+
if (raw[j] === '(') break;
|
|
1452
|
+
// accept a templated type like `vector<int>` — skip the `<…>`
|
|
1453
|
+
if (raw[j] === '<' && lastWasIdent) {
|
|
1454
|
+
let depth = 1; j += 1;
|
|
1455
|
+
while (j < raw.length && depth > 0) {
|
|
1456
|
+
if (raw[j] === '<') depth += 1;
|
|
1457
|
+
else if (raw[j] === '>') depth -= 1;
|
|
1458
|
+
j += 1;
|
|
1459
|
+
}
|
|
1460
|
+
continue;
|
|
1461
|
+
}
|
|
1462
|
+
// qualifier keyword?
|
|
1463
|
+
const kw = consumeAnyKeyword(raw, C_TYPE_KEYWORDS, j);
|
|
1464
|
+
if (kw) { j = kw.nextIdx; tokensBeforeParen += 1; lastWasIdent = false; continue; }
|
|
1465
|
+
// plain identifier (possibly `Foo::bar`)
|
|
1466
|
+
const id = readIdent(raw, j);
|
|
1467
|
+
if (!id) break;
|
|
1468
|
+
j = id.nextIdx;
|
|
1469
|
+
// handle `Foo::bar` and similar
|
|
1470
|
+
while (raw[j] === ':' && raw[j + 1] === ':') {
|
|
1471
|
+
j += 2;
|
|
1472
|
+
const more = readIdent(raw, j);
|
|
1473
|
+
if (!more) break;
|
|
1474
|
+
j = more.nextIdx;
|
|
1475
|
+
}
|
|
1476
|
+
tokensBeforeParen += 1;
|
|
1477
|
+
lastWasIdent = true;
|
|
1478
|
+
}
|
|
1479
|
+
if (raw[j] === '(' && tokensBeforeParen >= 2) {
|
|
1480
|
+
// Reject "looks like a call" — `name(args);` ending tail.
|
|
1481
|
+
// For a definition we expect either `) {` or just `,` (multi-line)
|
|
1482
|
+
// or `)` ending the line. A call ends with `);`.
|
|
1483
|
+
const endsWithCallSemi = trimmedEndsWith(raw, ');');
|
|
1484
|
+
if (!endsWithCallSemi) matched = true;
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
// ── Constructor / destructor: `Foo::Foo(...)` / `Foo::~Foo(...)` ──
|
|
1489
|
+
if (!matched) {
|
|
1490
|
+
const id1 = readIdent(raw, start);
|
|
1491
|
+
if (id1 && raw[id1.nextIdx] === ':' && raw[id1.nextIdx + 1] === ':') {
|
|
1492
|
+
let k = id1.nextIdx + 2;
|
|
1493
|
+
if (raw[k] === '~') k += 1;
|
|
1494
|
+
const id2 = readIdent(raw, k);
|
|
1495
|
+
if (id2) {
|
|
1496
|
+
const afterName = skipWhitespace(raw, id2.nextIdx);
|
|
1497
|
+
if (raw[afterName] === '(') matched = true;
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
// publicOnly is a no-op for C — left intact for API parity with
|
|
1503
|
+
// _parseJS. Could later mean "header-public only".
|
|
1504
|
+
void publicOnly;
|
|
1505
|
+
|
|
1506
|
+
if (matched) {
|
|
1507
|
+
if (withComments && pendingComments.length > 0) {
|
|
1508
|
+
for (const c of pendingComments) entries.push(c);
|
|
1509
|
+
}
|
|
1510
|
+
entries.push({ line: lineNum, text: raw, kind: 'signature' });
|
|
1511
|
+
pendingComments = [];
|
|
1512
|
+
} else {
|
|
1513
|
+
pendingComments = [];
|
|
1514
|
+
}
|
|
852
1515
|
}
|
|
853
|
-
|
|
1516
|
+
|
|
1517
|
+
return entries;
|
|
854
1518
|
}
|
|
855
1519
|
}
|
|
856
1520
|
|