gitnexus 1.6.8-rc.9 → 1.6.8
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/README.md +3 -3
- package/dist/_shared/graph/types.d.ts +31 -1
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +11 -1
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +6 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +31 -1
- package/dist/cli/ai-context.js +18 -16
- package/dist/cli/analyze-config.js +11 -0
- package/dist/cli/analyze.d.ts +14 -0
- package/dist/cli/analyze.js +98 -0
- package/dist/cli/embedding-dims.d.ts +33 -0
- package/dist/cli/embedding-dims.js +39 -0
- package/dist/cli/eval-server.d.ts +8 -0
- package/dist/cli/eval-server.js +242 -2
- package/dist/cli/help-i18n.js +19 -0
- package/dist/cli/i18n/en.d.ts +15 -1
- package/dist/cli/i18n/en.js +15 -1
- package/dist/cli/i18n/resources.d.ts +29 -1
- package/dist/cli/i18n/zh-CN.d.ts +14 -0
- package/dist/cli/i18n/zh-CN.js +15 -1
- package/dist/cli/index.js +89 -1
- package/dist/cli/mcp.d.ts +6 -1
- package/dist/cli/mcp.js +26 -1
- package/dist/cli/optional-grammars.d.ts +6 -8
- package/dist/cli/optional-grammars.js +8 -11
- package/dist/cli/setup.d.ts +3 -1
- package/dist/cli/setup.js +67 -17
- package/dist/cli/skill-gen.js +2 -1
- package/dist/cli/tool.d.ts +19 -1
- package/dist/cli/tool.js +96 -3
- package/dist/core/embeddings/hf-env.d.ts +0 -66
- package/dist/core/embeddings/http-client.d.ts +7 -0
- package/dist/core/embeddings/http-client.js +5 -3
- package/dist/core/embeddings/server-mapping.d.ts +1 -1
- package/dist/core/embeddings/server-mapping.js +7 -3
- package/dist/core/graph/import-cycles.d.ts +10 -0
- package/dist/core/graph/import-cycles.js +103 -0
- package/dist/core/group/cross-impact.d.ts +2 -1
- package/dist/core/group/cross-impact.js +5 -1
- package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
- package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
- package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
- package/dist/core/group/extractors/http-route-extractor.js +22 -4
- package/dist/core/group/extractors/include-extractor.js +22 -13
- package/dist/core/group/sync.d.ts +27 -1
- package/dist/core/group/sync.js +0 -0
- package/dist/core/incremental/subgraph-extract.js +18 -1
- package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
- package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
- package/dist/core/ingestion/cfg/collect.d.ts +51 -0
- package/dist/core/ingestion/cfg/collect.js +77 -0
- package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
- package/dist/core/ingestion/cfg/control-dependence.js +182 -0
- package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
- package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
- package/dist/core/ingestion/cfg/emit.d.ts +293 -0
- package/dist/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
- package/dist/core/ingestion/cfg/post-dominators.js +176 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
- package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
- package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
- package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
- package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
- package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
- package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
- package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
- package/dist/core/ingestion/cfg/traversal-result.js +2 -0
- package/dist/core/ingestion/cfg/types.d.ts +274 -0
- package/dist/core/ingestion/cfg/types.js +13 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
- package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
- package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
- package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
- package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
- package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
- package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
- package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
- package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
- package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/go.js +638 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
- package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
- package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
- package/dist/core/ingestion/cfg/visitors/java.js +812 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
- package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
- package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
- package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
- package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
- package/dist/core/ingestion/cfg/visitors/php.js +721 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
- package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
- package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
- package/dist/core/ingestion/cfg/visitors/python.js +558 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
- package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
- package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
- package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
- package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
- package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
- package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
- package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
- package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
- package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
- package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
- package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
- package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
- package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
- package/dist/core/ingestion/import-resolvers/utils.js +2 -0
- package/dist/core/ingestion/language-provider.d.ts +11 -0
- package/dist/core/ingestion/languages/c-cpp.js +6 -1
- package/dist/core/ingestion/languages/cobol.js +4 -0
- package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
- package/dist/core/ingestion/languages/cpp/captures.js +50 -1
- package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
- package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
- package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
- package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
- package/dist/core/ingestion/languages/cpp/query.js +23 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
- package/dist/core/ingestion/languages/csharp.js +2 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go.js +2 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/kotlin/query.js +3 -2
- package/dist/core/ingestion/languages/kotlin.js +3 -0
- package/dist/core/ingestion/languages/php.js +2 -0
- package/dist/core/ingestion/languages/python.js +2 -0
- package/dist/core/ingestion/languages/ruby.js +2 -0
- package/dist/core/ingestion/languages/rust.js +2 -0
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript.js +5 -0
- package/dist/core/ingestion/languages/vue.js +6 -0
- package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +2 -0
- package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
- package/dist/core/ingestion/model/symbol-table.js +1 -0
- package/dist/core/ingestion/mro-processor.js +109 -0
- package/dist/core/ingestion/parsing-processor.js +23 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
- package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +0 -21
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
- package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
- package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
- package/dist/core/ingestion/pipeline.d.ts +92 -10
- package/dist/core/ingestion/pipeline.js +11 -2
- package/dist/core/ingestion/scope-extractor.js +12 -2
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
- package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
- package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
- package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
- package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
- package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
- package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
- package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
- package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
- package/dist/core/ingestion/taint/call-summary-model.js +25 -0
- package/dist/core/ingestion/taint/emit.d.ts +125 -0
- package/dist/core/ingestion/taint/emit.js +208 -0
- package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
- package/dist/core/ingestion/taint/interproc-emit.js +88 -0
- package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
- package/dist/core/ingestion/taint/interproc-solver.js +312 -0
- package/dist/core/ingestion/taint/match.d.ts +153 -0
- package/dist/core/ingestion/taint/match.js +278 -0
- package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
- package/dist/core/ingestion/taint/path-codec.js +190 -0
- package/dist/core/ingestion/taint/propagate.d.ts +216 -0
- package/dist/core/ingestion/taint/propagate.js +659 -0
- package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
- package/dist/core/ingestion/taint/site-safety.js +98 -0
- package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
- package/dist/core/ingestion/taint/source-sink-config.js +35 -12
- package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
- package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
- package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
- package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
- package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
- package/dist/core/ingestion/taint/summary-harvest.js +537 -0
- package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
- package/dist/core/ingestion/taint/summary-model.js +86 -0
- package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
- package/dist/core/ingestion/taint/typescript-model.js +102 -0
- package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
- package/dist/core/ingestion/utils/env.d.ts +7 -0
- package/dist/core/ingestion/utils/env.js +12 -0
- package/dist/core/ingestion/utils/method-props.js +1 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +13 -0
- package/dist/core/ingestion/workers/parse-worker.js +76 -17
- package/dist/core/ingestion/workers/worker-pool.d.ts +9 -40
- package/dist/core/ingestion/workers/worker-pool.js +15 -2
- package/dist/core/lbug/csv-generator.d.ts +51 -3
- package/dist/core/lbug/csv-generator.js +369 -255
- package/dist/core/lbug/lbug-adapter.d.ts +58 -18
- package/dist/core/lbug/lbug-adapter.js +346 -84
- package/dist/core/lbug/lbug-config.d.ts +19 -0
- package/dist/core/lbug/lbug-config.js +29 -0
- package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
- package/dist/core/lbug/pdg-emit-sink.js +358 -0
- package/dist/core/lbug/pool-adapter.d.ts +35 -0
- package/dist/core/lbug/pool-adapter.js +90 -1
- package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
- package/dist/core/lbug/rel-pair-routing.js +140 -0
- package/dist/core/lbug/schema.d.ts +2 -2
- package/dist/core/lbug/schema.js +3 -0
- package/dist/core/logger.d.ts +0 -5
- package/dist/core/run-analyze.d.ts +96 -0
- package/dist/core/run-analyze.js +207 -3
- package/dist/core/tree-sitter/parser-loader.js +5 -4
- package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
- package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
- package/dist/core/tree-sitter/vendored-grammars.js +57 -0
- package/dist/core/wiki/generator.js +3 -1
- package/dist/core/wiki/graph-queries.d.ts +6 -0
- package/dist/core/wiki/graph-queries.js +9 -1
- package/dist/mcp/http-transport.d.ts +134 -0
- package/dist/mcp/http-transport.js +503 -0
- package/dist/mcp/local/local-backend.d.ts +110 -24
- package/dist/mcp/local/local-backend.js +1225 -19
- package/dist/mcp/local/pdg-impact.d.ts +384 -0
- package/dist/mcp/local/pdg-impact.js +1972 -0
- package/dist/mcp/resources.js +13 -1
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.js +214 -7
- package/dist/server/analyze-launch.d.ts +29 -0
- package/dist/server/analyze-launch.js +137 -0
- package/dist/server/analyze-upload.d.ts +33 -0
- package/dist/server/analyze-upload.js +123 -0
- package/dist/server/analyze-worker.d.ts +17 -1
- package/dist/server/api.d.ts +17 -0
- package/dist/server/api.js +132 -168
- package/dist/server/git-clone.d.ts +43 -2
- package/dist/server/git-clone.js +211 -16
- package/dist/server/mcp-http.d.ts +5 -6
- package/dist/server/mcp-http.js +9 -82
- package/dist/server/middleware.d.ts +40 -0
- package/dist/server/middleware.js +92 -0
- package/dist/server/private-ip.d.ts +1 -0
- package/dist/server/private-ip.js +15 -0
- package/dist/server/upload-ingest.d.ts +56 -0
- package/dist/server/upload-ingest.js +276 -0
- package/dist/server/upload-paths.d.ts +37 -0
- package/dist/server/upload-paths.js +57 -0
- package/dist/server/upload-sweep.d.ts +20 -0
- package/dist/server/upload-sweep.js +57 -0
- package/dist/storage/git.js +5 -8
- package/dist/storage/parse-cache.d.ts +22 -1
- package/dist/storage/parse-cache.js +41 -10
- package/dist/storage/repo-manager.d.ts +121 -10
- package/dist/storage/repo-manager.js +43 -5
- package/dist/types/pipeline.d.ts +9 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
- package/hooks/claude/gitnexus-hook.cjs +110 -13
- package/hooks/claude/hook-db-lock-probe.cjs +513 -26
- package/package.json +8 -2
- package/scripts/assert-publish-grammar-coverage.cjs +31 -0
- package/scripts/build-tree-sitter-grammars.cjs +16 -10
- package/scripts/cross-platform-tests.ts +1 -0
- package/skills/gitnexus-debugging.md +16 -4
- package/skills/gitnexus-exploring.md +3 -3
- package/skills/gitnexus-guide.md +33 -0
- package/skills/gitnexus-pdg-query.md +89 -0
- package/skills/gitnexus-refactoring.md +1 -1
- package/skills/gitnexus-taint-analysis.md +178 -0
- package/vendor/tree-sitter-c/package.json +1 -1
- package/vendor/tree-sitter-dart/package.json +1 -1
- package/vendor/tree-sitter-kotlin/package.json +1 -1
- package/vendor/tree-sitter-proto/package.json +1 -1
- package/vendor/tree-sitter-swift/package.json +1 -1
- package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
- package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
- package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
- package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
- package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
- package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
- package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
- package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
- package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
- package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
- package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
- package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
- package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
- package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
- package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
- package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
- package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
- package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
- package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
- package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
- package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
- package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
- package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
- package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
- package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
- package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
- package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
- package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
- package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
- package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
- package/web/assets/index-BvYev1UJ.js +635 -0
- package/web/assets/index-_lgn7hs5.css +2 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
- package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
- package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
- package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
- package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
- package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
- package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
- package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
- package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
- package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
- package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
- package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
- package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
- package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
- package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
- package/web/index.html +13 -15
- package/scripts/materialize-vendor-grammars.cjs +0 -97
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
- package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
- package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
- package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
- package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
- package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
- package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
- package/web/assets/chunk-CilyBKbf.js +0 -1
- package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
- package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
- package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
- package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
- package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
- package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
- package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
- package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
- package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
- package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
- package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
- package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
- package/web/assets/index-BKWA-m7o.css +0 -2
- package/web/assets/index-CG6q8eTs.js +0 -626
- package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
- package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
- /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ruby def/use harvester — the Ruby analogue of
|
|
3
|
+
* {@link import('./python-harvest.js').PythonHarvester} (the closest structural
|
|
4
|
+
* sibling: implicit/keyword-delimited blocks, statement-modifier forms, a
|
|
5
|
+
* begin/rescue/else/ensure exception model, and `case`/`when` + `case`/`in`
|
|
6
|
+
* pattern matching). Like the Python / Kotlin harvesters, this unit emits the
|
|
7
|
+
* per-function binding table ({@link BindingEntry}[]) plus {@link StatementFacts}
|
|
8
|
+
* (defs / uses / mayDefs) AND a taint {@link import('../types.js').SiteRecord}
|
|
9
|
+
* per call (callee path, receiver, per-arg occurrence entries, result defs,
|
|
10
|
+
* spread marker, and an `at` anchor) via the shared
|
|
11
|
+
* {@link CallSiteFactAccumulator} — the same site substrate the C-family / Go /
|
|
12
|
+
* TS / Python / Kotlin / Dart harvesters emit.
|
|
13
|
+
*
|
|
14
|
+
* RUBY CALL SHAPE (verified by a real parse — see below). EVERY call in Ruby is
|
|
15
|
+
* a single `call` node (fields `receiver`?/`method`/`arguments`?): a free call
|
|
16
|
+
* `foo(a)`, an implicit-receiver paren-less command `puts x` / `attr_accessor :x`,
|
|
17
|
+
* a member call `obj.method(x)`, a safe-navigation call `obj&.m()`, AND a chained
|
|
18
|
+
* `a.b.c` (nested `call` receivers) are all `call` nodes. There is NO separate
|
|
19
|
+
* `command` / `command_call` node in this vendored grammar — paren-less commands
|
|
20
|
+
* normalize to `call` with a `method` + `arguments` and no `receiver`. Ruby has
|
|
21
|
+
* NO `new` keyword (`Foo.new` is an ordinary member `call` with method `new`), so
|
|
22
|
+
* every site is `kind: 'call'`. A receiver-only no-args `call` (`obj.field`,
|
|
23
|
+
* `a.b`) is grammatically INDISTINGUISHABLE from a paren-less zero-arg member
|
|
24
|
+
* call, and the Ruby CALLS query tags it `@reference.call.member` too — so it is
|
|
25
|
+
* harvested as a `kind: 'call'` site (NOT a member-read), keeping the harvest
|
|
26
|
+
* byte-aligned with what the resolver assigns a callee id. Named (symbol-keyed)
|
|
27
|
+
* args (`f(k: v)` ⇒ a `pair` of `hash_key_symbol` + value) record the VALUE
|
|
28
|
+
* occurrence and drop the key (like Python / Kotlin / Dart). A `do … end` / `{ }`
|
|
29
|
+
* block is a nested function (opaque) — it is NOT an argument occurrence (the
|
|
30
|
+
* `block` field is never walked here).
|
|
31
|
+
*
|
|
32
|
+
* ANCHOR ALIGNMENT (plan KTD7 — load-bearing): a call site's `at` MUST be the
|
|
33
|
+
* SAME `[line (1-based), col (0-based)]` the Ruby CALLS resolution keys its
|
|
34
|
+
* `atRange` on, because a downstream unit joins the two by EXACT position. The
|
|
35
|
+
* Ruby scope query (query.ts) anchors `@reference.call.free` and
|
|
36
|
+
* `@reference.call.member` on the WHOLE `call` node (the `@reference.name` method
|
|
37
|
+
* identifier and `@reference.receiver` are SUB-tags, excluded from the anchor by
|
|
38
|
+
* `KNOWN_SUB_TAGS` + the broadest-span rule in `anchorCaptureFor`). So for a free
|
|
39
|
+
* call `foo(x)`, an implicit command `puts x`, a member call `obj.method(x)`, and
|
|
40
|
+
* a chained call `a.b.c` alike, `at` is the start of the `call` node — which, for
|
|
41
|
+
* a member/chained call, starts at the RECEIVER (`obj`/`a`), exactly where the
|
|
42
|
+
* CALLS anchor starts too. This is the Go/Python/Kotlin whole-call-node model,
|
|
43
|
+
* NOT the Dart callee-name model. The harvester records
|
|
44
|
+
* `[node.startPosition.row + 1, node.startPosition.column]` of the `call` node.
|
|
45
|
+
* (Verified byte-exact against the real Ruby query for every shape above.)
|
|
46
|
+
*
|
|
47
|
+
* Runs in the parse worker next to the Ruby CFG visitor.
|
|
48
|
+
*
|
|
49
|
+
* Every node type and field literal below was grammar-validated against
|
|
50
|
+
* tree-sitter-ruby via the introspection probe before use (mandatory pre-step).
|
|
51
|
+
* Ruby shapes pre-empted (verified by a real parse):
|
|
52
|
+
* - functions: `method` / `singleton_method` (fields `name`/`parameters`/`body`;
|
|
53
|
+
* `parameters` is a `method_parameters`; `body` is a `body_statement`), and
|
|
54
|
+
* blocks `do_block` (`body` = `body_statement`) / `block` (`body` =
|
|
55
|
+
* `block_body`) / `lambda` (`body` = a `block` wrapping a `block_body`) — each
|
|
56
|
+
* has a `parameters` (`block_parameters` / `lambda_parameters`).
|
|
57
|
+
* - parameters: bare `identifier`, `optional_parameter` (fields `name`/`value`),
|
|
58
|
+
* `splat_parameter` / `hash_splat_parameter` / `block_parameter` /
|
|
59
|
+
* `keyword_parameter` (field `name`).
|
|
60
|
+
* - assignment: `assignment` (fields `left`/`right`; LHS may be `identifier`,
|
|
61
|
+
* `left_assignment_list` (multi `a, b = …`), `instance_variable` (`@x`),
|
|
62
|
+
* `class_variable` (`@@x`), `global_variable` (`$x`), `constant`),
|
|
63
|
+
* `operator_assignment` (fields `left`/`operator`/`right` — read+write).
|
|
64
|
+
* - binders: `for` (fields `pattern`/`value`=`in`/`body`), block `parameters`
|
|
65
|
+
* (`block_parameters` of identifier / optional / splat leaves), rescue
|
|
66
|
+
* `variable` (an `exception_variable` wrapping the bound `identifier`).
|
|
67
|
+
* - reads: `call` (fields `receiver`?/`method`/`arguments`), `binary` (fields
|
|
68
|
+
* `left`/`operator`/`right`), `parenthesized_statements`.
|
|
69
|
+
*
|
|
70
|
+
* TWO-PHASE, ORDER-INDEPENDENT (load-bearing — mirrors the Python / TS / Go
|
|
71
|
+
* harvesters): the CFG walk is NOT source-order, so resolving names against a
|
|
72
|
+
* scope stack populated *during* the walk would mis-resolve. Phase 1 pre-scans
|
|
73
|
+
* the whole function subtree once, declaring every in-function local name; phase
|
|
74
|
+
* 2 resolves defs/uses against that finished table from any walk order.
|
|
75
|
+
*
|
|
76
|
+
* Ruby scope model (deliberately simplified, documented): Ruby binds LOCAL
|
|
77
|
+
* variables on first assignment; block parameters and block-local variables have
|
|
78
|
+
* their own block scope, but — exactly as the Python harvester declares all
|
|
79
|
+
* targets in a SINGLE function table (a documented over-approximation) — this
|
|
80
|
+
* harvester declares every assignment / for / block-param / rescue-variable /
|
|
81
|
+
* method-param target into one function-scope table. Instance/class/global
|
|
82
|
+
* variables (`@x` / `@@x` / `$x`) and bare constants are NOT local variables: a
|
|
83
|
+
* read or write of one is recorded as a use only (an attribute-like write — its
|
|
84
|
+
* "name" is not a function-scoped scalar def), matching the TS/Python member-
|
|
85
|
+
* write exclusion. A bare method call with no parens (`foo`) is indistinguishable
|
|
86
|
+
* from a local read at this layer; we resolve such an identifier against the
|
|
87
|
+
* local table and only mint a SYNTHETIC module binding when it is unknown (the
|
|
88
|
+
* conservative direction — a real method call resolves to a `module` synthetic,
|
|
89
|
+
* never a false local def).
|
|
90
|
+
*
|
|
91
|
+
* v1 def-semantics scope:
|
|
92
|
+
* - `assignment` plain `=` — each `identifier` target in the (possibly
|
|
93
|
+
* `left_assignment_list`) LHS is a def; an `@x`/`@@x`/`$x`/`Const` target or
|
|
94
|
+
* an index/attribute target is NOT a scalar def (root is a use only).
|
|
95
|
+
* - `operator_assignment` (`x += 1`, `x ||= y`) — def AND use the lvalue.
|
|
96
|
+
* - `for x in xs` / `for a, b in xs` — the loop target(s) are defs; `xs` a use.
|
|
97
|
+
* - block params (`|x|`, `|x, y|`, `|*rest|`) — `param`-kind defs.
|
|
98
|
+
* - `rescue ... => e` — `e` is a `catch`-kind def (matters to the taint pass).
|
|
99
|
+
* - method parameters (incl. defaults, `*splat`, `**kwsplat`, `&block`,
|
|
100
|
+
* keyword) — `param`-kind defs.
|
|
101
|
+
*
|
|
102
|
+
* MAY-DEFS: a def inside a conditionally-evaluated subexpression is a may-def
|
|
103
|
+
* (gen WITHOUT kill), so the not-taken path's prior def is not falsely killed.
|
|
104
|
+
* Ruby's conditional-def shapes: an assignment in the right operand of `&&`/`and`
|
|
105
|
+
* / `||`/`or` short-circuit (`a && (x = 1)`), and a `when`/`in` case-test
|
|
106
|
+
* expression / `in`-clause guard (a later case only evaluates when earlier
|
|
107
|
+
* patterns did not match).
|
|
108
|
+
*
|
|
109
|
+
* NOTE: nothing serialized here may carry a field named `nodeId` — the durable
|
|
110
|
+
* parsedfile-store reviver dedups objects keyed on that field name.
|
|
111
|
+
*/
|
|
112
|
+
import type { SyntaxNode } from '../../utils/ast-helpers.js';
|
|
113
|
+
import type { BindingEntry, StatementFacts } from '../types.js';
|
|
114
|
+
export declare class RubyHarvester {
|
|
115
|
+
private readonly fnNode;
|
|
116
|
+
private readonly bindings;
|
|
117
|
+
/** Single function-scope name → binding index (documented over-approximation). */
|
|
118
|
+
private readonly table;
|
|
119
|
+
private readonly synthetic;
|
|
120
|
+
private readonly fnId;
|
|
121
|
+
/** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
|
|
122
|
+
private conditionalDepth;
|
|
123
|
+
/**
|
|
124
|
+
* `call` node id → binding indices its single-target result is assigned to
|
|
125
|
+
* (`x = f()` ⇒ `[x]`). Populated just before the value walk reaches the call
|
|
126
|
+
* (see {@link registerResultDefs}) and consumed by {@link visitCall}. Mirrors
|
|
127
|
+
* the Python / Kotlin / Go harvesters' `resultDefTargets`.
|
|
128
|
+
*/
|
|
129
|
+
private readonly resultDefTargets;
|
|
130
|
+
constructor(fnNode: SyntaxNode);
|
|
131
|
+
/** The completed binding table — pass to `CfgBuilder.finish`. */
|
|
132
|
+
bindingTable(): readonly BindingEntry[];
|
|
133
|
+
/** The function/block/lambda body node. */
|
|
134
|
+
private bodyOf;
|
|
135
|
+
private declare;
|
|
136
|
+
/** Declare every parameter binder (method / block / lambda). */
|
|
137
|
+
private declareParams;
|
|
138
|
+
/** The `parameters` field (or first parameter-container child) of a function node. */
|
|
139
|
+
private paramsOf;
|
|
140
|
+
/** Declare the binder identifier of one parameter node. */
|
|
141
|
+
private declareParam;
|
|
142
|
+
/**
|
|
143
|
+
* Pre-scan the function body once, declaring every in-function local name.
|
|
144
|
+
* Recurses into compound statements but NOT into nested function/block/lambda
|
|
145
|
+
* bodies (opaque).
|
|
146
|
+
*/
|
|
147
|
+
private prescan;
|
|
148
|
+
/** `rescue [Exc] => e` — declare `e` (a `catch`-kind def). */
|
|
149
|
+
private declareRescueVar;
|
|
150
|
+
/** Declare identifier leaves of an assignment / loop target (skip non-local LHS). */
|
|
151
|
+
private declareTargets;
|
|
152
|
+
/** Def/use facts for one statement (or construct-header expression) node. */
|
|
153
|
+
facts(node: SyntaxNode): StatementFacts;
|
|
154
|
+
/** Facts for an expression whose WHOLE evaluation is conditional (case tests). */
|
|
155
|
+
factsConditional(node: SyntaxNode): StatementFacts;
|
|
156
|
+
/**
|
|
157
|
+
* Facts for a `for PATTERN in VALUE` head: the loop target(s) are defs, the
|
|
158
|
+
* iterated expression is a use.
|
|
159
|
+
*/
|
|
160
|
+
loopHeadFacts(forNode: SyntaxNode): StatementFacts;
|
|
161
|
+
/**
|
|
162
|
+
* Def-ONLY facts for a value-position assignment (`x = if … / case …`, #2205):
|
|
163
|
+
* just the LHS target(s), attached to the continuation block the branch arms
|
|
164
|
+
* rejoin. The branch condition + arm-value USES are harvested onto the branch's
|
|
165
|
+
* own blocks (visitIf / visitCase), so this must not re-walk the RHS.
|
|
166
|
+
*/
|
|
167
|
+
assignmentDefFacts(stmt: SyntaxNode): StatementFacts | undefined;
|
|
168
|
+
/** Facts for a `rescue [Exc] => e` header: `e` is a def, the exception list a use. */
|
|
169
|
+
rescueHeadFacts(clause: SyntaxNode): StatementFacts;
|
|
170
|
+
/** ENTRY-block facts for the parameters (defs only — incl. default-value uses). */
|
|
171
|
+
paramFacts(): StatementFacts | undefined;
|
|
172
|
+
/** Def the binder of one parameter node and use any default-value expr. */
|
|
173
|
+
private defParam;
|
|
174
|
+
private resolve;
|
|
175
|
+
private def;
|
|
176
|
+
private use;
|
|
177
|
+
/** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
|
|
178
|
+
private conditional;
|
|
179
|
+
/**
|
|
180
|
+
* Def each identifier leaf of an assignment / loop target; route non-local
|
|
181
|
+
* targets (`@x`, index/attribute writes) to the value walk (root is a use).
|
|
182
|
+
*/
|
|
183
|
+
private defTargets;
|
|
184
|
+
/** Value-position walk: collect uses; route def positions to the target handler. */
|
|
185
|
+
private walkValue;
|
|
186
|
+
/**
|
|
187
|
+
* When `value` is a `call`, remember that call site should carry `resultDefs`
|
|
188
|
+
* — the binding indices of `targets` (def-position identifiers). Consumed by
|
|
189
|
+
* {@link visitCall} once the value walk reaches the node. Single plain-identifier
|
|
190
|
+
* target only (the caller restricts to it); the blank target (`_`) binds nothing
|
|
191
|
+
* and is skipped.
|
|
192
|
+
*/
|
|
193
|
+
private registerResultDefs;
|
|
194
|
+
/**
|
|
195
|
+
* Explicit `call` handler. Records a call site (callee path, receiver, per-arg
|
|
196
|
+
* occurrence entries, result defs, spread marker) while reproducing EXACTLY the
|
|
197
|
+
* uses the old default descent recorded (receiver chain root + arguments). Ruby
|
|
198
|
+
* has no `new` — every site is `kind: 'call'`. The `at` anchor is the `call`
|
|
199
|
+
* node's start, byte-aligned with the `@reference.call.free/.member` CALLS
|
|
200
|
+
* anchor (which captures the whole `call` node), so the resolved-id join lands
|
|
201
|
+
* by exact position (see file header ANCHOR ALIGNMENT).
|
|
202
|
+
*/
|
|
203
|
+
private visitCall;
|
|
204
|
+
/**
|
|
205
|
+
* Walk a member-call receiver, returning the chain ROOT binding (recorded as a
|
|
206
|
+
* use) and the dotted prefix path (`a.b` in `a.b.c()`), plus a member-read site
|
|
207
|
+
* for each NON-final access in the chain. A receiver that is itself a `call`
|
|
208
|
+
* (Ruby nests `a.b.c` as `call(call(a,b),c)`) recurses; a bare identifier root
|
|
209
|
+
* is the receiver binding; a `self` / non-identifier root has no static path.
|
|
210
|
+
*/
|
|
211
|
+
private walkReceiverChain;
|
|
212
|
+
/** Dotted callee path `prefix.method` (or undefined when the prefix is opaque). */
|
|
213
|
+
private calleePath;
|
|
214
|
+
/**
|
|
215
|
+
* Walk an `argument_list`, tagging each positional / keyword / splat argument's
|
|
216
|
+
* occurrence position. A `pair` (`k: v`) records only the VALUE occurrence (the
|
|
217
|
+
* `hash_key_symbol` key is not a use). A `splat_argument` (`*xs`) /
|
|
218
|
+
* `hash_splat_argument` (`**kw`) marks the first spread position so the matcher
|
|
219
|
+
* degrades soundly; its inner value still walks. A `block_argument` (`&blk`)
|
|
220
|
+
* passes a block — its inner value is a use occurrence.
|
|
221
|
+
*/
|
|
222
|
+
private walkArguments;
|
|
223
|
+
}
|