pi-lens 3.8.73 → 4.0.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.
Files changed (346) hide show
  1. package/CHANGELOG.md +2614 -12
  2. package/README.md +50 -21
  3. package/dist/clients/actionable-warnings.js +73 -18
  4. package/dist/clients/agent-behavior-client.js +21 -4
  5. package/dist/clients/ast-grep-client.js +68 -16
  6. package/dist/clients/ast-grep-types.js +0 -1
  7. package/dist/clients/ast-grep-yaml-synth.js +37 -10
  8. package/dist/clients/atomic-write-staging.js +63 -0
  9. package/dist/clients/atomic-write.js +116 -16
  10. package/dist/clients/bash-file-access.js +193 -23
  11. package/dist/clients/biome-client.js +29 -25
  12. package/dist/clients/bootstrap.js +11 -2
  13. package/dist/clients/bounded-cache.js +34 -0
  14. package/dist/clients/bounded-pid-file-lock.js +192 -0
  15. package/dist/clients/bus-events-logger.js +5 -1
  16. package/dist/clients/bus-publish.js +10 -3
  17. package/dist/clients/cache/rule-cache.js +89 -6
  18. package/dist/clients/cache-manager.js +97 -9
  19. package/dist/clients/cache-observability.js +498 -0
  20. package/dist/clients/call-graph.js +460 -108
  21. package/dist/clients/cascade-logger.js +5 -1
  22. package/dist/clients/child-unref.js +85 -0
  23. package/dist/clients/codebase-model.js +52 -23
  24. package/dist/clients/collateral-test-role.js +40 -0
  25. package/dist/clients/complexity-client.js +6 -8
  26. package/dist/clients/console-guard-install.js +14 -0
  27. package/dist/clients/cooperative-budget.js +42 -0
  28. package/dist/clients/dead-code-client.js +2 -1
  29. package/dist/clients/debug-handles.js +206 -0
  30. package/dist/clients/debug-heap.js +167 -0
  31. package/dist/clients/degradation-ledger.js +153 -0
  32. package/dist/clients/dependency-checker.js +466 -63
  33. package/dist/clients/diagnostic-dispositions.js +83 -13
  34. package/dist/clients/diagnostics-publish.js +10 -3
  35. package/dist/clients/dispatch/auxiliary-lsp.js +34 -0
  36. package/dist/clients/dispatch/dispatcher.js +71 -13
  37. package/dist/clients/dispatch/fact-store.js +11 -0
  38. package/dist/clients/dispatch/facts/function-facts.js +37 -7
  39. package/dist/clients/dispatch/facts/import-facts.js +108 -119
  40. package/dist/clients/dispatch/facts/tree-sitter-facts.js +12 -12
  41. package/dist/clients/dispatch/facts/try-catch-facts.js +13 -0
  42. package/dist/clients/dispatch/indent-detect.js +35 -0
  43. package/dist/clients/dispatch/inline-suppressions.js +17 -8
  44. package/dist/clients/dispatch/integration.js +1094 -611
  45. package/dist/clients/dispatch/lazy.js +14 -0
  46. package/dist/clients/dispatch/plan.js +11 -1
  47. package/dist/clients/dispatch/rule-id-normalize.js +50 -0
  48. package/dist/clients/dispatch/rule-policy.js +135 -0
  49. package/dist/clients/dispatch/rules/async-noise.js +1 -0
  50. package/dist/clients/dispatch/rules/unsafe-boundary.js +7 -0
  51. package/dist/clients/dispatch/runners/ast-grep-napi.js +47 -6
  52. package/dist/clients/dispatch/runners/biome-check.js +5 -9
  53. package/dist/clients/dispatch/runners/detekt.js +3 -2
  54. package/dist/clients/dispatch/runners/hadolint.js +2 -1
  55. package/dist/clients/dispatch/runners/helm-lint.js +154 -0
  56. package/dist/clients/dispatch/runners/htmlhint.js +3 -2
  57. package/dist/clients/dispatch/runners/index.js +5 -1
  58. package/dist/clients/dispatch/runners/lsp.js +14 -6
  59. package/dist/clients/dispatch/runners/markdownlint.js +4 -9
  60. package/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -1
  61. package/dist/clients/dispatch/runners/pyright.js +9 -5
  62. package/dist/clients/dispatch/runners/ruff.js +4 -8
  63. package/dist/clients/dispatch/runners/shellcheck.js +2 -3
  64. package/dist/clients/dispatch/runners/shfmt.js +2 -3
  65. package/dist/clients/dispatch/runners/spotbugs.js +2 -1
  66. package/dist/clients/dispatch/runners/taplo.js +2 -1
  67. package/dist/clients/dispatch/runners/terragrunt.js +163 -0
  68. package/dist/clients/dispatch/runners/tflint.js +37 -5
  69. package/dist/clients/dispatch/runners/tree-sitter.js +155 -166
  70. package/dist/clients/dispatch/runners/trivy-config.js +13 -7
  71. package/dist/clients/dispatch/runners/utils/lazy-installer.js +3 -0
  72. package/dist/clients/dispatch/runners/utils/runner-helpers.js +284 -34
  73. package/dist/clients/dispatch/runners/utils/spawn-outcome.js +22 -0
  74. package/dist/clients/dispatch/runners/yaml-rule-parser.js +5 -4
  75. package/dist/clients/disposition-publish.js +10 -3
  76. package/dist/clients/durable-store.js +97 -0
  77. package/dist/clients/event-loop-monitor.js +94 -3
  78. package/dist/clients/extension-log.js +139 -0
  79. package/dist/clients/extension-mode.js +73 -0
  80. package/dist/clients/feature-hints.js +53 -7
  81. package/dist/clients/file-kinds.js +143 -31
  82. package/dist/clients/file-role.js +18 -3
  83. package/dist/clients/file-utils.js +56 -34
  84. package/dist/clients/fix-worklog.js +14 -2
  85. package/dist/clients/format-events-publish.js +16 -3
  86. package/dist/clients/format-service.js +24 -8
  87. package/dist/clients/formatters-lazy.js +8 -0
  88. package/dist/clients/formatters.js +358 -61
  89. package/dist/clients/generated-artifacts.js +169 -15
  90. package/dist/clients/git-guard.js +681 -11
  91. package/dist/clients/git-tracked-ignore.js +4 -0
  92. package/dist/clients/go-client.js +2 -1
  93. package/dist/clients/govulncheck-client.js +8 -0
  94. package/dist/clients/grammar-source.js +12 -4
  95. package/dist/clients/gzip-stage-write.js +102 -0
  96. package/dist/clients/host-ports.js +31 -0
  97. package/dist/clients/installer/index.js +733 -213
  98. package/dist/clients/instance-reaper.js +142 -172
  99. package/dist/clients/jscpd-client.js +31 -54
  100. package/dist/clients/knip-client.js +78 -36
  101. package/dist/clients/language-policy.js +14 -2
  102. package/dist/clients/language-profile.js +72 -77
  103. package/dist/clients/latency-logger.js +28 -16
  104. package/dist/clients/lens-config.js +140 -166
  105. package/dist/clients/lens-engine.js +124 -21
  106. package/dist/clients/lens-events.js +27 -4
  107. package/dist/clients/lens-flag-registry.js +293 -0
  108. package/dist/clients/lens-map.js +96 -26
  109. package/dist/clients/live-bus-emitter.js +30 -0
  110. package/dist/clients/log-cleanup.js +8 -18
  111. package/dist/clients/lsp/cascade-tier.js +23 -3
  112. package/dist/clients/lsp/client.js +566 -57
  113. package/dist/clients/lsp/config.js +74 -10
  114. package/dist/clients/lsp/diagnostic-binding.js +86 -0
  115. package/dist/clients/lsp/edits.js +1012 -121
  116. package/dist/clients/lsp/index.js +1840 -803
  117. package/dist/clients/lsp/language.js +4 -1
  118. package/dist/clients/lsp/launch.js +40 -32
  119. package/dist/clients/lsp/path-utils.js +1 -1
  120. package/dist/clients/lsp/ruby-drive-dirs.js +83 -0
  121. package/dist/clients/lsp/server.js +279 -60
  122. package/dist/clients/lsp/workspace-diagnostics-cache.js +28 -4
  123. package/dist/clients/lsp-document-symbols.js +112 -0
  124. package/dist/clients/lsp-lazy.js +8 -0
  125. package/dist/clients/lsp-mutation.js +248 -0
  126. package/dist/clients/mcp/analyze.js +128 -36
  127. package/dist/clients/mcp/ipc.js +157 -24
  128. package/dist/clients/mcp/review.js +36 -3
  129. package/dist/clients/mcp/session.js +216 -8
  130. package/dist/clients/memory-sampler.js +115 -0
  131. package/dist/clients/metrics-client.js +2 -1
  132. package/dist/clients/metrics-history.js +2 -1
  133. package/dist/clients/module-report-lsp.js +5 -0
  134. package/dist/clients/module-report.js +267 -82
  135. package/dist/clients/ndjson-logger.js +334 -103
  136. package/dist/clients/opengrep-client.js +1 -1
  137. package/dist/clients/partial-edit-apply.js +120 -5
  138. package/dist/clients/path-keyed-map.js +76 -0
  139. package/dist/clients/path-utils.js +141 -5
  140. package/dist/clients/performance-report.js +327 -0
  141. package/dist/clients/pipeline.js +54 -13
  142. package/dist/clients/print-mode.js +21 -0
  143. package/dist/clients/project-changes.js +117 -4
  144. package/dist/clients/project-diagnostics/cache.js +3 -2
  145. package/dist/clients/project-diagnostics/extractors.js +26 -115
  146. package/dist/clients/project-diagnostics/fresh-fetch.js +149 -19
  147. package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +117 -0
  148. package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +37 -5
  149. package/dist/clients/project-diagnostics/scanner.js +268 -128
  150. package/dist/clients/project-lens-config.js +138 -34
  151. package/dist/clients/project-report.js +64 -25
  152. package/dist/clients/project-scale.js +8 -10
  153. package/dist/clients/project-snapshot-persist-worker.js +6 -0
  154. package/dist/clients/project-snapshot.js +767 -8
  155. package/dist/clients/project-trust.js +181 -0
  156. package/dist/clients/quiet-window.js +27 -5
  157. package/dist/clients/read-bridge.js +147 -0
  158. package/dist/clients/read-expansion.js +22 -12
  159. package/dist/clients/read-guard-logger.js +159 -1
  160. package/dist/clients/read-guard-tool-lines.js +150 -29
  161. package/dist/clients/read-guard.js +262 -3
  162. package/dist/clients/redact/secrets.js +449 -0
  163. package/dist/clients/resource-sampler.js +144 -39
  164. package/dist/clients/reverse-deps.js +48 -0
  165. package/dist/clients/review-graph/builder.js +2570 -326
  166. package/dist/clients/review-graph/git-identity.js +2 -1
  167. package/dist/clients/review-graph/import-resolvers.js +21 -10
  168. package/dist/clients/review-graph/persist-worker.js +10 -0
  169. package/dist/clients/review-graph/query.js +5 -0
  170. package/dist/clients/review-graph/shared-extraction-ir.js +90 -0
  171. package/dist/clients/review-graph/symbol-id.js +46 -0
  172. package/dist/clients/review-graph/tsconfig-paths.js +57 -6
  173. package/dist/clients/review-graph/workspace-modules.js +51 -3
  174. package/dist/clients/review-graph-logger.js +53 -0
  175. package/dist/clients/ruff-client.js +27 -44
  176. package/dist/clients/runtime-agent-end.js +111 -75
  177. package/dist/clients/runtime-context.js +36 -12
  178. package/dist/clients/runtime-coordinator.js +76 -8
  179. package/dist/clients/runtime-session.js +799 -137
  180. package/dist/clients/runtime-tool-call.js +117 -62
  181. package/dist/clients/runtime-tool-result.js +218 -23
  182. package/dist/clients/runtime-turn.js +284 -40
  183. package/dist/clients/rust-client.js +2 -1
  184. package/dist/clients/safe-spawn.js +873 -71
  185. package/dist/clients/security-scan-client.js +2 -1
  186. package/dist/clients/session-start-observability.js +15 -0
  187. package/dist/clients/session-state-store.js +5 -3
  188. package/dist/clients/sessionstart-logger.js +18 -0
  189. package/dist/clients/sg-runner.js +284 -159
  190. package/dist/clients/slow-fs.js +2 -1
  191. package/dist/clients/smells-rollup.js +224 -0
  192. package/dist/clients/source-filter.js +231 -43
  193. package/dist/clients/source-walker.js +66 -10
  194. package/dist/clients/startup-scan.js +15 -16
  195. package/dist/clients/startup-timing.js +9 -0
  196. package/dist/clients/test-runner-client.js +38 -8
  197. package/dist/clients/todo-scanner.js +30 -3
  198. package/dist/clients/tool-event.js +35 -0
  199. package/dist/clients/tool-policy.js +388 -39
  200. package/dist/clients/tool-render.js +155 -0
  201. package/dist/clients/tree-sitter-cache.js +153 -140
  202. package/dist/clients/tree-sitter-client.js +1722 -80
  203. package/dist/clients/tree-sitter-logger.js +64 -1
  204. package/dist/clients/tree-sitter-query-loader.js +117 -12
  205. package/dist/clients/tree-sitter-shared.js +48 -19
  206. package/dist/clients/tree-sitter-symbol-extractor.js +115 -11
  207. package/dist/clients/user-notify.js +51 -0
  208. package/dist/clients/vanished-instance-marker.js +57 -0
  209. package/dist/clients/warm-attach.js +33 -13
  210. package/dist/clients/widget-state.js +342 -49
  211. package/dist/clients/word-index-logger.js +44 -0
  212. package/dist/clients/word-index.js +612 -68
  213. package/dist/clients/workspace-topology.js +100 -7
  214. package/dist/index.js +65923 -47161
  215. package/dist/mcp/analyze-cli.js +185 -29
  216. package/dist/mcp/cli.js +110 -0
  217. package/dist/mcp/server.js +272 -50
  218. package/dist/tools/ast-grep-search.js +93 -27
  219. package/dist/tools/lens-diagnostics.js +247 -41
  220. package/dist/tools/lsp-diagnostics.js +153 -40
  221. package/dist/tools/lsp-navigation.js +51 -31
  222. package/dist/tools/module-report.js +9 -0
  223. package/dist/tools/symbol-search.js +21 -2
  224. package/docs/agent-guide.md +247 -0
  225. package/docs/agent-tools.md +21 -10
  226. package/docs/analysisall.md +192 -0
  227. package/docs/api-ports-inventory.md +165 -0
  228. package/docs/ast-grep_rules_catalog.md +5 -2
  229. package/docs/astplayground.md +3 -4
  230. package/docs/audit1.md +5 -5
  231. package/docs/durable-store-audit-1202.md +32 -0
  232. package/docs/environment-variables.md +197 -11
  233. package/docs/fable.md +27 -0
  234. package/docs/features.md +35 -5
  235. package/docs/globalconfig.md +101 -5
  236. package/docs/language-coverage.md +6 -5
  237. package/docs/lsp-capability-matrix.md +2 -2
  238. package/docs/mcp.md +54 -20
  239. package/docs/servercapabilities.md +7 -4
  240. package/docs/settings.md +192 -0
  241. package/docs/tools.md +18 -1
  242. package/docs/tree-sitter_rules_catalog.md +11 -31
  243. package/docs/usage.md +31 -0
  244. package/package.json +139 -138
  245. package/rules/ast-grep-rules/rule-tests/hardcoded-url-js-test.yml +1 -0
  246. package/rules/ast-grep-rules/rule-tests/hardcoded-url-test.yml +2 -0
  247. package/rules/ast-grep-rules/rule-tests/no-bare-except-test.yml +49 -0
  248. package/rules/ast-grep-rules/rule-tests/no-bare-host-path-in-win32-branch-test.yml +87 -0
  249. package/rules/ast-grep-rules/rule-tests/no-case-declarations-js-test.yml +10 -0
  250. package/rules/ast-grep-rules/rule-tests/no-case-declarations-test.yml +10 -0
  251. package/rules/ast-grep-rules/rule-tests/no-javascript-url-js-test.yml +10 -0
  252. package/rules/ast-grep-rules/rule-tests/no-javascript-url-test.yml +10 -0
  253. package/rules/ast-grep-rules/rule-tests/no-nested-links-test.yml +11 -1
  254. package/rules/ast-grep-rules/rule-tests/no-raw-json-store-write-test.yml +17 -0
  255. package/rules/ast-grep-rules/rule-tests/no-win32-isabsolute-for-qualification-test.yml +16 -0
  256. package/rules/ast-grep-rules/rule-tests/strict-equality-js-test.yml +3 -0
  257. package/rules/ast-grep-rules/rule-tests/strict-equality-test.yml +3 -0
  258. package/rules/ast-grep-rules/rule-tests/strict-inequality-js-test.yml +3 -0
  259. package/rules/ast-grep-rules/rule-tests/strict-inequality-test.yml +4 -0
  260. package/rules/ast-grep-rules/rules/hardcoded-url-js.yml +22 -4
  261. package/rules/ast-grep-rules/rules/hardcoded-url.yml +22 -4
  262. package/rules/ast-grep-rules/rules/no-bare-except.yml +3 -15
  263. package/rules/ast-grep-rules/rules/no-bare-host-path-in-win32-branch.yml +25 -0
  264. package/rules/ast-grep-rules/rules/no-case-declarations-js.yml +4 -3
  265. package/rules/ast-grep-rules/rules/no-case-declarations.yml +4 -3
  266. package/rules/ast-grep-rules/rules/no-console-except-error-js.yml +10 -0
  267. package/rules/ast-grep-rules/rules/no-console-except-error.yml +10 -0
  268. package/rules/ast-grep-rules/rules/no-javascript-url-js.yml +42 -6
  269. package/rules/ast-grep-rules/rules/no-javascript-url.yml +42 -6
  270. package/rules/ast-grep-rules/rules/no-nested-links.yml +7 -0
  271. package/rules/ast-grep-rules/rules/no-raw-json-store-write.yml +30 -0
  272. package/rules/ast-grep-rules/rules/no-win32-isabsolute-for-qualification.yml +23 -0
  273. package/rules/ast-grep-rules/rules/strict-equality-js.yml +14 -1
  274. package/rules/ast-grep-rules/rules/strict-equality.yml +14 -1
  275. package/rules/ast-grep-rules/rules/strict-inequality-js.yml +14 -1
  276. package/rules/ast-grep-rules/rules/strict-inequality.yml +14 -1
  277. package/rules/tree-sitter-queries/cpp/no-memset-sensitive-data.yml +9 -3
  278. package/rules/tree-sitter-queries/cpp/no-scoped-lock-without-args.yml +6 -6
  279. package/rules/tree-sitter-queries/css/calc-spacing.yml +8 -6
  280. package/rules/tree-sitter-queries/go/go-mutex-copy.yml +21 -18
  281. package/rules/tree-sitter-queries/go/go-shared-map-write-goroutine.yml +3 -3
  282. package/rules/tree-sitter-queries/java/infinite-loop-java.yml +3 -3
  283. package/rules/tree-sitter-queries/java/junit-call-super.yml +6 -4
  284. package/rules/tree-sitter-queries/java/no-double-checked-locking.yml +10 -8
  285. package/rules/tree-sitter-queries/java/no-field-shadowing.yml +1 -1
  286. package/rules/tree-sitter-queries/java/prepared-statement-valid-indices.yml +2 -3
  287. package/rules/tree-sitter-queries/java/resources-closed.yml +2 -2
  288. package/rules/tree-sitter-queries/java/springboot-default-package.yml +6 -3
  289. package/rules/tree-sitter-queries/java/switch-fall-through.yml +6 -4
  290. package/rules/tree-sitter-queries/java/switch-non-case-labels.yml +4 -3
  291. package/rules/tree-sitter-queries/java/tests-include-assertions.yml +6 -5
  292. package/rules/tree-sitter-queries/javascript/switch-case-termination-js.yml +5 -8
  293. package/rules/tree-sitter-queries/javascript/switch-non-case-labels.yml +3 -2
  294. package/rules/tree-sitter-queries/kotlin/prepared-statement-indices.yml +9 -5
  295. package/rules/tree-sitter-queries/php/this-in-static-context.yml +5 -5
  296. package/rules/tree-sitter-queries/python/exit-signature-check.yml +2 -9
  297. package/rules/tree-sitter-queries/python/in-operator-unsupported.yml +3 -4
  298. package/rules/tree-sitter-queries/python/no-super-torchscript.yml +4 -8
  299. package/rules/tree-sitter-queries/python/notimplemented-boolean-context.yml +1 -5
  300. package/rules/tree-sitter-queries/python/python-empty-except.yml +1 -1
  301. package/rules/tree-sitter-queries/python/return-in-init.yml +0 -2
  302. package/rules/tree-sitter-queries/python/yield-return-outside-function.yml +0 -3
  303. package/rules/tree-sitter-queries/ruby/ruby-command-injection.yml +1 -12
  304. package/rules/tree-sitter-queries/ruby/ruby-eval.yml +1 -1
  305. package/rules/tree-sitter-queries/ruby/ruby-insecure-deserialization.yml +4 -4
  306. package/rules/tree-sitter-queries/ruby/ruby-insecure-random.yml +4 -11
  307. package/rules/tree-sitter-queries/ruby/ruby-open-struct.yml +1 -1
  308. package/rules/tree-sitter-queries/ruby/ruby-string-eval.yml +2 -3
  309. package/rules/tree-sitter-queries/ruby/ruby-weak-hash.yml +4 -4
  310. package/rules/tree-sitter-queries/rust/rust-lock-held-across-await.yml +4 -3
  311. package/rules/tree-sitter-queries/tsx/no-nested-links.yml +4 -6
  312. package/rules/tree-sitter-queries/typescript/console-statement.yml +11 -0
  313. package/rules/tree-sitter-queries/typescript/duplicate-function-arg.yml +4 -9
  314. package/rules/tree-sitter-queries/typescript/empty-switch-case.yml +13 -9
  315. package/rules/tree-sitter-queries/typescript/infinite-loop.yml +2 -2
  316. package/rules/tree-sitter-queries/typescript/mixed-async-styles.yml +10 -1
  317. package/rules/tree-sitter-queries/typescript/switch-case-termination.yml +5 -8
  318. package/rules/tree-sitter-queries/typescript/ts-insecure-random.yml +7 -10
  319. package/rules/tree-sitter-queries/typescript/unsafe-regex.yml +4 -2
  320. package/rules/typos/_typos.toml +17 -0
  321. package/scripts/analyze-pi-lens-logs.mjs +55 -2
  322. package/skills/pi-lens-write-tree-sitter-rule/SKILL.md +5 -0
  323. package/dist/clients/ast-grep-parser.js +0 -86
  324. package/dist/clients/config-enabled-shape.js +0 -39
  325. package/dist/clients/lsp/interactive-install.js +0 -367
  326. package/dist/clients/lsp/lsp-index.js +0 -10
  327. package/dist/clients/lsp/server-strategies.js +0 -5
  328. package/dist/clients/project-metadata.js +0 -690
  329. package/dist/clients/source-groups.js +0 -96
  330. package/dist/clients/types.js +0 -11
  331. package/docs/env_variables.md +0 -10
  332. package/rules/tree-sitter-queries/abap-disabled/delete-where.yml +0 -46
  333. package/rules/tree-sitter-queries/cpp/no-confused-move-forward.yml +0 -59
  334. package/rules/tree-sitter-queries/cpp/noexcept-functions.yml +0 -58
  335. package/rules/tree-sitter-queries/java/mockito-initialized.yml +0 -66
  336. package/rules/tree-sitter-queries/java/no-wait-notify-on-thread.yml +0 -58
  337. package/rules/tree-sitter-queries/java/short-circuit-logic.yml +0 -57
  338. package/rules/tree-sitter-queries/java/spring-session-attributes-setcomplete.yml +0 -75
  339. package/rules/tree-sitter-queries/plsql-disabled/delete-update-where.yml +0 -56
  340. package/rules/tree-sitter-queries/plsql-disabled/end-loop-semicolon.yml +0 -51
  341. package/rules/tree-sitter-queries/plsql-disabled/fetch-bulk-collect-limit.yml +0 -47
  342. package/rules/tree-sitter-queries/plsql-disabled/forallsave-exceptions.yml +0 -51
  343. package/rules/tree-sitter-queries/plsql-disabled/nchar-nvarchar2-bytes.yml +0 -54
  344. package/rules/tree-sitter-queries/plsql-disabled/not-null-initialization.yml +0 -59
  345. package/rules/tree-sitter-queries/plsql-disabled/raise-application-error-codes.yml +0 -50
  346. package/rules/tree-sitter-queries/typescript-disabled/ts-path-traversal.yml +0 -71
