pi-lens 4.3.0 → 4.4.0
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/CHANGELOG.md +1064 -0
- package/README.md +115 -25
- package/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/dist/chunk-22AVIGXS.js +560 -0
- package/dist/chunk-27BBHSZC.js +106 -0
- package/dist/chunk-2BEMIWEW.js +51 -0
- package/dist/chunk-2EECBNC5.js +89 -0
- package/dist/chunk-34U7PLGE.js +23 -0
- package/dist/chunk-3I5QFT3N.js +181 -0
- package/dist/chunk-3MED75HT.js +37 -0
- package/dist/chunk-47D2BO4S.js +87 -0
- package/dist/chunk-4RERDEXR.js +348 -0
- package/dist/chunk-4W2PLC4J.js +27 -0
- package/dist/chunk-52H5B5TC.js +202 -0
- package/dist/chunk-54B42YRX.js +27 -0
- package/dist/chunk-5RXBNSW2.js +266 -0
- package/dist/chunk-5THXD6X5.js +201 -0
- package/dist/chunk-5W3R6LFT.js +24 -0
- package/dist/chunk-5ZEJHV35.js +341 -0
- package/dist/chunk-6P62QVEA.js +118 -0
- package/dist/chunk-6QIUX4EP.js +459 -0
- package/dist/chunk-6VCD4VKZ.js +78 -0
- package/dist/chunk-7F72PXY2.js +326 -0
- package/dist/chunk-7FBF7NPR.js +998 -0
- package/dist/chunk-7U2IDNXN.js +37 -0
- package/dist/chunk-ABBOA7UD.js +157 -0
- package/dist/chunk-AHDW3GPE.js +50 -0
- package/dist/chunk-AJ3QXTRQ.js +756 -0
- package/dist/chunk-AJVLWNFN.js +1610 -0
- package/dist/chunk-AJXODZY6.js +112 -0
- package/dist/chunk-ARFCXG7S.js +84 -0
- package/dist/chunk-AS44CFQ4.js +708 -0
- package/dist/chunk-AWE5TMPO.js +38 -0
- package/dist/chunk-B3I2UUT4.js +4692 -0
- package/dist/chunk-BRJKOBZP.js +331 -0
- package/dist/chunk-BW5KFIQC.js +59 -0
- package/dist/chunk-C2AUYXQH.js +149 -0
- package/dist/chunk-CGGAIP7J.js +29 -0
- package/dist/chunk-D6QS3U6M.js +30 -0
- package/dist/chunk-DFVMIKMQ.js +349 -0
- package/dist/chunk-DIULIWKU.js +169 -0
- package/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/dist/chunk-E2WFBRHM.js +213 -0
- package/dist/chunk-E4MAEDPM.js +50 -0
- package/dist/chunk-EOKRQ3SA.js +30 -0
- package/dist/chunk-F3AU2TMM.js +2626 -0
- package/dist/chunk-F3P7VQ7H.js +170 -0
- package/dist/chunk-FC4RP4I2.js +12 -0
- package/dist/chunk-FJNKANOS.js +32 -0
- package/dist/chunk-GUOGVTCQ.js +146 -0
- package/dist/chunk-GVXA6CCE.js +18 -0
- package/dist/chunk-HHYAELLJ.js +2334 -0
- package/dist/chunk-HMFXILPV.js +83 -0
- package/dist/chunk-HVUZXSWK.js +421 -0
- package/dist/chunk-HWBZIGMJ.js +62 -0
- package/dist/chunk-I3R7GKDR.js +17 -0
- package/dist/chunk-I7SPGOWI.js +55 -0
- package/dist/chunk-IIXOAGHR.js +38 -0
- package/dist/chunk-IVP5KAB7.js +2250 -0
- package/dist/chunk-IXEBJSUE.js +22 -0
- package/dist/chunk-JOLITGCC.js +27 -0
- package/dist/chunk-K6VYLB2U.js +145 -0
- package/dist/chunk-LJDODBBZ.js +78 -0
- package/dist/chunk-LNAKEO63.js +78 -0
- package/dist/chunk-LSMJ6KBE.js +4139 -0
- package/dist/chunk-LW6XKDZQ.js +5565 -0
- package/dist/chunk-N3YQJI6O.js +899 -0
- package/dist/chunk-NABLC7W3.js +148 -0
- package/dist/chunk-NKOUFPQF.js +659 -0
- package/dist/chunk-NL5GLMFI.js +211 -0
- package/dist/chunk-NMABWBZN.js +327 -0
- package/dist/chunk-NTHH2J74.js +27 -0
- package/dist/chunk-NTUJEGDZ.js +59 -0
- package/dist/chunk-NXL4FFQQ.js +47 -0
- package/dist/chunk-NXPS2L6U.js +466 -0
- package/dist/chunk-O5WILGMI.js +42 -0
- package/dist/chunk-O6TQT6RI.js +48 -0
- package/dist/chunk-OAXNDZJ7.js +323 -0
- package/dist/chunk-ODEEOXPH.js +44 -0
- package/dist/chunk-OQGFCZJ4.js +4533 -0
- package/dist/chunk-ORTMY4Q4.js +282 -0
- package/dist/chunk-OS32RNR2.js +442 -0
- package/dist/chunk-PAK6IDME.js +189 -0
- package/dist/chunk-PWFHBTSF.js +406 -0
- package/dist/chunk-Q5U6FMDI.js +2352 -0
- package/dist/chunk-QOZXJ4NA.js +3364 -0
- package/dist/chunk-QYF5S6P6.js +45 -0
- package/dist/chunk-RIISMHKN.js +36 -0
- package/dist/chunk-RPD4ZSB7.js +25 -0
- package/dist/chunk-RPD5K5NC.js +79 -0
- package/dist/chunk-RUOG5D2C.js +262 -0
- package/dist/chunk-T4ERT73Y.js +599 -0
- package/dist/chunk-T6D4Q4AQ.js +54 -0
- package/dist/chunk-TGPXLY2J.js +391 -0
- package/dist/chunk-TLGFBM3F.js +12116 -0
- package/dist/chunk-TO6WL3GM.js +88 -0
- package/dist/chunk-TT22N74J.js +517 -0
- package/dist/chunk-TVN5N6GY.js +21216 -0
- package/dist/chunk-U3VGR4VU.js +308 -0
- package/dist/chunk-UK3CMEAL.js +1250 -0
- package/dist/chunk-UOPVJQ4N.js +103 -0
- package/dist/chunk-UXVNL3D7.js +23 -0
- package/dist/chunk-UY752QSN.js +45 -0
- package/dist/chunk-V5PXFSZK.js +188 -0
- package/dist/chunk-V7R425XG.js +398 -0
- package/dist/chunk-VCSRSYLF.js +81 -0
- package/dist/chunk-VD4JQCQC.js +162 -0
- package/dist/chunk-VDBPVIKD.js +62 -0
- package/dist/chunk-VHQLPIRJ.js +114 -0
- package/dist/chunk-VN2AXLEX.js +5414 -0
- package/dist/chunk-VNMT7C64.js +478 -0
- package/dist/chunk-WONERJTP.js +309 -0
- package/dist/chunk-XECLWQZN.js +85 -0
- package/dist/chunk-XIMYZ3JA.js +27 -0
- package/dist/chunk-XK4CIILI.js +144 -0
- package/dist/chunk-Y4T27COV.js +562 -0
- package/dist/chunk-YGVYKNSN.js +1860 -0
- package/dist/chunk-YLF3PPT5.js +308 -0
- package/dist/chunk-YSNFMJKN.js +14 -0
- package/dist/chunk-Z3CCVDUB.js +76 -0
- package/dist/chunk-Z54ZSOBZ.js +61 -0
- package/dist/chunk-ZAWW3AF6.js +97 -0
- package/dist/chunk-ZMOL6RQC.js +167 -0
- package/dist/index.js +16456 -8335
- package/dist/mcp/analyze-cli.js +186 -232
- package/dist/mcp/cli.js +137 -98
- package/dist/mcp/server.js +22589 -1573
- package/dist/mcp/worker.js +97 -38
- package/dist/probes/installer.js +135 -0
- package/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/dist/workers/review-graph-persist-worker.js +15 -0
- package/docs/agent-guide.md +13 -4
- package/docs/agent-tools.md +42 -0
- package/docs/ast-grep_rules_catalog.md +3 -2
- package/docs/configuration.md +20 -1
- package/docs/environment-variables.md +52 -2
- package/docs/features.md +8 -4
- package/docs/globalconfig.md +1 -0
- package/docs/io-bridge-v2-migration.md +94 -0
- package/docs/lsp-capability-matrix.md +36 -4
- package/docs/lsp-idle-eviction.md +124 -0
- package/docs/mcp.md +21 -5
- package/docs/merge-queue-rollout.md +77 -0
- package/docs/pi-lens-fixer.md +156 -88
- package/docs/pi-lens-investigator.md +74 -26
- package/docs/pi-lens-merge-policy.md +694 -0
- package/docs/pi-lens-monitor.md +73 -7
- package/docs/pi-lens-retro.md +6 -4
- package/docs/pi-lens-reviewer.md +188 -48
- package/docs/pi-lens-subagent.md +246 -45
- package/docs/pi-lens-warden.md +18 -7
- package/docs/public-api-stability.md +55 -0
- package/docs/release-qa-baseline.md +84 -17
- package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/docs/servercapabilities.md +53 -49
- package/docs/settings.md +1 -0
- package/docs/usage.md +5 -1
- package/grammars/tree-sitter-bash.wasm +0 -0
- package/grammars/tree-sitter-bash.wasm.json +3 -3
- package/package.json +19 -7
- package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/scripts/download-grammars.js +5 -0
- package/scripts/grammars.lock.json +6 -1
- package/scripts/install-selftest.mjs +33 -34
- package/scripts/lib/host-provided-deps.mjs +13 -4
- package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/dist/clients/actionable-warnings-logger.js +0 -35
- package/dist/clients/actionable-warnings.js +0 -1610
- package/dist/clients/advisory-provenance.js +0 -593
- package/dist/clients/agent-behavior-client.js +0 -147
- package/dist/clients/agent-nudge.js +0 -325
- package/dist/clients/analysed-root.js +0 -1
- package/dist/clients/ast-grep-client.js +0 -731
- package/dist/clients/ast-grep-rule-manager.js +0 -146
- package/dist/clients/ast-grep-tool-logger.js +0 -118
- package/dist/clients/ast-grep-types.js +0 -10
- package/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/dist/clients/atomic-write-staging.js +0 -75
- package/dist/clients/atomic-write.js +0 -189
- package/dist/clients/availability-probe-flight.js +0 -12
- package/dist/clients/bash-file-access.js +0 -1056
- package/dist/clients/biome-client.js +0 -357
- package/dist/clients/blocker-freshness.js +0 -837
- package/dist/clients/blocker-past-eof.js +0 -129
- package/dist/clients/bootstrap.js +0 -569
- package/dist/clients/bounded-cache.js +0 -190
- package/dist/clients/bounded-pid-file-lock.js +0 -202
- package/dist/clients/bounded-telemetry.js +0 -295
- package/dist/clients/build-identity.js +0 -95
- package/dist/clients/bundled-resource-health.js +0 -113
- package/dist/clients/bus-events-logger.js +0 -105
- package/dist/clients/bus-publish.js +0 -171
- package/dist/clients/cache/rule-cache.js +0 -190
- package/dist/clients/cache-manager.js +0 -524
- package/dist/clients/cache-observability.js +0 -1313
- package/dist/clients/call-graph.js +0 -852
- package/dist/clients/cargo-manifest.js +0 -422
- package/dist/clients/cascade-budget.js +0 -196
- package/dist/clients/cascade-format.js +0 -315
- package/dist/clients/cascade-logger.js +0 -31
- package/dist/clients/cascade-types.js +0 -9
- package/dist/clients/child-unref.js +0 -124
- package/dist/clients/code-quality-warnings.js +0 -286
- package/dist/clients/codebase-model.js +0 -173
- package/dist/clients/collateral-test-role.js +0 -40
- package/dist/clients/complexity-client.js +0 -462
- package/dist/clients/config-core/deny.js +0 -221
- package/dist/clients/config-core/index.js +0 -50
- package/dist/clients/config-core/merge.js +0 -357
- package/dist/clients/config-core/normalize.js +0 -340
- package/dist/clients/config-core/process-spec.js +0 -248
- package/dist/clients/config-core/provenance.js +0 -164
- package/dist/clients/config-core/records.js +0 -218
- package/dist/clients/config-core/resolve.js +0 -125
- package/dist/clients/config-core/safe-object.js +0 -78
- package/dist/clients/config-core/schema.js +0 -165
- package/dist/clients/config-diagnostic-codes.js +0 -285
- package/dist/clients/config-locations.js +0 -388
- package/dist/clients/config-resolve.js +0 -798
- package/dist/clients/config-schema.js +0 -251
- package/dist/clients/config-warn.js +0 -407
- package/dist/clients/console-guard-install.js +0 -26
- package/dist/clients/cooperative-budget.js +0 -42
- package/dist/clients/dead-code-client.js +0 -510
- package/dist/clients/dead-code-logger.js +0 -30
- package/dist/clients/deadline-utils.js +0 -280
- package/dist/clients/debug-handles.js +0 -211
- package/dist/clients/debug-heap.js +0 -174
- package/dist/clients/deferred-lsp-work.js +0 -106
- package/dist/clients/degradation-ledger.js +0 -426
- package/dist/clients/demoted-finding-render.js +0 -169
- package/dist/clients/dependency-checker.js +0 -885
- package/dist/clients/deps/ast-grep-napi.js +0 -22
- package/dist/clients/deps/js-yaml.js +0 -9
- package/dist/clients/deps/minimatch.js +0 -4
- package/dist/clients/deps/pi-tui.js +0 -14
- package/dist/clients/deps/typebox.js +0 -14
- package/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/dist/clients/deps/web-tree-sitter.js +0 -24
- package/dist/clients/diagnostic-dispositions.js +0 -630
- package/dist/clients/diagnostic-line-freshness.js +0 -305
- package/dist/clients/diagnostic-logger.js +0 -73
- package/dist/clients/diagnostic-tracker.js +0 -105
- package/dist/clients/diagnostics-publish.js +0 -230
- package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/dist/clients/dispatch/dispatcher.js +0 -1269
- package/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/dist/clients/dispatch/fact-runner.js +0 -30
- package/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/dist/clients/dispatch/fact-store.js +0 -377
- package/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/dist/clients/dispatch/facts/file-content.js +0 -19
- package/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/dist/clients/dispatch/finding-policy.js +0 -339
- package/dist/clients/dispatch/indent-detect.js +0 -417
- package/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/dist/clients/dispatch/integration.js +0 -2377
- package/dist/clients/dispatch/lazy.js +0 -11
- package/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/dist/clients/dispatch/plan.js +0 -278
- package/dist/clients/dispatch/priorities.js +0 -20
- package/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/dist/clients/dispatch/rule-ignores.js +0 -69
- package/dist/clients/dispatch/rule-policy.js +0 -135
- package/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/dist/clients/dispatch/runner-context.js +0 -52
- package/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/dist/clients/dispatch/runners/credo.js +0 -82
- package/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/dist/clients/dispatch/runners/detekt.js +0 -176
- package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/dist/clients/dispatch/runners/eslint.js +0 -137
- package/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/dist/clients/dispatch/runners/index.js +0 -108
- package/dist/clients/dispatch/runners/javac.js +0 -99
- package/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/dist/clients/dispatch/runners/lsp.js +0 -379
- package/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/dist/clients/dispatch/runners/mypy.js +0 -102
- package/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/dist/clients/dispatch/runners/pyright.js +0 -169
- package/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/dist/clients/dispatch/runners/ruff.js +0 -88
- package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/dist/clients/dispatch/runners/taplo.js +0 -174
- package/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/dist/clients/dispatch/runners/tflint.js +0 -125
- package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/dist/clients/dispatch/runners/utils.js +0 -15
- package/dist/clients/dispatch/runners/vale.js +0 -128
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/dist/clients/dispatch/suppress-writer.js +0 -79
- package/dist/clients/dispatch/tool-profile.js +0 -30
- package/dist/clients/dispatch/types.js +0 -21
- package/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/dist/clients/disposition-logger.js +0 -32
- package/dist/clients/disposition-publish.js +0 -124
- package/dist/clients/durable-store.js +0 -97
- package/dist/clients/effective-config.js +0 -415
- package/dist/clients/env-utils.js +0 -83
- package/dist/clients/error-class.js +0 -23
- package/dist/clients/eval-timestamp.js +0 -17
- package/dist/clients/event-loop-hold.js +0 -274
- package/dist/clients/event-loop-monitor.js +0 -250
- package/dist/clients/extension-log.js +0 -504
- package/dist/clients/extension-mode.js +0 -73
- package/dist/clients/feature-hints.js +0 -103
- package/dist/clients/file-kinds.js +0 -412
- package/dist/clients/file-role.js +0 -134
- package/dist/clients/file-time.js +0 -160
- package/dist/clients/file-utils.js +0 -1032
- package/dist/clients/finding-delivery-gate.js +0 -494
- package/dist/clients/finding-identity.js +0 -88
- package/dist/clients/fix-worklog.js +0 -103
- package/dist/clients/format-events-publish.js +0 -343
- package/dist/clients/format-service.js +0 -222
- package/dist/clients/formatters-lazy.js +0 -9
- package/dist/clients/formatters.js +0 -2032
- package/dist/clients/freshness-cadence.js +0 -17
- package/dist/clients/freshness.js +0 -38
- package/dist/clients/generated-artifacts.js +0 -394
- package/dist/clients/generation-guard.js +0 -215
- package/dist/clients/git-guard.js +0 -1136
- package/dist/clients/git-tracked-ignore.js +0 -243
- package/dist/clients/gitleaks-client.js +0 -509
- package/dist/clients/go-client.js +0 -104
- package/dist/clients/govulncheck-client.js +0 -605
- package/dist/clients/gradle-ktfmt-style.js +0 -348
- package/dist/clients/grammar-source.js +0 -465
- package/dist/clients/gzip-stage-write.js +0 -135
- package/dist/clients/hashline-anchor.js +0 -424
- package/dist/clients/hook-budgets.js +0 -76
- package/dist/clients/host-edit-normalize.js +0 -140
- package/dist/clients/host-ports.js +0 -39
- package/dist/clients/indent-retarget.js +0 -154
- package/dist/clients/inline-blocker-dispositions.js +0 -186
- package/dist/clients/install-diagnostics.js +0 -156
- package/dist/clients/installer/index.js +0 -5416
- package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/dist/clients/instance-reaper-state.js +0 -7
- package/dist/clients/instance-reaper.js +0 -1137
- package/dist/clients/instance-registry-lock.js +0 -145
- package/dist/clients/instance-registry.js +0 -773
- package/dist/clients/jscpd-client.js +0 -378
- package/dist/clients/json-cache-read.js +0 -65
- package/dist/clients/knip-client.js +0 -788
- package/dist/clients/language-policy.js +0 -252
- package/dist/clients/language-profile.js +0 -361
- package/dist/clients/language-registry.js +0 -603
- package/dist/clients/latency-logger.js +0 -727
- package/dist/clients/lazy-import.js +0 -21
- package/dist/clients/ledger-bounds.js +0 -54
- package/dist/clients/lens-config.js +0 -404
- package/dist/clients/lens-engine.js +0 -358
- package/dist/clients/lens-events.js +0 -125
- package/dist/clients/lens-flag-registry.js +0 -467
- package/dist/clients/lens-map.js +0 -1156
- package/dist/clients/live-bus-emitter.js +0 -74
- package/dist/clients/log-cleanup.js +0 -222
- package/dist/clients/lsp/aggregation.js +0 -178
- package/dist/clients/lsp/cascade-tier.js +0 -421
- package/dist/clients/lsp/client.js +0 -4593
- package/dist/clients/lsp/config.js +0 -691
- package/dist/clients/lsp/content-limits.js +0 -41
- package/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/dist/clients/lsp/document-drift.js +0 -467
- package/dist/clients/lsp/edits.js +0 -1219
- package/dist/clients/lsp/index.js +0 -8305
- package/dist/clients/lsp/inferred-project.js +0 -216
- package/dist/clients/lsp/jvm-runtime.js +0 -298
- package/dist/clients/lsp/language.js +0 -63
- package/dist/clients/lsp/launch.js +0 -746
- package/dist/clients/lsp/lombok.js +0 -158
- package/dist/clients/lsp/path-utils.js +0 -5
- package/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/dist/clients/lsp/position-encoding.js +0 -61
- package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/dist/clients/lsp/server.js +0 -3290
- package/dist/clients/lsp/session-roots.js +0 -192
- package/dist/clients/lsp/spawn-history.js +0 -17
- package/dist/clients/lsp/sync-kind.js +0 -56
- package/dist/clients/lsp/tsserver-sync.js +0 -332
- package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/dist/clients/lsp/wait-policy/index.js +0 -10
- package/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/dist/clients/lsp/watch-queue.js +0 -61
- package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/dist/clients/lsp-budget.js +0 -186
- package/dist/clients/lsp-document-symbols.js +0 -110
- package/dist/clients/lsp-lazy.js +0 -9
- package/dist/clients/lsp-mutation.js +0 -396
- package/dist/clients/lsp-status.js +0 -59
- package/dist/clients/map-with-concurrency.js +0 -40
- package/dist/clients/mcp/analyze.js +0 -420
- package/dist/clients/mcp/host-shim.js +0 -31
- package/dist/clients/mcp/ipc.js +0 -523
- package/dist/clients/mcp/review.js +0 -197
- package/dist/clients/mcp/session.js +0 -412
- package/dist/clients/memory-sampler.js +0 -208
- package/dist/clients/message-end-attribution.js +0 -30
- package/dist/clients/metrics-client.js +0 -107
- package/dist/clients/metrics-history.js +0 -327
- package/dist/clients/middle-man-analysis.js +0 -263
- package/dist/clients/model-provider.js +0 -53
- package/dist/clients/module-report-lsp.js +0 -189
- package/dist/clients/module-report.js +0 -2150
- package/dist/clients/mutating-tool.js +0 -651
- package/dist/clients/mutation-attribution.js +0 -368
- package/dist/clients/mutation-bridge.js +0 -240
- package/dist/clients/ndjson-logger.js +0 -734
- package/dist/clients/observed-mutation-sources.js +0 -101
- package/dist/clients/observed-mutation.js +0 -1253
- package/dist/clients/oldtext-autopatch.js +0 -128
- package/dist/clients/opaque-mutation-scan.js +0 -496
- package/dist/clients/opengrep-client.js +0 -333
- package/dist/clients/opengrep-config.js +0 -76
- package/dist/clients/package-manager.js +0 -607
- package/dist/clients/package-root.js +0 -38
- package/dist/clients/partial-edit-apply.js +0 -439
- package/dist/clients/path-attribution-telemetry.js +0 -43
- package/dist/clients/path-keyed-map.js +0 -108
- package/dist/clients/path-utils.js +0 -1244
- package/dist/clients/performance-report.js +0 -331
- package/dist/clients/persist-debounce.js +0 -70
- package/dist/clients/persistent-reverify.js +0 -271
- package/dist/clients/php-cs-fixer-config.js +0 -119
- package/dist/clients/pipeline.js +0 -1480
- package/dist/clients/post-autofix-notice.js +0 -37
- package/dist/clients/print-mode.js +0 -21
- package/dist/clients/probe-home-state.js +0 -228
- package/dist/clients/process-bridge.js +0 -66
- package/dist/clients/process-singletons.js +0 -210
- package/dist/clients/process-snapshot.js +0 -68
- package/dist/clients/project-changes.js +0 -181
- package/dist/clients/project-conventions.js +0 -171
- package/dist/clients/project-diagnostics/cache.js +0 -137
- package/dist/clients/project-diagnostics/extractors.js +0 -109
- package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/dist/clients/project-diagnostics/scanner.js +0 -520
- package/dist/clients/project-diagnostics/types.js +0 -1
- package/dist/clients/project-lens-config.js +0 -807
- package/dist/clients/project-report.js +0 -701
- package/dist/clients/project-scale.js +0 -237
- package/dist/clients/project-scan-policy.js +0 -11
- package/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/dist/clients/project-snapshot.js +0 -1653
- package/dist/clients/project-trust.js +0 -181
- package/dist/clients/python-environment.js +0 -217
- package/dist/clients/python-provenance.js +0 -639
- package/dist/clients/quiet-window-config.js +0 -47
- package/dist/clients/quiet-window.js +0 -236
- package/dist/clients/read-bridge.js +0 -139
- package/dist/clients/read-expansion.js +0 -266
- package/dist/clients/read-guard-logger.js +0 -251
- package/dist/clients/read-guard-tool-lines.js +0 -1306
- package/dist/clients/read-guard.js +0 -1561
- package/dist/clients/recent-touches.js +0 -240
- package/dist/clients/redact/secrets.js +0 -449
- package/dist/clients/resource-sampler.js +0 -628
- package/dist/clients/reverse-deps.js +0 -270
- package/dist/clients/review-graph/builder.js +0 -5126
- package/dist/clients/review-graph/format.js +0 -33
- package/dist/clients/review-graph/git-identity.js +0 -163
- package/dist/clients/review-graph/import-resolvers.js +0 -481
- package/dist/clients/review-graph/persist-worker.js +0 -10
- package/dist/clients/review-graph/query.js +0 -244
- package/dist/clients/review-graph/revision-drift.js +0 -21
- package/dist/clients/review-graph/service.js +0 -96
- package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/dist/clients/review-graph/symbol-id.js +0 -103
- package/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/dist/clients/review-graph/types.js +0 -1
- package/dist/clients/review-graph/workspace-modules.js +0 -449
- package/dist/clients/review-graph-logger.js +0 -81
- package/dist/clients/ruff-client.js +0 -179
- package/dist/clients/rules-scanner.js +0 -131
- package/dist/clients/run-duration.js +0 -55
- package/dist/clients/runtime-agent-end.js +0 -746
- package/dist/clients/runtime-config.js +0 -77
- package/dist/clients/runtime-context.js +0 -211
- package/dist/clients/runtime-coordinator.js +0 -1324
- package/dist/clients/runtime-session.js +0 -2485
- package/dist/clients/runtime-tool-call.js +0 -1295
- package/dist/clients/runtime-tool-result.js +0 -2049
- package/dist/clients/runtime-turn.js +0 -3767
- package/dist/clients/rust-client.js +0 -97
- package/dist/clients/safe-spawn.js +0 -2357
- package/dist/clients/sanitize.js +0 -286
- package/dist/clients/scan-utils.js +0 -25
- package/dist/clients/scratch-tree-policy.js +0 -165
- package/dist/clients/search-read-registration.js +0 -94
- package/dist/clients/secret-findings.js +0 -114
- package/dist/clients/security-scan-client.js +0 -352
- package/dist/clients/session-event-guard.js +0 -297
- package/dist/clients/session-lifecycle.js +0 -484
- package/dist/clients/session-start-observability.js +0 -94
- package/dist/clients/session-state-store.js +0 -101
- package/dist/clients/session-summary.js +0 -15
- package/dist/clients/sessionstart-logger.js +0 -27
- package/dist/clients/sg-runner.js +0 -876
- package/dist/clients/sgconfig.js +0 -347
- package/dist/clients/shared-checkout-guard.js +0 -338
- package/dist/clients/single-flight.js +0 -158
- package/dist/clients/situational-tool-telemetry.js +0 -108
- package/dist/clients/skills-resolver.js +0 -141
- package/dist/clients/slow-fs.js +0 -138
- package/dist/clients/smells-rollup.js +0 -231
- package/dist/clients/source-filter.js +0 -596
- package/dist/clients/source-walker.js +0 -211
- package/dist/clients/spawn-output-cap.js +0 -120
- package/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/dist/clients/stale-marker.js +0 -17
- package/dist/clients/startup-scan.js +0 -400
- package/dist/clients/startup-timing.js +0 -130
- package/dist/clients/string-utils.js +0 -33
- package/dist/clients/subagent-mode.js +0 -111
- package/dist/clients/symbol-containment.js +0 -24
- package/dist/clients/symbol-types.js +0 -5
- package/dist/clients/test-runner-client.js +0 -2507
- package/dist/clients/test-runner-delivery.js +0 -287
- package/dist/clients/todo-scanner.js +0 -229
- package/dist/clients/tool-agreement.js +0 -423
- package/dist/clients/tool-config.js +0 -249
- package/dist/clients/tool-cwd.js +0 -270
- package/dist/clients/tool-definition.js +0 -47
- package/dist/clients/tool-event.js +0 -105
- package/dist/clients/tool-policy.js +0 -2755
- package/dist/clients/tool-probe.js +0 -53
- package/dist/clients/tool-render.js +0 -156
- package/dist/clients/tool-set-policy.js +0 -118
- package/dist/clients/tree-sitter-cache.js +0 -364
- package/dist/clients/tree-sitter-client.js +0 -4195
- package/dist/clients/tree-sitter-logger.js +0 -100
- package/dist/clients/tree-sitter-navigator.js +0 -269
- package/dist/clients/tree-sitter-query-loader.js +0 -569
- package/dist/clients/tree-sitter-shared.js +0 -158
- package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/dist/clients/trivy-client.js +0 -467
- package/dist/clients/tui-fit.js +0 -50
- package/dist/clients/turn-context.js +0 -52
- package/dist/clients/turn-end/lane.js +0 -51
- package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/dist/clients/turn-summary-render.js +0 -72
- package/dist/clients/turn-summary.js +0 -132
- package/dist/clients/typos-config.js +0 -29
- package/dist/clients/user-notify.js +0 -51
- package/dist/clients/vanished-instance-marker.js +0 -57
- package/dist/clients/warm-attach.js +0 -305
- package/dist/clients/widget-state.js +0 -1808
- package/dist/clients/word-index-logger.js +0 -49
- package/dist/clients/word-index-store.js +0 -459
- package/dist/clients/word-index.js +0 -2080
- package/dist/clients/workspace-topology.js +0 -443
- package/dist/clients/write-ordering-guard.js +0 -65
- package/dist/clients/zizmor-config.js +0 -340
- package/dist/i18n.js +0 -69
- package/dist/mcp/build-staleness.js +0 -124
- package/dist/scripts/lib/process-scan.mjs +0 -583
- package/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/dist/tools/activate-tools.js +0 -87
- package/dist/tools/ast-grep-outline.js +0 -137
- package/dist/tools/ast-grep-replace.js +0 -244
- package/dist/tools/ast-grep-search.js +0 -762
- package/dist/tools/effective-config.js +0 -90
- package/dist/tools/lens-diagnostic-mark.js +0 -375
- package/dist/tools/lens-diagnostics.js +0 -2571
- package/dist/tools/lsp-diagnostics.js +0 -1745
- package/dist/tools/lsp-navigation.js +0 -1367
- package/dist/tools/lsp-structured-output.js +0 -294
- package/dist/tools/module-report.js +0 -382
- package/dist/tools/project-report.js +0 -86
- package/dist/tools/render-compact.js +0 -374
- package/dist/tools/scan-progress.js +0 -53
- package/dist/tools/shared.js +0 -29
- package/dist/tools/symbol-search.js +0 -155
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
import { isJstsFactFile } from "../../file-kinds.js";
|
|
2
|
-
import { findOwnerName } from "../../symbol-containment.js";
|
|
3
|
-
import { extractFactsFromTree, firstChildOfType, walk, } from "./tree-sitter-facts.js";
|
|
4
|
-
const BOUNDARY_PREFIXES = [
|
|
5
|
-
"fetch",
|
|
6
|
-
"fs.",
|
|
7
|
-
"db.",
|
|
8
|
-
"http",
|
|
9
|
-
"axios",
|
|
10
|
-
"got",
|
|
11
|
-
"req.",
|
|
12
|
-
"res.",
|
|
13
|
-
];
|
|
14
|
-
const FUNCTION_TYPES = new Set([
|
|
15
|
-
"function_declaration",
|
|
16
|
-
"method_definition",
|
|
17
|
-
"function_expression",
|
|
18
|
-
"arrow_function",
|
|
19
|
-
]);
|
|
20
|
-
// Decision points for McCabe complexity (matches the old ts.SyntaxKind set).
|
|
21
|
-
const COMPLEXITY_TYPES = new Set([
|
|
22
|
-
"if_statement",
|
|
23
|
-
"for_statement",
|
|
24
|
-
"for_in_statement", // for…of and for…in both parse to for_in_statement
|
|
25
|
-
"while_statement",
|
|
26
|
-
"do_statement",
|
|
27
|
-
"switch_case", // `case` only — `default` (switch_default) is not counted
|
|
28
|
-
"catch_clause",
|
|
29
|
-
"ternary_expression",
|
|
30
|
-
]);
|
|
31
|
-
// Control structures that increase nesting depth (matches the old set).
|
|
32
|
-
const NESTING_TYPES = new Set([
|
|
33
|
-
"if_statement",
|
|
34
|
-
"for_statement",
|
|
35
|
-
"for_in_statement",
|
|
36
|
-
"while_statement",
|
|
37
|
-
"do_statement",
|
|
38
|
-
"switch_statement",
|
|
39
|
-
"try_statement",
|
|
40
|
-
]);
|
|
41
|
-
const LOGICAL_OPERATORS = new Set(["&&", "||", "??"]);
|
|
42
|
-
/** Named children excluding comments — i.e. the "real" statements/args/expressions. */
|
|
43
|
-
function namedChildren(node) {
|
|
44
|
-
return (node.children ?? []).filter((c) => c && c.isNamed && c.type !== "comment");
|
|
45
|
-
}
|
|
46
|
-
/** First named, non-comment child (e.g. a return statement's returned expression). */
|
|
47
|
-
function firstNamedChild(node) {
|
|
48
|
-
return namedChildren(node)[0];
|
|
49
|
-
}
|
|
50
|
-
function getBody(node) {
|
|
51
|
-
// Only block-bodied functions get a summary (expression-bodied arrows have no
|
|
52
|
-
// statement_block — matching the old `!ts.isBlock(body)` skip).
|
|
53
|
-
return firstChildOfType(node, "statement_block");
|
|
54
|
-
}
|
|
55
|
-
function getParameters(node) {
|
|
56
|
-
const fp = firstChildOfType(node, "formal_parameters");
|
|
57
|
-
if (!fp)
|
|
58
|
-
return [];
|
|
59
|
-
return (fp.children ?? []).filter((c) => c &&
|
|
60
|
-
(c.type === "identifier" ||
|
|
61
|
-
c.type === "required_parameter" ||
|
|
62
|
-
c.type === "optional_parameter" ||
|
|
63
|
-
c.type === "rest_pattern" ||
|
|
64
|
-
c.type === "assignment_pattern" ||
|
|
65
|
-
// Plain JavaScript's grammar places a top-level destructured
|
|
66
|
-
// parameter directly as an object_pattern/array_pattern child
|
|
67
|
-
// of formal_parameters — no required_parameter wrapper (the TS
|
|
68
|
-
// grammar always wraps every parameter, destructured or not,
|
|
69
|
-
// which is why the wrapper types above already covered TS).
|
|
70
|
-
// Without this, `function f({a, b})` counted 0 params in JS
|
|
71
|
-
// while the TS-annotated equivalent counted correctly (#1089 P3-4).
|
|
72
|
-
c.type === "object_pattern" ||
|
|
73
|
-
c.type === "array_pattern"));
|
|
74
|
-
}
|
|
75
|
-
function parameterName(param) {
|
|
76
|
-
// JavaScript's grammar keeps a leaf parameter as the identifier itself;
|
|
77
|
-
// there is no named child to unwrap. TypeScript parameter wrapper nodes still
|
|
78
|
-
// use their first named child (type annotation/default/rest target).
|
|
79
|
-
return param.type === "identifier"
|
|
80
|
-
? param.text
|
|
81
|
-
: (firstNamedChild(param)?.text ?? "");
|
|
82
|
-
}
|
|
83
|
-
function getFunctionName(node) {
|
|
84
|
-
if (node.type === "function_declaration") {
|
|
85
|
-
return firstChildOfType(node, "identifier")?.text ?? "<anonymous>";
|
|
86
|
-
}
|
|
87
|
-
if (node.type === "method_definition") {
|
|
88
|
-
// The name is the child just before formal_parameters (property_identifier /
|
|
89
|
-
// private / computed / string / number); skip async/get/set modifiers.
|
|
90
|
-
const kids = node.children ?? [];
|
|
91
|
-
const paramsIdx = kids.findIndex((c) => c?.type === "formal_parameters");
|
|
92
|
-
for (let i = paramsIdx - 1; i >= 0; i -= 1) {
|
|
93
|
-
const t = kids[i]?.type;
|
|
94
|
-
if (t === "property_identifier" ||
|
|
95
|
-
t === "private_property_identifier" ||
|
|
96
|
-
t === "computed_property_name" ||
|
|
97
|
-
t === "string" ||
|
|
98
|
-
t === "number") {
|
|
99
|
-
return kids[i].text;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return "<anonymous>";
|
|
103
|
-
}
|
|
104
|
-
if (node.type === "arrow_function" || node.type === "function_expression") {
|
|
105
|
-
// Name comes from the binding site (like the old parent-based lookup):
|
|
106
|
-
// `const f = () => …` / `{ prop: () => … }`.
|
|
107
|
-
const parent = node.parent;
|
|
108
|
-
if (parent?.type === "variable_declarator") {
|
|
109
|
-
const id = firstChildOfType(parent, "identifier");
|
|
110
|
-
if (id)
|
|
111
|
-
return id.text;
|
|
112
|
-
}
|
|
113
|
-
else if (parent?.type === "pair") {
|
|
114
|
-
const key = (parent.children ?? [])[0];
|
|
115
|
-
if (key)
|
|
116
|
-
return key.text;
|
|
117
|
-
}
|
|
118
|
-
return "<anonymous>";
|
|
119
|
-
}
|
|
120
|
-
return "<unknown>";
|
|
121
|
-
}
|
|
122
|
-
function isCallPassThrough(stmt, paramNames) {
|
|
123
|
-
if (stmt.type !== "return_statement")
|
|
124
|
-
return { pass: false };
|
|
125
|
-
const expr = firstNamedChild(stmt);
|
|
126
|
-
if (!expr || expr.type !== "call_expression")
|
|
127
|
-
return { pass: false };
|
|
128
|
-
const argsNode = firstChildOfType(expr, "arguments");
|
|
129
|
-
const args = argsNode ? namedChildren(argsNode).map((a) => a.text) : [];
|
|
130
|
-
if (args.length !== paramNames.length)
|
|
131
|
-
return { pass: false };
|
|
132
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
133
|
-
if (args[i] !== paramNames[i])
|
|
134
|
-
return { pass: false };
|
|
135
|
-
}
|
|
136
|
-
return { pass: true, target: (expr.children ?? [])[0]?.text };
|
|
137
|
-
}
|
|
138
|
-
export function calcCyclomaticComplexity(body) {
|
|
139
|
-
let cc = 1;
|
|
140
|
-
walk(body, (node) => {
|
|
141
|
-
if (COMPLEXITY_TYPES.has(node.type)) {
|
|
142
|
-
cc++;
|
|
143
|
-
}
|
|
144
|
-
else if (node.type === "binary_expression") {
|
|
145
|
-
if ((node.children ?? []).some((c) => LOGICAL_OPERATORS.has(c?.type))) {
|
|
146
|
-
cc++;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
return cc;
|
|
151
|
-
}
|
|
152
|
-
function calcMaxNestingDepth(body) {
|
|
153
|
-
let maxDepth = 0;
|
|
154
|
-
const walkDepth = (node, depth) => {
|
|
155
|
-
if (depth > maxDepth)
|
|
156
|
-
maxDepth = depth;
|
|
157
|
-
const next = NESTING_TYPES.has(node.type) ? depth + 1 : depth;
|
|
158
|
-
for (const child of node.children ?? []) {
|
|
159
|
-
if (child)
|
|
160
|
-
walkDepth(child, next);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
// Start at the body's children at depth 0 (the body block itself isn't counted).
|
|
164
|
-
for (const child of body.children ?? []) {
|
|
165
|
-
if (child)
|
|
166
|
-
walkDepth(child, 0);
|
|
167
|
-
}
|
|
168
|
-
return maxDepth;
|
|
169
|
-
}
|
|
170
|
-
function collectOutgoingCalls(body) {
|
|
171
|
-
const calls = new Set();
|
|
172
|
-
walk(body, (node) => {
|
|
173
|
-
if (node.type === "call_expression") {
|
|
174
|
-
const callee = (node.children ?? [])[0]?.text ?? "";
|
|
175
|
-
if (callee.length < 80)
|
|
176
|
-
calls.add(callee);
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
return [...calls];
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* `obj.method()` call sites with a simple-identifier receiver (refs #655
|
|
183
|
-
* phase 2). Only the plain shape `identifier.identifier(...)` is captured —
|
|
184
|
-
* chained (`a.b.c()`), computed (`a[x]()`), and `this.`-receiver calls are
|
|
185
|
-
* left out of this list (they still show up in `outgoingCalls`'s flattened
|
|
186
|
-
* text form as before); those richer shapes need real type inference to
|
|
187
|
-
* resolve safely, which is out of scope for this bounded slice.
|
|
188
|
-
*/
|
|
189
|
-
function collectMemberCallSites(body) {
|
|
190
|
-
const sites = [];
|
|
191
|
-
walk(body, (node) => {
|
|
192
|
-
if (node.type !== "call_expression")
|
|
193
|
-
return;
|
|
194
|
-
const callee = (node.children ?? [])[0];
|
|
195
|
-
if (!callee || callee.type !== "member_expression")
|
|
196
|
-
return;
|
|
197
|
-
const object = (callee.children ?? [])[0];
|
|
198
|
-
const property = (callee.children ?? []).find((c) => c?.type === "property_identifier");
|
|
199
|
-
if (!object || object.type !== "identifier" || !property)
|
|
200
|
-
return;
|
|
201
|
-
sites.push({ receiver: object.text, method: property.text });
|
|
202
|
-
});
|
|
203
|
-
return sites;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Best-effort receiver -> class-name map for one function (refs #655 phase
|
|
207
|
-
* 2). Two clear, common shapes only — see {@link FunctionSummary.receiverTypes}.
|
|
208
|
-
*/
|
|
209
|
-
function collectReceiverTypes(body, params) {
|
|
210
|
-
const types = {};
|
|
211
|
-
for (const param of params) {
|
|
212
|
-
const id = firstNamedChild(param);
|
|
213
|
-
if (!id || id.type !== "identifier")
|
|
214
|
-
continue;
|
|
215
|
-
const typeAnnotation = (param.children ?? []).find((c) => c?.type === "type_annotation");
|
|
216
|
-
const typeId = typeAnnotation
|
|
217
|
-
? firstChildOfType(typeAnnotation, "type_identifier")
|
|
218
|
-
: undefined;
|
|
219
|
-
if (typeId)
|
|
220
|
-
types[id.text] = typeId.text;
|
|
221
|
-
}
|
|
222
|
-
walk(body, (node) => {
|
|
223
|
-
if (node.type !== "variable_declarator")
|
|
224
|
-
return;
|
|
225
|
-
const id = firstChildOfType(node, "identifier");
|
|
226
|
-
if (!id)
|
|
227
|
-
return;
|
|
228
|
-
const value = (node.children ?? []).find((c) => c?.type === "new_expression");
|
|
229
|
-
if (!value)
|
|
230
|
-
return;
|
|
231
|
-
const ctor = firstNamedChild(value);
|
|
232
|
-
if (ctor?.type === "identifier")
|
|
233
|
-
types[id.text] = ctor.text;
|
|
234
|
-
});
|
|
235
|
-
return types;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Does this function/method declaration have an explicit `: Promise<...>`
|
|
239
|
-
* return type? The `type_annotation` for a return type is a DIRECT child of
|
|
240
|
-
* the function node itself (after `formal_parameters`, before the body) —
|
|
241
|
-
* distinct from a parameter's own `type_annotation`, which is nested inside
|
|
242
|
-
* `formal_parameters` and therefore invisible to `firstChildOfType` here.
|
|
243
|
-
*/
|
|
244
|
-
function hasExplicitPromiseReturnType(node) {
|
|
245
|
-
const returnType = firstChildOfType(node, "type_annotation");
|
|
246
|
-
if (!returnType)
|
|
247
|
-
return false;
|
|
248
|
-
return /:\s*Promise\b/.test(returnType.text);
|
|
249
|
-
}
|
|
250
|
-
function hasAwaitInNode(node) {
|
|
251
|
-
let found = false;
|
|
252
|
-
walk(node, (n) => {
|
|
253
|
-
if (n.type === "await_expression")
|
|
254
|
-
found = true;
|
|
255
|
-
});
|
|
256
|
-
return found;
|
|
257
|
-
}
|
|
258
|
-
function hasReturnAwaitCall(node) {
|
|
259
|
-
let found = false;
|
|
260
|
-
walk(node, (n) => {
|
|
261
|
-
if (n.type !== "return_statement")
|
|
262
|
-
return;
|
|
263
|
-
const ret = firstNamedChild(n);
|
|
264
|
-
if (ret?.type !== "await_expression")
|
|
265
|
-
return;
|
|
266
|
-
const awaited = firstNamedChild(ret);
|
|
267
|
-
if (awaited?.type === "call_expression")
|
|
268
|
-
found = true;
|
|
269
|
-
});
|
|
270
|
-
return found;
|
|
271
|
-
}
|
|
272
|
-
export const functionFactProvider = {
|
|
273
|
-
id: "fact.file.functions",
|
|
274
|
-
provides: ["file.functionSummaries", "file.functionFactsCoverage"],
|
|
275
|
-
requires: ["file.content"],
|
|
276
|
-
appliesTo(ctx) {
|
|
277
|
-
return isJstsFactFile(ctx.filePath);
|
|
278
|
-
},
|
|
279
|
-
async run(ctx, store) {
|
|
280
|
-
await extractFactsFromTree(ctx, store, { "file.functionSummaries": [] }, (root) => {
|
|
281
|
-
const summaries = [];
|
|
282
|
-
// Class/interface declarations, collected in the SAME walk over the
|
|
283
|
-
// already-parsed tree (refs #655 phase 2) so owner/qualified-name
|
|
284
|
-
// computation for jsts needs no second parse — see
|
|
285
|
-
// `symbol-containment.ts`'s doc comment for why this can't literally
|
|
286
|
-
// share code with module-report.ts's tree-sitter-symbol-extractor path
|
|
287
|
-
// (different tree-sitter integration), only the same algorithm.
|
|
288
|
-
const containers = [];
|
|
289
|
-
const addSummary = (node) => {
|
|
290
|
-
const body = getBody(node);
|
|
291
|
-
if (!body)
|
|
292
|
-
return;
|
|
293
|
-
const params = getParameters(node);
|
|
294
|
-
const paramNames = params.map(parameterName);
|
|
295
|
-
const statements = namedChildren(body);
|
|
296
|
-
const statementCount = statements.length;
|
|
297
|
-
const passThrough = statementCount === 1
|
|
298
|
-
? isCallPassThrough(statements[0], paramNames)
|
|
299
|
-
: { pass: false };
|
|
300
|
-
const target = passThrough.target ?? "";
|
|
301
|
-
const lowerTarget = target.toLowerCase();
|
|
302
|
-
const isBoundaryWrapper = BOUNDARY_PREFIXES.some((prefix) => lowerTarget.startsWith(prefix));
|
|
303
|
-
summaries.push({
|
|
304
|
-
name: getFunctionName(node),
|
|
305
|
-
line: node.startPosition.row + 1,
|
|
306
|
-
column: node.startPosition.column + 1,
|
|
307
|
-
endLine: body.endPosition.row + 1,
|
|
308
|
-
isAsync: Boolean(firstChildOfType(node, "async")),
|
|
309
|
-
hasAwait: hasAwaitInNode(body),
|
|
310
|
-
hasReturnAwaitCall: hasReturnAwaitCall(body),
|
|
311
|
-
statementCount,
|
|
312
|
-
parameterCount: params.length,
|
|
313
|
-
isPassThroughWrapper: passThrough.pass,
|
|
314
|
-
passThroughTarget: passThrough.target,
|
|
315
|
-
isBoundaryWrapper,
|
|
316
|
-
hasExplicitPromiseReturnType: hasExplicitPromiseReturnType(node),
|
|
317
|
-
cyclomaticComplexity: calcCyclomaticComplexity(body),
|
|
318
|
-
maxNestingDepth: calcMaxNestingDepth(body),
|
|
319
|
-
outgoingCalls: collectOutgoingCalls(body),
|
|
320
|
-
memberCallSites: collectMemberCallSites(body),
|
|
321
|
-
receiverTypes: collectReceiverTypes(body, params),
|
|
322
|
-
});
|
|
323
|
-
};
|
|
324
|
-
walk(root, (node) => {
|
|
325
|
-
if (FUNCTION_TYPES.has(node.type))
|
|
326
|
-
addSummary(node);
|
|
327
|
-
if (node.type === "class_declaration" ||
|
|
328
|
-
node.type === "interface_declaration") {
|
|
329
|
-
const nameNode = firstChildOfType(node, "type_identifier") ??
|
|
330
|
-
firstChildOfType(node, "identifier");
|
|
331
|
-
if (nameNode) {
|
|
332
|
-
containers.push({
|
|
333
|
-
name: nameNode.text,
|
|
334
|
-
startLine: node.startPosition.row + 1,
|
|
335
|
-
endLine: node.endPosition.row + 1,
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
});
|
|
340
|
-
for (const summary of summaries) {
|
|
341
|
-
const owner = findOwnerName(containers, summary.line, summary.endLine ?? summary.line);
|
|
342
|
-
if (owner)
|
|
343
|
-
summary.owner = owner;
|
|
344
|
-
}
|
|
345
|
-
return { "file.functionSummaries": summaries };
|
|
346
|
-
}, "file.functionFactsCoverage");
|
|
347
|
-
},
|
|
348
|
-
};
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { logLatency } from "../../latency-logger.js";
|
|
2
|
-
import { isJstsFactFile } from "../../file-kinds.js";
|
|
3
|
-
import { childrenOfType, firstChildOfType, withFactTree, walk, } from "./tree-sitter-facts.js";
|
|
4
|
-
/** Whether the import-facts provider applies to a source path. */
|
|
5
|
-
export function importFactsApplyTo(filePath) {
|
|
6
|
-
return isJstsFactFile(filePath);
|
|
7
|
-
}
|
|
8
|
-
function stripQuotes(raw) {
|
|
9
|
-
return raw.replace(/^["'`]+|["'`]+$/g, "");
|
|
10
|
-
}
|
|
11
|
-
/** Parse a top-level `import_statement` node into an ImportEntry. */
|
|
12
|
-
function parseStaticImport(node, moduleType) {
|
|
13
|
-
const sourceNode = firstChildOfType(node, "string");
|
|
14
|
-
if (!sourceNode)
|
|
15
|
-
return null;
|
|
16
|
-
const source = stripQuotes(sourceNode.text);
|
|
17
|
-
const clause = firstChildOfType(node, "import_clause");
|
|
18
|
-
if (!clause) {
|
|
19
|
-
// `import "reflect-metadata";` — side-effect only, no bindings.
|
|
20
|
-
return { source, names: [], moduleType };
|
|
21
|
-
}
|
|
22
|
-
const entry = { source, names: [], moduleType };
|
|
23
|
-
for (const child of clause.children ?? []) {
|
|
24
|
-
if (!child)
|
|
25
|
-
continue;
|
|
26
|
-
if (child.type === "identifier") {
|
|
27
|
-
// `import React from ...` — default binding is a bare identifier.
|
|
28
|
-
entry.defaultName = child.text;
|
|
29
|
-
}
|
|
30
|
-
else if (child.type === "namespace_import") {
|
|
31
|
-
// `import * as fs from ...`
|
|
32
|
-
const id = firstChildOfType(child, "identifier");
|
|
33
|
-
if (id)
|
|
34
|
-
entry.namespace = id.text;
|
|
35
|
-
}
|
|
36
|
-
else if (child.type === "named_imports") {
|
|
37
|
-
// `import { a, b as c } from ...` — the local binding is the alias when
|
|
38
|
-
// present (last identifier of the specifier), else the imported name.
|
|
39
|
-
for (const spec of childrenOfType(child, "import_specifier")) {
|
|
40
|
-
const ids = childrenOfType(spec, "identifier");
|
|
41
|
-
const local = ids.length ? ids[ids.length - 1].text : undefined;
|
|
42
|
-
if (local)
|
|
43
|
-
entry.names.push(local);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return entry;
|
|
48
|
-
}
|
|
49
|
-
/** Parse a top-level `export_statement` into a ReExportEntry, or null if it isn't a
|
|
50
|
-
* re-export (a plain `export const x` has no `from` source). */
|
|
51
|
-
function parseReExport(node) {
|
|
52
|
-
const sourceNode = firstChildOfType(node, "string");
|
|
53
|
-
if (!sourceNode)
|
|
54
|
-
return null; // not `export ... from '...'`
|
|
55
|
-
const source = stripQuotes(sourceNode.text);
|
|
56
|
-
const clause = firstChildOfType(node, "export_clause");
|
|
57
|
-
if (!clause) {
|
|
58
|
-
// `export * from '...'`
|
|
59
|
-
return { source, names: [] };
|
|
60
|
-
}
|
|
61
|
-
const names = [];
|
|
62
|
-
for (const spec of childrenOfType(clause, "export_specifier")) {
|
|
63
|
-
const ids = childrenOfType(spec, "identifier");
|
|
64
|
-
// Exported name is the alias when present (`a as b` → b), else the name.
|
|
65
|
-
const name = ids.length ? ids[ids.length - 1].text : undefined;
|
|
66
|
-
if (name)
|
|
67
|
-
names.push(name);
|
|
68
|
-
}
|
|
69
|
-
return { source, names };
|
|
70
|
-
}
|
|
71
|
-
export const importFactProvider = {
|
|
72
|
-
id: "fact.file.imports",
|
|
73
|
-
provides: ["file.imports", "file.reexports", "file.importFactsCoverage"],
|
|
74
|
-
requires: ["file.content"],
|
|
75
|
-
appliesTo(ctx) {
|
|
76
|
-
return importFactsApplyTo(ctx.filePath);
|
|
77
|
-
},
|
|
78
|
-
async run(ctx, store) {
|
|
79
|
-
const content = store.getFileFact(ctx.filePath, "file.content");
|
|
80
|
-
const setEmpty = (complete = false) => {
|
|
81
|
-
store.setFileFact(ctx.filePath, "file.imports", []);
|
|
82
|
-
store.setFileFact(ctx.filePath, "file.reexports", []);
|
|
83
|
-
store.setFileFact(ctx.filePath, "file.importFactsCoverage", complete ? "complete" : "unavailable");
|
|
84
|
-
};
|
|
85
|
-
if (content == null) {
|
|
86
|
-
setEmpty();
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// Grammar unavailable / parse failed / wasm aborted — degrade to empty
|
|
90
|
-
// (there is no typescript-compiler fallback by design, #402).
|
|
91
|
-
const parsed = await withFactTree(ctx.filePath, content, (root) => {
|
|
92
|
-
// --- module-type detection + static import/re-export node collection ---
|
|
93
|
-
let hasEsm = false;
|
|
94
|
-
let hasCjs = false;
|
|
95
|
-
const importNodes = [];
|
|
96
|
-
const reExportNodes = [];
|
|
97
|
-
for (const child of root.children ?? []) {
|
|
98
|
-
if (!child)
|
|
99
|
-
continue;
|
|
100
|
-
if (child.type === "import_statement") {
|
|
101
|
-
hasEsm = true;
|
|
102
|
-
importNodes.push(child);
|
|
103
|
-
}
|
|
104
|
-
else if (child.type === "export_statement") {
|
|
105
|
-
const isReExport = Boolean(firstChildOfType(child, "string"));
|
|
106
|
-
// `export { x }` / `export * from` / `export { x } from` are ESM
|
|
107
|
-
// declarations (like TS's isExportDeclaration); `export const x` /
|
|
108
|
-
// `export default` (a wrapped declaration) is NOT counted here.
|
|
109
|
-
if (isReExport || firstChildOfType(child, "export_clause")) {
|
|
110
|
-
hasEsm = true;
|
|
111
|
-
}
|
|
112
|
-
if (isReExport)
|
|
113
|
-
reExportNodes.push(child);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// --- dynamic import() / require() / module.exports (anywhere in the tree) ---
|
|
117
|
-
const dynamicRaw = [];
|
|
118
|
-
walk(root, (node) => {
|
|
119
|
-
if (node.type === "call_expression") {
|
|
120
|
-
const callee = node.children?.[0];
|
|
121
|
-
const args = firstChildOfType(node, "arguments");
|
|
122
|
-
const strArg = args ? firstChildOfType(args, "string") : undefined;
|
|
123
|
-
if (!strArg)
|
|
124
|
-
return; // non-string arg (e.g. template literal) — skip
|
|
125
|
-
const source = stripQuotes(strArg.text);
|
|
126
|
-
if (callee?.type === "import") {
|
|
127
|
-
dynamicRaw.push({ source, kind: "import" });
|
|
128
|
-
}
|
|
129
|
-
else if (callee?.type === "identifier" &&
|
|
130
|
-
callee.text === "require") {
|
|
131
|
-
dynamicRaw.push({ source, kind: "require" });
|
|
132
|
-
hasCjs = true;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else if (node.type === "member_expression") {
|
|
136
|
-
// module.exports = ...
|
|
137
|
-
const obj = node.children?.[0];
|
|
138
|
-
if (obj?.type === "identifier" && obj.text === "module") {
|
|
139
|
-
const prop = firstChildOfType(node, "property_identifier");
|
|
140
|
-
if (prop?.text === "exports")
|
|
141
|
-
hasCjs = true;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
const moduleType = hasEsm && !hasCjs
|
|
146
|
-
? "esm"
|
|
147
|
-
: hasCjs && !hasEsm
|
|
148
|
-
? "cjs"
|
|
149
|
-
: hasEsm || hasCjs
|
|
150
|
-
? "esm" // mixed — static imports present, treat as ESM
|
|
151
|
-
: "unknown";
|
|
152
|
-
// --- build entries ---
|
|
153
|
-
const imports = [];
|
|
154
|
-
for (const node of importNodes) {
|
|
155
|
-
const entry = parseStaticImport(node, moduleType);
|
|
156
|
-
if (entry)
|
|
157
|
-
imports.push(entry);
|
|
158
|
-
}
|
|
159
|
-
let dynamicCount = 0;
|
|
160
|
-
for (const d of dynamicRaw) {
|
|
161
|
-
if (d.kind === "import") {
|
|
162
|
-
imports.push({
|
|
163
|
-
source: d.source,
|
|
164
|
-
names: [],
|
|
165
|
-
isDynamic: true,
|
|
166
|
-
moduleType,
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
imports.push({ source: d.source, names: [], moduleType: "cjs" });
|
|
171
|
-
}
|
|
172
|
-
dynamicCount++;
|
|
173
|
-
}
|
|
174
|
-
store.setFileFact(ctx.filePath, "file.imports", imports);
|
|
175
|
-
const reexports = [];
|
|
176
|
-
for (const node of reExportNodes) {
|
|
177
|
-
const r = parseReExport(node);
|
|
178
|
-
if (r)
|
|
179
|
-
reexports.push(r);
|
|
180
|
-
}
|
|
181
|
-
store.setFileFact(ctx.filePath, "file.reexports", reexports);
|
|
182
|
-
// Telemetry: log when a file has dynamic imports or re-exports so we can
|
|
183
|
-
// measure coverage and validate the implementation across real projects.
|
|
184
|
-
if (dynamicCount > 0 || reexports.length > 0) {
|
|
185
|
-
logLatency({
|
|
186
|
-
type: "call_graph_facts",
|
|
187
|
-
filePath: ctx.filePath,
|
|
188
|
-
durationMs: 0,
|
|
189
|
-
metadata: {
|
|
190
|
-
moduleType,
|
|
191
|
-
staticImports: imports.length - dynamicCount,
|
|
192
|
-
dynamicImports: dynamicCount,
|
|
193
|
-
reexports: reexports.length,
|
|
194
|
-
starReexports: reexports.filter((r) => r.names.length === 0).length,
|
|
195
|
-
},
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
if (!parsed.parsed)
|
|
200
|
-
setEmpty();
|
|
201
|
-
else
|
|
202
|
-
store.setFileFact(ctx.filePath, "file.importFactsCoverage", "complete");
|
|
203
|
-
},
|
|
204
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fact-provider-specific tree-sitter helper (#402).
|
|
3
|
-
*
|
|
4
|
-
* The generic node-walk utilities (`walk`, `childrenOfType`, `firstChildOfType`,
|
|
5
|
-
* `withTreeSitterRoot`, `TsNode`) live in `clients/tree-sitter-shared.ts` so both
|
|
6
|
-
* the fact extractors and the complexity client share them. This module re-exports
|
|
7
|
-
* them for the extractors and adds the FactProvider-specific `extractFactsFromTree`
|
|
8
|
-
* shell.
|
|
9
|
-
*/
|
|
10
|
-
import { childrenOfType, firstChildOfType, withTreeSitterRoot, walk, } from "../../tree-sitter-shared.js";
|
|
11
|
-
export { childrenOfType, firstChildOfType, walk };
|
|
12
|
-
export const withFactTree = withTreeSitterRoot;
|
|
13
|
-
/**
|
|
14
|
-
* Provider shell for tree-sitter-backed fact extractors: read `file.content`,
|
|
15
|
-
* parse via the shared client, and hand the root node to `extract`. On empty
|
|
16
|
-
* content / parse failure / wasm abort it writes the empty `defaults` and returns
|
|
17
|
-
* (there is no typescript-compiler fallback by design, #402). Centralising this
|
|
18
|
-
* keeps each provider to just its extraction logic (and de-duplicates the prologue).
|
|
19
|
-
*/
|
|
20
|
-
export async function extractFactsFromTree(ctx, store, defaults, extract, coverageFact) {
|
|
21
|
-
const writeAll = (facts, complete) => {
|
|
22
|
-
for (const key of Object.keys(defaults)) {
|
|
23
|
-
store.setFileFact(ctx.filePath, key, facts[key] ?? defaults[key]);
|
|
24
|
-
}
|
|
25
|
-
if (coverageFact) {
|
|
26
|
-
store.setFileFact(ctx.filePath, coverageFact, complete ? "complete" : "unavailable");
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
const content = store.getFileFact(ctx.filePath, "file.content");
|
|
30
|
-
if (content == null)
|
|
31
|
-
return writeAll(defaults, false);
|
|
32
|
-
const parsed = await withFactTree(ctx.filePath, content, (root) => extract(root, content));
|
|
33
|
-
writeAll(parsed.parsed ? parsed.value : defaults, parsed.parsed);
|
|
34
|
-
}
|