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
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# FORALL Save Exceptions
|
|
2
|
-
# Detects FORALL statements without SAVE EXCEPTIONS
|
|
3
|
-
id: forallsave-exceptions
|
|
4
|
-
name: FORALL Should Use SAVE EXCEPTIONS Clause
|
|
5
|
-
severity: error
|
|
6
|
-
category: reliability
|
|
7
|
-
defect_class: correctness
|
|
8
|
-
inline_tier: blocking
|
|
9
|
-
language: plsql
|
|
10
|
-
|
|
11
|
-
message: "FORALL statement should use the SAVE EXCEPTIONS clause"
|
|
12
|
-
|
|
13
|
-
description: |
|
|
14
|
-
FORALL without SAVE EXCEPTIONS stops on first error,
|
|
15
|
-
losing information about which rows failed. Use SAVE EXCEPTIONS
|
|
16
|
-
to continue and get error details for all failed rows.
|
|
17
|
-
|
|
18
|
-
✅ FIX: Add SAVE EXCEPTIONS clause
|
|
19
|
-
|
|
20
|
-
```sql
|
|
21
|
-
FORALL i IN 1..collection.COUNT SAVE EXCEPTIONS
|
|
22
|
-
INSERT INTO table VALUES collection(i); -- GOOD
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
query: |
|
|
26
|
-
(forall_statement
|
|
27
|
-
(forall) @FORALL
|
|
28
|
-
(bulk_operation) @OP)
|
|
29
|
-
|
|
30
|
-
metavars:
|
|
31
|
-
- FORALL
|
|
32
|
-
- OP
|
|
33
|
-
|
|
34
|
-
post_filter: missing_save_exceptions
|
|
35
|
-
|
|
36
|
-
tags:
|
|
37
|
-
- reliability
|
|
38
|
-
- plsql
|
|
39
|
-
- error-handling
|
|
40
|
-
|
|
41
|
-
examples:
|
|
42
|
-
bad: |
|
|
43
|
-
FORALL i IN 1..employees.COUNT
|
|
44
|
-
INSERT INTO emp VALUES employees(i); -- BAD - no SAVE EXCEPTIONS
|
|
45
|
-
|
|
46
|
-
good: |
|
|
47
|
-
FORALL i IN 1..employees.COUNT SAVE EXCEPTIONS
|
|
48
|
-
INSERT INTO emp VALUES employees(i); -- GOOD
|
|
49
|
-
|
|
50
|
-
has_fix: true
|
|
51
|
-
fix_action: add_save_exceptions
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# NCHAR NVARCHAR2 Byte Size
|
|
2
|
-
# Detects NCHAR/NVARCHAR2 with size in bytes
|
|
3
|
-
id: nchar-nvarchar2-bytes
|
|
4
|
-
name: NCHAR and NVARCHAR2 Size Should Not Be Specified in Bytes
|
|
5
|
-
severity: error
|
|
6
|
-
category: reliability
|
|
7
|
-
defect_class: correctness
|
|
8
|
-
inline_tier: blocking
|
|
9
|
-
language: plsql
|
|
10
|
-
|
|
11
|
-
message: "NCHAR/NVARCHAR2 size should be in characters, not bytes"
|
|
12
|
-
|
|
13
|
-
description: |
|
|
14
|
-
NCHAR and NVARCHAR2 store Unicode characters. Specifying size
|
|
15
|
-
in bytes is confusing and may cause data truncation. Use character
|
|
16
|
-
semantics with CHAR keyword.
|
|
17
|
-
|
|
18
|
-
✅ FIX: Use CHAR keyword for character semantics
|
|
19
|
-
|
|
20
|
-
```sql
|
|
21
|
-
name NCHAR(10 CHAR) -- GOOD - characters
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
query: |
|
|
25
|
-
(variable_declaration
|
|
26
|
-
(nchar_type) @TYPE
|
|
27
|
-
(size_specification) @SIZE)
|
|
28
|
-
(variable_declaration
|
|
29
|
-
(nvarchar2_type) @TYPE
|
|
30
|
-
(size_specification) @SIZE)
|
|
31
|
-
|
|
32
|
-
metavars:
|
|
33
|
-
- TYPE
|
|
34
|
-
- SIZE
|
|
35
|
-
|
|
36
|
-
post_filter: size_in_bytes_not_char
|
|
37
|
-
|
|
38
|
-
tags:
|
|
39
|
-
- reliability
|
|
40
|
-
- plsql
|
|
41
|
-
- unicode
|
|
42
|
-
- data-integrity
|
|
43
|
-
|
|
44
|
-
examples:
|
|
45
|
-
bad: |
|
|
46
|
-
name NCHAR(10 BYTE); -- BAD - bytes
|
|
47
|
-
text NVARCHAR2(100); -- BAD - defaults to bytes
|
|
48
|
-
|
|
49
|
-
good: |
|
|
50
|
-
name NCHAR(10 CHAR); -- GOOD - characters
|
|
51
|
-
text NVARCHAR2(100 CHAR); -- GOOD - explicit
|
|
52
|
-
|
|
53
|
-
has_fix: true
|
|
54
|
-
fix_action: add_char_keyword
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# NOT NULL Initialization
|
|
2
|
-
# Detects NOT NULL variables without initialization
|
|
3
|
-
id: not-null-initialization
|
|
4
|
-
name: NOT NULL Variables Should Be Initialized
|
|
5
|
-
severity: error
|
|
6
|
-
category: reliability
|
|
7
|
-
defect_class: correctness
|
|
8
|
-
inline_tier: blocking
|
|
9
|
-
language: plsql
|
|
10
|
-
|
|
11
|
-
message: "NOT NULL variable should be initialized"
|
|
12
|
-
|
|
13
|
-
description: |
|
|
14
|
-
Declaring a NOT NULL variable without initialization causes
|
|
15
|
-
a runtime error when trying to use it. Initialize at declaration
|
|
16
|
-
or in the BEGIN block.
|
|
17
|
-
|
|
18
|
-
✅ FIX: Initialize the variable
|
|
19
|
-
|
|
20
|
-
```sql
|
|
21
|
-
DECLARE
|
|
22
|
-
v_count NUMBER NOT NULL := 0; -- GOOD - initialized
|
|
23
|
-
BEGIN
|
|
24
|
-
-- use v_count
|
|
25
|
-
END;
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
query: |
|
|
29
|
-
(variable_declaration
|
|
30
|
-
(not_null) @NOTNULL
|
|
31
|
-
(assignment)? @INIT)
|
|
32
|
-
|
|
33
|
-
metavars:
|
|
34
|
-
- NOTNULL
|
|
35
|
-
- INIT
|
|
36
|
-
|
|
37
|
-
post_filter: not_null_without_init
|
|
38
|
-
|
|
39
|
-
tags:
|
|
40
|
-
- reliability
|
|
41
|
-
- plsql
|
|
42
|
-
- runtime-error
|
|
43
|
-
|
|
44
|
-
examples:
|
|
45
|
-
bad: |
|
|
46
|
-
DECLARE
|
|
47
|
-
v_count NUMBER NOT NULL; -- BAD - not initialized
|
|
48
|
-
BEGIN
|
|
49
|
-
DBMS_OUTPUT.PUT_LINE(v_count);
|
|
50
|
-
END;
|
|
51
|
-
|
|
52
|
-
good: |
|
|
53
|
-
DECLARE
|
|
54
|
-
v_count NUMBER NOT NULL := 0; -- GOOD
|
|
55
|
-
BEGIN
|
|
56
|
-
DBMS_OUTPUT.PUT_LINE(v_count);
|
|
57
|
-
END;
|
|
58
|
-
|
|
59
|
-
has_fix: false
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# RAISE_APPLICATION_ERROR Codes
|
|
2
|
-
# Detects RAISE_APPLICATION_ERROR with invalid error codes
|
|
3
|
-
id: raise-application-error-codes
|
|
4
|
-
name: RAISE_APPLICATION_ERROR Should Use Valid Error Codes
|
|
5
|
-
severity: error
|
|
6
|
-
category: reliability
|
|
7
|
-
defect_class: correctness
|
|
8
|
-
inline_tier: blocking
|
|
9
|
-
language: plsql
|
|
10
|
-
|
|
11
|
-
message: "RAISE_APPLICATION_ERROR should only be used with error codes from -20000 to -20999"
|
|
12
|
-
|
|
13
|
-
description: |
|
|
14
|
-
RAISE_APPLICATION_ERROR should use codes in the -20000 to -20999
|
|
15
|
-
range (user-defined errors). Other codes may conflict with Oracle
|
|
16
|
-
reserved error codes.
|
|
17
|
-
|
|
18
|
-
✅ FIX: Use a code in the -20000..-20999 range
|
|
19
|
-
|
|
20
|
-
```sql
|
|
21
|
-
RAISE_APPLICATION_ERROR(-20001, 'Custom error'); -- GOOD
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
query: |
|
|
25
|
-
(raise_statement
|
|
26
|
-
(raise_application_error) @RAISE
|
|
27
|
-
(argument_list
|
|
28
|
-
(numeric_literal) @CODE))
|
|
29
|
-
|
|
30
|
-
metavars:
|
|
31
|
-
- RAISE
|
|
32
|
-
- CODE
|
|
33
|
-
|
|
34
|
-
post_filter: invalid_error_code_range
|
|
35
|
-
|
|
36
|
-
tags:
|
|
37
|
-
- reliability
|
|
38
|
-
- plsql
|
|
39
|
-
- error-handling
|
|
40
|
-
|
|
41
|
-
examples:
|
|
42
|
-
bad: |
|
|
43
|
-
RAISE_APPLICATION_ERROR(-1, 'Error'); -- BAD - invalid code
|
|
44
|
-
RAISE_APPLICATION_ERROR(-30000, 'Error'); -- BAD - out of range
|
|
45
|
-
|
|
46
|
-
good: |
|
|
47
|
-
RAISE_APPLICATION_ERROR(-20001, 'Custom error'); -- GOOD
|
|
48
|
-
RAISE_APPLICATION_ERROR(-20999, 'Another error'); -- GOOD
|
|
49
|
-
|
|
50
|
-
has_fix: false
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# TypeScript Path Traversal
|
|
2
|
-
# Detects fs and path API calls with potentially user-controlled paths.
|
|
3
|
-
id: ts-path-traversal
|
|
4
|
-
name: Path Traversal Risk
|
|
5
|
-
severity: error
|
|
6
|
-
category: security
|
|
7
|
-
defect_class: injection
|
|
8
|
-
inline_tier: blocking
|
|
9
|
-
language: typescript
|
|
10
|
-
|
|
11
|
-
message: "Potential path traversal sink — avoid filesystem I/O with untrusted input"
|
|
12
|
-
|
|
13
|
-
description: |
|
|
14
|
-
File-system APIs (`fs.readFile`, `fs.writeFile`, `path.join`, etc.) are
|
|
15
|
-
vulnerable when path arguments include untrusted input. An attacker can
|
|
16
|
-
inject `../` sequences to access files outside the intended directory.
|
|
17
|
-
|
|
18
|
-
✅ FIX: validate and sanitize paths; use allowlists or chroot jails.
|
|
19
|
-
|
|
20
|
-
query: |
|
|
21
|
-
(call_expression
|
|
22
|
-
function: (member_expression
|
|
23
|
-
object: (identifier) @MOD
|
|
24
|
-
property: (property_identifier) @FN)
|
|
25
|
-
arguments: (arguments
|
|
26
|
-
[(identifier) (member_expression) (template_string) (call_expression) (binary_expression)] @PATH)
|
|
27
|
-
(#eq? @MOD "fs"))
|
|
28
|
-
(call_expression
|
|
29
|
-
function: (member_expression
|
|
30
|
-
object: (identifier) @MOD
|
|
31
|
-
property: (property_identifier) @FN)
|
|
32
|
-
arguments: (arguments
|
|
33
|
-
[(identifier) (member_expression) (template_string) (call_expression) (binary_expression)] @PATH)
|
|
34
|
-
(#eq? @MOD "path")
|
|
35
|
-
(#match? @FN "^(join|resolve)$"))
|
|
36
|
-
(call_expression
|
|
37
|
-
function: (member_expression
|
|
38
|
-
object: (member_expression
|
|
39
|
-
object: (identifier) @MOD
|
|
40
|
-
property: (property_identifier) @PROMISES)
|
|
41
|
-
property: (property_identifier) @FN)
|
|
42
|
-
arguments: (arguments
|
|
43
|
-
[(identifier) (member_expression) (template_string) (call_expression) (binary_expression)] @PATH)
|
|
44
|
-
(#eq? @MOD "fs")
|
|
45
|
-
(#eq? @PROMISES "promises"))
|
|
46
|
-
|
|
47
|
-
metavars:
|
|
48
|
-
- MOD
|
|
49
|
-
- PROMISES
|
|
50
|
-
- FN
|
|
51
|
-
- PATH
|
|
52
|
-
|
|
53
|
-
post_filter: ts_path_traversal_sink
|
|
54
|
-
|
|
55
|
-
has_fix: false
|
|
56
|
-
|
|
57
|
-
tags:
|
|
58
|
-
- typescript
|
|
59
|
-
- security
|
|
60
|
-
- path-traversal
|
|
61
|
-
- cwe-22
|
|
62
|
-
- owasp-a01
|
|
63
|
-
|
|
64
|
-
examples:
|
|
65
|
-
bad: |
|
|
66
|
-
fs.readFile(req.query.path); // BAD — user controls path
|
|
67
|
-
path.join(baseDir, userFile); // BAD — user controls segment
|
|
68
|
-
|
|
69
|
-
good: |
|
|
70
|
-
fs.readFile("./safe.txt"); // OK — literal path
|
|
71
|
-
path.join(baseDir, "static"); // OK — literal segment
|