gitnexus 1.6.9 → 1.6.10-aptos.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/README.md +211 -53
- package/dist/_shared/graph/types.d.ts +67 -3
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +1 -0
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +4 -3
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/language-detection.js +2 -0
- package/dist/_shared/language-detection.js.map +1 -1
- package/dist/_shared/languages.d.ts +2 -0
- package/dist/_shared/languages.d.ts.map +1 -1
- package/dist/_shared/languages.js +2 -0
- package/dist/_shared/languages.js.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +8 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/pipeline.d.ts +1 -1
- package/dist/_shared/pipeline.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/language-classification.js +1 -0
- package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +20 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +1 -1
- package/dist/cli/ai-context.js +25 -44
- package/dist/cli/analyze.d.ts +5 -2
- package/dist/cli/analyze.js +197 -11
- package/dist/cli/clean.js +17 -3
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/doctor.d.ts +18 -0
- package/dist/cli/doctor.js +96 -5
- package/dist/cli/editor-targets.d.ts +17 -2
- package/dist/cli/editor-targets.js +44 -0
- package/dist/cli/embeddings.d.ts +12 -0
- package/dist/cli/embeddings.js +49 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +126 -8
- package/dist/cli/help-i18n.js +6 -0
- package/dist/cli/i18n/en.d.ts +18 -8
- package/dist/cli/i18n/en.js +18 -8
- package/dist/cli/i18n/resources.d.ts +28 -8
- package/dist/cli/i18n/zh-CN.d.ts +10 -0
- package/dist/cli/i18n/zh-CN.js +18 -8
- package/dist/cli/index.js +21 -7
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/move-availability.d.ts +5 -0
- package/dist/cli/move-availability.js +11 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +230 -32
- package/dist/cli/skill-gen.js +38 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.js +11 -0
- package/dist/cli/uninstall.js +77 -18
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +7 -1
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +27 -0
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +74 -0
- package/dist/core/analyzer-identity.js +1820 -0
- package/dist/core/augmentation/engine.js +13 -8
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +24 -7
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
- package/dist/core/embeddings/embedding-pipeline.js +100 -9
- package/dist/core/embeddings/http-client.d.ts +33 -3
- package/dist/core/embeddings/http-client.js +237 -25
- package/dist/core/embeddings/node-module-compat.d.ts +25 -0
- package/dist/core/embeddings/node-module-compat.js +25 -0
- package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
- package/dist/core/embeddings/runtime-install.d.ts +119 -0
- package/dist/core/embeddings/runtime-install.js +372 -0
- package/dist/core/embeddings/runtime-support.d.ts +48 -17
- package/dist/core/embeddings/runtime-support.js +96 -0
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/group/bridge-db.js +2 -0
- package/dist/core/group/extractors/http-patterns/python.js +246 -108
- package/dist/core/group/extractors/manifest-extractor.js +4 -0
- package/dist/core/incremental/escalation-gate.d.ts +38 -0
- package/dist/core/incremental/escalation-gate.js +48 -0
- package/dist/core/incremental/shadow-candidates.d.ts +3 -3
- package/dist/core/incremental/shadow-candidates.js +3 -3
- package/dist/core/incremental/subgraph-extract.d.ts +2 -2
- package/dist/core/incremental/subgraph-extract.js +2 -2
- package/dist/core/index-freshness.d.ts +5 -0
- package/dist/core/index-freshness.js +13 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
- package/dist/core/ingestion/cobol-processor.js +27 -26
- package/dist/core/ingestion/community-processor.d.ts +51 -1
- package/dist/core/ingestion/community-processor.js +323 -64
- package/dist/core/ingestion/emit-references.js +7 -2
- package/dist/core/ingestion/filesystem-walker.js +4 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/languages/c/captures.js +56 -0
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
- package/dist/core/ingestion/languages/cpp/captures.js +365 -75
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
- package/dist/core/ingestion/languages/csharp/captures.js +25 -0
- package/dist/core/ingestion/languages/dart/captures.js +90 -2
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- package/dist/core/ingestion/languages/dart.js +2 -0
- package/dist/core/ingestion/languages/go/captures.js +34 -0
- package/dist/core/ingestion/languages/index.d.ts +1 -0
- package/dist/core/ingestion/languages/index.js +2 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +193 -17
- package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +23 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java.js +3 -0
- package/dist/core/ingestion/languages/javascript/captures.js +16 -0
- package/dist/core/ingestion/languages/javascript/query.js +21 -0
- package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +19 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/move.d.ts +1 -0
- package/dist/core/ingestion/languages/move.js +27 -0
- package/dist/core/ingestion/languages/php/captures.js +40 -0
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +110 -2
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +24 -5
- package/dist/core/ingestion/languages/python/interpret.js +4 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
- package/dist/core/ingestion/languages/ruby/captures.js +42 -0
- package/dist/core/ingestion/languages/rust/captures.js +13 -0
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/query.js +9 -0
- package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
- package/dist/core/ingestion/languages/swift/captures.js +12 -0
- package/dist/core/ingestion/languages/typescript/captures.js +21 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.js +37 -0
- package/dist/core/ingestion/markdown-processor.js +3 -2
- package/dist/core/ingestion/model/registration-table.js +1 -0
- package/dist/core/ingestion/parsing-processor.d.ts +3 -1
- package/dist/core/ingestion/parsing-processor.js +36 -1
- 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.js +56 -2
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
- package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
- package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
- package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +10 -0
- package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
- package/dist/core/ingestion/pipeline.d.ts +4 -2
- package/dist/core/ingestion/pipeline.js +5 -2
- package/dist/core/ingestion/resolve-references.js +12 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
- package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
- package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
- package/dist/core/ingestion/scope-extractor.js +306 -43
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
- package/dist/core/ingestion/tree-sitter-queries.js +23 -2
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
- package/dist/core/ingestion/utils/ast-helpers.js +153 -2
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
- package/dist/core/ingestion/utils/line-base.d.ts +20 -0
- package/dist/core/ingestion/utils/line-base.js +20 -0
- package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
- package/dist/core/ingestion/utils/symbol-labels.js +45 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
- package/dist/core/ingestion/workers/parse-worker.js +40 -5
- package/dist/core/ingestion/workers/result-merge.js +4 -0
- package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
- package/dist/core/ingestion/workers/worker-pool.js +128 -28
- package/dist/core/lbug/csv-generator.d.ts +15 -0
- package/dist/core/lbug/csv-generator.js +124 -27
- package/dist/core/lbug/cypher-escape.d.ts +20 -0
- package/dist/core/lbug/cypher-escape.js +20 -0
- package/dist/core/lbug/extension-load-error.d.ts +67 -0
- package/dist/core/lbug/extension-load-error.js +326 -0
- package/dist/core/lbug/extension-loader.d.ts +17 -2
- package/dist/core/lbug/extension-loader.js +38 -13
- package/dist/core/lbug/lbug-adapter.d.ts +203 -2
- package/dist/core/lbug/lbug-adapter.js +527 -86
- package/dist/core/lbug/lbug-config.d.ts +56 -2
- package/dist/core/lbug/lbug-config.js +267 -7
- package/dist/core/lbug/move-columns.d.ts +7 -0
- package/dist/core/lbug/move-columns.js +86 -0
- package/dist/core/lbug/native-check.d.ts +40 -0
- package/dist/core/lbug/native-check.js +90 -0
- package/dist/core/lbug/node-table-layout.d.ts +29 -0
- package/dist/core/lbug/node-table-layout.js +119 -0
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -8
- package/dist/core/lbug/schema.d.ts +4 -3
- package/dist/core/lbug/schema.js +16 -16
- package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
- package/dist/core/lbug/sidecar-recovery.js +418 -16
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/move/artifact-download.d.ts +19 -0
- package/dist/core/move/artifact-download.js +179 -0
- package/dist/core/move/compiler-facts.d.ts +120 -0
- package/dist/core/move/compiler-facts.js +9 -0
- package/dist/core/move/consistency.d.ts +28 -0
- package/dist/core/move/consistency.js +98 -0
- package/dist/core/move/constants.d.ts +98 -0
- package/dist/core/move/constants.js +136 -0
- package/dist/core/move/discovery.d.ts +10 -0
- package/dist/core/move/discovery.js +22 -0
- package/dist/core/move/entry-points.d.ts +14 -0
- package/dist/core/move/entry-points.js +40 -0
- package/dist/core/move/facts-mapper.d.ts +75 -0
- package/dist/core/move/facts-mapper.js +534 -0
- package/dist/core/move/install-lock.d.ts +14 -0
- package/dist/core/move/install-lock.js +102 -0
- package/dist/core/move/install.d.ts +39 -0
- package/dist/core/move/install.js +391 -0
- package/dist/core/move/mcp-client.d.ts +115 -0
- package/dist/core/move/mcp-client.js +436 -0
- package/dist/core/move/move-ingest.d.ts +49 -0
- package/dist/core/move/move-ingest.js +320 -0
- package/dist/core/move/provision.d.ts +19 -0
- package/dist/core/move/provision.js +91 -0
- package/dist/core/move/release.d.ts +6 -0
- package/dist/core/move/release.js +10 -0
- package/dist/core/move/symbol-id.d.ts +35 -0
- package/dist/core/move/symbol-id.js +65 -0
- package/dist/core/move/type-parser.d.ts +11 -0
- package/dist/core/move/type-parser.js +38 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +39 -8
- package/dist/core/run-analyze.d.ts +3 -3
- package/dist/core/run-analyze.js +1001 -184
- package/dist/core/search/fts-indexes.d.ts +31 -0
- package/dist/core/search/fts-indexes.js +73 -0
- package/dist/core/search/fts-schema.js +2 -0
- package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
- package/dist/core/tree-sitter/safe-parse.js +21 -7
- package/dist/core/wiki/graph-queries.js +6 -5
- package/dist/core/wiki/llm-client.d.ts +8 -2
- package/dist/core/wiki/llm-client.js +41 -5
- package/dist/mcp/core/embedder.js +16 -2
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/bean-metadata.d.ts +2 -0
- package/dist/mcp/local/bean-metadata.js +25 -0
- package/dist/mcp/local/line-display.d.ts +22 -0
- package/dist/mcp/local/line-display.js +3 -0
- package/dist/mcp/local/local-backend.d.ts +19 -1
- package/dist/mcp/local/local-backend.js +402 -155
- package/dist/mcp/local/pdg-impact.d.ts +5 -3
- package/dist/mcp/local/pdg-impact.js +5 -2
- package/dist/mcp/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +34 -0
- package/dist/mcp/repository-policy.js +328 -0
- package/dist/mcp/resources.js +32 -5
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +29 -9
- package/dist/mcp/tools.d.ts +0 -8
- package/dist/mcp/tools.js +102 -5
- package/dist/server/analyze-job.d.ts +3 -0
- package/dist/server/analyze-job.js +17 -0
- package/dist/server/analyze-launch.d.ts +6 -0
- package/dist/server/analyze-launch.js +82 -6
- package/dist/server/analyze-worker-core.d.ts +2 -1
- package/dist/server/analyze-worker-core.js +5 -2
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +30 -0
- package/dist/server/api.js +120 -34
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/git.d.ts +31 -0
- package/dist/storage/git.js +111 -1
- package/dist/storage/parse-cache.js +7 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +165 -1
- package/dist/storage/repo-manager.d.ts +194 -2
- package/dist/storage/repo-manager.js +56 -1
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
- package/hooks/claude/gitnexus-hook.cjs +59 -9
- package/hooks/claude/pre-tool-use.sh +0 -0
- package/hooks/claude/session-start.sh +0 -0
- package/package.json +21 -15
- package/scripts/cross-platform-tests.ts +56 -0
- package/scripts/ensure-fts.ts +43 -0
- package/scripts/install-duckdb-extension.mjs +85 -24
- package/scripts/run-cross-platform.ts +61 -6
- package/scripts/shard-arg.ts +30 -0
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +142 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
- package/skills/gitnexus-review/SKILL.md +273 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +269 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
- package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/agent-Bqxn-abU.js +626 -0
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
- package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
- package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
- package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
- package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
- package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
- package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
- package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
- package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
- package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
- package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
- package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
- package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
- package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
- package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
- package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
- package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
- package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
- package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
- package/web/assets/index-CX_fADmQ.css +2 -0
- package/web/assets/index-D1Z3dGGz.js +575 -0
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
- package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
- package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
- package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
- package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
- package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
- package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
- package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
- package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
- package/web/assets/src-JV30wyV8.js +1 -0
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
- package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
- package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
- package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
- package/web/index.html +18 -10
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/agent-Dli_x7bU.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
- package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
- package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
- package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
- package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
- package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
- package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
- package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
- package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
- package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
- package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
- package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
- package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
- package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
- package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
- package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
- package/web/assets/index-KctnI3Vq.js +0 -635
- package/web/assets/index-_lgn7hs5.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
- package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
- package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
- package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
- package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { findChild } from '../utils/ast-helpers.js';
|
|
1
|
+
import { findChild, synthesizeJavaAnonymousClassName, } from '../utils/ast-helpers.js';
|
|
2
2
|
import { extractSimpleTypeName, extractVarName, extractGenericTypeArgs, resolveIterableElementType, methodToTypeArgPosition, extractElementTypeFromString, } from './shared.js';
|
|
3
3
|
// ── Java ──────────────────────────────────────────────────────────────────
|
|
4
4
|
const JAVA_DECLARATION_NODE_TYPES = new Set([
|
|
5
5
|
'local_variable_declaration',
|
|
6
6
|
'field_declaration',
|
|
7
7
|
]);
|
|
8
|
+
/** `Runnable handler = new Runnable() { ... }` — the variable's effective
|
|
9
|
+
* type is the ANONYMOUS class (`Worker$1`), not the declared interface;
|
|
10
|
+
* that is the instance `handler.run()` dispatches into (#2550). Returns
|
|
11
|
+
* undefined for declarators without an anonymous-body initializer. */
|
|
12
|
+
const anonymousInitializerTypeName = (declarator) => {
|
|
13
|
+
const valueNode = declarator.childForFieldName('value');
|
|
14
|
+
if (!valueNode || valueNode.type !== 'object_creation_expression')
|
|
15
|
+
return undefined;
|
|
16
|
+
return synthesizeJavaAnonymousClassName(valueNode);
|
|
17
|
+
};
|
|
8
18
|
/** Java: Type x = ...; Type x; */
|
|
9
19
|
const extractJavaDeclaration = (node, env) => {
|
|
10
20
|
const typeNode = node.childForFieldName('type');
|
|
@@ -22,7 +32,7 @@ const extractJavaDeclaration = (node, env) => {
|
|
|
22
32
|
if (nameNode) {
|
|
23
33
|
const varName = extractVarName(nameNode);
|
|
24
34
|
if (varName)
|
|
25
|
-
env.set(varName, typeName);
|
|
35
|
+
env.set(varName, anonymousInitializerTypeName(child) ?? typeName);
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
};
|
|
@@ -42,6 +52,11 @@ const extractJavaInitializer = (node, env, _classNames) => {
|
|
|
42
52
|
continue;
|
|
43
53
|
if (valueNode.type !== 'object_creation_expression')
|
|
44
54
|
continue;
|
|
55
|
+
const anonName = anonymousInitializerTypeName(child);
|
|
56
|
+
if (anonName) {
|
|
57
|
+
env.set(varName, anonName);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
45
60
|
const ctorType = valueNode.childForFieldName('type');
|
|
46
61
|
if (!ctorType)
|
|
47
62
|
continue;
|
|
@@ -102,6 +102,7 @@ export interface EnclosingClassInfo {
|
|
|
102
102
|
*/
|
|
103
103
|
qualifiedClassId?: string;
|
|
104
104
|
}
|
|
105
|
+
export declare const synthesizeJavaAnonymousClassName: (node: SyntaxNode) => string | undefined;
|
|
105
106
|
export declare const findEnclosingClassInfo: (node: SyntaxNode, filePath: string, resolveEnclosingOwner?: (node: SyntaxNode) => SyntaxNode | null,
|
|
106
107
|
/**
|
|
107
108
|
* Optional (#1978): returns the enclosing type's fully-qualified name
|
|
@@ -209,7 +209,7 @@ export const CONTAINER_TYPE_TO_LABEL = {
|
|
|
209
209
|
record_declaration: 'Record',
|
|
210
210
|
protocol_declaration: 'Interface',
|
|
211
211
|
mixin_declaration: 'Mixin',
|
|
212
|
-
extension_declaration: '
|
|
212
|
+
extension_declaration: 'Class',
|
|
213
213
|
class: 'Class',
|
|
214
214
|
// Ruby `module` declarations map to `Trait` so they participate in the
|
|
215
215
|
// class-like type registry used by `lookupClassByName` / inheritance
|
|
@@ -270,7 +270,14 @@ export function getLabelFromCaptures(captureMap, provider) {
|
|
|
270
270
|
return null;
|
|
271
271
|
const hasDefaultExportHocNameSeed = captureMap['definition.function'] !== undefined &&
|
|
272
272
|
(captureMap['hoc'] !== undefined || captureMap['callee'] !== undefined);
|
|
273
|
-
|
|
273
|
+
// Nameless `definition.class` passes through: a class extractor may
|
|
274
|
+
// synthesize the name (Java anonymous class bodies → `Worker$N`, #2550).
|
|
275
|
+
// Downstream stays safe — parse-worker skips any nameless definition the
|
|
276
|
+
// extractor could not name (its `!nameNode && !extractedClassSymbol` gate).
|
|
277
|
+
if (!captureMap['name'] &&
|
|
278
|
+
!captureMap['definition.constructor'] &&
|
|
279
|
+
!captureMap['definition.class'] &&
|
|
280
|
+
!hasDefaultExportHocNameSeed)
|
|
274
281
|
return null;
|
|
275
282
|
if (captureMap['definition.function']) {
|
|
276
283
|
if (provider.labelOverride) {
|
|
@@ -353,6 +360,133 @@ export function getLabelFromCaptures(captureMap, provider) {
|
|
|
353
360
|
* `MAX_ENCLOSING_WALK_ITERATIONS` defense-in-depth guard below prevents
|
|
354
361
|
* pathological hooks from creating an infinite loop. */
|
|
355
362
|
const MAX_ENCLOSING_WALK_ITERATIONS = 4096;
|
|
363
|
+
/**
|
|
364
|
+
* Synthesize a javac-style name for a Java anonymous class body:
|
|
365
|
+
* `new Runnable() { ... }` inside top-level class `Worker` becomes
|
|
366
|
+
* `Worker$1` (`$N` = 1-based source order of anonymous bodies within the
|
|
367
|
+
* top-level class). Returns undefined when the node is not an
|
|
368
|
+
* `object_creation_expression` carrying a `class_body` child — which also
|
|
369
|
+
* keeps this a no-op for C#, whose `object_creation_expression` uses
|
|
370
|
+
* `initializer_expression`, never `class_body` (#2550).
|
|
371
|
+
*
|
|
372
|
+
* The SAME name must be produced by every layer that keys the anonymous
|
|
373
|
+
* class (structure-phase node id, enclosing-owner walk, scope-side
|
|
374
|
+
* declaration synthesis, receiver typeBinding) — they agree by all calling
|
|
375
|
+
* this one helper.
|
|
376
|
+
*/
|
|
377
|
+
/** Type-declaration node types that can host (and name) a Java anonymous
|
|
378
|
+
* class body. Naming follows JLS 13.1: the binary name is the
|
|
379
|
+
* IMMEDIATELY enclosing type's binary name + `$N`, so the synthesized
|
|
380
|
+
* name is the `$`-joined chain of enclosing host names
|
|
381
|
+
* (`EnumWrap$Mode$1`), numbered per immediate host in source order. */
|
|
382
|
+
const JAVA_ANON_HOST_TYPES = new Set([
|
|
383
|
+
'class_declaration',
|
|
384
|
+
'enum_declaration',
|
|
385
|
+
'interface_declaration',
|
|
386
|
+
'record_declaration',
|
|
387
|
+
]);
|
|
388
|
+
/** The two Java anonymous-class-body shapes (#2550/#2555): an
|
|
389
|
+
* `object_creation_expression` with a `class_body` child
|
|
390
|
+
* (`new Runnable() { ... }`), and an `enum_constant` with a `body:`
|
|
391
|
+
* field (`enum E { A { ... } }` — javac's other `E$N` shape). */
|
|
392
|
+
const isJavaAnonymousBodyNode = (node) => (node.type === 'object_creation_expression' &&
|
|
393
|
+
node.namedChildren?.some((c) => c.type === 'class_body') === true) ||
|
|
394
|
+
(node.type === 'enum_constant' && node.childForFieldName?.('body')?.type === 'class_body');
|
|
395
|
+
/** Nearest ancestor of `node` that is an enclosing TYPE per JLS 13.1 —
|
|
396
|
+
* a named host declaration OR another anonymous body (both shapes).
|
|
397
|
+
* Anonymous ancestors chain through: an anon inside an anon is
|
|
398
|
+
* `Host$1$1`, and an anon inside an enum constant body is `E$1$1`. */
|
|
399
|
+
const nearestJavaEnclosingType = (node) => {
|
|
400
|
+
let cursor = node.parent;
|
|
401
|
+
let iterations = 0;
|
|
402
|
+
while (cursor) {
|
|
403
|
+
if (++iterations > MAX_ENCLOSING_WALK_ITERATIONS)
|
|
404
|
+
return null;
|
|
405
|
+
if (JAVA_ANON_HOST_TYPES.has(cursor.type) || isJavaAnonymousBodyNode(cursor))
|
|
406
|
+
return cursor;
|
|
407
|
+
cursor = cursor.parent;
|
|
408
|
+
}
|
|
409
|
+
return null;
|
|
410
|
+
};
|
|
411
|
+
/** Per-parse-tree memo of anonymous-body numbering: tree → (startIndex →
|
|
412
|
+
* synthesized name). Keyed by the tree OBJECT via WeakMap so entries die
|
|
413
|
+
* with the parse; without it every call re-scans the host subtree
|
|
414
|
+
* (`descendantsOfType`), and the helper is called from four independent
|
|
415
|
+
* layers per anonymous body — quadratic on anon-heavy files (old-style
|
|
416
|
+
* listener-per-widget Java). */
|
|
417
|
+
const javaAnonNameMemo = new WeakMap();
|
|
418
|
+
export const synthesizeJavaAnonymousClassName = (node) => {
|
|
419
|
+
if (!isJavaAnonymousBodyNode(node))
|
|
420
|
+
return undefined;
|
|
421
|
+
const tree = node.tree;
|
|
422
|
+
if (tree !== undefined) {
|
|
423
|
+
const cached = javaAnonNameMemo.get(tree)?.get(node.startIndex);
|
|
424
|
+
if (cached !== undefined)
|
|
425
|
+
return cached;
|
|
426
|
+
}
|
|
427
|
+
// JLS 13.1: the binary name is the IMMEDIATELY ENCLOSING TYPE's binary
|
|
428
|
+
// name + `$N`. The enclosing type may itself be anonymous — then its
|
|
429
|
+
// own synthesized name is the prefix (recursion, memo-bounded):
|
|
430
|
+
// `NestHost$1$1` for an anon inside an anon, `E$1$1` for an anon
|
|
431
|
+
// inside an enum constant body. For a named enclosing type the prefix
|
|
432
|
+
// is the `$`-joined chain of named hosts (`EnumWrap$Mode`).
|
|
433
|
+
const enclosing = nearestJavaEnclosingType(node);
|
|
434
|
+
if (enclosing === null)
|
|
435
|
+
return undefined;
|
|
436
|
+
let prefix;
|
|
437
|
+
if (isJavaAnonymousBodyNode(enclosing)) {
|
|
438
|
+
const enclosingName = synthesizeJavaAnonymousClassName(enclosing);
|
|
439
|
+
if (enclosingName === undefined)
|
|
440
|
+
return undefined;
|
|
441
|
+
prefix = enclosingName;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
const hostNames = [];
|
|
445
|
+
let cursor = enclosing;
|
|
446
|
+
let iterations = 0;
|
|
447
|
+
while (cursor) {
|
|
448
|
+
if (++iterations > MAX_ENCLOSING_WALK_ITERATIONS)
|
|
449
|
+
return undefined;
|
|
450
|
+
if (JAVA_ANON_HOST_TYPES.has(cursor.type)) {
|
|
451
|
+
const hostName = cursor.childForFieldName?.('name')?.text;
|
|
452
|
+
if (hostName === undefined || hostName.length === 0)
|
|
453
|
+
return undefined;
|
|
454
|
+
hostNames.unshift(hostName);
|
|
455
|
+
}
|
|
456
|
+
cursor = cursor.parent;
|
|
457
|
+
}
|
|
458
|
+
prefix = hostNames.join('$');
|
|
459
|
+
}
|
|
460
|
+
// All anonymous bodies (both shapes) whose immediately enclosing TYPE
|
|
461
|
+
// is THIS one, in source order. `descendantsOfType` over the subtree
|
|
462
|
+
// also finds bodies belonging to nested enclosing types — filter them
|
|
463
|
+
// out by re-deriving each candidate's own enclosing type.
|
|
464
|
+
const candidates = [
|
|
465
|
+
...(enclosing.descendantsOfType?.('object_creation_expression') ?? []),
|
|
466
|
+
...(enclosing.descendantsOfType?.('enum_constant') ?? []),
|
|
467
|
+
]
|
|
468
|
+
.filter(isJavaAnonymousBodyNode)
|
|
469
|
+
.filter((c) => {
|
|
470
|
+
const host = nearestJavaEnclosingType(c);
|
|
471
|
+
return (host !== null && host.startIndex === enclosing.startIndex && host.type === enclosing.type);
|
|
472
|
+
})
|
|
473
|
+
.sort((a, b) => a.startIndex - b.startIndex);
|
|
474
|
+
if (tree !== undefined) {
|
|
475
|
+
let byStart = javaAnonNameMemo.get(tree);
|
|
476
|
+
if (byStart === undefined) {
|
|
477
|
+
byStart = new Map();
|
|
478
|
+
javaAnonNameMemo.set(tree, byStart);
|
|
479
|
+
}
|
|
480
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
481
|
+
byStart.set(candidates[i].startIndex, `${prefix}$${i + 1}`);
|
|
482
|
+
}
|
|
483
|
+
return byStart.get(node.startIndex);
|
|
484
|
+
}
|
|
485
|
+
const index = candidates.findIndex((c) => c.startIndex === node.startIndex);
|
|
486
|
+
if (index === -1)
|
|
487
|
+
return undefined;
|
|
488
|
+
return `${prefix}$${index + 1}`;
|
|
489
|
+
};
|
|
356
490
|
export const findEnclosingClassInfo = (node, filePath, resolveEnclosingOwner,
|
|
357
491
|
/**
|
|
358
492
|
* Optional (#1978): returns the enclosing type's fully-qualified name
|
|
@@ -411,6 +545,23 @@ getQualifiedOwnerName) => {
|
|
|
411
545
|
}
|
|
412
546
|
}
|
|
413
547
|
}
|
|
548
|
+
// Java: an anonymous class body owns its members — attribute to the
|
|
549
|
+
// synthesized `Worker$N`/`E$N` class, not the lexically enclosing
|
|
550
|
+
// named type (#2550/#2555). Covers both shapes: `new Runnable() { ... }`
|
|
551
|
+
// and enum constant bodies (`enum E { A { ... } }`). The synthesis
|
|
552
|
+
// returns undefined for shape-less nodes (plain `new Foo()`, a body-less
|
|
553
|
+
// enum constant, and every C# `object_creation_expression`), so the
|
|
554
|
+
// walk continues unchanged for those — including on to
|
|
555
|
+
// `enum_declaration`, which sits in CLASS_CONTAINER_TYPES below.
|
|
556
|
+
if (current.type === 'object_creation_expression' || current.type === 'enum_constant') {
|
|
557
|
+
const anonName = synthesizeJavaAnonymousClassName(current);
|
|
558
|
+
if (anonName !== undefined) {
|
|
559
|
+
return {
|
|
560
|
+
classId: generateId('Class', `${filePath}:${anonName}`),
|
|
561
|
+
className: anonName,
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
}
|
|
414
565
|
if (CLASS_CONTAINER_TYPES.has(current.type)) {
|
|
415
566
|
// Delegate language-specific container remapping to the provider hook.
|
|
416
567
|
if (resolveEnclosingOwner) {
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configurable AST-to-`@callable-flow.*` capture synthesis.
|
|
3
|
+
*
|
|
4
|
+
* The traversal is language-neutral: providers supply their grammar's node
|
|
5
|
+
* vocabulary and the small semantic callbacks (true-reference bindings,
|
|
6
|
+
* callable signatures, protocol invocation names). The central extractor
|
|
7
|
+
* never sees a parser node and shared ingestion code never branches on a
|
|
8
|
+
* language name.
|
|
9
|
+
*/
|
|
10
|
+
import type { CaptureMatch, ParameterTypeClass } from '../../../_shared/index.js';
|
|
11
|
+
import { type SyntaxNode } from './ast-helpers.js';
|
|
12
|
+
export interface CallableCaptureSignature {
|
|
13
|
+
readonly parameterCount?: number;
|
|
14
|
+
readonly parameterTypes?: readonly string[];
|
|
15
|
+
readonly parameterTypeClasses?: readonly ParameterTypeClass[];
|
|
16
|
+
readonly isConst?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CallableFlowCaptureOptions {
|
|
19
|
+
readonly functionNodeTypes: ReadonlySet<string>;
|
|
20
|
+
readonly callNodeTypes: ReadonlySet<string>;
|
|
21
|
+
readonly parameterListNodeTypes: ReadonlySet<string>;
|
|
22
|
+
readonly parameterNodeTypes: ReadonlySet<string>;
|
|
23
|
+
readonly bindingNodeTypes: ReadonlySet<string>;
|
|
24
|
+
readonly assignmentNodeTypes: ReadonlySet<string>;
|
|
25
|
+
readonly identifierNodeTypes: ReadonlySet<string>;
|
|
26
|
+
/** Control-flow blocks do not introduce a new local-variable scope. */
|
|
27
|
+
readonly functionScopedValueBindings?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Declaration nodes whose callable type can contextually select an overload
|
|
30
|
+
* at a later assignment (for example `void (*fp)(int); fp = target;`).
|
|
31
|
+
*/
|
|
32
|
+
readonly callableSignatureDeclarationNodeTypes?: ReadonlySet<string>;
|
|
33
|
+
/** Nodes that denote a named callable reference rather than a value read. */
|
|
34
|
+
readonly callableReferenceNodeTypes?: ReadonlySet<string>;
|
|
35
|
+
/** Member methods whose receiver itself is the callable object. */
|
|
36
|
+
readonly callableProtocolMethods?: ReadonlySet<string>;
|
|
37
|
+
/** Operators used for receiver-bound member-pointer invocation. */
|
|
38
|
+
readonly memberPointerOperators?: ReadonlySet<string>;
|
|
39
|
+
/** Provider fallback for member-pointer syntax a grammar recovers as ERROR nodes. */
|
|
40
|
+
readonly memberPointerParts?: (node: SyntaxNode) => {
|
|
41
|
+
readonly receiver: SyntaxNode;
|
|
42
|
+
readonly member: SyntaxNode;
|
|
43
|
+
readonly operator: string;
|
|
44
|
+
} | undefined;
|
|
45
|
+
readonly functionName?: (node: SyntaxNode) => string | undefined;
|
|
46
|
+
/** Map grammar-specific split signature/body shapes to one lexical owner. */
|
|
47
|
+
readonly lexicalFunctionOwner?: (node: SyntaxNode) => SyntaxNode | undefined;
|
|
48
|
+
readonly parameterPassingMode?: (parameter: SyntaxNode) => 'value' | 'reference' | 'pointer' | 'callable-object';
|
|
49
|
+
readonly isTrueReferenceBinding?: (container: SyntaxNode, destination: SyntaxNode) => boolean;
|
|
50
|
+
readonly expectedSignature?: (container: SyntaxNode, destination: SyntaxNode) => CallableCaptureSignature | undefined;
|
|
51
|
+
readonly normalizeQualifiedName?: (raw: string) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Provider-owned assignment decomposition. May return MULTIPLE pairs for
|
|
54
|
+
* one node — Go's multi-value `a, b := f, g` pairs positionally; the
|
|
55
|
+
* shared field fallback would cross-wire first-LHS with last-RHS (#2522
|
|
56
|
+
* review). Returning an empty array means "recognized, but emit nothing"
|
|
57
|
+
* (e.g. a multi-return call RHS with mismatched arity).
|
|
58
|
+
*/
|
|
59
|
+
readonly extractAssignment?: (node: SyntaxNode) => {
|
|
60
|
+
readonly destination: SyntaxNode;
|
|
61
|
+
readonly source: SyntaxNode;
|
|
62
|
+
} | readonly {
|
|
63
|
+
readonly destination: SyntaxNode;
|
|
64
|
+
readonly source: SyntaxNode;
|
|
65
|
+
}[] | undefined;
|
|
66
|
+
readonly extractFunctionParameters?: (node: SyntaxNode) => readonly SyntaxNode[] | undefined;
|
|
67
|
+
readonly extractCallCallee?: (node: SyntaxNode) => SyntaxNode | undefined;
|
|
68
|
+
readonly isCallNode?: (node: SyntaxNode) => boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Languages where a bare, receiver-less, paren-less name in value position
|
|
71
|
+
* is a CALL, not a reference (Ruby: `action = process` invokes `process`
|
|
72
|
+
* and stores its return). When true, a bare name that is not a provably
|
|
73
|
+
* local value binding and not an explicit reference form (`method(:x)`,
|
|
74
|
+
* lambda/proc) emits NO flow fact — treating it as a callable minted CALLS
|
|
75
|
+
* edges to methods that were merely invoked (#2522 review).
|
|
76
|
+
*/
|
|
77
|
+
readonly bareNamesAreCalls?: boolean;
|
|
78
|
+
readonly callSiteNode?: (node: SyntaxNode) => SyntaxNode | undefined;
|
|
79
|
+
/** Emit a canonical call ReferenceSite when the provider query omits variable calls. */
|
|
80
|
+
readonly emitCanonicalInvokeReference?: boolean;
|
|
81
|
+
readonly extractCallableReference?: (node: SyntaxNode) => {
|
|
82
|
+
readonly name: string;
|
|
83
|
+
readonly anchor: SyntaxNode;
|
|
84
|
+
readonly qualifiedName?: string;
|
|
85
|
+
} | undefined;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Emit normalized flow captures in deterministic source order.
|
|
89
|
+
*
|
|
90
|
+
* One explicit DFS supplies all phases below. Query-backed emitters may still
|
|
91
|
+
* perform their existing query walk; this helper never reparses and remains
|
|
92
|
+
* linear in AST size (the scope-capture benchmark guards the scaling ratio).
|
|
93
|
+
*/
|
|
94
|
+
export declare function synthesizeCallableFlowCaptures(root: SyntaxNode, options: CallableFlowCaptureOptions): readonly CaptureMatch[];
|