@@ -28,18 +28,20 @@ description: |
28
28
 
29
29
  query: |
30
30
  (if_statement
31
- condition: (binary_expression
32
- left: (identifier) @FIELD
33
- operator: ("==")
34
- right: ("null"))
31
+ condition: (condition
32
+ (binary_expression
33
+ left: (identifier) @FIELD
34
+ "=="
35
+ (null_literal) @NULL))
35
36
  consequence: (block
36
37
  (synchronized_statement
37
38
  body: (block
38
39
  (if_statement
39
- condition: (binary_expression
40
- left: (identifier) @FIELD2
41
- operator: ("==")
42
- right: ("null")))))))
40
+ condition: (condition
41
+ (binary_expression
42
+ left: (identifier) @FIELD2
43
+ "=="
44
+ (null_literal) @NULL2)))))))
43
45
 
44
46
  metavars:
45
47
  - FIELD
@@ -27,7 +27,7 @@ description: |
27
27
 
28
28
  query: |
29
29
  (class_declaration
30
- (extends_clause
30
+ superclass: (superclass
31
31
  (type_identifier) @PARENT)
32
32
  body: (class_body
33
33
  (field_declaration
@@ -26,15 +26,14 @@ query: |
26
26
  (method_invocation
27
27
  name: (identifier) @METHOD (#match? @METHOD "^(setString|setInt|setLong|setDouble|setBoolean|getString|getInt|getLong|getDouble|getBoolean)$")
28
28
  arguments: (argument_list
29
- (decimal_integer_literal) @INDEX) @ARGS)
29
+ (decimal_integer_literal) @INDEX
30
+ (#match? @INDEX "^0+$")) @ARGS)
30
31
 
31
32
  metavars:
32
33
  - METHOD
33
34
  - INDEX
34
35
  - ARGS
35
36
 
36
- post_filter: invalid_statement_index
37
-
38
37
  tags:
39
38
  - reliability
40
39
  - java
@@ -2,10 +2,10 @@
2
2
  # Detects resources that should be closed (pre-Java 7 style)
3
3
  id: resources-closed
4
4
  name: Resources Should Be Closed
5
- severity: error
5
+ severity: warning
6
6
  category: reliability
7
7
  defect_class: correctness
8
- inline_tier: blocking
8
+ inline_tier: warning
9
9
  language: java
10
10
 
11
11
  message: "Resource '{{RESOURCE}}' should be closed in finally block"
@@ -30,9 +30,12 @@ description: |
30
30
  query: |
31
31
  (class_declaration
32
32
  (modifiers
33
- (annotation
34
- name: (identifier) @ANNOT (#match? @ANNOT "^(SpringBootApplication|ComponentScan)$")))
35
- name: (_) @CLASS)
33
+ [(marker_annotation
34
+ name: (identifier) @ANNOT)
35
+ (annotation
36
+ name: (identifier) @ANNOT)])
37
+ name: (_) @CLASS
38
+ (#match? @ANNOT "^(SpringBootApplication|ComponentScan)$"))
36
39
 
37
40
  metavars:
38
41
  - ANNOT
@@ -29,11 +29,13 @@ description: |
29
29
  ```
30
30
 
31
31
  query: |
32
- (switch_statement
32
+ (switch_expression
33
33
  body: (switch_block
34
- (switch_label) @LABEL
35
- (expression_statement)*
36
- (switch_label) @NEXT_LABEL))
34
+ (switch_block_statement_group
35
+ (switch_label) @LABEL
36
+ (expression_statement)+)
37
+ (switch_block_statement_group
38
+ (switch_label) @NEXT_LABEL)))
37
39
 
38
40
  metavars:
39
41
  - LABEL
@@ -27,10 +27,11 @@ description: |
27
27
  ```
28
28
 
29
29
  query: |
30
- (switch_statement
30
+ (switch_expression
31
31
  body: (switch_block
32
- (labeled_statement
33
- (identifier) @LABEL) @LABELED_STMT))
32
+ (switch_block_statement_group
33
+ (labeled_statement
34
+ (identifier) @LABEL) @LABELED_STMT)))
34
35
 
35
36
  metavars:
36
37
  - LABEL
@@ -2,10 +2,10 @@
2
2
  # Detects JUnit tests without assertions
3
3
  id: tests-include-assertions
4
4
  name: Tests Should Include Assertions
5
- severity: error
5
+ severity: warning
6
6
  category: maintainability
7
7
  defect_class: correctness
8
- inline_tier: blocking
8
+ inline_tier: warning
9
9
  language: java
10
10
 
11
11
  message: "Test method should include at least one assertion"
@@ -26,10 +26,11 @@ description: |
26
26
  query: |
27
27
  (method_declaration
28
28
  (modifiers
29
- (annotation
30
- name: (identifier) @TEST (#match? @TEST "^(Test|ParameterizedTest|RepeatedTest)$")))
29
+ (marker_annotation
30
+ name: (identifier) @TEST))
31
31
  name: (identifier) @NAME
32
- body: (block) @BODY)
32
+ body: (block) @BODY
33
+ (#match? @TEST "^(Test|ParameterizedTest|RepeatedTest)$"))
33
34
 
34
35
  metavars:
35
36
  - TEST
@@ -26,16 +26,13 @@ description: |
26
26
  ```
27
27
 
28
28
  query: |
29
- (switch_statement
30
- body: (switch_body
31
- (switch_case
32
- consequence: (statement_block
33
- (expression_statement) @LAST))
34
- (switch_case) @NEXT))
29
+ (switch_body
30
+ (switch_case) @CASE
31
+ .
32
+ [(switch_case) (switch_default)])
35
33
 
36
34
  metavars:
37
- - LAST
38
- - NEXT
35
+ - CASE
39
36
 
40
37
  post_filter: no_terminating_statement
41
38
 
@@ -19,8 +19,9 @@ description: |
19
19
  query: |
20
20
  (switch_statement
21
21
  body: (switch_body
22
- (labeled_statement
23
- (statement_identifier) @LABEL) @LABELED))
22
+ (switch_case
23
+ (labeled_statement
24
+ (statement_identifier) @LABEL) @LABELED)))
24
25
 
25
26
  metavars:
26
27
  - LABEL
@@ -21,17 +21,21 @@ description: |
21
21
 
22
22
  query: |
23
23
  (call_expression
24
- (simple_identifier) @METHOD (#match? @METHOD "^(setString|setInt|setLong|getString|getInt|getLong)$")
25
- (value_arguments
26
- (integer_literal) @INDEX) @ARGS)
24
+ (navigation_expression
25
+ (simple_identifier)
26
+ (navigation_suffix
27
+ (simple_identifier) @METHOD))
28
+ (call_suffix
29
+ (value_arguments
30
+ (value_argument (integer_literal) @INDEX) @ARGS))
31
+ (#match? @METHOD "^(setString|setInt|setLong|getString|getInt|getLong)$")
32
+ (#eq? @INDEX "0"))
27
33
 
28
34
  metavars:
29
35
  - METHOD
30
36
  - INDEX
31
37
  - ARGS
32
38
 
33
- post_filter: invalid_jdbc_index
34
-
35
39
  tags:
36
40
  - reliability
37
41
  - kotlin
@@ -33,15 +33,15 @@ description: |
33
33
 
34
34
  query: |
35
35
  (method_declaration
36
- (modifiers
37
- "static")
36
+ (static_modifier)
38
37
  body: (compound_statement
39
- ((variable_name) @THIS
40
- (#eq? @THIS "$this"))))
38
+ (return_statement
39
+ (member_access_expression
40
+ object: ((variable_name) @THIS
41
+ (#eq? @THIS "$this"))))) )
41
42
 
42
43
  metavars:
43
44
  - THIS
44
- - VAR
45
45
 
46
46
  tags:
47
47
  - reliability
@@ -28,18 +28,11 @@ description: |
28
28
  query: |
29
29
  (function_definition
30
30
  name: (identifier) @NAME (#eq? @NAME "__exit__")
31
- parameters: (parameters
32
- (_) @SELF
33
- . (_) @PARAM1?
34
- . (_) @PARAM2?
35
- . (_) @PARAM3?))
31
+ parameters: (parameters) @PARAMS)
36
32
 
37
33
  metavars:
38
34
  - NAME
39
- - SELF
40
- - PARAM1
41
- - PARAM2
42
- - PARAM3
35
+ - PARAMS
43
36
 
44
37
  post_filter: exit_params_insufficient
45
38
 
@@ -25,12 +25,11 @@ query: |
25
25
  (comparison_operator
26
26
  (identifier) @OBJ
27
27
  "in"
28
- (identifier) @TARGET)
28
+ (_) @TARGET)
29
29
  (comparison_operator
30
30
  (identifier) @OBJ
31
- "not"
32
- "in"
33
- (identifier) @TARGET)
31
+ "not in"
32
+ (_) @TARGET)
34
33
 
35
34
  metavars:
36
35
  - OBJ
@@ -17,19 +17,15 @@ description: |
17
17
  ✅ FIX: Use composition or avoid TorchScript for this class
18
18
 
19
19
  query: |
20
- (function_definition
21
- (decorator
22
- (call
23
- function: (identifier) @DEC (#match? @DEC "^(torch\.jit\.script|jit\.script)$")))
24
- body: (block
25
- (call
26
- function: (identifier) @FUNC (#eq? @FUNC "super")) @CALL))
20
+ (call
21
+ function: (identifier) @FUNC (#eq? @FUNC "super")) @CALL
27
22
 
28
23
  metavars:
29
- - DEC
30
24
  - FUNC
31
25
  - CALL
32
26
 
27
+ post_filter: torchscript_super_call
28
+
33
29
  tags:
34
30
  - reliability
35
31
  - python
@@ -28,13 +28,9 @@ query: |
28
28
  condition: (identifier) @COND (#eq? @COND "NotImplemented"))
29
29
  (while_statement
30
30
  condition: (identifier) @COND (#eq? @COND "NotImplemented"))
31
- (binary_operator
32
- (identifier) @COND (#eq? @COND "NotImplemented")
33
- ("and" | "or"))
34
31
  (boolean_operator
35
32
  (identifier) @COND (#eq? @COND "NotImplemented"))
36
- (unary_operator
37
- operator: ("not")
33
+ (not_operator
38
34
  argument: (identifier) @COND (#eq? @COND "NotImplemented"))
39
35
 
40
36
  metavars:
@@ -21,7 +21,7 @@ description: |
21
21
  query: |
22
22
  (try_statement
23
23
  (except_clause
24
- body: (block) @BODY))
24
+ (block) @BODY))
25
25
 
26
26
  metavars:
27
27
  - BODY
@@ -35,8 +35,6 @@ metavars:
35
35
  - RETURN
36
36
  - RETURN_VAL
37
37
 
38
- post_filter: has_return_value
39
-
40
38
  tags:
41
39
  - reliability
42
40
  - python-specific
@@ -28,9 +28,6 @@ query: |
28
28
  (module
29
29
  (expression_statement
30
30
  (yield) @STATEMENT))
31
- (module
32
- (expression_statement
33
- (yield_expression) @STATEMENT))
34
31
  (module
35
32
  (return_statement) @STATEMENT)
36
33
 
@@ -19,19 +19,8 @@ description: |
19
19
  query: |
20
20
  (call
21
21
  method: (identifier) @FN
22
+ (#match? @FN "^(system|exec|spawn|popen|capture3|capture2|capture2e)$")
22
23
  arguments: (argument_list) @ARGS)
23
- (#match? @FN "^(system|exec|spawn|popen|capture3|capture2|capture2e)$")
24
-
25
- (command
26
- method: (identifier) @FN
27
- argument: (_) @ARGS)
28
- (#match? @FN "^(system|exec|spawn|popen)$")
29
-
30
- (call_expression
31
- receiver: (constant) @NS
32
- method: (identifier) @FN
33
- arguments: (argument_list) @ARGS)
34
- (#match? @FN "^(system|exec|spawn|popen|capture3|capture2|capture2e)$")
35
24
 
36
25
  metavars:
37
26
  - FN
@@ -17,7 +17,7 @@ description: |
17
17
  ✅ FIX: Use send(), const_get(), or other metaprogramming instead.
18
18
 
19
19
  query: |
20
- (method_call
20
+ (call
21
21
  method: (identifier) @METHOD
22
22
  (#eq? @METHOD "eval")
23
23
  arguments: (argument_list) @ARGS)
@@ -16,12 +16,12 @@ description: |
16
16
  ✅ FIX: use safe serialization formats and strict schema validation.
17
17
 
18
18
  query: |
19
- (call_expression
19
+ (call
20
20
  receiver: (constant) @MOD
21
- method: (identifier) @FN
22
- arguments: (argument_list (_) @DATA)
23
21
  (#match? @MOD "^(Marshal|YAML|Psych)$")
24
- (#match? @FN "^(load|unsafe_load)$"))
22
+ method: (identifier) @FN
23
+ (#match? @FN "^(load|unsafe_load)$")
24
+ arguments: (argument_list (_) @DATA))
25
25
 
26
26
  metavars:
27
27
  - MOD
@@ -16,19 +16,12 @@ description: |
16
16
  ✅ FIX: use SecureRandom.hex/base64/uuid.
17
17
 
18
18
  query: |
19
- [
20
- (call
21
- method: (identifier) @FN
22
- arguments: (argument_list) @ARGS)
23
- (call_expression
24
- receiver: (constant) @MOD
25
- method: (identifier) @FN
26
- arguments: (argument_list) @ARGS)
27
- ]
28
- (#match? @FN "^(rand|srand)$")
19
+ (call
20
+ method: (identifier) @FN
21
+ (#match? @FN "^(rand|srand)$")
22
+ arguments: (argument_list) @ARGS)
29
23
 
30
24
  metavars:
31
- - MOD
32
25
  - FN
33
26
  - ARGS
34
27
 
@@ -17,7 +17,7 @@ description: |
17
17
  ✅ FIX: Use Struct.new or a plain class with attr_accessor.
18
18
 
19
19
  query: |
20
- (call_expression
20
+ (call
21
21
  receiver: (constant) @RECV
22
22
  (#eq? @RECV "OpenStruct")
23
23
  method: (identifier) @METHOD
@@ -28,9 +28,8 @@ description: |
28
28
  query: |
29
29
  (call
30
30
  method: (identifier) @METHOD
31
- arguments: (argument_list
32
- [(string) (interpolated_string)] @ARG)
33
- (#match? @METHOD "^(eval|class_eval|module_eval|instance_eval)$")) @CALL
31
+ (#match? @METHOD "^(eval|class_eval|module_eval|instance_eval)$")
32
+ arguments: (argument_list (string) @ARG)) @CALL
34
33
 
35
34
  metavars:
36
35
  - METHOD
@@ -16,12 +16,12 @@ description: |
16
16
  ✅ FIX: use Digest::SHA256 or stronger algorithms.
17
17
 
18
18
  query: |
19
- (call_expression
20
- receiver: (constant) @MOD
19
+ (call
20
+ receiver: (scope_resolution) @MOD
21
+ (#match? @MOD "^(Digest::MD5|Digest::SHA1)$")
21
22
  method: (identifier) @FN
23
+ (#match? @FN "^(hexdigest|digest|base64digest)$")
22
24
  arguments: (argument_list) @ARGS)
23
- (#match? @MOD "^(Digest::MD5|Digest::SHA1)$")
24
- (#match? @FN "^(hexdigest|digest|base64digest)$")
25
25
 
26
26
  metavars:
27
27
  - MOD
@@ -20,12 +20,13 @@ query: |
20
20
  (let_declaration
21
21
  pattern: (identifier) @GUARD
22
22
  value: (await_expression
23
- expression: (call_expression
23
+ (call_expression
24
24
  function: (field_expression
25
+ value: (_)
25
26
  field: (field_identifier) @LOCKFN))))
26
27
  (_)*
27
- (await_expression) @LATER_AWAIT)
28
- (#eq? @LOCKFN "lock")
28
+ (expression_statement (await_expression) @LATER_AWAIT)
29
+ (#eq? @LOCKFN "lock"))
29
30
 
30
31
  metavars:
31
32
  - GUARD
@@ -18,15 +18,13 @@ query: |
18
18
  (jsx_element
19
19
  open_tag: (jsx_opening_element
20
20
  (identifier) @OUTER
21
- (#eq? @OUTER "a"))
22
- (jsx_element
23
- open_tag: (jsx_opening_element
24
- (identifier) @INNER
25
- (#eq? @INNER "a"))))
21
+ (#eq? @OUTER "a"))) @OUTER_ELEMENT
26
22
 
27
23
  metavars:
28
24
  - OUTER
29
- - INNER
25
+ - OUTER_ELEMENT
26
+
27
+ post_filter: no_nested_anchor_chain
30
28
 
31
29
  tags:
32
30
  - correctness
@@ -24,6 +24,17 @@ query: |
24
24
 
25
25
  post_filter: not_in_test_block # skip test blocks — no-console-in-tests handles that case
26
26
 
27
+ # Console output IS the point in a CLI script's own stdout contract and in a
28
+ # logging implementation's console fallback/sink — flagging it there just
29
+ # trains users to ignore the rule (#965). Application/library code outside
30
+ # these paths still gets flagged.
31
+ ignore_paths:
32
+ - "scripts/**"
33
+ - "bin/**"
34
+ - "**/logger.ts"
35
+ - "**/logger.js"
36
+ - "**/logger.mjs"
37
+
27
38
  metavars:
28
39
  - OBJ
29
40
  - METHOD
@@ -21,18 +21,13 @@ description: |
21
21
  ```
22
22
 
23
23
  query: |
24
- (function_declaration
25
- parameters: (formal_parameters
26
- (identifier) @PARAM1
27
- (identifier) @PARAM2))
28
- (arrow_function
29
- parameters: (formal_parameters
30
- (identifier) @PARAM1
31
- (identifier) @PARAM2))
24
+ (formal_parameters
25
+ (_ pattern: (_) @PARAM1)
26
+ (_ pattern: (_) @NAME))
32
27
 
33
28
  metavars:
34
29
  - PARAM1
35
- - PARAM2
30
+ - NAME
36
31
 
37
32
  post_filter: same_param_name
38
33
 
@@ -8,11 +8,14 @@ defect_class: correctness
8
8
  inline_tier: blocking
9
9
  language: typescript
10
10
 
11
- message: "Switch case should not be empty"
11
+ message: "Switch case is empty and shares no body with a following label"
12
12
 
13
13
  description: |
14
- Empty switch cases are confusing and likely indicate incomplete
15
- code. Add handling or remove the case.
14
+ A case with no body and no following label handles nothing — likely
15
+ incomplete code. Add handling or remove the case.
16
+
17
+ Grouped labels are not flagged: in `case 1: case 2: doWork();` the first
18
+ label deliberately shares the second's body.
16
19
 
17
20
  ✅ FIX: Add case body or remove
18
21
 
@@ -27,11 +30,10 @@ description: |
27
30
  query: |
28
31
  (switch_statement
29
32
  body: (switch_body
30
- (switch_case
31
- consequence: (statement_block) @BLOCK)))
33
+ (switch_case) @CASE))
32
34
 
33
35
  metavars:
34
- - BLOCK
36
+ - CASE
35
37
 
36
38
  post_filter: is_empty_block
37
39
 
@@ -42,13 +44,15 @@ tags:
42
44
 
43
45
  examples:
44
46
  bad: |
45
- case 1: // BAD - empty
46
- case 2:
47
+ case 1:
47
48
  doWork();
49
+ break;
50
+ case 2: // BAD - empty, nothing follows it
48
51
 
49
52
  good: |
50
53
  case 1:
51
- handleOne(); // GOOD
54
+ case 2: // GOOD - grouped labels share the body below
55
+ doWork();
52
56
  break;
53
57
 
54
58
  has_fix: false
@@ -24,10 +24,10 @@ description: |
24
24
 
25
25
  query: |
26
26
  (while_statement
27
- condition: (true)
27
+ condition: (parenthesized_expression (true))
28
28
  body: (statement_block) @BODY)
29
29
  (for_statement
30
- condition: (null)
30
+ condition: (empty_statement)
31
31
  body: (statement_block) @BODY)
32
32
 
33
33
  metavars:
@@ -20,7 +20,16 @@ description: |
20
20
 
21
21
  query: |
22
22
  (function_declaration
23
- (async_modifier)
23
+ "async"
24
+ body: (statement_block) @BODY)
25
+ (arrow_function
26
+ "async"
27
+ body: (statement_block) @BODY)
28
+ (method_definition
29
+ "async"
30
+ body: (statement_block) @BODY)
31
+ (function_expression
32
+ "async"
24
33
  body: (statement_block) @BODY)
25
34
 
26
35
  # Post-filter: Check if body contains both await and .then()
@@ -26,16 +26,13 @@ description: |
26
26
  ```
27
27
 
28
28
  query: |
29
- (switch_statement
30
- body: (switch_body
31
- (switch_case
32
- consequence: (statement_block
33
- (expression_statement) @LAST))
34
- (switch_case) @NEXT))
29
+ (switch_body
30
+ (switch_case) @CASE
31
+ .
32
+ [(switch_case) (switch_default)])
35
33
 
36
34
  metavars:
37
- - LAST
38
- - NEXT
35
+ - CASE
39
36
 
40
37
  post_filter: no_terminating_statement
41
38