@herbertgao/pi-extensions 2026.10.0 → 2026.10.2
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/README.md +16 -12
- package/THIRD_PARTY_NOTICES.md +3 -3
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/index.js +4 -0
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +43 -3
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +142 -59
- package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/README.md +52 -242
- package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +4 -4
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +70 -16
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +8 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-mode-tracker.js +46 -23
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +39 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +20 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/package.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +47 -17
- package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -7
- package/node_modules/@dietrichgebert/ponytail/skills/plugin.json +5 -0
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -27
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +21 -18
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +12 -13
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -52
- package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
- package/node_modules/@herbertgao/pi-agency/README.md +40 -0
- package/node_modules/@herbertgao/pi-agency/package.json +53 -0
- package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +4 -4
- package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
- package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
- package/node_modules/@tifan/pi-recap/package.json +1 -1
- package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
- package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
- package/node_modules/pi-antigravity/README.md +23 -2
- package/node_modules/pi-antigravity/package.json +5 -3
- package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
- package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
- package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
- package/node_modules/pi-antigravity/src/image/image.ts +86 -47
- package/node_modules/pi-antigravity/src/image/native.ts +69 -0
- package/node_modules/pi-antigravity/src/index.ts +52 -137
- package/node_modules/pi-antigravity/src/search/search.ts +130 -31
- package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
- package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
- package/node_modules/pi-antigravity/src/types/types.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
- package/node_modules/pi-lens/CHANGELOG.md +1064 -0
- package/node_modules/pi-lens/README.md +115 -25
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
- package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
- package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
- package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
- package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
- package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
- package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
- package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
- package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
- package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
- package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
- package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
- package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
- package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
- package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
- package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
- package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
- package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
- package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
- package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
- package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
- package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
- package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
- package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
- package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
- package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
- package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
- package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
- package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
- package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
- package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
- package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
- package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
- package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
- package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
- package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
- package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
- package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
- package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
- package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
- package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
- package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
- package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
- package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
- package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
- package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
- package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
- package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
- package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
- package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
- package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
- package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
- package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
- package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
- package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
- package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
- package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
- package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
- package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
- package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
- package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
- package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
- package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
- package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
- package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
- package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
- package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
- package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
- package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
- package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
- package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
- package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
- package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
- package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
- package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
- package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
- package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
- package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
- package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
- package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
- package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
- package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
- package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
- package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
- package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
- package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
- package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
- package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
- package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
- package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
- package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
- package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
- package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
- package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
- package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
- package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
- package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
- package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
- package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
- package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
- package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
- package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
- package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
- package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
- package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
- package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
- package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
- package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
- package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
- package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
- package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
- package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
- package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
- package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
- package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
- package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
- package/node_modules/pi-lens/dist/index.js +16456 -8335
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
- package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
- package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
- package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
- package/node_modules/pi-lens/dist/probes/installer.js +135 -0
- package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
- package/node_modules/pi-lens/docs/agent-guide.md +13 -4
- package/node_modules/pi-lens/docs/agent-tools.md +42 -0
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
- package/node_modules/pi-lens/docs/configuration.md +20 -1
- package/node_modules/pi-lens/docs/environment-variables.md +52 -2
- package/node_modules/pi-lens/docs/features.md +8 -4
- package/node_modules/pi-lens/docs/globalconfig.md +1 -0
- package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
- package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
- package/node_modules/pi-lens/docs/mcp.md +21 -5
- package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
- package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
- package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
- package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
- package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
- package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
- package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
- package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
- package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
- package/node_modules/pi-lens/docs/settings.md +1 -0
- package/node_modules/pi-lens/docs/usage.md +5 -1
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
- package/node_modules/pi-lens/package.json +18 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
- package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
- package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
- package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/node_modules/pi-typesafe/README.md +1 -1
- package/node_modules/pi-typesafe/dist/backends.d.ts +15 -5
- package/node_modules/pi-typesafe/dist/backends.js +18 -0
- package/node_modules/pi-typesafe/dist/client.d.ts +4 -3
- package/node_modules/pi-typesafe/dist/client.js +22 -7
- package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
- package/node_modules/pi-typesafe/dist/index.js +1 -1
- package/node_modules/pi-typesafe/dist/usage.d.ts +14 -4
- package/node_modules/pi-typesafe/dist/usage.js +147 -42
- package/node_modules/pi-typesafe/package.json +1 -1
- package/node_modules/pi-web-access/CHANGELOG.md +48 -0
- package/node_modules/pi-web-access/README.md +57 -11
- package/node_modules/pi-web-access/brave-rate-limit.ts +8 -2
- package/node_modules/pi-web-access/curator-page.ts +5 -1
- package/node_modules/pi-web-access/curator-server.ts +2 -0
- package/node_modules/pi-web-access/declared-web-links.ts +2 -2
- package/node_modules/pi-web-access/degoog.ts +323 -0
- package/node_modules/pi-web-access/dist/index.js +3483 -2745
- package/node_modules/pi-web-access/dist/mcp-cli.js +27443 -0
- package/node_modules/pi-web-access/exa.ts +5 -1
- package/node_modules/pi-web-access/extract.ts +41 -3
- package/node_modules/pi-web-access/firecrawl.ts +35 -4
- package/node_modules/pi-web-access/gemini-search.ts +34 -11
- package/node_modules/pi-web-access/gemini-web.ts +14 -9
- package/node_modules/pi-web-access/index.ts +153 -1202
- package/node_modules/pi-web-access/keenable.ts +221 -0
- package/node_modules/pi-web-access/mcp-cli.ts +40 -0
- package/node_modules/pi-web-access/mcp-server.ts +81 -0
- package/node_modules/pi-web-access/mcp-tool-definitions.ts +117 -0
- package/node_modules/pi-web-access/openai-search.ts +34 -1
- package/node_modules/pi-web-access/package.json +23 -5
- package/node_modules/pi-web-access/perplexity.ts +64 -56
- package/node_modules/pi-web-access/tool-arguments.ts +20 -0
- package/node_modules/pi-web-access/video-extract.ts +1 -1
- package/node_modules/pi-web-access/web-tool-contract.ts +86 -0
- package/node_modules/pi-web-access/web-tool-core.ts +1502 -0
- package/node_modules/pi-web-access/youtube-extract.ts +2 -5
- package/package.json +17 -12
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -329
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -346
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +0 -21
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +0 -62
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +0 -115
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
- package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
- package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
- package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
- package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
- package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
- package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
- package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
- package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
- package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
- package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
- package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
- package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
- package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
- package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
- package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
- package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
- package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
- package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
- package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
- package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
- package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
- package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
- package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
- package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
- package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
- package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
- package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
- package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
- package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
- package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
- package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
- package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
- package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
- package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
- package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
- package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
- package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
- package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
- package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
- package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
- package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
- package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
- package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
- package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
- package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
- package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
- package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
- package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
- package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
- package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
- package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
- package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
- package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
- package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
- package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
- package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
- package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
- package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
- package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
- package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
- package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
- package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
- package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
- package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
- package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
- package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
- package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
- package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
- package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
- package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
- package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
- package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
- package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
- package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
- package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
- package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
- package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
- package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
- package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
- package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
- package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
- package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
- package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
- package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
- package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
- package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
- package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
- package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
- package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
- package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
- package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
- package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
- package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
- package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
- package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
- package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
- package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
- package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
- package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
- package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
- package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
- package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
- package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
- package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
- package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
- package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
- package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
- package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
- package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
- package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
- package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
- package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
- package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
- package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
- package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
- package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
- package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
- package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
- package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
- package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
- package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
- package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
- package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
- package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
- package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
- package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
- package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
- package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
- package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
- package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
- package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
- package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
- package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
- package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
- package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
- package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
- package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
- package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
- package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
- package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
- package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
- package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
- package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
- package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
- package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
- package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
- package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
- package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
- package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
- package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
- package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
- package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
- package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
- package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
- package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
- package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
- package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
- package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
- package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
- package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
- package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
- package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
- package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
- package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
- package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
- package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
- package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
- package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
- package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
- package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
- package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
- package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
- package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
- package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
- package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
- package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
- package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
- package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
- package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
- package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
- package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
- package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
- package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
- package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
- package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
- package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
- package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
- package/node_modules/pi-lens/dist/i18n.js +0 -69
- package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
- package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
- package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
- package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
- package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
- package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
- package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
- package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
- package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
- package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
- package/node_modules/pi-lens/dist/tools/shared.js +0 -29
- package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
|
@@ -1,1265 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Symbol extraction via tree-sitter queries
|
|
3
|
-
* Extracts definitions and references from source files
|
|
4
|
-
*/
|
|
5
|
-
import { logTreeSitterDiagnostic } from "./tree-sitter-logger.js";
|
|
6
|
-
import { EXTENSION_TO_GRAMMAR, KIND_TO_GRAMMAR } from "./language-registry.js";
|
|
7
|
-
import * as path from "node:path";
|
|
8
|
-
import { loadWebTreeSitter } from "./deps/web-tree-sitter.js";
|
|
9
|
-
// Tree-sitter query patterns for symbol extraction
|
|
10
|
-
const SYMBOL_QUERIES = {
|
|
11
|
-
typescript: {
|
|
12
|
-
defs: `
|
|
13
|
-
;; Function declarations: function foo(params) { }
|
|
14
|
-
(function_declaration
|
|
15
|
-
name: (identifier) @funcName
|
|
16
|
-
parameters: (formal_parameters) @funcParams
|
|
17
|
-
body: (statement_block) @funcBody) @funcDef
|
|
18
|
-
|
|
19
|
-
;; Arrow functions: const foo = (params) => { }
|
|
20
|
-
(variable_declarator
|
|
21
|
-
name: (identifier) @arrowName
|
|
22
|
-
value: (arrow_function
|
|
23
|
-
parameters: (formal_parameters) @arrowParams
|
|
24
|
-
body: (_) @arrowBody)) @arrowDef
|
|
25
|
-
|
|
26
|
-
;; Class declarations: class Foo { }
|
|
27
|
-
(class_declaration
|
|
28
|
-
name: (type_identifier) @className) @classDef
|
|
29
|
-
|
|
30
|
-
;; Method definitions: class Foo { bar() { } }
|
|
31
|
-
(method_definition
|
|
32
|
-
name: (property_identifier) @methodName
|
|
33
|
-
parameters: (formal_parameters) @methodParams) @methodDef
|
|
34
|
-
|
|
35
|
-
;; Interface declarations: interface Foo { }
|
|
36
|
-
(interface_declaration
|
|
37
|
-
name: (type_identifier) @interfaceName) @interfaceDef
|
|
38
|
-
|
|
39
|
-
;; Type alias: type Foo = ...
|
|
40
|
-
(type_alias_declaration
|
|
41
|
-
name: (type_identifier) @typeName) @typeDef
|
|
42
|
-
`,
|
|
43
|
-
refs: `
|
|
44
|
-
;; Function/method calls: foo() or obj.bar()
|
|
45
|
-
(call_expression
|
|
46
|
-
function: (identifier) @callIdent) @callRef
|
|
47
|
-
|
|
48
|
-
(call_expression
|
|
49
|
-
function: (member_expression
|
|
50
|
-
object: (_)
|
|
51
|
-
property: (property_identifier) @callMethod)) @callMethodRef
|
|
52
|
-
|
|
53
|
-
;; New expressions: new Foo()
|
|
54
|
-
(new_expression
|
|
55
|
-
constructor: (identifier) @newIdent) @newRef
|
|
56
|
-
|
|
57
|
-
;; Type references: type T = Foo
|
|
58
|
-
(type_identifier) @typeIdent
|
|
59
|
-
`,
|
|
60
|
-
},
|
|
61
|
-
python: {
|
|
62
|
-
defs: `
|
|
63
|
-
;; Function definitions: def foo(params):
|
|
64
|
-
(function_definition
|
|
65
|
-
name: (identifier) @funcName
|
|
66
|
-
parameters: (parameters) @funcParams) @funcDef
|
|
67
|
-
|
|
68
|
-
;; Class definitions: class Foo:
|
|
69
|
-
(class_definition
|
|
70
|
-
name: (identifier) @className) @classDef
|
|
71
|
-
|
|
72
|
-
;; Method definitions (within class)
|
|
73
|
-
(class_definition
|
|
74
|
-
body: (block
|
|
75
|
-
(function_definition
|
|
76
|
-
name: (identifier) @methodName
|
|
77
|
-
parameters: (parameters) @methodParams) @methodDef))
|
|
78
|
-
`,
|
|
79
|
-
refs: `
|
|
80
|
-
;; Function calls: foo() or obj.bar()
|
|
81
|
-
(call
|
|
82
|
-
function: (identifier) @callIdent) @callRef
|
|
83
|
-
|
|
84
|
-
(call
|
|
85
|
-
function: (attribute
|
|
86
|
-
object: (_)
|
|
87
|
-
attribute: (identifier) @callMethod)) @callMethodRef
|
|
88
|
-
`,
|
|
89
|
-
},
|
|
90
|
-
rust: {
|
|
91
|
-
defs: `
|
|
92
|
-
;; Function definitions: fn foo(params) { }
|
|
93
|
-
(function_item
|
|
94
|
-
name: (identifier) @funcName
|
|
95
|
-
parameters: (parameters) @funcParams) @funcDef
|
|
96
|
-
|
|
97
|
-
;; Struct definitions: struct Foo { }
|
|
98
|
-
(struct_item
|
|
99
|
-
name: (type_identifier) @structName) @structDef
|
|
100
|
-
|
|
101
|
-
;; Impl blocks: impl Foo { fn bar() { } }
|
|
102
|
-
(impl_item
|
|
103
|
-
type: (type_identifier) @implType
|
|
104
|
-
body: (declaration_list
|
|
105
|
-
(function_item
|
|
106
|
-
name: (identifier) @implMethodName) @implMethodDef))
|
|
107
|
-
`,
|
|
108
|
-
refs: `
|
|
109
|
-
;; Function calls: foo() or obj.bar()
|
|
110
|
-
(call_expression
|
|
111
|
-
function: (identifier) @callIdent) @callRef
|
|
112
|
-
|
|
113
|
-
(call_expression
|
|
114
|
-
function: (field_expression
|
|
115
|
-
value: (_)
|
|
116
|
-
field: (field_identifier) @callField)) @callFieldRef
|
|
117
|
-
`,
|
|
118
|
-
},
|
|
119
|
-
go: {
|
|
120
|
-
defs: `
|
|
121
|
-
(function_declaration
|
|
122
|
-
name: (identifier) @funcName
|
|
123
|
-
parameters: (parameter_list) @funcParams) @funcDef
|
|
124
|
-
|
|
125
|
-
(method_declaration
|
|
126
|
-
name: (field_identifier) @methodName
|
|
127
|
-
parameters: (parameter_list) @methodParams) @methodDef
|
|
128
|
-
|
|
129
|
-
(type_spec
|
|
130
|
-
name: (type_identifier) @typeName) @typeDef
|
|
131
|
-
`,
|
|
132
|
-
refs: `
|
|
133
|
-
(call_expression
|
|
134
|
-
function: (identifier) @callIdent) @callRef
|
|
135
|
-
|
|
136
|
-
(call_expression
|
|
137
|
-
function: (selector_expression
|
|
138
|
-
field: (field_identifier) @callMethod)) @callMethodRef
|
|
139
|
-
`,
|
|
140
|
-
},
|
|
141
|
-
ruby: {
|
|
142
|
-
defs: `
|
|
143
|
-
(method
|
|
144
|
-
name: (identifier) @methodName) @methodDef
|
|
145
|
-
|
|
146
|
-
(singleton_method
|
|
147
|
-
name: (identifier) @methodName) @methodDef
|
|
148
|
-
|
|
149
|
-
(class
|
|
150
|
-
name: (constant) @className) @classDef
|
|
151
|
-
|
|
152
|
-
(module
|
|
153
|
-
name: (constant) @moduleName) @moduleDef
|
|
154
|
-
`,
|
|
155
|
-
refs: `
|
|
156
|
-
(call
|
|
157
|
-
method: (identifier) @callIdent) @callRef
|
|
158
|
-
|
|
159
|
-
(call
|
|
160
|
-
method: (constant) @typeIdent) @typeRef
|
|
161
|
-
`,
|
|
162
|
-
},
|
|
163
|
-
c: {
|
|
164
|
-
defs: `
|
|
165
|
-
(function_definition
|
|
166
|
-
declarator: (function_declarator
|
|
167
|
-
declarator: (identifier) @funcName
|
|
168
|
-
parameters: (parameter_list) @funcParams)) @funcDef
|
|
169
|
-
|
|
170
|
-
(type_definition
|
|
171
|
-
declarator: (type_identifier) @typeName) @typeDef
|
|
172
|
-
|
|
173
|
-
(struct_specifier
|
|
174
|
-
name: (type_identifier) @typeName) @typeDef
|
|
175
|
-
|
|
176
|
-
(enum_specifier
|
|
177
|
-
name: (type_identifier) @typeName) @typeDef
|
|
178
|
-
`,
|
|
179
|
-
refs: `
|
|
180
|
-
(call_expression
|
|
181
|
-
function: (identifier) @callIdent) @callRef
|
|
182
|
-
|
|
183
|
-
(call_expression
|
|
184
|
-
function: (field_expression
|
|
185
|
-
field: (field_identifier) @callField)) @callFieldRef
|
|
186
|
-
|
|
187
|
-
(type_identifier) @typeIdent
|
|
188
|
-
`,
|
|
189
|
-
},
|
|
190
|
-
cpp: {
|
|
191
|
-
defs: `
|
|
192
|
-
(function_definition
|
|
193
|
-
declarator: (function_declarator
|
|
194
|
-
declarator: (identifier) @funcName
|
|
195
|
-
parameters: (parameter_list) @funcParams)) @funcDef
|
|
196
|
-
|
|
197
|
-
(class_specifier
|
|
198
|
-
name: (type_identifier) @className) @classDef
|
|
199
|
-
|
|
200
|
-
(struct_specifier
|
|
201
|
-
name: (type_identifier) @className) @classDef
|
|
202
|
-
|
|
203
|
-
(type_definition
|
|
204
|
-
declarator: (type_identifier) @typeName) @typeDef
|
|
205
|
-
`,
|
|
206
|
-
refs: `
|
|
207
|
-
(call_expression
|
|
208
|
-
function: (identifier) @callIdent) @callRef
|
|
209
|
-
|
|
210
|
-
(call_expression
|
|
211
|
-
function: (field_expression
|
|
212
|
-
field: (field_identifier) @callField)) @callFieldRef
|
|
213
|
-
|
|
214
|
-
(type_identifier) @typeIdent
|
|
215
|
-
`,
|
|
216
|
-
},
|
|
217
|
-
java: {
|
|
218
|
-
defs: `
|
|
219
|
-
(method_declaration
|
|
220
|
-
name: (identifier) @methodName
|
|
221
|
-
parameters: (formal_parameters) @methodParams) @methodDef
|
|
222
|
-
|
|
223
|
-
(class_declaration
|
|
224
|
-
name: (identifier) @className) @classDef
|
|
225
|
-
|
|
226
|
-
(interface_declaration
|
|
227
|
-
name: (identifier) @interfaceName) @interfaceDef
|
|
228
|
-
|
|
229
|
-
(constructor_declaration
|
|
230
|
-
name: (identifier) @funcName
|
|
231
|
-
parameters: (formal_parameters) @funcParams) @funcDef
|
|
232
|
-
|
|
233
|
-
(enum_declaration
|
|
234
|
-
name: (identifier) @className) @classDef
|
|
235
|
-
`,
|
|
236
|
-
refs: `
|
|
237
|
-
(method_invocation
|
|
238
|
-
name: (identifier) @callMethod) @callRef
|
|
239
|
-
|
|
240
|
-
(object_creation_expression
|
|
241
|
-
type: (type_identifier) @newIdent) @newRef
|
|
242
|
-
|
|
243
|
-
(type_identifier) @typeIdent
|
|
244
|
-
`,
|
|
245
|
-
},
|
|
246
|
-
kotlin: {
|
|
247
|
-
// #251: class_declaration's name is type_identifier; the old extra
|
|
248
|
-
// `(class_declaration (simple_identifier) @className)` was a bad pattern that
|
|
249
|
-
// failed query compilation (taking the whole language down). Call refs use
|
|
250
|
-
// no field name in the shipped grammar (the old `calleeExpression:` field
|
|
251
|
-
// also failed to compile).
|
|
252
|
-
defs: `
|
|
253
|
-
(function_declaration
|
|
254
|
-
(simple_identifier) @funcName) @funcDef
|
|
255
|
-
|
|
256
|
-
(class_declaration
|
|
257
|
-
(type_identifier) @className) @classDef
|
|
258
|
-
|
|
259
|
-
(object_declaration
|
|
260
|
-
(type_identifier) @className) @classDef
|
|
261
|
-
`,
|
|
262
|
-
refs: `
|
|
263
|
-
(call_expression
|
|
264
|
-
(simple_identifier) @callIdent) @callRef
|
|
265
|
-
|
|
266
|
-
(user_type (type_identifier) @typeIdent)
|
|
267
|
-
`,
|
|
268
|
-
},
|
|
269
|
-
dart: {
|
|
270
|
-
// #251: function_signature/class_definition take their name/params as direct
|
|
271
|
-
// children in the shipped grammar — the old `name:`/`parameters:` fields did
|
|
272
|
-
// not exist and failed query compilation. method bodies' inner
|
|
273
|
-
// function_signature also matches @funcDef (methods surface as functions).
|
|
274
|
-
defs: `
|
|
275
|
-
(function_signature
|
|
276
|
-
(identifier) @funcName
|
|
277
|
-
(formal_parameter_list) @funcParams) @funcDef
|
|
278
|
-
|
|
279
|
-
(class_definition
|
|
280
|
-
(identifier) @className) @classDef
|
|
281
|
-
`,
|
|
282
|
-
refs: `
|
|
283
|
-
(type_identifier) @typeIdent
|
|
284
|
-
`,
|
|
285
|
-
},
|
|
286
|
-
elixir: {
|
|
287
|
-
defs: `
|
|
288
|
-
(call
|
|
289
|
-
target: (identifier) @_kw
|
|
290
|
-
(arguments
|
|
291
|
-
(call
|
|
292
|
-
target: (identifier) @funcName
|
|
293
|
-
(arguments) @funcParams) @funcDef)
|
|
294
|
-
(#match? @_kw "^def[pm]?$"))
|
|
295
|
-
|
|
296
|
-
(call
|
|
297
|
-
target: (identifier) @_kw
|
|
298
|
-
(arguments (alias) @moduleName) @moduleDef
|
|
299
|
-
(#match? @_kw "^defmodule$"))
|
|
300
|
-
`,
|
|
301
|
-
refs: `
|
|
302
|
-
(call
|
|
303
|
-
target: (identifier) @callIdent) @callRef
|
|
304
|
-
|
|
305
|
-
(alias) @typeIdent
|
|
306
|
-
`,
|
|
307
|
-
},
|
|
308
|
-
csharp: {
|
|
309
|
-
defs: `
|
|
310
|
-
(method_declaration
|
|
311
|
-
name: (identifier) @methodName
|
|
312
|
-
parameters: (parameter_list) @methodParams) @methodDef
|
|
313
|
-
|
|
314
|
-
(class_declaration
|
|
315
|
-
name: (identifier) @className) @classDef
|
|
316
|
-
|
|
317
|
-
(struct_declaration
|
|
318
|
-
name: (identifier) @className) @classDef
|
|
319
|
-
|
|
320
|
-
(interface_declaration
|
|
321
|
-
name: (identifier) @interfaceName) @interfaceDef
|
|
322
|
-
|
|
323
|
-
(constructor_declaration
|
|
324
|
-
name: (identifier) @funcName
|
|
325
|
-
parameters: (parameter_list) @funcParams) @funcDef
|
|
326
|
-
|
|
327
|
-
(enum_declaration
|
|
328
|
-
name: (identifier) @className) @classDef
|
|
329
|
-
`,
|
|
330
|
-
refs: `
|
|
331
|
-
(invocation_expression
|
|
332
|
-
function: (identifier) @callIdent) @callRef
|
|
333
|
-
|
|
334
|
-
(invocation_expression
|
|
335
|
-
function: (member_access_expression
|
|
336
|
-
name: (identifier) @callMethod)) @callMethodRef
|
|
337
|
-
|
|
338
|
-
(object_creation_expression
|
|
339
|
-
type: (identifier) @newIdent) @newRef
|
|
340
|
-
`,
|
|
341
|
-
},
|
|
342
|
-
php: {
|
|
343
|
-
defs: `
|
|
344
|
-
(function_definition
|
|
345
|
-
name: (name) @funcName
|
|
346
|
-
parameters: (formal_parameters) @funcParams) @funcDef
|
|
347
|
-
|
|
348
|
-
(method_declaration
|
|
349
|
-
name: (name) @methodName
|
|
350
|
-
parameters: (formal_parameters) @methodParams) @methodDef
|
|
351
|
-
|
|
352
|
-
(class_declaration
|
|
353
|
-
name: (name) @className) @classDef
|
|
354
|
-
|
|
355
|
-
(interface_declaration
|
|
356
|
-
name: (name) @interfaceName) @interfaceDef
|
|
357
|
-
|
|
358
|
-
(trait_declaration
|
|
359
|
-
name: (name) @className) @classDef
|
|
360
|
-
`,
|
|
361
|
-
refs: `
|
|
362
|
-
(function_call_expression
|
|
363
|
-
function: (name) @callIdent) @callRef
|
|
364
|
-
|
|
365
|
-
(member_call_expression
|
|
366
|
-
name: (name) @callMethod) @callMethodRef
|
|
367
|
-
|
|
368
|
-
(object_creation_expression
|
|
369
|
-
(name) @newIdent) @newRef
|
|
370
|
-
`,
|
|
371
|
-
},
|
|
372
|
-
swift: {
|
|
373
|
-
defs: `
|
|
374
|
-
(function_declaration
|
|
375
|
-
(simple_identifier) @funcName) @funcDef
|
|
376
|
-
|
|
377
|
-
(class_declaration
|
|
378
|
-
(type_identifier) @className) @classDef
|
|
379
|
-
|
|
380
|
-
(protocol_declaration
|
|
381
|
-
(type_identifier) @interfaceName) @interfaceDef
|
|
382
|
-
`,
|
|
383
|
-
refs: `
|
|
384
|
-
(call_expression
|
|
385
|
-
(simple_identifier) @callIdent) @callRef
|
|
386
|
-
|
|
387
|
-
(navigation_expression
|
|
388
|
-
(simple_identifier) @callMethod) @callMethodRef
|
|
389
|
-
|
|
390
|
-
(type_identifier) @typeIdent
|
|
391
|
-
`,
|
|
392
|
-
},
|
|
393
|
-
lua: {
|
|
394
|
-
// #255: pulled from @tree-sitter-grammars/tree-sitter-lua (the aggregator's
|
|
395
|
-
// build corrupts once a 2nd grammar loads). That grammar names function defs
|
|
396
|
-
// `function_declaration` — the name is either a direct (identifier) (global /
|
|
397
|
-
// `local function`) or a (dot_index_expression) for `function M.run`. Calls
|
|
398
|
-
// are `function_call` with an (identifier) or (dot_index_expression) callee.
|
|
399
|
-
defs: `
|
|
400
|
-
(function_declaration
|
|
401
|
-
(identifier) @funcName) @funcDef
|
|
402
|
-
|
|
403
|
-
(function_declaration
|
|
404
|
-
(dot_index_expression) @funcName) @funcDef
|
|
405
|
-
`,
|
|
406
|
-
refs: `
|
|
407
|
-
(function_call (identifier) @callIdent) @callRef
|
|
408
|
-
|
|
409
|
-
(function_call (dot_index_expression) @callIdent) @callRef
|
|
410
|
-
`,
|
|
411
|
-
},
|
|
412
|
-
ocaml: {
|
|
413
|
-
// #251: let_binding holds value_name as a direct child (no `pattern:` /
|
|
414
|
-
// value_pattern wrapper), and module_binding's module_name is a direct child
|
|
415
|
-
// (no `name:` field) — the old patterns failed query compilation.
|
|
416
|
-
defs: `
|
|
417
|
-
(value_definition
|
|
418
|
-
(let_binding (value_name) @funcName)) @funcDef
|
|
419
|
-
|
|
420
|
-
(module_definition
|
|
421
|
-
(module_binding (module_name) @moduleName)) @moduleDef
|
|
422
|
-
`,
|
|
423
|
-
refs: `
|
|
424
|
-
(application_expression
|
|
425
|
-
(value_path (value_name) @callIdent)) @callRef
|
|
426
|
-
|
|
427
|
-
(value_path (value_name) @callIdent) @callRef
|
|
428
|
-
`,
|
|
429
|
-
},
|
|
430
|
-
zig: {
|
|
431
|
-
defs: `
|
|
432
|
-
(function_declaration
|
|
433
|
-
(identifier) @funcName) @funcDef
|
|
434
|
-
`,
|
|
435
|
-
// #251: the old `field_access` node name doesn't exist in this grammar and
|
|
436
|
-
// failed to compile; call_expression refs are valid.
|
|
437
|
-
refs: `
|
|
438
|
-
(call_expression
|
|
439
|
-
(identifier) @callIdent) @callRef
|
|
440
|
-
`,
|
|
441
|
-
},
|
|
442
|
-
bash: {
|
|
443
|
-
defs: `
|
|
444
|
-
(function_definition
|
|
445
|
-
name: (word) @funcName) @funcDef
|
|
446
|
-
`,
|
|
447
|
-
refs: `
|
|
448
|
-
(command
|
|
449
|
-
name: (command_name (word) @callIdent)) @callRef
|
|
450
|
-
`,
|
|
451
|
-
},
|
|
452
|
-
// #1522: tree-sitter-cue (eonpatapon/tree-sitter-cue, vendored per #1520) has
|
|
453
|
-
// no `label:`/`value:` field names on `field` — verified directly against the
|
|
454
|
-
// committed wasm (`value:` fails query compilation with "Bad field name");
|
|
455
|
-
// only `let_clause`'s `left:`/`right:` and `call_expression`'s `function:`
|
|
456
|
-
// are real fields. A `#Definition` is not a distinct node kind: `#Service`
|
|
457
|
-
// parses as a plain (identifier) whose text happens to start with "#", so
|
|
458
|
-
// definitions are told apart from ordinary struct fields with a `#match?`/
|
|
459
|
-
// `#not-match?` text predicate rather than a grammar-level distinction —
|
|
460
|
-
// both predicates must sit INSIDE the pattern's own parens (this repo's
|
|
461
|
-
// tree-sitter gotcha). `#Definition`s map to `type` (the closest existing
|
|
462
|
-
// SymbolKind to a reusable CUE schema); plain fields map to `property`;
|
|
463
|
-
// `let` bindings map to `variable`.
|
|
464
|
-
//
|
|
465
|
-
// Two known upstream grammar rough edges (#1522 review round 1, F4;
|
|
466
|
-
// docs/language-coverage.md's CUE row has the same note, kept in sync):
|
|
467
|
-
// (1) an aliased field label (`X=name: value`) exposes BOTH identifiers
|
|
468
|
-
// as untagged siblings under one `label` node — `(label alias:
|
|
469
|
-
// (identifier) (identifier))` — with no field/structural way to tell the
|
|
470
|
-
// alias from the real name, so `fieldDef` spuriously captures the alias
|
|
471
|
-
// too, alongside the correct symbol for `name`. (2) a multi-hash raw
|
|
472
|
-
// string (`##"..."##`, 2+ `#` delimiters) mis-parses regardless of
|
|
473
|
-
// content — the field's value becomes a bare `identifier` instead of a
|
|
474
|
-
// `string`, which can surface as a spurious `#`-prefixed ref via the
|
|
475
|
-
// `typeIdent` pattern below. Both are grammar bugs, not query bugs — no
|
|
476
|
-
// query change here can distinguish what the parse tree doesn't.
|
|
477
|
-
cue: {
|
|
478
|
-
defs: `
|
|
479
|
-
(field
|
|
480
|
-
(label (identifier) @defName)
|
|
481
|
-
(#match? @defName "^#")) @defDef
|
|
482
|
-
|
|
483
|
-
(field
|
|
484
|
-
(label (identifier) @fieldName)
|
|
485
|
-
(value (_)) @fieldValue
|
|
486
|
-
(#not-match? @fieldName "^#")) @fieldDef
|
|
487
|
-
|
|
488
|
-
(let_clause
|
|
489
|
-
left: (identifier) @letName
|
|
490
|
-
right: (_) @letValue) @letDef
|
|
491
|
-
`,
|
|
492
|
-
// `#Service` used as a value (e.g. `#Other: #Service & {...}`) is the same
|
|
493
|
-
// (identifier) node kind as its own definition label — there is no
|
|
494
|
-
// separate reference/definition node kind in this grammar, so the
|
|
495
|
-
// definition's own label also matches this pattern, mirroring the same
|
|
496
|
-
// self-match already accepted for swift/java's broad `type_identifier`
|
|
497
|
-
// ref patterns above.
|
|
498
|
-
refs: `
|
|
499
|
-
((identifier) @typeIdent
|
|
500
|
-
(#match? @typeIdent "^#"))
|
|
501
|
-
|
|
502
|
-
(call_expression
|
|
503
|
-
function: (identifier) @callIdent) @callRef
|
|
504
|
-
|
|
505
|
-
(call_expression
|
|
506
|
-
function: (selector_expression (identifier) (identifier) @callMethod)) @callMethodRef
|
|
507
|
-
`,
|
|
508
|
-
},
|
|
509
|
-
};
|
|
510
|
-
// The tsx grammar (downloaded as tree-sitter-tsx.wasm) shares TypeScript's node
|
|
511
|
-
// types — function_declaration, arrow_function, class_declaration,
|
|
512
|
-
// method_definition, interface_declaration, type_alias_declaration — so the
|
|
513
|
-
// TypeScript queries apply unchanged. Registering it lets .tsx/.jsx parse with
|
|
514
|
-
// the JSX-aware grammar instead of erroring under the plain TS grammar, matching
|
|
515
|
-
// symbol-extraction coverage to the grammar set we actually ship.
|
|
516
|
-
SYMBOL_QUERIES.tsx = SYMBOL_QUERIES.typescript;
|
|
517
|
-
// The javascript grammar shares TypeScript's EXECUTABLE node types
|
|
518
|
-
// (function_declaration, arrow_function, variable_declarator, class_declaration,
|
|
519
|
-
// method_definition, call_expression, member_expression, new_expression) but
|
|
520
|
-
// NOT its type-level ones: interface_declaration, type_alias_declaration and
|
|
521
|
-
// type_identifier do not exist in it, and a class name is a plain (identifier),
|
|
522
|
-
// not a (type_identifier). A query naming a missing node type fails to COMPILE
|
|
523
|
-
// outright (probed: "Bad node name 'type_identifier'"), so — unlike tsx — the
|
|
524
|
-
// TypeScript defs/refs cannot be aliased; javascript gets the same queries minus
|
|
525
|
-
// the type-only patterns. module-report resolves .js/.mjs/.cjs/.jsx to this
|
|
526
|
-
// grammar via the shared EXT_TO_LANG (#887); interface/type symbols are a
|
|
527
|
-
// TypeScript-language feature, so nothing is lost on real JS.
|
|
528
|
-
SYMBOL_QUERIES.javascript = {
|
|
529
|
-
defs: `
|
|
530
|
-
;; Function declarations: function foo(params) { }
|
|
531
|
-
(function_declaration
|
|
532
|
-
name: (identifier) @funcName
|
|
533
|
-
parameters: (formal_parameters) @funcParams
|
|
534
|
-
body: (statement_block) @funcBody) @funcDef
|
|
535
|
-
|
|
536
|
-
;; Arrow functions: const foo = (params) => { }
|
|
537
|
-
(variable_declarator
|
|
538
|
-
name: (identifier) @arrowName
|
|
539
|
-
value: (arrow_function
|
|
540
|
-
parameters: (formal_parameters) @arrowParams
|
|
541
|
-
body: (_) @arrowBody)) @arrowDef
|
|
542
|
-
|
|
543
|
-
;; Class declarations: class Foo { } — (identifier) name on this grammar.
|
|
544
|
-
(class_declaration
|
|
545
|
-
name: (identifier) @className) @classDef
|
|
546
|
-
|
|
547
|
-
;; Method definitions: class Foo { bar() { } }
|
|
548
|
-
(method_definition
|
|
549
|
-
name: (property_identifier) @methodName
|
|
550
|
-
parameters: (formal_parameters) @methodParams) @methodDef
|
|
551
|
-
`,
|
|
552
|
-
refs: `
|
|
553
|
-
;; Function/method calls: foo() or obj.bar()
|
|
554
|
-
(call_expression
|
|
555
|
-
function: (identifier) @callIdent) @callRef
|
|
556
|
-
|
|
557
|
-
(call_expression
|
|
558
|
-
function: (member_expression
|
|
559
|
-
object: (_)
|
|
560
|
-
property: (property_identifier) @callMethod)) @callMethodRef
|
|
561
|
-
|
|
562
|
-
;; New expressions: new Foo()
|
|
563
|
-
(new_expression
|
|
564
|
-
constructor: (identifier) @newIdent) @newRef
|
|
565
|
-
`,
|
|
566
|
-
};
|
|
567
|
-
/**
|
|
568
|
-
* The grammar a KIND-keyed consumer (review-graph builder, module-report
|
|
569
|
-
* outline) should extract `filePath` with, or undefined when this file is not
|
|
570
|
-
* something the symbol extractor can read.
|
|
571
|
-
*
|
|
572
|
-
* Three registry-derived steps, no hand-kept table (#2424 replaced one switch
|
|
573
|
-
* in review-graph/builder.ts and one map in module-report.ts with this):
|
|
574
|
-
* 1. the kind must have a single grammar-bearing language, or declare a
|
|
575
|
-
* `kindFallback` one — so extension-split `jsts` is excluded and its
|
|
576
|
-
* callers keep resolving it by path;
|
|
577
|
-
* 2. the file's own extension wins where it has grammar wiring, which is what
|
|
578
|
-
* splits `cxx` into `.c`/`.h` -> c and the rest -> cpp;
|
|
579
|
-
* 3. the grammar must actually have symbol queries here, which is what keeps
|
|
580
|
-
* css/json/yaml/html/toml (grammars that ship, queries that do not) out.
|
|
581
|
-
*/
|
|
582
|
-
export function symbolExtractionGrammar(kind, filePath) {
|
|
583
|
-
if (!kind)
|
|
584
|
-
return undefined;
|
|
585
|
-
const kindGrammar = KIND_TO_GRAMMAR[kind];
|
|
586
|
-
if (!kindGrammar)
|
|
587
|
-
return undefined;
|
|
588
|
-
const byExtension = filePath
|
|
589
|
-
? EXTENSION_TO_GRAMMAR[path.extname(filePath).toLowerCase()]
|
|
590
|
-
: undefined;
|
|
591
|
-
const grammar = byExtension ?? kindGrammar;
|
|
592
|
-
return grammar in SYMBOL_QUERIES ? grammar : undefined;
|
|
593
|
-
}
|
|
594
|
-
/** Language keys with symbol queries; used by fixture drift guards. */
|
|
595
|
-
export function getSymbolQueryLanguages() {
|
|
596
|
-
return Object.keys(SYMBOL_QUERIES);
|
|
597
|
-
}
|
|
598
|
-
// Per-language import-source extraction (#249). Optional and independent of
|
|
599
|
-
// SYMBOL_QUERIES: a language without an entry simply yields no imports (its
|
|
600
|
-
// symbols still extract). Each query captures the import source text as
|
|
601
|
-
// @importSource. typescript/tsx (#301) and c/cpp (#302) ARE present so the COLD
|
|
602
|
-
// module_report path (which runs this extractor directly) sees their imports; the
|
|
603
|
-
// WARM review graph still sources jsts imports from the TS compiler
|
|
604
|
-
// (importFactProvider) and cxx #include edges from its own line-regex path, and
|
|
605
|
-
// neither reaches this query, so there's no double-count.
|
|
606
|
-
//
|
|
607
|
-
// Call/builtin-based languages (ruby/zig/elixir/bash) express imports as
|
|
608
|
-
// ordinary function/macro calls, so their queries use a `#match?` predicate to
|
|
609
|
-
// keep only the import call out of every call in the file. web-tree-sitter 0.25's
|
|
610
|
-
// `Query.matches()` DOES apply these predicates (probed on the shipped grammars):
|
|
611
|
-
// an unpredicated ruby `require` query over-matches `puts`/`foo`, the predicated
|
|
612
|
-
// one returns only the require args.
|
|
613
|
-
const IMPORT_QUERIES = {
|
|
614
|
-
// ESM import + re-export source strings; `source:` is a (string) on both the
|
|
615
|
-
// typescript and tsx grammars (validated). parseImportMatch strips the quotes.
|
|
616
|
-
// CJS `require(...)` is intentionally out of scope — the cold path's dominant
|
|
617
|
-
// case is ESM, and the warm graph already covers require via the TS compiler.
|
|
618
|
-
typescript: `
|
|
619
|
-
(import_statement source: (string) @importSource)
|
|
620
|
-
(export_statement source: (string) @importSource)
|
|
621
|
-
`,
|
|
622
|
-
tsx: `
|
|
623
|
-
(import_statement source: (string) @importSource)
|
|
624
|
-
(export_statement source: (string) @importSource)
|
|
625
|
-
`,
|
|
626
|
-
// #include "foo.h" (string_literal) and #include <stdio.h> (system_lib_string)
|
|
627
|
-
// on both the c and cpp grammars (validated). parseImportMatch strips the quotes
|
|
628
|
-
// from the local form; the system form keeps its <> so the resolver/bucketer can
|
|
629
|
-
// tell a system header from a local include.
|
|
630
|
-
c: `
|
|
631
|
-
(preproc_include path: (string_literal) @importSource)
|
|
632
|
-
(preproc_include path: (system_lib_string) @importSource)
|
|
633
|
-
`,
|
|
634
|
-
cpp: `
|
|
635
|
-
(preproc_include path: (string_literal) @importSource)
|
|
636
|
-
(preproc_include path: (system_lib_string) @importSource)
|
|
637
|
-
`,
|
|
638
|
-
python: `
|
|
639
|
-
(import_statement name: (dotted_name) @importSource)
|
|
640
|
-
(import_statement name: (aliased_import name: (dotted_name) @importSource))
|
|
641
|
-
(import_from_statement module_name: (dotted_name) @importSource)
|
|
642
|
-
(import_from_statement module_name: (relative_import) @importSource)
|
|
643
|
-
`,
|
|
644
|
-
go: `(import_spec path: (interpreted_string_literal) @importSource)`,
|
|
645
|
-
rust: `(use_declaration argument: (_) @importSource)`,
|
|
646
|
-
java: `(import_declaration (scoped_identifier) @importSource)`,
|
|
647
|
-
kotlin: `(import_header (identifier) @importSource)`,
|
|
648
|
-
csharp: `
|
|
649
|
-
(using_directive (identifier) @importSource)
|
|
650
|
-
(using_directive (qualified_name) @importSource)
|
|
651
|
-
`,
|
|
652
|
-
swift: `(import_declaration (identifier) @importSource)`,
|
|
653
|
-
php: `(namespace_use_clause (name) @importSource)`,
|
|
654
|
-
ocaml: `(open_module (module_path) @importSource)`,
|
|
655
|
-
dart: `(import_specification (configurable_uri (uri (string_literal) @importSource)))`,
|
|
656
|
-
// local x = require("mod.a") — a plain function call, not a statement. The
|
|
657
|
-
// pulled @tree-sitter-grammars grammar (#255) names it function_call.
|
|
658
|
-
lua: `
|
|
659
|
-
(function_call
|
|
660
|
-
(identifier) @_m
|
|
661
|
-
(arguments (string) @importSource)
|
|
662
|
-
(#match? @_m "^require$"))
|
|
663
|
-
`,
|
|
664
|
-
// require "x" / require_relative "x" — covers both via the "^require" prefix.
|
|
665
|
-
ruby: `
|
|
666
|
-
(call
|
|
667
|
-
method: (identifier) @_m
|
|
668
|
-
(argument_list (string (string_content) @importSource))
|
|
669
|
-
(#match? @_m "^require"))
|
|
670
|
-
`,
|
|
671
|
-
// @import("std") — a builtin call, not a statement.
|
|
672
|
-
zig: `
|
|
673
|
-
(builtin_function (builtin_identifier) @_m
|
|
674
|
-
(arguments (string (string_content) @importSource))
|
|
675
|
-
(#match? @_m "^@import$"))
|
|
676
|
-
`,
|
|
677
|
-
// import/alias/require/use Foo — macro calls; excludes defmodule and friends.
|
|
678
|
-
elixir: `
|
|
679
|
-
(call target: (identifier) @_m
|
|
680
|
-
(arguments (alias) @importSource)
|
|
681
|
-
(#match? @_m "^(import|alias|require|use)$"))
|
|
682
|
-
`,
|
|
683
|
-
// source ./x.sh and . ./x.sh — the two POSIX file-include builtins.
|
|
684
|
-
bash: `
|
|
685
|
-
(command (command_name (word) @_m)
|
|
686
|
-
(word) @importSource
|
|
687
|
-
(#match? @_m "^(source|\\.)$"))
|
|
688
|
-
`,
|
|
689
|
-
// import "strings" / import x "encoding/json" — `import_spec`'s `path:`
|
|
690
|
-
// field is verified against the committed wasm. Block-form
|
|
691
|
-
// (`import (\n\t"strings"\n)`) nests each `import_spec` one level deeper,
|
|
692
|
-
// under `import_spec_list`, rather than as a direct child of
|
|
693
|
-
// `import_declaration` — a second pattern is needed, not a reshaped first
|
|
694
|
-
// one (#1522 review round 1, F2: the single-line-only pattern extracted
|
|
695
|
-
// zero imports from the block form).
|
|
696
|
-
cue: `
|
|
697
|
-
(import_declaration (import_spec path: (string) @importSource))
|
|
698
|
-
(import_declaration (import_spec_list (import_spec path: (string) @importSource)))
|
|
699
|
-
`,
|
|
700
|
-
};
|
|
701
|
-
// import/export ... from "..." have the same (import_statement source: (string))
|
|
702
|
-
// / (export_statement source: (string)) shape on the javascript grammar
|
|
703
|
-
// (validated — compiles + captures), so the typescript query applies unchanged.
|
|
704
|
-
IMPORT_QUERIES.javascript = IMPORT_QUERIES.typescript;
|
|
705
|
-
// biome-ignore lint/suspicious/noExplicitAny: tree-sitter match type
|
|
706
|
-
function parseImportMatch(match) {
|
|
707
|
-
for (const capture of match.captures) {
|
|
708
|
-
if (capture.name !== "importSource")
|
|
709
|
-
continue;
|
|
710
|
-
const raw = String(capture.node.text ?? "").trim();
|
|
711
|
-
const source = raw.replace(/^["'`]+|["'`]+$/g, "");
|
|
712
|
-
if (!source)
|
|
713
|
-
continue;
|
|
714
|
-
return { source, line: capture.node.startPosition.row + 1 };
|
|
715
|
-
}
|
|
716
|
-
return null;
|
|
717
|
-
}
|
|
718
|
-
export class TreeSitterSymbolExtractor {
|
|
719
|
-
languageId;
|
|
720
|
-
client;
|
|
721
|
-
// biome-ignore lint/suspicious/noExplicitAny: Query type from web-tree-sitter
|
|
722
|
-
defQuery = null;
|
|
723
|
-
// biome-ignore lint/suspicious/noExplicitAny: Query type from web-tree-sitter
|
|
724
|
-
refQuery = null;
|
|
725
|
-
// biome-ignore lint/suspicious/noExplicitAny: Query type from web-tree-sitter
|
|
726
|
-
importQuery = null;
|
|
727
|
-
constructor(languageId, client) {
|
|
728
|
-
this.languageId = languageId;
|
|
729
|
-
this.client = client;
|
|
730
|
-
}
|
|
731
|
-
async init() {
|
|
732
|
-
try {
|
|
733
|
-
if (!(await this.client.isLanguageSupported(this.languageId)))
|
|
734
|
-
return false;
|
|
735
|
-
const language = this.client.getLanguage(this.languageId);
|
|
736
|
-
if (!language)
|
|
737
|
-
return false;
|
|
738
|
-
const { Query } = await loadWebTreeSitter();
|
|
739
|
-
// Compile each query INDEPENDENTLY: a single malformed query — e.g. a
|
|
740
|
-
// grammar update that breaks the symbol `defs` pattern (a cross-language
|
|
741
|
-
// smoke test caught exactly this for kotlin) — must not disable the
|
|
742
|
-
// others. A language with a broken symbol query can still yield imports,
|
|
743
|
-
// and vice versa; the extractor degrades partially, not to nothing.
|
|
744
|
-
const queries = SYMBOL_QUERIES[this.languageId];
|
|
745
|
-
if (queries) {
|
|
746
|
-
this.defQuery = this.compileQuery(Query, language, queries.defs, "defs");
|
|
747
|
-
this.refQuery = this.compileQuery(Query, language, queries.refs, "refs");
|
|
748
|
-
}
|
|
749
|
-
const importQuerySrc = IMPORT_QUERIES[this.languageId];
|
|
750
|
-
if (importQuerySrc) {
|
|
751
|
-
this.importQuery = this.compileQuery(Query, language, importQuerySrc, "imports");
|
|
752
|
-
}
|
|
753
|
-
return Boolean(this.defQuery || this.importQuery);
|
|
754
|
-
}
|
|
755
|
-
catch (err) {
|
|
756
|
-
this.client.reportWasmAbort(err);
|
|
757
|
-
logTreeSitterDiagnostic({
|
|
758
|
-
subsystem: "symbol-extractor",
|
|
759
|
-
languageId: this.languageId,
|
|
760
|
-
message: `Failed to init ${this.languageId}: ${err instanceof Error ? err.message : String(err)}`,
|
|
761
|
-
});
|
|
762
|
-
return false;
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
// biome-ignore lint/suspicious/noExplicitAny: web-tree-sitter Query/Language types
|
|
766
|
-
compileQuery(Query, language, src, label) {
|
|
767
|
-
try {
|
|
768
|
-
return new Query(language, src);
|
|
769
|
-
}
|
|
770
|
-
catch (err) {
|
|
771
|
-
if (this.client.reportWasmAbort(err))
|
|
772
|
-
throw err;
|
|
773
|
-
logTreeSitterDiagnostic({
|
|
774
|
-
subsystem: "symbol-extractor",
|
|
775
|
-
languageId: this.languageId,
|
|
776
|
-
message: `${this.languageId} ${label} query failed: ${err.message}`,
|
|
777
|
-
metadata: { query: label },
|
|
778
|
-
});
|
|
779
|
-
return null;
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* Extract symbols from a parsed tree-sitter tree
|
|
784
|
-
*/
|
|
785
|
-
extract(
|
|
786
|
-
// biome-ignore lint/suspicious/noExplicitAny: Tree type
|
|
787
|
-
tree, filePath, content) {
|
|
788
|
-
const symbols = [];
|
|
789
|
-
const refs = [];
|
|
790
|
-
const relativePath = path.relative(process.cwd(), filePath);
|
|
791
|
-
// Extract definitions (guarded — a language's defs query may have failed to
|
|
792
|
-
// compile while its imports query succeeded, or vice versa).
|
|
793
|
-
if (this.defQuery) {
|
|
794
|
-
for (const match of this.queryMatches(this.defQuery, tree.rootNode)) {
|
|
795
|
-
const symbol = this.parseDefMatch(match, relativePath, content);
|
|
796
|
-
if (symbol)
|
|
797
|
-
symbols.push(symbol);
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
// Extract references
|
|
801
|
-
if (this.refQuery) {
|
|
802
|
-
for (const match of this.queryMatches(this.refQuery, tree.rootNode)) {
|
|
803
|
-
const ref = this.parseRefMatch(match, relativePath);
|
|
804
|
-
if (ref)
|
|
805
|
-
refs.push(ref);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
// Extract imports (optional — only for languages with an IMPORT_QUERIES entry)
|
|
809
|
-
const imports = [];
|
|
810
|
-
if (this.importQuery) {
|
|
811
|
-
for (const match of this.queryMatches(this.importQuery, tree.rootNode)) {
|
|
812
|
-
const ref = parseImportMatch(match);
|
|
813
|
-
if (ref)
|
|
814
|
-
imports.push(ref);
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
return {
|
|
818
|
-
symbols,
|
|
819
|
-
refs,
|
|
820
|
-
imports,
|
|
821
|
-
coverage: {
|
|
822
|
-
definitions: this.defQuery ? "complete" : "unavailable",
|
|
823
|
-
references: this.refQuery ? "complete" : "unavailable",
|
|
824
|
-
imports: this.importQuery ? "complete" : "unavailable",
|
|
825
|
-
},
|
|
826
|
-
};
|
|
827
|
-
}
|
|
828
|
-
queryMatches(query, rootNode) {
|
|
829
|
-
try {
|
|
830
|
-
return query.matches(rootNode);
|
|
831
|
-
}
|
|
832
|
-
catch (error) {
|
|
833
|
-
this.client.reportWasmAbort(error);
|
|
834
|
-
throw error;
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
// biome-ignore lint/suspicious/noExplicitAny: Match type
|
|
838
|
-
parseDefMatch(match, filePath, content) {
|
|
839
|
-
const captures = {};
|
|
840
|
-
for (const capture of match.captures) {
|
|
841
|
-
captures[capture.name] = {
|
|
842
|
-
text: capture.node.text,
|
|
843
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
844
|
-
node: capture.node,
|
|
845
|
-
};
|
|
846
|
-
}
|
|
847
|
-
// Determine kind and name
|
|
848
|
-
let name;
|
|
849
|
-
let kind;
|
|
850
|
-
let params;
|
|
851
|
-
let defNode;
|
|
852
|
-
if (captures.funcName) {
|
|
853
|
-
name = captures.funcName.text;
|
|
854
|
-
kind = "function";
|
|
855
|
-
params = captures.funcParams?.text;
|
|
856
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
857
|
-
defNode = captures.funcDef?.node;
|
|
858
|
-
}
|
|
859
|
-
else if (captures.arrowName) {
|
|
860
|
-
name = captures.arrowName.text;
|
|
861
|
-
kind = "function";
|
|
862
|
-
params = captures.arrowParams?.text;
|
|
863
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
864
|
-
defNode = captures.arrowDef?.node;
|
|
865
|
-
}
|
|
866
|
-
else if (captures.className) {
|
|
867
|
-
name = captures.className.text;
|
|
868
|
-
kind = "class";
|
|
869
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
870
|
-
defNode = captures.classDef?.node;
|
|
871
|
-
}
|
|
872
|
-
else if (captures.methodName) {
|
|
873
|
-
name = captures.methodName.text;
|
|
874
|
-
kind = "method";
|
|
875
|
-
params = captures.methodParams?.text;
|
|
876
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
877
|
-
defNode = captures.methodDef?.node;
|
|
878
|
-
}
|
|
879
|
-
else if (captures.interfaceName) {
|
|
880
|
-
name = captures.interfaceName.text;
|
|
881
|
-
kind = "interface";
|
|
882
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
883
|
-
defNode = captures.interfaceDef?.node;
|
|
884
|
-
}
|
|
885
|
-
else if (captures.typeName) {
|
|
886
|
-
name = captures.typeName.text;
|
|
887
|
-
kind = "type";
|
|
888
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
889
|
-
defNode = captures.typeDef?.node;
|
|
890
|
-
}
|
|
891
|
-
else if (captures.moduleName) {
|
|
892
|
-
name = captures.moduleName.text;
|
|
893
|
-
kind = "class";
|
|
894
|
-
defNode = captures.moduleDef?.node;
|
|
895
|
-
}
|
|
896
|
-
else if (captures.defName) {
|
|
897
|
-
// CUE `#Definition` — the closest existing SymbolKind to a reusable
|
|
898
|
-
// schema type.
|
|
899
|
-
name = captures.defName.text;
|
|
900
|
-
kind = "type";
|
|
901
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
902
|
-
defNode = captures.defDef?.node;
|
|
903
|
-
}
|
|
904
|
-
else if (captures.fieldName) {
|
|
905
|
-
// CUE plain struct field.
|
|
906
|
-
name = captures.fieldName.text;
|
|
907
|
-
kind = "property";
|
|
908
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
909
|
-
defNode = captures.fieldDef?.node;
|
|
910
|
-
}
|
|
911
|
-
else if (captures.letName) {
|
|
912
|
-
// CUE `let` binding — a computed local value.
|
|
913
|
-
name = captures.letName.text;
|
|
914
|
-
kind = "variable";
|
|
915
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
916
|
-
defNode = captures.letDef?.node;
|
|
917
|
-
}
|
|
918
|
-
if (!name || !kind || !defNode)
|
|
919
|
-
return null;
|
|
920
|
-
// Check if exported (basic heuristic: has export keyword before it)
|
|
921
|
-
const isExported = this.isExported(defNode, content);
|
|
922
|
-
const signature = params ? this.extractSignature(params, kind) : undefined;
|
|
923
|
-
// Scope/visibility signals (additive; the review graph ignores them).
|
|
924
|
-
// `local`: nearest enclosing scope is a function body (#259).
|
|
925
|
-
// `visibility`: a TS/JS access modifier or #-private name (#258).
|
|
926
|
-
const local = this.isFunctionLocal(defNode);
|
|
927
|
-
const visibility = kind === "method" ? this.detectVisibility(defNode, name) : undefined;
|
|
928
|
-
const decorators = this.extractDecorators(defNode);
|
|
929
|
-
const isAsync = (kind === "function" || kind === "method") && this.isAsyncDecl(defNode);
|
|
930
|
-
const docInfo = this.extractDocCommentInfo(defNode);
|
|
931
|
-
return {
|
|
932
|
-
id: `${filePath}:${name}`,
|
|
933
|
-
name,
|
|
934
|
-
kind,
|
|
935
|
-
filePath,
|
|
936
|
-
line: defNode.startPosition.row + 1,
|
|
937
|
-
endLine: defNode.endPosition.row + 1,
|
|
938
|
-
column: defNode.startPosition.column + 1,
|
|
939
|
-
signature,
|
|
940
|
-
isExported,
|
|
941
|
-
...(local ? { local: true } : {}),
|
|
942
|
-
...(visibility ? { visibility } : {}),
|
|
943
|
-
...(decorators.length > 0 ? { decorators } : {}),
|
|
944
|
-
...(isAsync ? { isAsync: true } : {}),
|
|
945
|
-
...(docInfo
|
|
946
|
-
? { doc: docInfo.text, docStartLine: docInfo.startLine }
|
|
947
|
-
: {}),
|
|
948
|
-
};
|
|
949
|
-
}
|
|
950
|
-
// Comment node kinds across grammars that use tree-sitter's conventional
|
|
951
|
-
// name. Line/block comments (`//`, `/* */`, `/** */`, `#`) all parse to a
|
|
952
|
-
// single "comment" node type in every grammar checked (JS/TS, Python, Go,
|
|
953
|
-
// Rust, Java, Kotlin, C#, C/C++, Ruby, PHP, Swift, Lua) — no per-grammar
|
|
954
|
-
// query needed, unlike decorators/annotations which vary by node shape.
|
|
955
|
-
static COMMENT_NODE_KIND = "comment";
|
|
956
|
-
/**
|
|
957
|
-
* First sentence/line of the doc comment immediately preceding a declaration,
|
|
958
|
-
* whitespace-collapsed and capped ~120 chars — the highest-signal token for an
|
|
959
|
-
* agent deciding which symbol to read (#512). Structural, not per-language:
|
|
960
|
-
* walks contiguous preceding-sibling `comment` nodes (same traversal shape as
|
|
961
|
-
* `extractDecorators`), stopping at the nearest non-comment/non-decorator named
|
|
962
|
-
* sibling, and takes the LAST contiguous comment block (the one directly above
|
|
963
|
-
* the declaration — an earlier unrelated comment separated by blank lines still
|
|
964
|
-
* parses as a preceding sibling, but a real gap makes it not "attached").
|
|
965
|
-
* JSDoc/TSDoc block comments strip the leading/trailing block markers and
|
|
966
|
-
* per-line `*` gutters; plain `//`/`#` line comments strip the marker only.
|
|
967
|
-
* Returns undefined when no comment is directly attached. Returns both the
|
|
968
|
-
* summarized text (`doc`) and the 1-based start line of the attached comment
|
|
969
|
-
* block (`docStartLine`, #523) — readSymbol extends its returned range to that
|
|
970
|
-
* line so an agent reading a symbol sees its contract, not just its body.
|
|
971
|
-
*/
|
|
972
|
-
// biome-ignore lint/suspicious/noExplicitAny: web-tree-sitter node
|
|
973
|
-
extractDocCommentInfo(declNode) {
|
|
974
|
-
const isComment = (n) => !!n && n.type === TreeSitterSymbolExtractor.COMMENT_NODE_KIND;
|
|
975
|
-
const isDeco = (n) => !!n && TreeSitterSymbolExtractor.DECORATOR_NODE_KINDS.has(n.type);
|
|
976
|
-
// web-tree-sitter materializes a NEW node object on every `.children`/
|
|
977
|
-
// `.parent` access (no stable identity), so siblings must be located by
|
|
978
|
-
// START POSITION, never by reference (`===`) — same reasoning as
|
|
979
|
-
// `startIndex` comparisons in `extractDecorators`.
|
|
980
|
-
const samePos = (a, b) => a?.startPosition?.row === b?.startPosition?.row &&
|
|
981
|
-
a?.startPosition?.column === b?.startPosition?.column;
|
|
982
|
-
const sameStartRow = (a, b) => a?.startPosition?.row === b?.startPosition?.row;
|
|
983
|
-
// `export function foo() {}` wraps the declaration in an `export_statement`
|
|
984
|
-
// (JS/TS) / `export_declaration` node that starts on the SAME LINE as the
|
|
985
|
-
// declaration (earlier column — the `export` keyword) — the doc comment
|
|
986
|
-
// sits before the wrapper, not before the inner declaration. Walk up
|
|
987
|
-
// through same-line wrappers (mirrors `hasExportModifier`'s upward walk
|
|
988
|
-
// for the same shape) so the comment search anchors on the outermost node
|
|
989
|
-
// that actually starts the line.
|
|
990
|
-
let node = declNode;
|
|
991
|
-
for (let hops = 0; hops < 4; hops++) {
|
|
992
|
-
const parent = node.parent;
|
|
993
|
-
if (!parent || !sameStartRow(parent, node))
|
|
994
|
-
break;
|
|
995
|
-
node = parent;
|
|
996
|
-
}
|
|
997
|
-
const siblings = node.parent?.children ?? [];
|
|
998
|
-
const idx = siblings.findIndex((s) => samePos(s, node));
|
|
999
|
-
if (idx <= 0)
|
|
1000
|
-
return undefined;
|
|
1001
|
-
// Walk backwards from the declaration, skipping decorators/annotations
|
|
1002
|
-
// (Python/TS often have `@decorator` between the doc comment and the def),
|
|
1003
|
-
// collecting a contiguous run of comment nodes with no other named node
|
|
1004
|
-
// (and no blank-line gap) in between. `boundaryRow` is the start row of
|
|
1005
|
-
// the closest already-accepted neighbor (the declaration itself, or the
|
|
1006
|
-
// decorator block above it) — a candidate comment separated from THAT
|
|
1007
|
-
// row by a blank line is rejected even when it's the only candidate.
|
|
1008
|
-
let cursor = idx - 1;
|
|
1009
|
-
while (cursor >= 0 && isDeco(siblings[cursor]))
|
|
1010
|
-
cursor--;
|
|
1011
|
-
let boundaryRow = node.startPosition?.row;
|
|
1012
|
-
let end = -1; // inclusive end index of the accepted comment run
|
|
1013
|
-
let start = -1; // inclusive start index of the accepted comment run
|
|
1014
|
-
while (cursor >= 0 && isComment(siblings[cursor])) {
|
|
1015
|
-
const candidate = siblings[cursor];
|
|
1016
|
-
const gapRows = boundaryRow !== undefined &&
|
|
1017
|
-
typeof candidate.endPosition?.row === "number"
|
|
1018
|
-
? boundaryRow - candidate.endPosition.row
|
|
1019
|
-
: 0;
|
|
1020
|
-
if (gapRows > 1)
|
|
1021
|
-
break; // separated by a blank line — not attached
|
|
1022
|
-
if (end < 0)
|
|
1023
|
-
end = cursor;
|
|
1024
|
-
start = cursor;
|
|
1025
|
-
boundaryRow = candidate.startPosition?.row;
|
|
1026
|
-
cursor--;
|
|
1027
|
-
}
|
|
1028
|
-
if (start < 0 || end < 0)
|
|
1029
|
-
return undefined;
|
|
1030
|
-
const raw = siblings
|
|
1031
|
-
.slice(start, end + 1)
|
|
1032
|
-
.map((n) => String(n.text ?? ""))
|
|
1033
|
-
.join("\n");
|
|
1034
|
-
const text = this.summarizeDocComment(raw);
|
|
1035
|
-
if (!text)
|
|
1036
|
-
return undefined;
|
|
1037
|
-
const startLine = (siblings[start].startPosition?.row ?? 0) + 1;
|
|
1038
|
-
return { text, startLine };
|
|
1039
|
-
}
|
|
1040
|
-
static DOC_MAX_CHARS = 120;
|
|
1041
|
-
/** Strip comment markers, take the first sentence (or first line if no
|
|
1042
|
-
* sentence terminator), collapse whitespace, cap at ~120 chars. */
|
|
1043
|
-
summarizeDocComment(raw) {
|
|
1044
|
-
const cleaned = raw
|
|
1045
|
-
.replace(/^\s*\/\*\*?/, "")
|
|
1046
|
-
.replace(/\*\/\s*$/, "")
|
|
1047
|
-
.split(/\r?\n/)
|
|
1048
|
-
.map((line) => line.replace(/^\s*(\*|\/\/\/?|#)\s?/, "").trimEnd())
|
|
1049
|
-
.filter((line) => line.trim().length > 0)
|
|
1050
|
-
.join(" ")
|
|
1051
|
-
.trim();
|
|
1052
|
-
if (!cleaned)
|
|
1053
|
-
return undefined;
|
|
1054
|
-
// First sentence: up to the first `. ` / `! ` / `? ` followed by a capital
|
|
1055
|
-
// or end-of-string, else the whole cleaned text.
|
|
1056
|
-
const sentenceMatch = cleaned.match(/^.*?[.!?](?:\s|$)/);
|
|
1057
|
-
let first = (sentenceMatch ? sentenceMatch[0] : cleaned).trim();
|
|
1058
|
-
first = first.replace(/\s+/g, " ");
|
|
1059
|
-
if (first.length > TreeSitterSymbolExtractor.DOC_MAX_CHARS) {
|
|
1060
|
-
first = `${first.slice(0, TreeSitterSymbolExtractor.DOC_MAX_CHARS - 1).trimEnd()}…`;
|
|
1061
|
-
}
|
|
1062
|
-
return first || undefined;
|
|
1063
|
-
}
|
|
1064
|
-
/**
|
|
1065
|
-
* Structural async/suspend detection: an `async` keyword node (Python/JS/TS
|
|
1066
|
-
* have it as a direct child of the declaration) or `async`/`suspend` inside a
|
|
1067
|
-
* `*modifiers*` container (Rust `function_modifiers`, Kotlin/Java/C#
|
|
1068
|
-
* `modifiers`). Conservative — a grammar that spells it differently just
|
|
1069
|
-
* yields false (no false positives).
|
|
1070
|
-
*/
|
|
1071
|
-
// biome-ignore lint/suspicious/noExplicitAny: web-tree-sitter node
|
|
1072
|
-
isAsyncDecl(node) {
|
|
1073
|
-
const isAsyncTok = (n) => !!n &&
|
|
1074
|
-
(n.type === "async" ||
|
|
1075
|
-
n.type === "suspend" ||
|
|
1076
|
-
(/modifier/.test(String(n.type)) &&
|
|
1077
|
-
/^(?:async|suspend)$/.test(String(n.text ?? "").trim())));
|
|
1078
|
-
for (const child of node.children ?? []) {
|
|
1079
|
-
if (isAsyncTok(child))
|
|
1080
|
-
return true;
|
|
1081
|
-
if (/modifiers/.test(String(child?.type))) {
|
|
1082
|
-
for (const gc of child.children ?? []) {
|
|
1083
|
-
if (isAsyncTok(gc))
|
|
1084
|
-
return true;
|
|
1085
|
-
}
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
return false;
|
|
1089
|
-
}
|
|
1090
|
-
// Decorator/attribute/annotation node kinds across grammars. Python/TS/JS use
|
|
1091
|
-
// `decorator`; Rust `attribute_item`; Java/Kotlin/C# `marker_annotation` /
|
|
1092
|
-
// `annotation` (often nested inside a `modifiers` container).
|
|
1093
|
-
static DECORATOR_NODE_KINDS = new Set([
|
|
1094
|
-
"decorator",
|
|
1095
|
-
"attribute_item",
|
|
1096
|
-
"marker_annotation",
|
|
1097
|
-
"annotation",
|
|
1098
|
-
]);
|
|
1099
|
-
// Containers that hold annotations as children (Java/Kotlin `modifiers`).
|
|
1100
|
-
static MODIFIERS_CONTAINER_KINDS = new Set(["modifiers"]);
|
|
1101
|
-
/**
|
|
1102
|
-
* Decorators/attributes/annotations attached to a declaration node, in source
|
|
1103
|
-
* order. Structural (tree-sitter), not text heuristics, so it handles the three
|
|
1104
|
-
* placement shapes seen across grammars:
|
|
1105
|
-
* - preceding siblings: Python (`decorated_definition` children), Rust
|
|
1106
|
-
* (`attribute_item`), TS methods (`decorator`);
|
|
1107
|
-
* - own children: TS class decorators;
|
|
1108
|
-
* - nested in a `modifiers` container: Java/Kotlin/C# annotations.
|
|
1109
|
-
* Languages without these node kinds simply yield none.
|
|
1110
|
-
*/
|
|
1111
|
-
// biome-ignore lint/suspicious/noExplicitAny: web-tree-sitter node
|
|
1112
|
-
extractDecorators(node) {
|
|
1113
|
-
const isDeco = (n) => !!n && TreeSitterSymbolExtractor.DECORATOR_NODE_KINDS.has(n.type);
|
|
1114
|
-
const text = (n) => {
|
|
1115
|
-
const first = String(n?.text ?? "")
|
|
1116
|
-
.split(/\r?\n/, 1)[0]
|
|
1117
|
-
?.trim() ?? "";
|
|
1118
|
-
return first.length > 120 ? `${first.slice(0, 117)}…` : first;
|
|
1119
|
-
};
|
|
1120
|
-
const out = [];
|
|
1121
|
-
// (1) Contiguous decorator siblings immediately before the declaration.
|
|
1122
|
-
// Children are in source order, so collect decorators and reset on any
|
|
1123
|
-
// other NAMED sibling — leaving only the block directly above `node`.
|
|
1124
|
-
for (const sib of node.parent?.children ?? []) {
|
|
1125
|
-
if (sib.startIndex >= node.startIndex)
|
|
1126
|
-
break; // preceding only
|
|
1127
|
-
if (isDeco(sib))
|
|
1128
|
-
out.push(text(sib));
|
|
1129
|
-
else if (sib.isNamed)
|
|
1130
|
-
out.length = 0;
|
|
1131
|
-
}
|
|
1132
|
-
// (2) Own leading children: TS class decorators, or annotations nested in a
|
|
1133
|
-
// `modifiers` container (Java/Kotlin).
|
|
1134
|
-
for (const child of node.children ?? []) {
|
|
1135
|
-
if (isDeco(child))
|
|
1136
|
-
out.push(text(child));
|
|
1137
|
-
else if (TreeSitterSymbolExtractor.MODIFIERS_CONTAINER_KINDS.has(child?.type)) {
|
|
1138
|
-
for (const gc of child.children ?? []) {
|
|
1139
|
-
if (isDeco(gc))
|
|
1140
|
-
out.push(text(gc));
|
|
1141
|
-
}
|
|
1142
|
-
}
|
|
1143
|
-
}
|
|
1144
|
-
return [...new Set(out.filter(Boolean))].slice(0, 8);
|
|
1145
|
-
}
|
|
1146
|
-
// biome-ignore lint/suspicious/noExplicitAny: Match type
|
|
1147
|
-
parseRefMatch(match, filePath) {
|
|
1148
|
-
let name;
|
|
1149
|
-
let refNode;
|
|
1150
|
-
let referenceKind = "unknown";
|
|
1151
|
-
for (const capture of match.captures) {
|
|
1152
|
-
const captureName = String(capture.name);
|
|
1153
|
-
if (captureName.endsWith("Ident") ||
|
|
1154
|
-
captureName.endsWith("Method") ||
|
|
1155
|
-
captureName.endsWith("Field")) {
|
|
1156
|
-
name = capture.node.text;
|
|
1157
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1158
|
-
refNode = capture.node;
|
|
1159
|
-
if (captureName.startsWith("type"))
|
|
1160
|
-
referenceKind = "type";
|
|
1161
|
-
else if (captureName.startsWith("call") ||
|
|
1162
|
-
captureName.startsWith("new")) {
|
|
1163
|
-
referenceKind = "call";
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1166
|
-
if (captureName.endsWith("Ref") && !refNode) {
|
|
1167
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1168
|
-
refNode = capture.node;
|
|
1169
|
-
if (captureName.startsWith("type"))
|
|
1170
|
-
referenceKind = "type";
|
|
1171
|
-
else if (captureName.startsWith("call") ||
|
|
1172
|
-
captureName.startsWith("new")) {
|
|
1173
|
-
referenceKind = "call";
|
|
1174
|
-
}
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
if (!name || !refNode)
|
|
1178
|
-
return null;
|
|
1179
|
-
return {
|
|
1180
|
-
symbolId: `${filePath}:${name}`, // Will be resolved later
|
|
1181
|
-
symbolName: name,
|
|
1182
|
-
filePath,
|
|
1183
|
-
line: refNode.startPosition.row + 1,
|
|
1184
|
-
column: refNode.startPosition.column + 1,
|
|
1185
|
-
referenceKind,
|
|
1186
|
-
};
|
|
1187
|
-
}
|
|
1188
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1189
|
-
isExported(node, content) {
|
|
1190
|
-
// A symbol is exported only at module scope. Anchor the keyword at the
|
|
1191
|
-
// START of the declaration line (so `const exportName = …`, or "export"
|
|
1192
|
-
// inside a comment, doesn't count), and require the AST walk to reach an
|
|
1193
|
-
// export statement WITHOUT crossing a function body.
|
|
1194
|
-
const lines = content.split("\n");
|
|
1195
|
-
const lineIdx = node.startPosition.row;
|
|
1196
|
-
const line = lines[lineIdx] || "";
|
|
1197
|
-
return /^\s*export\b/.test(line) || this.hasExportModifier(node, content);
|
|
1198
|
-
}
|
|
1199
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1200
|
-
hasExportModifier(node, _content) {
|
|
1201
|
-
// Walk up to an export statement, but bail the moment we cross a function
|
|
1202
|
-
// or block body (`statement_block`): a symbol nested inside an exported
|
|
1203
|
-
// function is a LOCAL, not a module export (the #256 false-API bug). Class
|
|
1204
|
-
// members stay exported — they live in a `class_body`, not a
|
|
1205
|
-
// `statement_block`, on the path to the enclosing export.
|
|
1206
|
-
let current = node.parent;
|
|
1207
|
-
while (current) {
|
|
1208
|
-
if (current.type === "statement_block")
|
|
1209
|
-
return false;
|
|
1210
|
-
if (current.type === "export_statement" ||
|
|
1211
|
-
current.type === "export_declaration") {
|
|
1212
|
-
return true;
|
|
1213
|
-
}
|
|
1214
|
-
current = current.parent;
|
|
1215
|
-
}
|
|
1216
|
-
return false;
|
|
1217
|
-
}
|
|
1218
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1219
|
-
isFunctionLocal(node) {
|
|
1220
|
-
// A symbol is function-local when its nearest enclosing scope is a
|
|
1221
|
-
// function/block body (`statement_block`) — the same boundary the export
|
|
1222
|
-
// walk treats as "not a module export" (#256). Class members live in a
|
|
1223
|
-
// `class_body`, module-level declarations reach the program root, so neither
|
|
1224
|
-
// is local. TS/JS-shaped: other grammars don't use `statement_block`, so
|
|
1225
|
-
// `local` simply stays false there (#259, scoped to where it's detectable).
|
|
1226
|
-
let current = node.parent;
|
|
1227
|
-
while (current) {
|
|
1228
|
-
if (current.type === "statement_block")
|
|
1229
|
-
return true;
|
|
1230
|
-
current = current.parent;
|
|
1231
|
-
}
|
|
1232
|
-
return false;
|
|
1233
|
-
}
|
|
1234
|
-
// biome-ignore lint/suspicious/noExplicitAny: Node type
|
|
1235
|
-
detectVisibility(node, nameText) {
|
|
1236
|
-
// #-prefixed names are hard-private (works even if a grammar surfaces the
|
|
1237
|
-
// name as a private_property_identifier).
|
|
1238
|
-
if (nameText.startsWith("#"))
|
|
1239
|
-
return "private";
|
|
1240
|
-
// TS `private`/`protected`/`public foo()` carry an `accessibility_modifier`
|
|
1241
|
-
// child on the method node. The node type is TS-specific, so this is inert
|
|
1242
|
-
// for grammars without it (no faked visibility — #258).
|
|
1243
|
-
for (const child of node?.children ?? []) {
|
|
1244
|
-
if (child?.type === "accessibility_modifier") {
|
|
1245
|
-
if (child.text === "private")
|
|
1246
|
-
return "private";
|
|
1247
|
-
if (child.text === "protected")
|
|
1248
|
-
return "protected";
|
|
1249
|
-
return undefined; // explicit public
|
|
1250
|
-
}
|
|
1251
|
-
}
|
|
1252
|
-
return undefined;
|
|
1253
|
-
}
|
|
1254
|
-
extractSignature(paramsText, kind) {
|
|
1255
|
-
if (kind === "function" || kind === "method") {
|
|
1256
|
-
// Clean up params: remove comments, normalize whitespace
|
|
1257
|
-
return paramsText
|
|
1258
|
-
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
1259
|
-
.replace(/\/\/.*$/gm, "")
|
|
1260
|
-
.replace(/\s+/g, " ")
|
|
1261
|
-
.trim();
|
|
1262
|
-
}
|
|
1263
|
-
return undefined;
|
|
1264
|
-
}
|
|
1265
|
-
}
|