pi-lens 4.3.0 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1159 -0
- package/README.md +116 -25
- package/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/dist/chunk-2BEMIWEW.js +51 -0
- package/dist/chunk-2EECBNC5.js +89 -0
- package/dist/chunk-2FQ62SPM.js +83 -0
- package/dist/chunk-2UMYMRI3.js +118 -0
- package/dist/chunk-34OCDWOS.js +48 -0
- package/dist/chunk-3FERWMCH.js +144 -0
- package/dist/chunk-3JL6IFD7.js +97 -0
- package/dist/chunk-3JSEWUWI.js +327 -0
- package/dist/chunk-3MED75HT.js +37 -0
- package/dist/chunk-3MRXIJ6I.js +79 -0
- package/dist/chunk-3P4PF2BX.js +2250 -0
- package/dist/chunk-3PNFWVHT.js +201 -0
- package/dist/chunk-3TTPKMEF.js +162 -0
- package/dist/chunk-5JHXUETW.js +326 -0
- package/dist/chunk-5W3R6LFT.js +24 -0
- package/dist/chunk-64LU2OVH.js +341 -0
- package/dist/chunk-6B5I6ICN.js +44 -0
- package/dist/chunk-6P54TMWL.js +274 -0
- package/dist/chunk-6UYA642J.js +145 -0
- package/dist/chunk-6XX5HCLK.js +398 -0
- package/dist/chunk-7AXO3ZDF.js +30 -0
- package/dist/chunk-7BX5DWSA.js +1907 -0
- package/dist/chunk-7ELY2CSM.js +902 -0
- package/dist/chunk-7M4T5N3V.js +38 -0
- package/dist/chunk-7U2IDNXN.js +37 -0
- package/dist/chunk-ABBOA7UD.js +157 -0
- package/dist/chunk-AFZYMAIV.js +756 -0
- package/dist/chunk-ALQRYH6O.js +112 -0
- package/dist/chunk-AXKPQ6ZI.js +1610 -0
- package/dist/chunk-BHWHXMQ2.js +62 -0
- package/dist/chunk-BJF25SUG.js +22 -0
- package/dist/chunk-BNKLYOOO.js +18 -0
- package/dist/chunk-BW5KFIQC.js +59 -0
- package/dist/chunk-CBD2B5CP.js +599 -0
- package/dist/chunk-CFYISHUW.js +42 -0
- package/dist/chunk-CMU4RMJB.js +30 -0
- package/dist/chunk-CULQYFLU.js +14 -0
- package/dist/chunk-D65GOCJB.js +289 -0
- package/dist/chunk-D6YF5HKX.js +59 -0
- package/dist/chunk-DMS52BEP.js +342 -0
- package/dist/chunk-ELVWJYRV.js +211 -0
- package/dist/chunk-EUT3B22Y.js +27 -0
- package/dist/chunk-F5VLZHUW.js +146 -0
- package/dist/chunk-FC4RP4I2.js +12 -0
- package/dist/chunk-FGALODG3.js +55 -0
- package/dist/chunk-G3RLJYA2.js +2358 -0
- package/dist/chunk-GAYGGICG.js +32 -0
- package/dist/chunk-H2W2AXD3.js +419 -0
- package/dist/chunk-H5EV3VMF.js +114 -0
- package/dist/chunk-HREZQCT3.js +106 -0
- package/dist/chunk-HSIRMK2D.js +517 -0
- package/dist/chunk-IMSQR4WO.js +184 -0
- package/dist/chunk-IQZXOZ7S.js +4816 -0
- package/dist/chunk-IR6XFA5P.js +37 -0
- package/dist/chunk-IUKPRZER.js +78 -0
- package/dist/chunk-IUR76K6A.js +262 -0
- package/dist/chunk-J3FZR3YY.js +98 -0
- package/dist/chunk-J6DFZDFA.js +562 -0
- package/dist/chunk-J7WJZ6W7.js +50 -0
- package/dist/chunk-JONGANYH.js +202 -0
- package/dist/chunk-KJCWXUUS.js +425 -0
- package/dist/chunk-KJN4IOEJ.js +17 -0
- package/dist/chunk-KMGPUKFD.js +25 -0
- package/dist/chunk-LD7WFTRX.js +4533 -0
- package/dist/chunk-LJDODBBZ.js +78 -0
- package/dist/chunk-LNOMA3MP.js +169 -0
- package/dist/chunk-MGIWSROG.js +2334 -0
- package/dist/chunk-MQA2YBAH.js +308 -0
- package/dist/chunk-MTDRLSI7.js +21720 -0
- package/dist/chunk-N2IRDBZI.js +2355 -0
- package/dist/chunk-N77WFUL7.js +50 -0
- package/dist/chunk-N7YNJE5R.js +466 -0
- package/dist/chunk-NABLC7W3.js +148 -0
- package/dist/chunk-NFXP47RV.js +999 -0
- package/dist/chunk-NJF2X5XF.js +45 -0
- package/dist/chunk-NXL4FFQQ.js +47 -0
- package/dist/chunk-O7HZX7CA.js +309 -0
- package/dist/chunk-OC7LYAU5.js +708 -0
- package/dist/chunk-OEX24ECI.js +348 -0
- package/dist/chunk-OYOB3ZFG.js +78 -0
- package/dist/chunk-OYTMZXRF.js +41 -0
- package/dist/chunk-OZJINN4O.js +84 -0
- package/dist/chunk-PCHDGUKT.js +23 -0
- package/dist/chunk-QOZXJ4NA.js +3364 -0
- package/dist/chunk-QYF5S6P6.js +45 -0
- package/dist/chunk-RJFED73B.js +79 -0
- package/dist/chunk-RTQNRM5X.js +27 -0
- package/dist/chunk-S6AMWKPC.js +189 -0
- package/dist/chunk-T4QZ6FEH.js +308 -0
- package/dist/chunk-T54VJRAD.js +5456 -0
- package/dist/chunk-TA5L5KWQ.js +167 -0
- package/dist/chunk-TQFBZVCG.js +27 -0
- package/dist/chunk-U52SAGRM.js +62 -0
- package/dist/chunk-UEAHAMEI.js +5814 -0
- package/dist/chunk-UGSMCQ4D.js +327 -0
- package/dist/chunk-UOPVJQ4N.js +103 -0
- package/dist/chunk-USHG4DLH.js +459 -0
- package/dist/chunk-UXVNL3D7.js +23 -0
- package/dist/chunk-V5MEBST3.js +4139 -0
- package/dist/chunk-VGEVL5EQ.js +29 -0
- package/dist/chunk-VPWKF3GN.js +87 -0
- package/dist/chunk-VSMJK3ZJ.js +1250 -0
- package/dist/chunk-VYKKMYVT.js +560 -0
- package/dist/chunk-VZHJS6DR.js +442 -0
- package/dist/chunk-WATC3IQR.js +213 -0
- package/dist/chunk-WPE5FPGR.js +54 -0
- package/dist/chunk-WSEWKCXU.js +188 -0
- package/dist/chunk-WW5BLB74.js +659 -0
- package/dist/chunk-XGUL4SLQ.js +406 -0
- package/dist/chunk-XHSCVSOL.js +170 -0
- package/dist/chunk-XIMYZ3JA.js +27 -0
- package/dist/chunk-YLN4K6WD.js +385 -0
- package/dist/chunk-Z3CCVDUB.js +76 -0
- package/dist/chunk-Z54ZSOBZ.js +61 -0
- package/dist/chunk-Z6BB4JLQ.js +478 -0
- package/dist/chunk-Z7QQA2KT.js +27 -0
- package/dist/chunk-ZETYB3XG.js +2626 -0
- package/dist/chunk-ZMOMPX2Z.js +87 -0
- package/dist/chunk-ZOEYVXSV.js +149 -0
- package/dist/chunk-ZZUFZUQZ.js +12120 -0
- package/dist/index.js +39712 -29876
- package/dist/mcp/analyze-cli.js +186 -232
- package/dist/mcp/cli.js +137 -98
- package/dist/mcp/server.js +22688 -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 +5 -4
- package/docs/configuration.md +28 -2
- package/docs/custom-rules.md +25 -2
- package/docs/environment-variables.md +86 -8
- package/docs/features.md +45 -5
- package/docs/globalconfig.md +2 -1
- package/docs/io-bridge-v2-migration.md +94 -0
- package/docs/lsp-capability-matrix.md +37 -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 +160 -88
- package/docs/pi-lens-investigator.md +74 -26
- package/docs/pi-lens-merge-policy.md +736 -0
- package/docs/pi-lens-monitor.md +75 -7
- package/docs/pi-lens-retro.md +6 -4
- package/docs/pi-lens-reviewer.md +189 -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/schema/pi-lens-config-v1.json +530 -0
- package/docs/servercapabilities.md +56 -49
- package/docs/settings.md +1 -0
- package/docs/usage.md +5 -1
- package/docs/word-index.md +6 -0
- 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/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
- package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
- package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
- package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
- package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
- package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
- 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,11 +0,0 @@
|
|
|
1
|
-
/** Lazy dispatch integration seam for startup-cost control (#1394). */
|
|
2
|
-
import { createLazyImport } from "../lazy-import.js";
|
|
3
|
-
const lazyIntegration = createLazyImport(() => import("./integration.js"));
|
|
4
|
-
/** Start loading the runner graph once; callers may fire-and-forget this. */
|
|
5
|
-
export function warmDispatchIntegration() {
|
|
6
|
-
return lazyIntegration.get();
|
|
7
|
-
}
|
|
8
|
-
/** Await the same promise used by session-start warming and first use. */
|
|
9
|
-
export function loadDispatchIntegration() {
|
|
10
|
-
return warmDispatchIntegration();
|
|
11
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/** Turn-end handoff for runners moved off the post-write critical path. */
|
|
2
|
-
import { incrementDegradationCount } from "../degradation-ledger.js";
|
|
3
|
-
const pending = [];
|
|
4
|
-
const MAX_PENDING_RUNNER_FINDINGS = 50;
|
|
5
|
-
export function deferRunnerFindings(entry) {
|
|
6
|
-
const tracked = { ...entry, settled: false };
|
|
7
|
-
// Attach exactly once at ownership time. Re-attaching at every turn end
|
|
8
|
-
// accumulates handlers on a promise that may never settle (#2122 F8).
|
|
9
|
-
void tracked.promise.then((result) => {
|
|
10
|
-
tracked.result = result;
|
|
11
|
-
tracked.settled = true;
|
|
12
|
-
}, (error) => {
|
|
13
|
-
tracked.result = {
|
|
14
|
-
status: "failed",
|
|
15
|
-
diagnostics: [],
|
|
16
|
-
semantic: "warning",
|
|
17
|
-
failureKind: "exception",
|
|
18
|
-
failureMessage: String(error).slice(0, 200),
|
|
19
|
-
};
|
|
20
|
-
tracked.settled = true;
|
|
21
|
-
});
|
|
22
|
-
pending.push(tracked);
|
|
23
|
-
if (pending.length > MAX_PENDING_RUNNER_FINDINGS) {
|
|
24
|
-
const evicted = pending.shift();
|
|
25
|
-
if (evicted) {
|
|
26
|
-
incrementDegradationCount({
|
|
27
|
-
kind: "runner-findings-evicted",
|
|
28
|
-
subject: `${evicted.runnerId}:${evicted.filePath}`,
|
|
29
|
-
reason: `pending runner cap ${MAX_PENDING_RUNNER_FINDINGS}`,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolve already-finished runner work for this turn. Unfinished work remains
|
|
36
|
-
* owned by the store and is retried at the next turn boundary.
|
|
37
|
-
*/
|
|
38
|
-
export async function drainPendingRunnerFindings(maxWaitMs = 2_000) {
|
|
39
|
-
if (pending.length === 0)
|
|
40
|
-
return [];
|
|
41
|
-
const current = pending.splice(0, pending.length);
|
|
42
|
-
const results = [];
|
|
43
|
-
// Give already-resolved promises one microtask turn without introducing a
|
|
44
|
-
// wall-clock wait. This observes completed work while preserving the F5
|
|
45
|
-
// zero-budget contract for in-flight runners.
|
|
46
|
-
if (maxWaitMs === 0)
|
|
47
|
-
await Promise.resolve();
|
|
48
|
-
if (maxWaitMs > 0 && current.some((entry) => !entry.settled)) {
|
|
49
|
-
await new Promise((resolve) => {
|
|
50
|
-
const timer = setTimeout(resolve, maxWaitMs);
|
|
51
|
-
timer.unref?.();
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
for (const entry of current) {
|
|
55
|
-
if (entry.settled && entry.result) {
|
|
56
|
-
results.push({
|
|
57
|
-
filePath: entry.filePath,
|
|
58
|
-
cwd: entry.cwd,
|
|
59
|
-
projectRoot: entry.projectRoot,
|
|
60
|
-
runnerId: entry.runnerId,
|
|
61
|
-
markedAtMs: entry.markedAtMs,
|
|
62
|
-
writeIndex: entry.writeIndex,
|
|
63
|
-
result: entry.result,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
pending.push(entry);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return results;
|
|
71
|
-
}
|
|
72
|
-
/** Drop a stale answer and record the lost re-run coverage. */
|
|
73
|
-
export function dropStaleRunnerFindings(entry) {
|
|
74
|
-
if (!entry.result)
|
|
75
|
-
return;
|
|
76
|
-
incrementDegradationCount({
|
|
77
|
-
kind: "runner-findings-stale",
|
|
78
|
-
subject: `${entry.runnerId}:${entry.filePath}`,
|
|
79
|
-
reason: "completed result was older than the latest file edit",
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
export function resetPendingRunnerFindings() {
|
|
83
|
-
pending.length = 0;
|
|
84
|
-
}
|
|
85
|
-
export function pendingRunnerFindingsSize() {
|
|
86
|
-
return pending.length;
|
|
87
|
-
}
|
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
import { getPrimaryDispatchGroup } from "../language-policy.js";
|
|
2
|
-
function primary(kind) {
|
|
3
|
-
const group = getPrimaryDispatchGroup(kind, true);
|
|
4
|
-
if (!group) {
|
|
5
|
-
throw new Error(`Missing primary dispatch group for ${kind}`);
|
|
6
|
-
}
|
|
7
|
-
return group;
|
|
8
|
-
}
|
|
9
|
-
export const LANGUAGE_CAPABILITY_MATRIX = {
|
|
10
|
-
jsts: {
|
|
11
|
-
name: "JavaScript/TypeScript Linting",
|
|
12
|
-
capabilities: ["types", "security", "smells", "format", "lint"],
|
|
13
|
-
writeGroups: [
|
|
14
|
-
primary("jsts"),
|
|
15
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["jsts"] },
|
|
16
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["jsts"] },
|
|
17
|
-
{ mode: "all", runnerIds: ["ast-grep-napi"], filterKinds: ["jsts"] },
|
|
18
|
-
{
|
|
19
|
-
mode: "fallback",
|
|
20
|
-
runnerIds: ["eslint", "oxlint", "biome-check-json"],
|
|
21
|
-
filterKinds: ["jsts"],
|
|
22
|
-
},
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
python: {
|
|
26
|
-
name: "Python Linting",
|
|
27
|
-
capabilities: ["types", "lint", "smells"],
|
|
28
|
-
writeGroups: [
|
|
29
|
-
primary("python"),
|
|
30
|
-
{ mode: "fallback", runnerIds: ["ruff-lint"], filterKinds: ["python"] },
|
|
31
|
-
{ mode: "fallback", runnerIds: ["mypy"], filterKinds: ["python"] },
|
|
32
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["python"] },
|
|
33
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["python"] },
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
go: {
|
|
37
|
-
name: "Go Linting",
|
|
38
|
-
capabilities: ["types", "lint", "smells"],
|
|
39
|
-
writeGroups: [
|
|
40
|
-
primary("go"),
|
|
41
|
-
{ mode: "fallback", runnerIds: ["golangci-lint"], filterKinds: ["go"] },
|
|
42
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["go"] },
|
|
43
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["go"] },
|
|
44
|
-
],
|
|
45
|
-
},
|
|
46
|
-
rust: {
|
|
47
|
-
name: "Rust Linting",
|
|
48
|
-
capabilities: ["types", "lint", "smells"],
|
|
49
|
-
writeGroups: [
|
|
50
|
-
primary("rust"),
|
|
51
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["rust"] },
|
|
52
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["rust"] },
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
ruby: {
|
|
56
|
-
name: "Ruby Linting",
|
|
57
|
-
capabilities: ["types", "lint", "smells"],
|
|
58
|
-
writeGroups: [
|
|
59
|
-
primary("ruby"),
|
|
60
|
-
{ mode: "fallback", runnerIds: ["rubocop"], filterKinds: ["ruby"] },
|
|
61
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["ruby"] },
|
|
62
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["ruby"] },
|
|
63
|
-
],
|
|
64
|
-
},
|
|
65
|
-
cxx: {
|
|
66
|
-
name: "C/C++ Linting",
|
|
67
|
-
capabilities: ["types", "lint", "smells"],
|
|
68
|
-
writeGroups: [
|
|
69
|
-
primary("cxx"),
|
|
70
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["cxx"] },
|
|
71
|
-
],
|
|
72
|
-
},
|
|
73
|
-
cmake: {
|
|
74
|
-
name: "CMake Processing",
|
|
75
|
-
capabilities: ["lint"],
|
|
76
|
-
writeGroups: [
|
|
77
|
-
primary("cmake"),
|
|
78
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["cmake"] },
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
fish: {
|
|
82
|
-
name: "Fish Script Formatting",
|
|
83
|
-
capabilities: ["format"],
|
|
84
|
-
writeGroups: [primary("fish")],
|
|
85
|
-
},
|
|
86
|
-
shell: {
|
|
87
|
-
name: "Shell Script Linting",
|
|
88
|
-
capabilities: ["lint", "security", "format"],
|
|
89
|
-
writeGroups: [
|
|
90
|
-
primary("shell"),
|
|
91
|
-
{ mode: "all", runnerIds: ["shfmt"], filterKinds: ["shell"] },
|
|
92
|
-
{ mode: "all", runnerIds: ["fact-rules"], filterKinds: ["shell"] },
|
|
93
|
-
],
|
|
94
|
-
},
|
|
95
|
-
json: {
|
|
96
|
-
name: "JSON Processing",
|
|
97
|
-
capabilities: ["format", "lint"],
|
|
98
|
-
writeGroups: [
|
|
99
|
-
primary("json"),
|
|
100
|
-
{ mode: "all", runnerIds: ["trivy-config"], filterKinds: ["json"] },
|
|
101
|
-
],
|
|
102
|
-
},
|
|
103
|
-
markdown: {
|
|
104
|
-
name: "Markdown Processing",
|
|
105
|
-
capabilities: ["docs", "format", "lint"],
|
|
106
|
-
writeGroups: [
|
|
107
|
-
primary("markdown"),
|
|
108
|
-
{ mode: "all", runnerIds: ["markdownlint"], filterKinds: ["markdown"] },
|
|
109
|
-
],
|
|
110
|
-
},
|
|
111
|
-
css: {
|
|
112
|
-
name: "CSS Processing",
|
|
113
|
-
capabilities: ["format", "lint"],
|
|
114
|
-
writeGroups: [
|
|
115
|
-
primary("css"),
|
|
116
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["css"] },
|
|
117
|
-
{ mode: "all", runnerIds: ["ast-grep-napi"], filterKinds: ["css"] },
|
|
118
|
-
],
|
|
119
|
-
},
|
|
120
|
-
yaml: {
|
|
121
|
-
name: "YAML Processing",
|
|
122
|
-
capabilities: ["format", "lint"],
|
|
123
|
-
writeGroups: [
|
|
124
|
-
primary("yaml"),
|
|
125
|
-
{ mode: "all", runnerIds: ["actionlint"], filterKinds: ["yaml"] },
|
|
126
|
-
],
|
|
127
|
-
},
|
|
128
|
-
"helm-template": {
|
|
129
|
-
name: "Helm Template Linting",
|
|
130
|
-
capabilities: ["lint"],
|
|
131
|
-
writeGroups: [primary("helm-template")],
|
|
132
|
-
},
|
|
133
|
-
sql: {
|
|
134
|
-
name: "SQL Processing",
|
|
135
|
-
capabilities: ["format", "lint"],
|
|
136
|
-
writeGroups: [primary("sql")],
|
|
137
|
-
},
|
|
138
|
-
html: {
|
|
139
|
-
name: "HTML Linting",
|
|
140
|
-
capabilities: ["lint"],
|
|
141
|
-
writeGroups: [
|
|
142
|
-
primary("html"),
|
|
143
|
-
{ mode: "all", runnerIds: ["ast-grep-napi"], filterKinds: ["html"] },
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
docker: {
|
|
147
|
-
name: "Dockerfile Linting",
|
|
148
|
-
capabilities: ["lint"],
|
|
149
|
-
writeGroups: [primary("docker")],
|
|
150
|
-
},
|
|
151
|
-
php: {
|
|
152
|
-
name: "PHP Linting",
|
|
153
|
-
capabilities: ["types", "lint"],
|
|
154
|
-
writeGroups: [
|
|
155
|
-
primary("php"),
|
|
156
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["php"] },
|
|
157
|
-
],
|
|
158
|
-
},
|
|
159
|
-
powershell: {
|
|
160
|
-
name: "PowerShell Linting",
|
|
161
|
-
capabilities: ["lint"],
|
|
162
|
-
writeGroups: [primary("powershell")],
|
|
163
|
-
},
|
|
164
|
-
prisma: {
|
|
165
|
-
name: "Prisma Schema Linting",
|
|
166
|
-
capabilities: ["types", "lint"],
|
|
167
|
-
writeGroups: [primary("prisma")],
|
|
168
|
-
},
|
|
169
|
-
csharp: {
|
|
170
|
-
name: "C# Linting",
|
|
171
|
-
capabilities: ["types", "lint"],
|
|
172
|
-
writeGroups: [
|
|
173
|
-
primary("csharp"),
|
|
174
|
-
{ mode: "all", runnerIds: ["tree-sitter"], filterKinds: ["csharp"] },
|
|
175
|
-
],
|
|
176
|
-
},
|
|
177
|
-
fsharp: {
|
|
178
|
-
name: "F# Linting",
|
|
179
|
-
capabilities: ["types", "lint"],
|
|
180
|
-
writeGroups: [primary("fsharp")],
|
|
181
|
-
},
|
|
182
|
-
java: {
|
|
183
|
-
name: "Java Linting",
|
|
184
|
-
capabilities: ["types", "lint"],
|
|
185
|
-
writeGroups: [primary("java")],
|
|
186
|
-
},
|
|
187
|
-
kotlin: {
|
|
188
|
-
name: "Kotlin Linting",
|
|
189
|
-
capabilities: ["types", "lint", "format", "smells"],
|
|
190
|
-
writeGroups: [
|
|
191
|
-
primary("kotlin"),
|
|
192
|
-
{ mode: "fallback", runnerIds: ["detekt"], filterKinds: ["kotlin"] },
|
|
193
|
-
],
|
|
194
|
-
},
|
|
195
|
-
swift: {
|
|
196
|
-
name: "Swift Linting",
|
|
197
|
-
capabilities: ["types", "lint"],
|
|
198
|
-
writeGroups: [primary("swift")],
|
|
199
|
-
},
|
|
200
|
-
dart: {
|
|
201
|
-
name: "Dart Linting",
|
|
202
|
-
capabilities: ["types", "lint"],
|
|
203
|
-
writeGroups: [primary("dart")],
|
|
204
|
-
},
|
|
205
|
-
lua: {
|
|
206
|
-
name: "Lua Linting",
|
|
207
|
-
capabilities: ["types", "lint"],
|
|
208
|
-
writeGroups: [primary("lua")],
|
|
209
|
-
},
|
|
210
|
-
zig: {
|
|
211
|
-
name: "Zig Linting",
|
|
212
|
-
capabilities: ["types", "lint"],
|
|
213
|
-
writeGroups: [primary("zig")],
|
|
214
|
-
},
|
|
215
|
-
haskell: {
|
|
216
|
-
name: "Haskell Linting",
|
|
217
|
-
capabilities: ["types", "lint"],
|
|
218
|
-
writeGroups: [primary("haskell")],
|
|
219
|
-
},
|
|
220
|
-
elixir: {
|
|
221
|
-
name: "Elixir Linting",
|
|
222
|
-
capabilities: ["types", "lint"],
|
|
223
|
-
writeGroups: [primary("elixir")],
|
|
224
|
-
},
|
|
225
|
-
gleam: {
|
|
226
|
-
name: "Gleam Linting",
|
|
227
|
-
capabilities: ["types", "lint"],
|
|
228
|
-
writeGroups: [primary("gleam")],
|
|
229
|
-
},
|
|
230
|
-
ocaml: {
|
|
231
|
-
name: "OCaml Linting",
|
|
232
|
-
capabilities: ["types", "lint"],
|
|
233
|
-
writeGroups: [primary("ocaml")],
|
|
234
|
-
},
|
|
235
|
-
clojure: {
|
|
236
|
-
name: "Clojure Linting",
|
|
237
|
-
capabilities: ["types", "lint"],
|
|
238
|
-
writeGroups: [primary("clojure")],
|
|
239
|
-
},
|
|
240
|
-
cue: {
|
|
241
|
-
name: "CUE Linting",
|
|
242
|
-
capabilities: ["types", "lint"],
|
|
243
|
-
writeGroups: [primary("cue")],
|
|
244
|
-
},
|
|
245
|
-
terraform: {
|
|
246
|
-
name: "Terraform Linting",
|
|
247
|
-
capabilities: ["types", "lint", "security"],
|
|
248
|
-
writeGroups: [primary("terraform")],
|
|
249
|
-
},
|
|
250
|
-
terragrunt: {
|
|
251
|
-
name: "Terragrunt Linting",
|
|
252
|
-
capabilities: ["lint", "format"],
|
|
253
|
-
writeGroups: [primary("terragrunt")],
|
|
254
|
-
},
|
|
255
|
-
nix: {
|
|
256
|
-
name: "Nix Linting",
|
|
257
|
-
capabilities: ["types", "lint"],
|
|
258
|
-
writeGroups: [primary("nix")],
|
|
259
|
-
},
|
|
260
|
-
toml: {
|
|
261
|
-
name: "TOML Linting",
|
|
262
|
-
capabilities: ["lint", "format"],
|
|
263
|
-
writeGroups: [primary("toml")],
|
|
264
|
-
},
|
|
265
|
-
};
|
|
266
|
-
function toWritePlan(entry) {
|
|
267
|
-
return {
|
|
268
|
-
name: entry.name,
|
|
269
|
-
groups: [...entry.writeGroups],
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
export const TOOL_PLANS = Object.fromEntries(Object.entries(LANGUAGE_CAPABILITY_MATRIX).map(([kind, entry]) => [
|
|
273
|
-
kind,
|
|
274
|
-
toWritePlan(entry),
|
|
275
|
-
]));
|
|
276
|
-
export function getToolPlan(kind) {
|
|
277
|
-
return TOOL_PLANS[kind];
|
|
278
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dispatch runner priority tiers.
|
|
3
|
-
*
|
|
4
|
-
* NOTE: These priorities only govern ordering within dispatch runner execution.
|
|
5
|
-
* They do not represent full write/edit pipeline order.
|
|
6
|
-
*/
|
|
7
|
-
export const PRIORITY = {
|
|
8
|
-
LSP_PRIMARY: 4,
|
|
9
|
-
LSP_FALLBACK: 5,
|
|
10
|
-
FORMAT_AND_LINT_PRIMARY: 10,
|
|
11
|
-
LINT_SECONDARY: 12,
|
|
12
|
-
STRUCTURAL_ANALYSIS: 14,
|
|
13
|
-
SPECIALIZED_ANALYSIS: 15,
|
|
14
|
-
GENERAL_ANALYSIS: 20,
|
|
15
|
-
YAML_LINT: 22,
|
|
16
|
-
SQL_LINT: 24,
|
|
17
|
-
DOC_QUALITY: 30,
|
|
18
|
-
ARCHITECTURE: 40,
|
|
19
|
-
DEEP_LANGUAGE_ANALYSIS: 50,
|
|
20
|
-
};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Normalize a rule id to the form a user typically writes in a
|
|
3
|
-
* `pi-lens-ignore` comment, an inline suppression, or a project-level
|
|
4
|
-
* `disable`/`select` list. Strips the `ast-grep:` LSP source prefix and the
|
|
5
|
-
* language suffix used by the rule catalogs.
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from "node:fs";
|
|
8
|
-
import * as path from "node:path";
|
|
9
|
-
import { getAstGrepRuleSources } from "../sgconfig.js";
|
|
10
|
-
/** Derive language tags from shipped rule filenames, rather than a list. */
|
|
11
|
-
export function deriveRuleIdLanguageSuffixes(ruleRoot) {
|
|
12
|
-
const suffixes = new Set();
|
|
13
|
-
const visit = (dir) => {
|
|
14
|
-
let entries;
|
|
15
|
-
try {
|
|
16
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
for (const entry of entries) {
|
|
22
|
-
const entryPath = path.join(dir, entry.name);
|
|
23
|
-
if (entry.isDirectory())
|
|
24
|
-
visit(entryPath);
|
|
25
|
-
else {
|
|
26
|
-
const match = /-([a-z0-9]+)\.ya?ml$/i.exec(entry.name);
|
|
27
|
-
if (match)
|
|
28
|
-
suffixes.add(match[1].toLowerCase());
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
visit(ruleRoot);
|
|
33
|
-
return suffixes;
|
|
34
|
-
}
|
|
35
|
-
const bundledCodeRabbitRules = getAstGrepRuleSources().find((source) => source.origin === "bundled" && source.tier === "secondary");
|
|
36
|
-
const RULE_ID_LANGUAGE_SUFFIXES = new Set(["js"]);
|
|
37
|
-
if (bundledCodeRabbitRules) {
|
|
38
|
-
for (const suffix of deriveRuleIdLanguageSuffixes(bundledCodeRabbitRules.dir)) {
|
|
39
|
-
RULE_ID_LANGUAGE_SUFFIXES.add(suffix);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function normalizeRuleId(ruleId) {
|
|
43
|
-
const normalized = ruleId.replace(/^ast-grep:/, "");
|
|
44
|
-
for (const suffix of RULE_ID_LANGUAGE_SUFFIXES) {
|
|
45
|
-
if (normalized.endsWith(`-${suffix}`)) {
|
|
46
|
-
return normalized.slice(0, -(suffix.length + 1));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return normalized;
|
|
50
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-rule path carve-outs (`ignores:` in a rule's own YAML, #965).
|
|
3
|
-
*
|
|
4
|
-
* ONE matcher, shared by every surface that decides whether a rule may fire on
|
|
5
|
-
* a path: the NAPI ast-grep runner, the tree-sitter runner (`ignore_paths`),
|
|
6
|
-
* and — since #3041 — the LSP output seam (`applyAuxiliarySuppressions`).
|
|
7
|
-
*
|
|
8
|
-
* #3041, measured against ast-grep 0.45.3: `ast-grep scan` applies a rule's
|
|
9
|
-
* `ignores` globs during its own project walk, but `ast-grep lsp` publishes
|
|
10
|
-
* per-document diagnostics WITHOUT applying them — the same rule on the same
|
|
11
|
-
* file is filtered by the CLI and unfiltered over LSP. So every pi-lens path
|
|
12
|
-
* that delivers ast-grep's LSP diagnostics has to apply the carve-out itself;
|
|
13
|
-
* the runner-side matcher below is what it applies.
|
|
14
|
-
*/
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
import { minimatch } from "../deps/minimatch.js";
|
|
17
|
-
import { buildEffectiveAstGrepCatalog } from "./ast-grep-catalog.js";
|
|
18
|
-
import { isWindowsPath, toPosix } from "../path-utils.js";
|
|
19
|
-
/**
|
|
20
|
-
* True when `filePath` is carved out of a rule by one of its glob `patterns`.
|
|
21
|
-
*
|
|
22
|
-
* The glob is matched against `filePath` relative to `root`, forward-slashed.
|
|
23
|
-
* Falls back to the absolute (slash-normalized) path when `filePath` isn't
|
|
24
|
-
* under `root` (e.g. an out-of-tree temp file). Leaf-file patterns retain that
|
|
25
|
-
* fallback for sinks such as a double-star logger leaf; directory carve-outs
|
|
26
|
-
* ending in a slash plus double-star remain root-contained so a project's CLI
|
|
27
|
-
* exemption cannot suppress a finding in an unrelated out-of-tree file.
|
|
28
|
-
*/
|
|
29
|
-
export function isRuleIgnoredForPath(filePath, root, patterns) {
|
|
30
|
-
if (!patterns || patterns.length === 0)
|
|
31
|
-
return false;
|
|
32
|
-
const pathApi = isWindowsPath(root) || isWindowsPath(filePath) ? path.win32 : path.posix;
|
|
33
|
-
const relative = pathApi.relative(root, filePath);
|
|
34
|
-
const outsideRoot = relative !== "" &&
|
|
35
|
-
(relative === ".." ||
|
|
36
|
-
relative.startsWith(`..${pathApi.sep}`) ||
|
|
37
|
-
pathApi.isAbsolute(relative));
|
|
38
|
-
const displayPath = toPosix(outsideRoot ? filePath : relative);
|
|
39
|
-
return patterns.some((pattern) => (!outsideRoot || !pattern.replaceAll("\\", "/").endsWith("/**")) &&
|
|
40
|
-
minimatch(displayPath, pattern, { dot: true }));
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Rule id → its `ignores` globs, for the effective ast-grep catalog at `root`.
|
|
44
|
-
*
|
|
45
|
-
* #3053: the catalog walk and its first-source-wins precedence used to be
|
|
46
|
-
* reimplemented here; both this function and the NAPI runner now read
|
|
47
|
-
* `buildEffectiveAstGrepCatalog` (clients/dispatch/ast-grep-catalog.ts), so
|
|
48
|
-
* the LSP seam carves out exactly the paths the runner carves out by
|
|
49
|
-
* construction rather than by two hand-aligned copies — see that module's
|
|
50
|
-
* docstring for the precedence rule and the within-source-duplicate decision
|
|
51
|
-
* this function inherits from it. The catalog's own loaders are cached, so
|
|
52
|
-
* this is ~0.09 ms per call on pi-lens's own catalog (17 rules with
|
|
53
|
-
* `ignores`, measured) — cheap enough to call per file rather than thread a
|
|
54
|
-
* preloaded map through every sweep.
|
|
55
|
-
*
|
|
56
|
-
* Keyed by the EXACT rule id, matching the runner: a `-js` twin (e.g.
|
|
57
|
-
* `no-console-except-error-js`) carries its own `ignores` in its own document,
|
|
58
|
-
* so normalizing the suffix here would apply one document's carve-out to the
|
|
59
|
-
* other's findings.
|
|
60
|
-
*/
|
|
61
|
-
export function loadRuleIgnorePatterns(root) {
|
|
62
|
-
const patterns = new Map();
|
|
63
|
-
for (const [id, { rule }] of buildEffectiveAstGrepCatalog(root)
|
|
64
|
-
.effectiveRules) {
|
|
65
|
-
if (rule.ignores?.length)
|
|
66
|
-
patterns.set(id, rule.ignores);
|
|
67
|
-
}
|
|
68
|
-
return patterns;
|
|
69
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project-level rule policy (`.pi-lens.json` `rules.<id>.disable` /
|
|
3
|
-
* `rules.<id>.select`) — output-only filtering of dispatches, so the project's
|
|
4
|
-
* own policy narrows what the user actually sees without widening the trusted
|
|
5
|
-
* surface area (widget state, baseline, dedup, and per-edit record stay
|
|
6
|
-
* authoritative).
|
|
7
|
-
*
|
|
8
|
-
* Matching is PROJECT-WIDE. The outer `rules.<key>` is a grouping label only —
|
|
9
|
-
* it does not scope which diagnostics a `disable`/`select` list under it can
|
|
10
|
-
* match. Every `disable` entry across every key is unioned into one drop list,
|
|
11
|
-
* and every `select` entry across every key is unioned into one allowlist.
|
|
12
|
-
* Disable is checked first, so it wins globally regardless of which key it's
|
|
13
|
-
* configured under.
|
|
14
|
-
*
|
|
15
|
-
* Match normalization is consolidated with the rest of the rule-id surfaces:
|
|
16
|
-
* `inline-suppressions.ts` and `lens-diagnostics.ts`'s `normalizeRuleId`
|
|
17
|
-
* both strip the `ast-grep:` prefix and the `-js` suffix, so a user listing
|
|
18
|
-
* `no-eval` once under `disable` covers both the LSP tag (`ast-grep:no-eval`)
|
|
19
|
-
* and the napi tag (`no-eval` / `no-eval-js`). Sharing the normalization keeps
|
|
20
|
-
* the three surfaces from drifting.
|
|
21
|
-
*/
|
|
22
|
-
import { normalizeRuleId } from "./rule-id-normalize.js";
|
|
23
|
-
/**
|
|
24
|
-
* Decide whether a rule id (in the form it's emitted on a diagnostic — e.g.
|
|
25
|
-
* `ast-grep:no-eval`, `no-eval-js`, `no-eval`, `ts:2322`) should be filtered
|
|
26
|
-
* out under a project's rule policy map. Returns `dropped: true` when the
|
|
27
|
-
* diagnostic would be hidden from output.
|
|
28
|
-
*
|
|
29
|
-
* Project-wide: every `disable` entry across every configured key is checked
|
|
30
|
-
* first (disable wins globally over select). Then every `select` entry
|
|
31
|
-
* across every key is unioned into one allowlist — a non-empty union that
|
|
32
|
-
* the rule doesn't match also drops it. An absent/empty union across all
|
|
33
|
-
* keys means "no restriction". Matching uses the same normalization as
|
|
34
|
-
* inline suppression so a configured `no-eval` entry covers
|
|
35
|
-
* `ast-grep:no-eval` and `no-eval-js`.
|
|
36
|
-
*/
|
|
37
|
-
export function evaluateRulePolicy(ruleId, policyMap) {
|
|
38
|
-
if (!policyMap)
|
|
39
|
-
return { dropped: false };
|
|
40
|
-
const raw = ruleId || "";
|
|
41
|
-
const norm = normalizeRuleId(raw);
|
|
42
|
-
if (scanList(policyMap, (e) => e.disable, raw, norm).matched) {
|
|
43
|
-
return { dropped: true };
|
|
44
|
-
}
|
|
45
|
-
const select = scanList(policyMap, (e) => e.select, raw, norm);
|
|
46
|
-
return { dropped: select.sawEntry && !select.matched };
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Union one list (`disable` or `select`) across every key in the map and test
|
|
50
|
-
* the rule against it. `sawEntry` reports whether the union was non-empty,
|
|
51
|
-
* which is what makes a `select` union restrictive rather than absent.
|
|
52
|
-
*/
|
|
53
|
-
function scanList(policyMap, pick, raw, norm) {
|
|
54
|
-
let sawEntry = false;
|
|
55
|
-
for (const entry of Object.values(policyMap)) {
|
|
56
|
-
for (const candidate of (entry && pick(entry)) ?? []) {
|
|
57
|
-
sawEntry = true;
|
|
58
|
-
if (matchesRule(candidate, raw, norm))
|
|
59
|
-
return { matched: true, sawEntry };
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return { matched: false, sawEntry };
|
|
63
|
-
}
|
|
64
|
-
function matchesRule(entry, raw, normalized) {
|
|
65
|
-
if (entry === raw)
|
|
66
|
-
return true;
|
|
67
|
-
return normalizeRuleId(entry) === normalized;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Filter an array of diagnostics (returns a new array) by the project rule
|
|
71
|
-
* policy map. `rule` is preferred; code-only diagnostics use `code` as their
|
|
72
|
-
* policy key so project-diagnostics details and rendered summaries cannot
|
|
73
|
-
* disagree about a finding that has no explicit rule field. `Diagnostic.id`
|
|
74
|
-
* remains a dedup key (`eslint:unknown:12`), not a policy key, so id-only
|
|
75
|
-
* findings (including blocking parse errors) remain exempt.
|
|
76
|
-
*
|
|
77
|
-
* Used by both the per-edit dispatcher and the `lens-diagnostics` tool's
|
|
78
|
-
* `mode=delta`/`mode=all`/`mode=full` paths so a project's own policy
|
|
79
|
-
* applies consistently across every output surface.
|
|
80
|
-
*/
|
|
81
|
-
export function applyRulePolicy(diagnostics, policyMap) {
|
|
82
|
-
if (!policyMap)
|
|
83
|
-
return diagnostics;
|
|
84
|
-
// Fast-path: if every entry has neither disable nor select, there is no
|
|
85
|
-
// output filter to apply. Keeps the hot path (most projects have only
|
|
86
|
-
// thresholds) cheap.
|
|
87
|
-
let hasFilter = false;
|
|
88
|
-
for (const rawEntry of Object.values(policyMap)) {
|
|
89
|
-
if (!rawEntry || typeof rawEntry !== "object" || Array.isArray(rawEntry)) {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const entry = rawEntry;
|
|
93
|
-
if ((entry.disable?.length ?? 0) > 0 || (entry.select?.length ?? 0) > 0) {
|
|
94
|
-
hasFilter = true;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (!hasFilter)
|
|
99
|
-
return diagnostics;
|
|
100
|
-
return diagnostics.filter((d) => {
|
|
101
|
-
const ruleId = d.rule ?? d.code;
|
|
102
|
-
if (!ruleId)
|
|
103
|
-
return true;
|
|
104
|
-
const { dropped } = evaluateRulePolicy(ruleId, policyMap);
|
|
105
|
-
return !dropped;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Build the policy map from a `PiLensProjectConfig.rules`-shaped value. Returns
|
|
110
|
-
* undefined when there's nothing to filter (the hot path), or a map suitable
|
|
111
|
-
* for `applyRulePolicy` otherwise. Excludes entries whose only field is
|
|
112
|
-
* `threshold` (a threshold is a separate concern handled elsewhere) so the
|
|
113
|
-
* filter step doesn't repeat the work.
|
|
114
|
-
*/
|
|
115
|
-
export function rulePolicyMapFromConfig(rules) {
|
|
116
|
-
if (!rules)
|
|
117
|
-
return undefined;
|
|
118
|
-
let built;
|
|
119
|
-
for (const [key, rawEntry] of Object.entries(rules)) {
|
|
120
|
-
if (!rawEntry || typeof rawEntry !== "object" || Array.isArray(rawEntry)) {
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
const entry = rawEntry;
|
|
124
|
-
const hasDisable = (entry.disable?.length ?? 0) > 0;
|
|
125
|
-
const hasSelect = (entry.select?.length ?? 0) > 0;
|
|
126
|
-
if (!hasDisable && !hasSelect)
|
|
127
|
-
continue;
|
|
128
|
-
built ??= {};
|
|
129
|
-
built[key] = {
|
|
130
|
-
...(hasDisable ? { disable: entry.disable } : {}),
|
|
131
|
-
...(hasSelect ? { select: entry.select } : {}),
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
return built;
|
|
135
|
-
}
|