gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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 +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.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 +3 -0
- package/dist/_shared/lbug/schema-constants.js.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/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.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 +124 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- 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/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -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.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- 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 +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +80 -0
- package/dist/core/index-freshness.js +120 -0
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -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 +27 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -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/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +27 -8
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +222 -3
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +44 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +686 -16
- 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/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- 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 +39 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -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-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -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/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +232 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- 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 +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -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 +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- 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/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- 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 +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +99 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +288 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- 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/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +109 -24
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- 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 +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- 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 +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -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 +309 -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 +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -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-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +17 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -2,54 +2,84 @@ import { getRustParser } from './query.js';
|
|
|
2
2
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
3
3
|
import { parseSourceSafe, ParseTimeoutError } from '../../../tree-sitter/safe-parse.js';
|
|
4
4
|
import { logger } from '../../../logger.js';
|
|
5
|
+
import { lookupBindingsAt } from '../../scope-resolution/scope/walkers.js';
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* match arm patterns, and struct destructuring.
|
|
11
|
-
*
|
|
12
|
-
* Runs in Phase 2 (after propagateImportedReturnTypes) so all cross-file
|
|
13
|
-
* type bindings are available for lookup.
|
|
7
|
+
* Hold parsed trees for reuse across both prepass loops only when the whole
|
|
8
|
+
* Rust source fits this budget. Trees are much larger than their source, so a
|
|
9
|
+
* modest source cap keeps peak held-tree memory bounded; larger repos fall
|
|
10
|
+
* back to re-parsing per loop (unchanged RSS).
|
|
14
11
|
*/
|
|
15
|
-
|
|
12
|
+
const TREE_REUSE_SOURCE_BUDGET_BYTES = 16 * 1024 * 1024;
|
|
13
|
+
/**
|
|
14
|
+
* Parse `filePath`'s source once, honoring the caller's `treeCache` and, when
|
|
15
|
+
* provided, an in-function `store` so the two prepass loops share a single
|
|
16
|
+
* parse instead of re-parsing every file. Returns null when the source is
|
|
17
|
+
* missing or parsing times out.
|
|
18
|
+
*/
|
|
19
|
+
function getOrParseTree(parser, filePath, ctx, store) {
|
|
20
|
+
const cached = (ctx.treeCache?.get(filePath) ?? store?.get(filePath));
|
|
21
|
+
if (cached !== undefined)
|
|
22
|
+
return cached;
|
|
23
|
+
const sourceText = ctx.fileContents.get(filePath);
|
|
24
|
+
if (sourceText === undefined)
|
|
25
|
+
return null;
|
|
26
|
+
let tree;
|
|
27
|
+
try {
|
|
28
|
+
tree = parseSourceSafe(parser, sourceText, undefined, {
|
|
29
|
+
bufferSize: getTreeSitterBufferSize(sourceText),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (err instanceof ParseTimeoutError) {
|
|
34
|
+
logger.warn({ file: filePath }, 'rust range-binding: parse timed out, skipping file');
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
store?.set(filePath, tree);
|
|
40
|
+
return tree;
|
|
41
|
+
}
|
|
42
|
+
export function populateRustRangeBindings(parsedFiles, indexes, ctx) {
|
|
16
43
|
const parser = getRustParser();
|
|
17
44
|
const allReturnTypes = new Map();
|
|
45
|
+
const ambiguousReturnTypes = new Set();
|
|
18
46
|
const allFieldTypes = new Map();
|
|
47
|
+
const ambiguousFieldTypes = new Set();
|
|
48
|
+
// Per-defining-file, un-collapsed, FULL-generic return/field types. When a
|
|
49
|
+
// bare name is ambiguous (#2514) but the call site's `use` import pins a
|
|
50
|
+
// single definition, we resolve that definition's file here and read its
|
|
51
|
+
// untruncated type so a generic `Vec<Repo>` element type survives (#2514
|
|
52
|
+
// follow-up: import-disambiguated duplicates resolve like the compiler).
|
|
53
|
+
const returnTypeByFile = new Map();
|
|
54
|
+
const fieldTypeByFile = new Map();
|
|
55
|
+
// Parse each file once and reuse across both loops when the workspace fits
|
|
56
|
+
// the byte budget; otherwise re-parse per loop to bound RSS (see helper).
|
|
57
|
+
let totalSourceBytes = 0;
|
|
58
|
+
for (const parsed of parsedFiles) {
|
|
59
|
+
totalSourceBytes += ctx.fileContents.get(parsed.filePath)?.length ?? 0;
|
|
60
|
+
}
|
|
61
|
+
const treeStore = totalSourceBytes <= TREE_REUSE_SOURCE_BUDGET_BYTES ? new Map() : undefined;
|
|
19
62
|
for (const parsed of parsedFiles) {
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
63
|
+
const tree = getOrParseTree(parser, parsed.filePath, ctx, treeStore);
|
|
64
|
+
if (tree === null)
|
|
22
65
|
continue;
|
|
23
|
-
const cachedTree = ctx.treeCache?.get(parsed.filePath);
|
|
24
|
-
let tree;
|
|
25
|
-
if (cachedTree !== undefined) {
|
|
26
|
-
tree = cachedTree;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
try {
|
|
30
|
-
tree = parseSourceSafe(parser, sourceText, undefined, {
|
|
31
|
-
bufferSize: getTreeSitterBufferSize(sourceText),
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
if (err instanceof ParseTimeoutError) {
|
|
36
|
-
logger.warn({ file: parsed.filePath }, 'rust range-binding: parse timed out, skipping file');
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
throw err;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
66
|
for (const fn of tree.rootNode.descendantsOfType('function_item')) {
|
|
43
67
|
const nameNode = fn.childForFieldName('name');
|
|
44
68
|
const retType = fn.childForFieldName('return_type');
|
|
45
69
|
if (nameNode !== null && retType !== null) {
|
|
46
70
|
const name = nameNode.text;
|
|
71
|
+
// Ambiguity is a latch, not a toggle: once a name has two or more
|
|
72
|
+
// workspace definitions it stays ambiguous for the rest of the
|
|
73
|
+
// prepass, regardless of duplicate count or file order (#2514).
|
|
47
74
|
if (allReturnTypes.has(name)) {
|
|
48
75
|
allReturnTypes.delete(name);
|
|
76
|
+
ambiguousReturnTypes.add(name);
|
|
49
77
|
}
|
|
50
|
-
else {
|
|
78
|
+
else if (!ambiguousReturnTypes.has(name)) {
|
|
51
79
|
allReturnTypes.set(name, retType.text);
|
|
52
80
|
}
|
|
81
|
+
// Full-generic record per defining file for import-disambiguated lookup.
|
|
82
|
+
recordByFile(returnTypeByFile, parsed.filePath, name, retType.text);
|
|
53
83
|
}
|
|
54
84
|
}
|
|
55
85
|
for (const structNode of tree.rootNode.descendantsOfType('struct_item')) {
|
|
@@ -67,47 +97,37 @@ export function populateRustRangeBindings(parsedFiles, _indexes, ctx) {
|
|
|
67
97
|
}
|
|
68
98
|
if (fields.size > 0) {
|
|
69
99
|
const name = nameNode.text;
|
|
100
|
+
// Same ambiguity latch as return types (#2514): a third same-named
|
|
101
|
+
// struct must not restore a resolvable global field map.
|
|
70
102
|
if (allFieldTypes.has(name)) {
|
|
71
103
|
allFieldTypes.delete(name);
|
|
104
|
+
ambiguousFieldTypes.add(name);
|
|
72
105
|
}
|
|
73
|
-
else {
|
|
106
|
+
else if (!ambiguousFieldTypes.has(name)) {
|
|
74
107
|
allFieldTypes.set(name, fields);
|
|
75
108
|
}
|
|
109
|
+
// Full-generic record per defining file for import-disambiguated lookup.
|
|
110
|
+
recordByFile(fieldTypeByFile, parsed.filePath, name, fields);
|
|
76
111
|
}
|
|
77
112
|
}
|
|
113
|
+
// Publish per-type member bindings for the whole workspace before resolving
|
|
114
|
+
// assignments. Otherwise an importer processed before its defining file can
|
|
115
|
+
// miss a field or identity-method type solely because of file order.
|
|
116
|
+
const scopeMap = new Map(parsed.scopes.map((scope) => [scope.id, scope]));
|
|
117
|
+
processFieldTypeBindings(tree.rootNode, parsed, scopeMap);
|
|
118
|
+
processIdentityMethodBindings(parsed);
|
|
78
119
|
}
|
|
79
120
|
for (const parsed of parsedFiles) {
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
121
|
+
const tree = getOrParseTree(parser, parsed.filePath, ctx, treeStore);
|
|
122
|
+
if (tree === null)
|
|
82
123
|
continue;
|
|
83
|
-
const cachedTree = ctx.treeCache?.get(parsed.filePath);
|
|
84
|
-
let tree;
|
|
85
|
-
if (cachedTree !== undefined) {
|
|
86
|
-
tree = cachedTree;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
try {
|
|
90
|
-
tree = parseSourceSafe(parser, sourceText, undefined, {
|
|
91
|
-
bufferSize: getTreeSitterBufferSize(sourceText),
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
if (err instanceof ParseTimeoutError) {
|
|
96
|
-
logger.warn({ file: parsed.filePath }, 'rust range-binding: parse timed out, skipping file');
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
throw err;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
124
|
const scopeMap = new Map(parsed.scopes.map((s) => [s.id, s]));
|
|
103
125
|
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
104
126
|
if (moduleScope === undefined)
|
|
105
127
|
continue;
|
|
106
|
-
|
|
107
|
-
processIdentityMethodBindings(parsed);
|
|
108
|
-
processForLoops(tree.rootNode, parsed, scopeMap, moduleScope, allReturnTypes);
|
|
128
|
+
processForLoops(tree.rootNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile);
|
|
109
129
|
processPatternBindings(tree.rootNode, parsed, scopeMap, moduleScope);
|
|
110
|
-
processStructDestructuring(tree.rootNode, parsed, scopeMap, moduleScope, allFieldTypes);
|
|
130
|
+
processStructDestructuring(tree.rootNode, parsed, scopeMap, moduleScope, allFieldTypes, indexes, fieldTypeByFile);
|
|
111
131
|
processPendingAssignments(tree.rootNode, parsed, parsedFiles, scopeMap, moduleScope, allReturnTypes);
|
|
112
132
|
}
|
|
113
133
|
}
|
|
@@ -154,7 +174,60 @@ function normalizeFieldType(text) {
|
|
|
154
174
|
t = t.slice(lastColon + 2);
|
|
155
175
|
return t.trim();
|
|
156
176
|
}
|
|
157
|
-
|
|
177
|
+
/** Get-or-create the inner map for `file` and record `name -> value`. */
|
|
178
|
+
function recordByFile(byFile, file, name, value) {
|
|
179
|
+
let inner = byFile.get(file);
|
|
180
|
+
if (inner === undefined) {
|
|
181
|
+
inner = new Map();
|
|
182
|
+
byFile.set(file, inner);
|
|
183
|
+
}
|
|
184
|
+
inner.set(name, value);
|
|
185
|
+
}
|
|
186
|
+
/** Final segment of a dot-joined qualified name (`a.make` -> `make`), or the
|
|
187
|
+
* bare name when the def carries no qualifier. */
|
|
188
|
+
function simpleName(qualifiedName, bareName) {
|
|
189
|
+
if (qualifiedName === undefined)
|
|
190
|
+
return bareName;
|
|
191
|
+
const dot = qualifiedName.lastIndexOf('.');
|
|
192
|
+
return dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1);
|
|
193
|
+
}
|
|
194
|
+
/** Distinct `(file, name)` definitions, in first-seen order. */
|
|
195
|
+
function uniqueDefs(defs) {
|
|
196
|
+
const seen = new Set();
|
|
197
|
+
const out = [];
|
|
198
|
+
for (const d of defs) {
|
|
199
|
+
const key = `${d.file} ${d.name}`;
|
|
200
|
+
if (seen.has(key))
|
|
201
|
+
continue;
|
|
202
|
+
seen.add(key);
|
|
203
|
+
out.push(d);
|
|
204
|
+
}
|
|
205
|
+
return out;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Resolve `name` at `moduleScope` to the value recorded in `byFile` for the one
|
|
209
|
+
* definition visible here, or null when zero or several are visible (which
|
|
210
|
+
* keeps the #2514 ambiguity latch). Mirrors Rust name resolution: explicit
|
|
211
|
+
* `use`/re-export imports and local defs shadow `use x::*` globs, so a glob is
|
|
212
|
+
* consulted only when no explicit binding names `name`, and even then only when
|
|
213
|
+
* exactly one glob-target file actually defines it.
|
|
214
|
+
*/
|
|
215
|
+
function resolveImportedDef(name, moduleScope, indexes, byFile) {
|
|
216
|
+
const explicit = uniqueDefs(lookupBindingsAt(moduleScope.id, name, indexes)
|
|
217
|
+
.filter((r) => r.origin === 'import' || r.origin === 'reexport' || r.origin === 'local')
|
|
218
|
+
.map((r) => ({ file: r.def.filePath, name: simpleName(r.def.qualifiedName, name) })));
|
|
219
|
+
const defs = explicit.length > 0
|
|
220
|
+
? explicit
|
|
221
|
+
: uniqueDefs((indexes.imports.get(moduleScope.id) ?? [])
|
|
222
|
+
.filter((e) => e.kind === 'wildcard-expanded' &&
|
|
223
|
+
e.targetFile !== null &&
|
|
224
|
+
byFile.get(e.targetFile)?.has(name) === true)
|
|
225
|
+
.map((e) => ({ file: e.targetFile, name })));
|
|
226
|
+
if (defs.length !== 1)
|
|
227
|
+
return null;
|
|
228
|
+
return byFile.get(defs[0].file)?.get(defs[0].name) ?? null;
|
|
229
|
+
}
|
|
230
|
+
function processForLoops(root, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile) {
|
|
158
231
|
for (const forNode of root.descendantsOfType('for_expression')) {
|
|
159
232
|
const patternNode = forNode.childForFieldName('pattern');
|
|
160
233
|
const valueNode = forNode.childForFieldName('value');
|
|
@@ -163,7 +236,7 @@ function processForLoops(root, parsed, scopeMap, moduleScope, allReturnTypes) {
|
|
|
163
236
|
const varName = extractVarName(patternNode);
|
|
164
237
|
if (varName === null)
|
|
165
238
|
continue;
|
|
166
|
-
const elementType = resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes);
|
|
239
|
+
const elementType = resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile);
|
|
167
240
|
if (elementType === null)
|
|
168
241
|
continue;
|
|
169
242
|
const targetScope = findEnclosingFunctionScope(forNode, scopeMap) ?? moduleScope;
|
|
@@ -247,7 +320,7 @@ function processTupleStructPattern(patternNode, contextNode, parsed, scopeMap, m
|
|
|
247
320
|
const targetScope = findEnclosingFunctionScope(contextNode, scopeMap) ?? moduleScope;
|
|
248
321
|
injectTypeBinding(targetScope, varName, resolvedType);
|
|
249
322
|
}
|
|
250
|
-
function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFieldTypes) {
|
|
323
|
+
function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFieldTypes, indexes, fieldTypeByFile) {
|
|
251
324
|
for (const letNode of root.descendantsOfType('let_declaration')) {
|
|
252
325
|
const patternNode = letNode.childForFieldName('pattern');
|
|
253
326
|
if (patternNode === null || patternNode.type !== 'struct_pattern')
|
|
@@ -270,7 +343,13 @@ function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFiel
|
|
|
270
343
|
continue;
|
|
271
344
|
let fieldType = lookupFieldType(typeName, fieldName, parsed, scopeMap, moduleScope);
|
|
272
345
|
if (fieldType === null) {
|
|
273
|
-
fieldType = allFieldTypes
|
|
346
|
+
fieldType = allFieldTypes.get(typeName)?.get(fieldName) ?? null;
|
|
347
|
+
}
|
|
348
|
+
if (fieldType === null) {
|
|
349
|
+
// Import-disambiguated duplicate struct (#2514 follow-up): the global
|
|
350
|
+
// field map is ambiguous, but a `use` import pins one definition.
|
|
351
|
+
const fields = resolveImportedDef(typeName, moduleScope, indexes, fieldTypeByFile);
|
|
352
|
+
fieldType = fields?.get(fieldName) ?? null;
|
|
274
353
|
}
|
|
275
354
|
if (fieldType !== null) {
|
|
276
355
|
injectTypeBinding(targetScope, fieldName, fieldType);
|
|
@@ -363,7 +442,7 @@ function processPendingAssignments(root, parsed, allParsedFiles, scopeMap, modul
|
|
|
363
442
|
}
|
|
364
443
|
}
|
|
365
444
|
}
|
|
366
|
-
function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes) {
|
|
445
|
+
function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile) {
|
|
367
446
|
let iterableNode = valueNode;
|
|
368
447
|
if (iterableNode.type === 'reference_expression') {
|
|
369
448
|
iterableNode = iterableNode.firstNamedChild ?? iterableNode;
|
|
@@ -386,12 +465,19 @@ function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, al
|
|
|
386
465
|
}
|
|
387
466
|
}
|
|
388
467
|
if (func.type === 'identifier') {
|
|
389
|
-
const crossFileReturn = allReturnTypes
|
|
468
|
+
const crossFileReturn = allReturnTypes.get(func.text);
|
|
390
469
|
if (crossFileReturn !== undefined)
|
|
391
470
|
return unwrapGeneric(crossFileReturn);
|
|
392
471
|
const rawReturn = lookupRawFunctionReturnType(func.text, valueNode);
|
|
393
472
|
if (rawReturn !== null)
|
|
394
473
|
return unwrapGeneric(rawReturn);
|
|
474
|
+
// Import-disambiguated duplicate: the bare-name map is ambiguous (#2514)
|
|
475
|
+
// but a `use` import pins one definition. Read its FULL return type
|
|
476
|
+
// here, BEFORE the scope-binding lookup below, because that binding is
|
|
477
|
+
// generic-truncated (`Vec<Repo>` becomes `Vec`), losing the element.
|
|
478
|
+
const importedReturn = resolveImportedDef(func.text, moduleScope, indexes, returnTypeByFile);
|
|
479
|
+
if (importedReturn !== null)
|
|
480
|
+
return unwrapGeneric(importedReturn);
|
|
395
481
|
const returnType = lookupReturnTypeInScopes(func.text, parsed, scopeMap, moduleScope);
|
|
396
482
|
if (returnType !== null)
|
|
397
483
|
return unwrapGeneric(returnType);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
2
2
|
import { buildMro, defaultLinearize } from '../../scope-resolution/passes/mro.js';
|
|
3
|
+
import { indexOnlyElementType } from '../../type-extractors/shared.js';
|
|
3
4
|
import { rustProvider } from '../rust.js';
|
|
4
5
|
import { rustArityCompatibility, rustMergeBindings, resolveRustImportTarget } from './index.js';
|
|
5
6
|
import { populateRustOwners } from './method-owners.js';
|
|
7
|
+
import { resolveRustQualifiedFreeCall } from './qualified-call.js';
|
|
6
8
|
import { populateRustRangeBindings } from './range-binding.js';
|
|
7
9
|
import { isClassLike, findClassBindingInScope, resolveAmbiguousInheritanceBaseViaImports, } from '../../scope-resolution/scope/walkers.js';
|
|
8
10
|
import { resolveDefGraphId } from '../../scope-resolution/graph-bridge/ids.js';
|
|
@@ -37,7 +39,7 @@ import { generateId } from '../../../../lib/utils.js';
|
|
|
37
39
|
* set from existing IMPLEMENTS edges so a worker-mode legacy emission (or a
|
|
38
40
|
* re-resolution) is not duplicated.
|
|
39
41
|
*/
|
|
40
|
-
function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes) {
|
|
42
|
+
function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes, recordTypeArguments) {
|
|
41
43
|
if (scopes === undefined)
|
|
42
44
|
return;
|
|
43
45
|
const emitted = new Set();
|
|
@@ -64,6 +66,13 @@ function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes) {
|
|
|
64
66
|
const traitGraphId = resolveDefGraphId(traitDef.filePath, traitDef, nodeLookup);
|
|
65
67
|
if (structGraphId === undefined || traitGraphId === undefined)
|
|
66
68
|
continue;
|
|
69
|
+
// The instantiation the impl was written with — `impl Validator<String>
|
|
70
|
+
// for V` (#2912). Recorded against THIS edge's ids, not the pre-pass's:
|
|
71
|
+
// the pre-pass sources its edge from the enclosing def, and interface
|
|
72
|
+
// dispatch crosses the corrected one emitted here.
|
|
73
|
+
if (site.typeArguments !== undefined) {
|
|
74
|
+
recordTypeArguments?.(structGraphId, traitGraphId, site.typeArguments);
|
|
75
|
+
}
|
|
67
76
|
const edgeKey = `${structGraphId}->${traitGraphId}`;
|
|
68
77
|
if (emitted.has(edgeKey))
|
|
69
78
|
continue;
|
|
@@ -124,10 +133,20 @@ export const rustScopeResolver = {
|
|
|
124
133
|
resolveImportTarget: (targetRaw, fromFile, allFilePaths, resolutionConfig) => resolveRustImportTarget(targetRaw, fromFile, allFilePaths, resolutionConfig),
|
|
125
134
|
mergeBindings: (existing, incoming, scopeId) => rustMergeBindings(existing, incoming, scopeId),
|
|
126
135
|
arityCompatibility: (callsite, def) => rustArityCompatibility(def, callsite),
|
|
136
|
+
resolveQualifiedFreeCall: (site, callerParsed, scopes, workspaceIndex, allFilePaths) => resolveRustQualifiedFreeCall(site, callerParsed, scopes, workspaceIndex, allFilePaths),
|
|
127
137
|
buildMro: (graph, parsedFiles, nodeLookup) => buildRustMro(graph, parsedFiles, nodeLookup),
|
|
128
|
-
emitHeritageEdges: (graph, parsedFiles, nodeLookup, scopes) => emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes),
|
|
138
|
+
emitHeritageEdges: (graph, parsedFiles, nodeLookup, scopes, recordTypeArguments) => emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes, recordTypeArguments),
|
|
129
139
|
populateOwners: (parsed) => populateRustOwners(parsed),
|
|
130
140
|
isSuperReceiver: () => false,
|
|
141
|
+
// Subscript route only — Rust has no property-style collection view; `.iter()`
|
|
142
|
+
// / `.values()` are method calls the compound resolver's call branch handles.
|
|
143
|
+
//
|
|
144
|
+
// Fed the annotation AS WRITTEN (`&Vec<User>`, `HashMap<String, User>`), which
|
|
145
|
+
// `normalizeRustTypeName` had already collapsed to `User` by the time the fold
|
|
146
|
+
// saw it. Returning `undefined` is the answer "not a container" and makes the
|
|
147
|
+
// index step decline rather than fold onto the receiver's own class — an
|
|
148
|
+
// `Index`-impl type would otherwise take its own members as the element's.
|
|
149
|
+
elementTypeOf: indexOnlyElementType,
|
|
131
150
|
populateRangeBindings: populateRustRangeBindings,
|
|
132
151
|
fieldFallbackOnMethodLookup: false,
|
|
133
152
|
hoistTypeBindingsToModule: true,
|
|
@@ -172,6 +172,23 @@ export const rustProvider = defineLanguage({
|
|
|
172
172
|
emitScopeCaptures: emitRustScopeCaptures,
|
|
173
173
|
cfgVisitor: createRustCfgVisitor(),
|
|
174
174
|
interpretImport: interpretRustImport,
|
|
175
|
+
// `use` is a compile-time path alias, not a statement that runs. Writing one
|
|
176
|
+
// inside a function body — `fn f() { use crate::m::X; }`, which is legal —
|
|
177
|
+
// narrows where the NAME is visible and defers nothing: Rust has no
|
|
178
|
+
// module-initialization order in the JS/Python sense and permits intra-crate
|
|
179
|
+
// module cycles outright. `rust/query.ts` captures `(use_declaration)` and
|
|
180
|
+
// nothing else, so this covers every import form the pipeline sees; the
|
|
181
|
+
// structural twin is C++'s `using ns::name`, exempt under the same
|
|
182
|
+
// capability. Without this the central Pass-3 position rule would tag an
|
|
183
|
+
// fn-local `use` `runsOnlyWhenCalled` and `check --cycles` would drop a
|
|
184
|
+
// cycle it is part of.
|
|
185
|
+
//
|
|
186
|
+
// Deliberately the NARROW claim — position does not defer a Rust import. It
|
|
187
|
+
// is not a claim that no Rust import can create an initialization
|
|
188
|
+
// dependency; that is a bigger semantic question (statics, `OnceLock`,
|
|
189
|
+
// `lazy_static`) which this capability does not reach and should not be read
|
|
190
|
+
// as settling. See `LanguageProvider.importsExecuteWhereWritten`.
|
|
191
|
+
importsExecuteWhereWritten: false,
|
|
175
192
|
interpretTypeBinding: interpretRustTypeBinding,
|
|
176
193
|
bindingScopeFor: rustBindingScopeFor,
|
|
177
194
|
importOwningScope: rustImportOwningScope,
|
|
@@ -35,14 +35,65 @@ import { nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../
|
|
|
35
35
|
import { splitSwiftImport } from './import-decomposer.js';
|
|
36
36
|
import { swiftQualifiedBaseTail } from './base-type.js';
|
|
37
37
|
import { computeSwiftArityMetadata } from './arity-metadata.js';
|
|
38
|
-
import { synthesizeSwiftReceiverBinding } from './receiver-binding.js';
|
|
38
|
+
import { findEnclosingTypeDeclaration, synthesizeSwiftReceiverBinding, } from './receiver-binding.js';
|
|
39
39
|
import { synthesizeSwiftSignatureBindings } from './signature-bindings.js';
|
|
40
40
|
import { getSwiftParser, getSwiftScopeQuery } from './query.js';
|
|
41
|
+
import { preprocessSwiftConditionalDirectives } from './conditional-directive-preprocess.js';
|
|
41
42
|
import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
|
|
42
43
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
43
44
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
45
|
+
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
46
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
47
|
+
/**
|
|
48
|
+
* Name of the type that lexically owns `node` — the nearest enclosing
|
|
49
|
+
* `class_declaration` (which in tree-sitter-swift is also how `struct` and
|
|
50
|
+
* `extension` parse) or `protocol_declaration`.
|
|
51
|
+
*
|
|
52
|
+
* Qualifies a method def as `<Type>.<method>` (#2807 follow-up). Swift's
|
|
53
|
+
* structure phase already keys the graph node that way (`A.run#1`), but the
|
|
54
|
+
* resolver-side def carried only `run`, and the bridge's every label-scoped key
|
|
55
|
+
* is built from the def's name — so two classes in one file each declaring
|
|
56
|
+
* `func run` fell through to the label-agnostic simple key, which is
|
|
57
|
+
* first-write-wins. The result: EVERY call in both bodies was attributed to
|
|
58
|
+
* whichever `run` registered first, which collected duplicate edges while its
|
|
59
|
+
* twin collected none. Renaming one method, or moving it to another file, made
|
|
60
|
+
* both resolve — which is what identified the collision as name-keyed and
|
|
61
|
+
* per-file rather than positional.
|
|
62
|
+
*
|
|
63
|
+
* An `extension Foo` wraps the extended type in a `user_type`, which may be
|
|
64
|
+
* qualified (`extension Outer.Inner`) or carry generic arguments
|
|
65
|
+
* (`extension Set<Int>`), so the trailing `type_identifier` is taken — the
|
|
66
|
+
* spelling has to match the owner the structure phase used to build the node id.
|
|
67
|
+
*
|
|
68
|
+
* Both halves delegate rather than re-derive: `findEnclosingTypeDeclaration`
|
|
69
|
+
* (receiver-binding.ts) decides what the enclosing type IS, so a method's owner
|
|
70
|
+
* qualifier and its `self` binding cannot disagree, and `swiftBaseTypeIdentifier`
|
|
71
|
+
* reads the name STRUCTURALLY. An earlier version split the node text on `<` and
|
|
72
|
+
* `.`, which only approximates the tree: generic arguments live in a sibling
|
|
73
|
+
* `type_arguments` node that the walk skips outright.
|
|
74
|
+
*/
|
|
75
|
+
function swiftEnclosingTypeName(node) {
|
|
76
|
+
const typeNode = findEnclosingTypeDeclaration(node);
|
|
77
|
+
if (typeNode === null)
|
|
78
|
+
return null;
|
|
79
|
+
const nameNode = typeNode.childForFieldName('name');
|
|
80
|
+
if (nameNode === null)
|
|
81
|
+
return null;
|
|
82
|
+
const tail = swiftBaseTypeIdentifier(nameNode)?.text.trim() ?? '';
|
|
83
|
+
return tail.length > 0 ? tail : null;
|
|
84
|
+
}
|
|
44
85
|
/** Declaration anchors that carry function-like arity metadata. */
|
|
45
86
|
const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.constructor'];
|
|
87
|
+
const SWIFT_CALLABLE_CAPTURE_OPTIONS = {
|
|
88
|
+
functionNodeTypes: new Set(['function_declaration', 'lambda_literal']),
|
|
89
|
+
callNodeTypes: new Set(['call_expression']),
|
|
90
|
+
parameterListNodeTypes: new Set(['value_arguments']),
|
|
91
|
+
parameterNodeTypes: new Set(['parameter']),
|
|
92
|
+
bindingNodeTypes: new Set(['property_declaration']),
|
|
93
|
+
assignmentNodeTypes: new Set(['assignment']),
|
|
94
|
+
identifierNodeTypes: new Set(['simple_identifier', 'type_identifier']),
|
|
95
|
+
extractFunctionParameters: (node) => node.namedChildren.filter((child) => child !== null && child.type === 'parameter'),
|
|
96
|
+
};
|
|
46
97
|
/** tree-sitter-swift node types that carry arity. */
|
|
47
98
|
const FUNCTION_NODE_TYPES = [
|
|
48
99
|
'function_declaration',
|
|
@@ -57,10 +108,16 @@ const RECEIVER_NODE_TYPES = [
|
|
|
57
108
|
];
|
|
58
109
|
export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
59
110
|
// Reuse the parse phase's cached Tree when available; otherwise parse.
|
|
111
|
+
// `extractParsedFile` already applies `preprocessSource` on this path, but
|
|
112
|
+
// this emitter is also called directly (benchmarks, capture goldens, the
|
|
113
|
+
// scope-capture tripwire), and those callers must see the same program the
|
|
114
|
+
// pipeline does. The transform is idempotent, so applying it twice is a
|
|
115
|
+
// no-op; it is length-preserving, so offsets still index `sourceText`.
|
|
60
116
|
let tree = cachedTree;
|
|
61
117
|
if (tree === undefined) {
|
|
62
|
-
|
|
63
|
-
|
|
118
|
+
const parseText = preprocessSwiftConditionalDirectives(sourceText);
|
|
119
|
+
tree = parseSourceSafe(getSwiftParser(), parseText, undefined, {
|
|
120
|
+
bufferSize: getTreeSitterBufferSize(parseText),
|
|
64
121
|
});
|
|
65
122
|
recordCacheMiss();
|
|
66
123
|
}
|
|
@@ -97,6 +154,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
97
154
|
continue;
|
|
98
155
|
}
|
|
99
156
|
}
|
|
157
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
158
|
+
// expression, so resolution can type it by folding over structure
|
|
159
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
160
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
161
|
+
// all leave `grouped` untouched.
|
|
162
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
100
163
|
out.push(grouped); // defensive fallback
|
|
101
164
|
continue;
|
|
102
165
|
}
|
|
@@ -144,6 +207,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
144
207
|
if (seenReadSpans.has(span))
|
|
145
208
|
continue;
|
|
146
209
|
seenReadSpans.add(span);
|
|
210
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
211
|
+
// expression, so resolution can type it by folding over structure
|
|
212
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
213
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
214
|
+
// all leave `grouped` untouched.
|
|
215
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
147
216
|
out.push(grouped);
|
|
148
217
|
continue;
|
|
149
218
|
}
|
|
@@ -191,6 +260,20 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
191
260
|
grouped['@declaration.name'] = syntheticCapture('@declaration.name', initNode, 'init');
|
|
192
261
|
}
|
|
193
262
|
}
|
|
263
|
+
// ── Qualify a method/constructor def with its owning type (#2807). ──
|
|
264
|
+
// Emitted before the `@scope.function` branch below, which pushes and
|
|
265
|
+
// `continue`s; a Swift `function_declaration` matches both patterns.
|
|
266
|
+
if (grouped['@declaration.qualified_name'] === undefined) {
|
|
267
|
+
const ownerTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
|
|
268
|
+
const declaredName = grouped['@declaration.name']?.text;
|
|
269
|
+
const declNode = ownerTag === undefined ? null : nodeMap[ownerTag];
|
|
270
|
+
if (ownerTag !== undefined && declaredName !== undefined && declNode != null) {
|
|
271
|
+
const owner = swiftEnclosingTypeName(declNode);
|
|
272
|
+
if (owner !== null) {
|
|
273
|
+
grouped['@declaration.qualified_name'] = syntheticCapture('@declaration.qualified_name', declNode, `${owner}.${declaredName}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
194
277
|
// ── @scope.function: arity + receiver + signature bindings. ──────
|
|
195
278
|
if (grouped['@scope.function'] !== undefined) {
|
|
196
279
|
const fnNodeForArity = nodeIfType(nodeMap['@scope.function'] ??
|
|
@@ -198,6 +281,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
198
281
|
nodeMap['@declaration.constructor'], ...FUNCTION_NODE_TYPES);
|
|
199
282
|
if (fnNodeForArity !== null)
|
|
200
283
|
attachArityMetadata(grouped, fnNodeForArity);
|
|
284
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
285
|
+
// expression, so resolution can type it by folding over structure
|
|
286
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
287
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
288
|
+
// all leave `grouped` untouched.
|
|
289
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
201
290
|
out.push(grouped);
|
|
202
291
|
const recvNode = nodeIfType(nodeMap['@scope.function'], ...RECEIVER_NODE_TYPES);
|
|
203
292
|
if (recvNode !== null) {
|
|
@@ -247,6 +336,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
247
336
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(countCallArguments(callNode)));
|
|
248
337
|
}
|
|
249
338
|
}
|
|
339
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
340
|
+
// expression, so resolution can type it by folding over structure
|
|
341
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
342
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
343
|
+
// all leave `grouped` untouched.
|
|
344
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
250
345
|
out.push(grouped);
|
|
251
346
|
}
|
|
252
347
|
// ── Emit inheritance references for scope-resolution EXTENDS / IMPLEMENTS ──
|
|
@@ -257,6 +352,7 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
257
352
|
// legacy heritage-capture leg (removed in #942), which the worker pipeline
|
|
258
353
|
// drops for registry-primary languages (issue #1951).
|
|
259
354
|
out.push(...synthesizeSwiftInheritanceReferences(tree.rootNode));
|
|
355
|
+
out.push(...synthesizeCallableFlowCaptures(tree.rootNode, SWIFT_CALLABLE_CAPTURE_OPTIONS));
|
|
260
356
|
return out;
|
|
261
357
|
}
|
|
262
358
|
/**
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blank nested Swift conditional-compilation directives before parsing.
|
|
3
|
+
*
|
|
4
|
+
* tree-sitter-swift 0.7.1 does not admit `directive` as a `class_body` child
|
|
5
|
+
* (`vendor/tree-sitter-swift/src/node-types.json`), so error recovery can
|
|
6
|
+
* discard the enclosing declaration. Replacing only the directive text with
|
|
7
|
+
* spaces preserves `.length`, line endings, and every declaration offset.
|
|
8
|
+
*
|
|
9
|
+
* ponytail: delete this file (and the `preprocessSource` wiring in `swift.ts`)
|
|
10
|
+
* once a vendored tree-sitter-swift release includes upstream PR #583 ("Allow
|
|
11
|
+
* #if/#elseif/#else/#endif directives inside type bodies"); see also upstream
|
|
12
|
+
* issue #298 and PR #599. `.github/vendored-grammars.json` has no `"hold"` on
|
|
13
|
+
* swift, so the bump bot will land that release on its own.
|
|
14
|
+
*
|
|
15
|
+
* A directive group is blanked only when **all** of these hold:
|
|
16
|
+
*
|
|
17
|
+
* - it opens at `braceDepth > 0` — nesting, not indentation, is what the
|
|
18
|
+
* grammar rejects; top-level directives are valid source-file members and
|
|
19
|
+
* are left intact
|
|
20
|
+
* - it is not inside a multiline string literal or a block comment — blanking
|
|
21
|
+
* a line that carries a block-comment terminator would un-terminate the
|
|
22
|
+
* comment and swallow the rest of the file, and blanking inside a literal
|
|
23
|
+
* would rewrite program data
|
|
24
|
+
* - every branch is brace-balanced. A group that splits a declaration header
|
|
25
|
+
* (`#if` … `func f() async {` … `#else` … `func f() {` … `#endif`) leaves
|
|
26
|
+
* one unmatched `{` once both branches survive, which re-parents every
|
|
27
|
+
* later top-level declaration. Such a group degrades to the pre-fix
|
|
28
|
+
* behavior instead.
|
|
29
|
+
*
|
|
30
|
+
* Known residuals, all of which degrade to "directive left in place" rather
|
|
31
|
+
* than to corrupted output: string interpolation is not parsed with full Swift
|
|
32
|
+
* expression fidelity, so a nested multiline string inside an interpolation can
|
|
33
|
+
* confuse the scanner; a bare `/…/` regex literal containing `/*` opens a
|
|
34
|
+
* phantom block comment; and a multiline extended regex literal is treated as
|
|
35
|
+
* ending at its first line.
|
|
36
|
+
*
|
|
37
|
+
* Byte length is *not* preserved when a blanked directive line carries
|
|
38
|
+
* non-ASCII trailing text (` #if os(iOS) // 日本語 🔥` is 23 UTF-16 code units
|
|
39
|
+
* either way, but shrinks from 31 UTF-8 bytes to 23). C++ sidesteps this
|
|
40
|
+
* because UE macro tokens are ASCII-only; a Swift directive line can carry any
|
|
41
|
+
* trailing comment. Per the `LanguageProvider.preprocessSource` contract this is
|
|
42
|
+
* safe only while no consumer slices the original UTF-8 bytes by `startIndex`:
|
|
43
|
+
* node-tree-sitter reports UTF-16 code-unit indices, and every in-process
|
|
44
|
+
* consumer slices the JS string, whose `.length` *is* preserved.
|
|
45
|
+
*
|
|
46
|
+
* Must stay pure and idempotent — see `LanguageProvider.preprocessSource`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function preprocessSwiftConditionalDirectives(sourceText: string): string;
|