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.
- package/CHANGELOG.md +2614 -12
- package/README.md +50 -21
- package/dist/clients/actionable-warnings.js +73 -18
- package/dist/clients/agent-behavior-client.js +21 -4
- package/dist/clients/ast-grep-client.js +68 -16
- package/dist/clients/ast-grep-types.js +0 -1
- package/dist/clients/ast-grep-yaml-synth.js +37 -10
- package/dist/clients/atomic-write-staging.js +63 -0
- package/dist/clients/atomic-write.js +116 -16
- package/dist/clients/bash-file-access.js +193 -23
- package/dist/clients/biome-client.js +29 -25
- package/dist/clients/bootstrap.js +11 -2
- package/dist/clients/bounded-cache.js +34 -0
- package/dist/clients/bounded-pid-file-lock.js +192 -0
- package/dist/clients/bus-events-logger.js +5 -1
- package/dist/clients/bus-publish.js +10 -3
- package/dist/clients/cache/rule-cache.js +89 -6
- package/dist/clients/cache-manager.js +97 -9
- package/dist/clients/cache-observability.js +498 -0
- package/dist/clients/call-graph.js +460 -108
- package/dist/clients/cascade-logger.js +5 -1
- package/dist/clients/child-unref.js +85 -0
- package/dist/clients/codebase-model.js +52 -23
- package/dist/clients/collateral-test-role.js +40 -0
- package/dist/clients/complexity-client.js +6 -8
- package/dist/clients/console-guard-install.js +14 -0
- package/dist/clients/cooperative-budget.js +42 -0
- package/dist/clients/dead-code-client.js +2 -1
- package/dist/clients/debug-handles.js +206 -0
- package/dist/clients/debug-heap.js +167 -0
- package/dist/clients/degradation-ledger.js +153 -0
- package/dist/clients/dependency-checker.js +466 -63
- package/dist/clients/diagnostic-dispositions.js +83 -13
- package/dist/clients/diagnostics-publish.js +10 -3
- package/dist/clients/dispatch/auxiliary-lsp.js +34 -0
- package/dist/clients/dispatch/dispatcher.js +71 -13
- package/dist/clients/dispatch/fact-store.js +11 -0
- package/dist/clients/dispatch/facts/function-facts.js +37 -7
- package/dist/clients/dispatch/facts/import-facts.js +108 -119
- package/dist/clients/dispatch/facts/tree-sitter-facts.js +12 -12
- package/dist/clients/dispatch/facts/try-catch-facts.js +13 -0
- package/dist/clients/dispatch/indent-detect.js +35 -0
- package/dist/clients/dispatch/inline-suppressions.js +17 -8
- package/dist/clients/dispatch/integration.js +1094 -611
- package/dist/clients/dispatch/lazy.js +14 -0
- package/dist/clients/dispatch/plan.js +11 -1
- package/dist/clients/dispatch/rule-id-normalize.js +50 -0
- package/dist/clients/dispatch/rule-policy.js +135 -0
- package/dist/clients/dispatch/rules/async-noise.js +1 -0
- package/dist/clients/dispatch/rules/unsafe-boundary.js +7 -0
- package/dist/clients/dispatch/runners/ast-grep-napi.js +47 -6
- package/dist/clients/dispatch/runners/biome-check.js +5 -9
- package/dist/clients/dispatch/runners/detekt.js +3 -2
- package/dist/clients/dispatch/runners/hadolint.js +2 -1
- package/dist/clients/dispatch/runners/helm-lint.js +154 -0
- package/dist/clients/dispatch/runners/htmlhint.js +3 -2
- package/dist/clients/dispatch/runners/index.js +5 -1
- package/dist/clients/dispatch/runners/lsp.js +14 -6
- package/dist/clients/dispatch/runners/markdownlint.js +4 -9
- package/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -1
- package/dist/clients/dispatch/runners/pyright.js +9 -5
- package/dist/clients/dispatch/runners/ruff.js +4 -8
- package/dist/clients/dispatch/runners/shellcheck.js +2 -3
- package/dist/clients/dispatch/runners/shfmt.js +2 -3
- package/dist/clients/dispatch/runners/spotbugs.js +2 -1
- package/dist/clients/dispatch/runners/taplo.js +2 -1
- package/dist/clients/dispatch/runners/terragrunt.js +163 -0
- package/dist/clients/dispatch/runners/tflint.js +37 -5
- package/dist/clients/dispatch/runners/tree-sitter.js +155 -166
- package/dist/clients/dispatch/runners/trivy-config.js +13 -7
- package/dist/clients/dispatch/runners/utils/lazy-installer.js +3 -0
- package/dist/clients/dispatch/runners/utils/runner-helpers.js +284 -34
- package/dist/clients/dispatch/runners/utils/spawn-outcome.js +22 -0
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +5 -4
- package/dist/clients/disposition-publish.js +10 -3
- package/dist/clients/durable-store.js +97 -0
- package/dist/clients/event-loop-monitor.js +94 -3
- package/dist/clients/extension-log.js +139 -0
- package/dist/clients/extension-mode.js +73 -0
- package/dist/clients/feature-hints.js +53 -7
- package/dist/clients/file-kinds.js +143 -31
- package/dist/clients/file-role.js +18 -3
- package/dist/clients/file-utils.js +56 -34
- package/dist/clients/fix-worklog.js +14 -2
- package/dist/clients/format-events-publish.js +16 -3
- package/dist/clients/format-service.js +24 -8
- package/dist/clients/formatters-lazy.js +8 -0
- package/dist/clients/formatters.js +358 -61
- package/dist/clients/generated-artifacts.js +169 -15
- package/dist/clients/git-guard.js +681 -11
- package/dist/clients/git-tracked-ignore.js +4 -0
- package/dist/clients/go-client.js +2 -1
- package/dist/clients/govulncheck-client.js +8 -0
- package/dist/clients/grammar-source.js +12 -4
- package/dist/clients/gzip-stage-write.js +102 -0
- package/dist/clients/host-ports.js +31 -0
- package/dist/clients/installer/index.js +733 -213
- package/dist/clients/instance-reaper.js +142 -172
- package/dist/clients/jscpd-client.js +31 -54
- package/dist/clients/knip-client.js +78 -36
- package/dist/clients/language-policy.js +14 -2
- package/dist/clients/language-profile.js +72 -77
- package/dist/clients/latency-logger.js +28 -16
- package/dist/clients/lens-config.js +140 -166
- package/dist/clients/lens-engine.js +124 -21
- package/dist/clients/lens-events.js +27 -4
- package/dist/clients/lens-flag-registry.js +293 -0
- package/dist/clients/lens-map.js +96 -26
- package/dist/clients/live-bus-emitter.js +30 -0
- package/dist/clients/log-cleanup.js +8 -18
- package/dist/clients/lsp/cascade-tier.js +23 -3
- package/dist/clients/lsp/client.js +566 -57
- package/dist/clients/lsp/config.js +74 -10
- package/dist/clients/lsp/diagnostic-binding.js +86 -0
- package/dist/clients/lsp/edits.js +1012 -121
- package/dist/clients/lsp/index.js +1840 -803
- package/dist/clients/lsp/language.js +4 -1
- package/dist/clients/lsp/launch.js +40 -32
- package/dist/clients/lsp/path-utils.js +1 -1
- package/dist/clients/lsp/ruby-drive-dirs.js +83 -0
- package/dist/clients/lsp/server.js +279 -60
- package/dist/clients/lsp/workspace-diagnostics-cache.js +28 -4
- package/dist/clients/lsp-document-symbols.js +112 -0
- package/dist/clients/lsp-lazy.js +8 -0
- package/dist/clients/lsp-mutation.js +248 -0
- package/dist/clients/mcp/analyze.js +128 -36
- package/dist/clients/mcp/ipc.js +157 -24
- package/dist/clients/mcp/review.js +36 -3
- package/dist/clients/mcp/session.js +216 -8
- package/dist/clients/memory-sampler.js +115 -0
- package/dist/clients/metrics-client.js +2 -1
- package/dist/clients/metrics-history.js +2 -1
- package/dist/clients/module-report-lsp.js +5 -0
- package/dist/clients/module-report.js +267 -82
- package/dist/clients/ndjson-logger.js +334 -103
- package/dist/clients/opengrep-client.js +1 -1
- package/dist/clients/partial-edit-apply.js +120 -5
- package/dist/clients/path-keyed-map.js +76 -0
- package/dist/clients/path-utils.js +141 -5
- package/dist/clients/performance-report.js +327 -0
- package/dist/clients/pipeline.js +54 -13
- package/dist/clients/print-mode.js +21 -0
- package/dist/clients/project-changes.js +117 -4
- package/dist/clients/project-diagnostics/cache.js +3 -2
- package/dist/clients/project-diagnostics/extractors.js +26 -115
- package/dist/clients/project-diagnostics/fresh-fetch.js +149 -19
- package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +117 -0
- package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +37 -5
- package/dist/clients/project-diagnostics/scanner.js +268 -128
- package/dist/clients/project-lens-config.js +138 -34
- package/dist/clients/project-report.js +64 -25
- package/dist/clients/project-scale.js +8 -10
- package/dist/clients/project-snapshot-persist-worker.js +6 -0
- package/dist/clients/project-snapshot.js +767 -8
- package/dist/clients/project-trust.js +181 -0
- package/dist/clients/quiet-window.js +27 -5
- package/dist/clients/read-bridge.js +147 -0
- package/dist/clients/read-expansion.js +22 -12
- package/dist/clients/read-guard-logger.js +159 -1
- package/dist/clients/read-guard-tool-lines.js +150 -29
- package/dist/clients/read-guard.js +262 -3
- package/dist/clients/redact/secrets.js +449 -0
- package/dist/clients/resource-sampler.js +144 -39
- package/dist/clients/reverse-deps.js +48 -0
- package/dist/clients/review-graph/builder.js +2570 -326
- package/dist/clients/review-graph/git-identity.js +2 -1
- package/dist/clients/review-graph/import-resolvers.js +21 -10
- package/dist/clients/review-graph/persist-worker.js +10 -0
- package/dist/clients/review-graph/query.js +5 -0
- package/dist/clients/review-graph/shared-extraction-ir.js +90 -0
- package/dist/clients/review-graph/symbol-id.js +46 -0
- package/dist/clients/review-graph/tsconfig-paths.js +57 -6
- package/dist/clients/review-graph/workspace-modules.js +51 -3
- package/dist/clients/review-graph-logger.js +53 -0
- package/dist/clients/ruff-client.js +27 -44
- package/dist/clients/runtime-agent-end.js +111 -75
- package/dist/clients/runtime-context.js +36 -12
- package/dist/clients/runtime-coordinator.js +76 -8
- package/dist/clients/runtime-session.js +799 -137
- package/dist/clients/runtime-tool-call.js +117 -62
- package/dist/clients/runtime-tool-result.js +218 -23
- package/dist/clients/runtime-turn.js +284 -40
- package/dist/clients/rust-client.js +2 -1
- package/dist/clients/safe-spawn.js +873 -71
- package/dist/clients/security-scan-client.js +2 -1
- package/dist/clients/session-start-observability.js +15 -0
- package/dist/clients/session-state-store.js +5 -3
- package/dist/clients/sessionstart-logger.js +18 -0
- package/dist/clients/sg-runner.js +284 -159
- package/dist/clients/slow-fs.js +2 -1
- package/dist/clients/smells-rollup.js +224 -0
- package/dist/clients/source-filter.js +231 -43
- package/dist/clients/source-walker.js +66 -10
- package/dist/clients/startup-scan.js +15 -16
- package/dist/clients/startup-timing.js +9 -0
- package/dist/clients/test-runner-client.js +38 -8
- package/dist/clients/todo-scanner.js +30 -3
- package/dist/clients/tool-event.js +35 -0
- package/dist/clients/tool-policy.js +388 -39
- package/dist/clients/tool-render.js +155 -0
- package/dist/clients/tree-sitter-cache.js +153 -140
- package/dist/clients/tree-sitter-client.js +1722 -80
- package/dist/clients/tree-sitter-logger.js +64 -1
- package/dist/clients/tree-sitter-query-loader.js +117 -12
- package/dist/clients/tree-sitter-shared.js +48 -19
- package/dist/clients/tree-sitter-symbol-extractor.js +115 -11
- package/dist/clients/user-notify.js +51 -0
- package/dist/clients/vanished-instance-marker.js +57 -0
- package/dist/clients/warm-attach.js +33 -13
- package/dist/clients/widget-state.js +342 -49
- package/dist/clients/word-index-logger.js +44 -0
- package/dist/clients/word-index.js +612 -68
- package/dist/clients/workspace-topology.js +100 -7
- package/dist/index.js +65923 -47161
- package/dist/mcp/analyze-cli.js +185 -29
- package/dist/mcp/cli.js +110 -0
- package/dist/mcp/server.js +272 -50
- package/dist/tools/ast-grep-search.js +93 -27
- package/dist/tools/lens-diagnostics.js +247 -41
- package/dist/tools/lsp-diagnostics.js +153 -40
- package/dist/tools/lsp-navigation.js +51 -31
- package/dist/tools/module-report.js +9 -0
- package/dist/tools/symbol-search.js +21 -2
- package/docs/agent-guide.md +247 -0
- package/docs/agent-tools.md +21 -10
- package/docs/analysisall.md +192 -0
- package/docs/api-ports-inventory.md +165 -0
- package/docs/ast-grep_rules_catalog.md +5 -2
- package/docs/astplayground.md +3 -4
- package/docs/audit1.md +5 -5
- package/docs/durable-store-audit-1202.md +32 -0
- package/docs/environment-variables.md +197 -11
- package/docs/fable.md +27 -0
- package/docs/features.md +35 -5
- package/docs/globalconfig.md +101 -5
- package/docs/language-coverage.md +6 -5
- package/docs/lsp-capability-matrix.md +2 -2
- package/docs/mcp.md +54 -20
- package/docs/servercapabilities.md +7 -4
- package/docs/settings.md +192 -0
- package/docs/tools.md +18 -1
- package/docs/tree-sitter_rules_catalog.md +11 -31
- package/docs/usage.md +31 -0
- package/package.json +139 -138
- package/rules/ast-grep-rules/rule-tests/hardcoded-url-js-test.yml +1 -0
- package/rules/ast-grep-rules/rule-tests/hardcoded-url-test.yml +2 -0
- package/rules/ast-grep-rules/rule-tests/no-bare-except-test.yml +49 -0
- package/rules/ast-grep-rules/rule-tests/no-bare-host-path-in-win32-branch-test.yml +87 -0
- package/rules/ast-grep-rules/rule-tests/no-case-declarations-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-case-declarations-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-javascript-url-js-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-javascript-url-test.yml +10 -0
- package/rules/ast-grep-rules/rule-tests/no-nested-links-test.yml +11 -1
- package/rules/ast-grep-rules/rule-tests/no-raw-json-store-write-test.yml +17 -0
- package/rules/ast-grep-rules/rule-tests/no-win32-isabsolute-for-qualification-test.yml +16 -0
- package/rules/ast-grep-rules/rule-tests/strict-equality-js-test.yml +3 -0
- package/rules/ast-grep-rules/rule-tests/strict-equality-test.yml +3 -0
- package/rules/ast-grep-rules/rule-tests/strict-inequality-js-test.yml +3 -0
- package/rules/ast-grep-rules/rule-tests/strict-inequality-test.yml +4 -0
- package/rules/ast-grep-rules/rules/hardcoded-url-js.yml +22 -4
- package/rules/ast-grep-rules/rules/hardcoded-url.yml +22 -4
- package/rules/ast-grep-rules/rules/no-bare-except.yml +3 -15
- package/rules/ast-grep-rules/rules/no-bare-host-path-in-win32-branch.yml +25 -0
- package/rules/ast-grep-rules/rules/no-case-declarations-js.yml +4 -3
- package/rules/ast-grep-rules/rules/no-case-declarations.yml +4 -3
- package/rules/ast-grep-rules/rules/no-console-except-error-js.yml +10 -0
- package/rules/ast-grep-rules/rules/no-console-except-error.yml +10 -0
- package/rules/ast-grep-rules/rules/no-javascript-url-js.yml +42 -6
- package/rules/ast-grep-rules/rules/no-javascript-url.yml +42 -6
- package/rules/ast-grep-rules/rules/no-nested-links.yml +7 -0
- package/rules/ast-grep-rules/rules/no-raw-json-store-write.yml +30 -0
- package/rules/ast-grep-rules/rules/no-win32-isabsolute-for-qualification.yml +23 -0
- package/rules/ast-grep-rules/rules/strict-equality-js.yml +14 -1
- package/rules/ast-grep-rules/rules/strict-equality.yml +14 -1
- package/rules/ast-grep-rules/rules/strict-inequality-js.yml +14 -1
- package/rules/ast-grep-rules/rules/strict-inequality.yml +14 -1
- package/rules/tree-sitter-queries/cpp/no-memset-sensitive-data.yml +9 -3
- package/rules/tree-sitter-queries/cpp/no-scoped-lock-without-args.yml +6 -6
- package/rules/tree-sitter-queries/css/calc-spacing.yml +8 -6
- package/rules/tree-sitter-queries/go/go-mutex-copy.yml +21 -18
- package/rules/tree-sitter-queries/go/go-shared-map-write-goroutine.yml +3 -3
- package/rules/tree-sitter-queries/java/infinite-loop-java.yml +3 -3
- package/rules/tree-sitter-queries/java/junit-call-super.yml +6 -4
- package/rules/tree-sitter-queries/java/no-double-checked-locking.yml +10 -8
- package/rules/tree-sitter-queries/java/no-field-shadowing.yml +1 -1
- package/rules/tree-sitter-queries/java/prepared-statement-valid-indices.yml +2 -3
- package/rules/tree-sitter-queries/java/resources-closed.yml +2 -2
- package/rules/tree-sitter-queries/java/springboot-default-package.yml +6 -3
- package/rules/tree-sitter-queries/java/switch-fall-through.yml +6 -4
- package/rules/tree-sitter-queries/java/switch-non-case-labels.yml +4 -3
- package/rules/tree-sitter-queries/java/tests-include-assertions.yml +6 -5
- package/rules/tree-sitter-queries/javascript/switch-case-termination-js.yml +5 -8
- package/rules/tree-sitter-queries/javascript/switch-non-case-labels.yml +3 -2
- package/rules/tree-sitter-queries/kotlin/prepared-statement-indices.yml +9 -5
- package/rules/tree-sitter-queries/php/this-in-static-context.yml +5 -5
- package/rules/tree-sitter-queries/python/exit-signature-check.yml +2 -9
- package/rules/tree-sitter-queries/python/in-operator-unsupported.yml +3 -4
- package/rules/tree-sitter-queries/python/no-super-torchscript.yml +4 -8
- package/rules/tree-sitter-queries/python/notimplemented-boolean-context.yml +1 -5
- package/rules/tree-sitter-queries/python/python-empty-except.yml +1 -1
- package/rules/tree-sitter-queries/python/return-in-init.yml +0 -2
- package/rules/tree-sitter-queries/python/yield-return-outside-function.yml +0 -3
- package/rules/tree-sitter-queries/ruby/ruby-command-injection.yml +1 -12
- package/rules/tree-sitter-queries/ruby/ruby-eval.yml +1 -1
- package/rules/tree-sitter-queries/ruby/ruby-insecure-deserialization.yml +4 -4
- package/rules/tree-sitter-queries/ruby/ruby-insecure-random.yml +4 -11
- package/rules/tree-sitter-queries/ruby/ruby-open-struct.yml +1 -1
- package/rules/tree-sitter-queries/ruby/ruby-string-eval.yml +2 -3
- package/rules/tree-sitter-queries/ruby/ruby-weak-hash.yml +4 -4
- package/rules/tree-sitter-queries/rust/rust-lock-held-across-await.yml +4 -3
- package/rules/tree-sitter-queries/tsx/no-nested-links.yml +4 -6
- package/rules/tree-sitter-queries/typescript/console-statement.yml +11 -0
- package/rules/tree-sitter-queries/typescript/duplicate-function-arg.yml +4 -9
- package/rules/tree-sitter-queries/typescript/empty-switch-case.yml +13 -9
- package/rules/tree-sitter-queries/typescript/infinite-loop.yml +2 -2
- package/rules/tree-sitter-queries/typescript/mixed-async-styles.yml +10 -1
- package/rules/tree-sitter-queries/typescript/switch-case-termination.yml +5 -8
- package/rules/tree-sitter-queries/typescript/ts-insecure-random.yml +7 -10
- package/rules/tree-sitter-queries/typescript/unsafe-regex.yml +4 -2
- package/rules/typos/_typos.toml +17 -0
- package/scripts/analyze-pi-lens-logs.mjs +55 -2
- package/skills/pi-lens-write-tree-sitter-rule/SKILL.md +5 -0
- package/dist/clients/ast-grep-parser.js +0 -86
- package/dist/clients/config-enabled-shape.js +0 -39
- package/dist/clients/lsp/interactive-install.js +0 -367
- package/dist/clients/lsp/lsp-index.js +0 -10
- package/dist/clients/lsp/server-strategies.js +0 -5
- package/dist/clients/project-metadata.js +0 -690
- package/dist/clients/source-groups.js +0 -96
- package/dist/clients/types.js +0 -11
- package/docs/env_variables.md +0 -10
- package/rules/tree-sitter-queries/abap-disabled/delete-where.yml +0 -46
- package/rules/tree-sitter-queries/cpp/no-confused-move-forward.yml +0 -59
- package/rules/tree-sitter-queries/cpp/noexcept-functions.yml +0 -58
- package/rules/tree-sitter-queries/java/mockito-initialized.yml +0 -66
- package/rules/tree-sitter-queries/java/no-wait-notify-on-thread.yml +0 -58
- package/rules/tree-sitter-queries/java/short-circuit-logic.yml +0 -57
- package/rules/tree-sitter-queries/java/spring-session-attributes-setcomplete.yml +0 -75
- package/rules/tree-sitter-queries/plsql-disabled/delete-update-where.yml +0 -56
- package/rules/tree-sitter-queries/plsql-disabled/end-loop-semicolon.yml +0 -51
- package/rules/tree-sitter-queries/plsql-disabled/fetch-bulk-collect-limit.yml +0 -47
- package/rules/tree-sitter-queries/plsql-disabled/forallsave-exceptions.yml +0 -51
- package/rules/tree-sitter-queries/plsql-disabled/nchar-nvarchar2-bytes.yml +0 -54
- package/rules/tree-sitter-queries/plsql-disabled/not-null-initialization.yml +0 -59
- package/rules/tree-sitter-queries/plsql-disabled/raise-application-error-codes.yml +0 -50
- 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: (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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: (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
condition: (condition
|
|
41
|
+
(binary_expression
|
|
42
|
+
left: (identifier) @FIELD2
|
|
43
|
+
"=="
|
|
44
|
+
(null_literal) @NULL2)))))))
|
|
43
45
|
|
|
44
46
|
metavars:
|
|
45
47
|
- FIELD
|
|
@@ -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
|
|
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:
|
|
5
|
+
severity: warning
|
|
6
6
|
category: reliability
|
|
7
7
|
defect_class: correctness
|
|
8
|
-
inline_tier:
|
|
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
|
-
(
|
|
34
|
-
name: (identifier) @ANNOT
|
|
35
|
-
|
|
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
|
-
(
|
|
32
|
+
(switch_expression
|
|
33
33
|
body: (switch_block
|
|
34
|
-
(
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
(
|
|
30
|
+
(switch_expression
|
|
31
31
|
body: (switch_block
|
|
32
|
-
(
|
|
33
|
-
(
|
|
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:
|
|
5
|
+
severity: warning
|
|
6
6
|
category: maintainability
|
|
7
7
|
defect_class: correctness
|
|
8
|
-
inline_tier:
|
|
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
|
-
(
|
|
30
|
-
name: (identifier) @TEST
|
|
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
|
-
(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
-
|
|
38
|
-
- NEXT
|
|
35
|
+
- CASE
|
|
39
36
|
|
|
40
37
|
post_filter: no_terminating_statement
|
|
41
38
|
|
|
@@ -21,17 +21,21 @@ description: |
|
|
|
21
21
|
|
|
22
22
|
query: |
|
|
23
23
|
(call_expression
|
|
24
|
-
(
|
|
25
|
-
|
|
26
|
-
(
|
|
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
|
-
(
|
|
37
|
-
"static")
|
|
36
|
+
(static_modifier)
|
|
38
37
|
body: (compound_statement
|
|
39
|
-
(
|
|
40
|
-
(
|
|
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
|
-
-
|
|
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
|
-
(
|
|
28
|
+
(_) @TARGET)
|
|
29
29
|
(comparison_operator
|
|
30
30
|
(identifier) @OBJ
|
|
31
|
-
"not"
|
|
32
|
-
|
|
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
|
-
(
|
|
21
|
-
(
|
|
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
|
-
(
|
|
37
|
-
operator: ("not")
|
|
33
|
+
(not_operator
|
|
38
34
|
argument: (identifier) @COND (#eq? @COND "NotImplemented"))
|
|
39
35
|
|
|
40
36
|
metavars:
|
|
@@ -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
|
|
@@ -16,12 +16,12 @@ description: |
|
|
|
16
16
|
✅ FIX: use safe serialization formats and strict schema validation.
|
|
17
17
|
|
|
18
18
|
query: |
|
|
19
|
-
(
|
|
19
|
+
(call
|
|
20
20
|
receiver: (constant) @MOD
|
|
21
|
-
method: (identifier) @FN
|
|
22
|
-
arguments: (argument_list (_) @DATA)
|
|
23
21
|
(#match? @MOD "^(Marshal|YAML|Psych)$")
|
|
24
|
-
(
|
|
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
|
-
(
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
|
@@ -28,9 +28,8 @@ description: |
|
|
|
28
28
|
query: |
|
|
29
29
|
(call
|
|
30
30
|
method: (identifier) @METHOD
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
(
|
|
20
|
-
receiver: (
|
|
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
|
-
|
|
23
|
+
(call_expression
|
|
24
24
|
function: (field_expression
|
|
25
|
+
value: (_)
|
|
25
26
|
field: (field_identifier) @LOCKFN))))
|
|
26
27
|
(_)*
|
|
27
|
-
(await_expression) @LATER_AWAIT)
|
|
28
|
-
|
|
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
|
-
-
|
|
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
|
-
(
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
-
|
|
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
|
|
11
|
+
message: "Switch case is empty and shares no body with a following label"
|
|
12
12
|
|
|
13
13
|
description: |
|
|
14
|
-
|
|
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
|
-
-
|
|
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:
|
|
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
|
-
|
|
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: (
|
|
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
|
-
|
|
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
|
-
(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
-
|
|
38
|
-
- NEXT
|
|
35
|
+
- CASE
|
|
39
36
|
|
|
40
37
|
post_filter: no_terminating_statement
|
|
41
38
|
|