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
|
@@ -30,25 +30,113 @@ import { computeDartArityMetadata } from './arity-metadata.js';
|
|
|
30
30
|
import { synthesizeDartReceiverBinding } from './receiver-binding.js';
|
|
31
31
|
import { synthesizeDartSignatureBindings } from './signature-bindings.js';
|
|
32
32
|
import { getDartParser, getDartScopeQuery } from './query.js';
|
|
33
|
+
import { preprocessDartExtensionTypes } from './extension-type-preprocess.js';
|
|
33
34
|
import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
|
|
34
35
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
35
36
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
36
37
|
import { encodeMarker } from '../../utils/heritage-marker.js';
|
|
37
38
|
import { DART_BUILT_INS } from './built-ins.js';
|
|
39
|
+
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
40
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
41
|
+
import { hasKeyword } from '../../field-extractors/configs/helpers.js';
|
|
42
|
+
/**
|
|
43
|
+
* `LanguageProvider.scopeOwnsReceivers` for Dart — the read side of
|
|
44
|
+
* `dartShadowedFieldsCapture`, which is where the full rationale lives.
|
|
45
|
+
*
|
|
46
|
+
* Reads the marker rather than re-deriving anything: the names were computed at
|
|
47
|
+
* capture time, where the AST is, and a `CaptureMatch` carries only
|
|
48
|
+
* name/range/text. Kept beside the emitter so the tag string has exactly one
|
|
49
|
+
* producer and one consumer, both in this file's line of sight.
|
|
50
|
+
*/
|
|
51
|
+
export function dartScopeOwnsReceivers(match) {
|
|
52
|
+
const raw = match['@receiver-owner.shadowed-fields']?.text;
|
|
53
|
+
if (raw === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
let parsed;
|
|
56
|
+
try {
|
|
57
|
+
parsed = JSON.parse(raw);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
if (!Array.isArray(parsed))
|
|
63
|
+
return undefined;
|
|
64
|
+
const names = parsed.filter((name) => typeof name === 'string' && name.length > 0);
|
|
65
|
+
return names.length > 0 ? new Set(names) : undefined;
|
|
66
|
+
}
|
|
38
67
|
const FUNCTION_DECL_TAGS = [
|
|
39
68
|
'@declaration.function',
|
|
40
69
|
'@declaration.method',
|
|
41
70
|
'@declaration.constructor',
|
|
42
71
|
];
|
|
72
|
+
const DART_CALLABLE_CAPTURE_OPTIONS = {
|
|
73
|
+
functionNodeTypes: new Set(['function_signature', 'function_expression']),
|
|
74
|
+
callNodeTypes: new Set(['selector']),
|
|
75
|
+
parameterListNodeTypes: new Set(['formal_parameter_list', 'arguments']),
|
|
76
|
+
parameterNodeTypes: new Set(['formal_parameter']),
|
|
77
|
+
// `initialized_identifier` covers TOP-LEVEL `var` bindings and the second and
|
|
78
|
+
// later declarators of a multi-name local; `static_final_declaration` covers
|
|
79
|
+
// top-level `final`/`const`, which parse into a different list node entirely.
|
|
80
|
+
// Dart wraps only the FIRST local declarator in `initialized_variable_
|
|
81
|
+
// definition`, so without the other two a top-level `var f = (x) => x;`, a
|
|
82
|
+
// `final f = …`, and the `g` of `var f = …, g = …;` all emitted no flow
|
|
83
|
+
// captures at all and never resolved (#2693).
|
|
84
|
+
bindingNodeTypes: new Set([
|
|
85
|
+
'initialized_variable_definition',
|
|
86
|
+
'initialized_identifier',
|
|
87
|
+
'static_final_declaration',
|
|
88
|
+
]),
|
|
89
|
+
assignmentNodeTypes: new Set(['assignment_expression']),
|
|
90
|
+
identifierNodeTypes: new Set(['identifier', 'type_identifier']),
|
|
91
|
+
// `initialized_identifier` and `static_final_declaration` are FIELDLESS, so
|
|
92
|
+
// the shared field-based fallback (`left`/`name`/`value`/…) decomposes
|
|
93
|
+
// nothing and those bindings produced no flow facts at all — the same shape
|
|
94
|
+
// as Kotlin's fieldless `assignment` node. Positional: first named child is
|
|
95
|
+
// the bound name, last is the initializer.
|
|
96
|
+
// `initialized_variable_definition` carries real `name:` / `value:` fields,
|
|
97
|
+
// so it is left to the shared path by returning undefined.
|
|
98
|
+
extractAssignment: (node) => {
|
|
99
|
+
if (node.type !== 'initialized_identifier' && node.type !== 'static_final_declaration') {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const named = node.namedChildren.filter((child) => child !== null);
|
|
103
|
+
if (named.length < 2)
|
|
104
|
+
return undefined;
|
|
105
|
+
return { destination: named[0], source: named[named.length - 1] };
|
|
106
|
+
},
|
|
107
|
+
lexicalFunctionOwner: (node) => dartLexicalFunctionOwner(node),
|
|
108
|
+
isCallNode: (node) => node.namedChild(0)?.type === 'argument_part',
|
|
109
|
+
extractCallCallee: (node) => dartCallableCallee(node) ?? undefined,
|
|
110
|
+
callSiteNode: (node) => dartCallableCallee(node) ?? undefined,
|
|
111
|
+
callableProtocolMethods: new Set(['call']),
|
|
112
|
+
};
|
|
113
|
+
function dartLexicalFunctionOwner(input) {
|
|
114
|
+
let node = input;
|
|
115
|
+
while (node !== null) {
|
|
116
|
+
if (node.type === 'function_signature' || node.type === 'function_expression')
|
|
117
|
+
return node;
|
|
118
|
+
if (node.type === 'function_body') {
|
|
119
|
+
const signature = node.previousNamedSibling;
|
|
120
|
+
if (signature?.type === 'function_signature')
|
|
121
|
+
return signature;
|
|
122
|
+
}
|
|
123
|
+
node = node.parent;
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
43
127
|
export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
128
|
+
// Idempotent re-application: `extractParsedFile` already preprocesses, but
|
|
129
|
+
// direct emitter callers (benchmarks, capture goldens) must see the same
|
|
130
|
+
// program the pipeline does.
|
|
131
|
+
const parseText = preprocessDartExtensionTypes(sourceText);
|
|
44
132
|
let tree;
|
|
45
133
|
if (cachedTree !== undefined && cachedTree !== null) {
|
|
46
134
|
tree = cachedTree;
|
|
47
135
|
recordCacheHit();
|
|
48
136
|
}
|
|
49
137
|
else {
|
|
50
|
-
tree = parseSourceSafe(getDartParser(),
|
|
51
|
-
bufferSize: getTreeSitterBufferSize(
|
|
138
|
+
tree = parseSourceSafe(getDartParser(), parseText, undefined, {
|
|
139
|
+
bufferSize: getTreeSitterBufferSize(parseText),
|
|
52
140
|
});
|
|
53
141
|
recordCacheMiss();
|
|
54
142
|
}
|
|
@@ -61,6 +149,12 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
61
149
|
// `buildScopeTree` throw and the whole file get dropped. Dedup function-like
|
|
62
150
|
// declarations by their statement node so each is emitted exactly once.
|
|
63
151
|
const seenFnDeclNodes = new Set();
|
|
152
|
+
// Shared, per-file. Pass A (the receiver mask below) and Pass B
|
|
153
|
+
// (`emitDartFieldAssignmentBindings`) ask the SAME two questions of the same
|
|
154
|
+
// nodes — "what does this class declare as a field" and "what does this
|
|
155
|
+
// member body bind" — so the memo makes each answer cost one walk per node
|
|
156
|
+
// for the whole file instead of one per consumer.
|
|
157
|
+
const memo = { fieldsByClassBody: new Map(), shadowsByBody: new Map() };
|
|
64
158
|
// ── Pass A: query-driven scopes / declarations / imports ────────────────
|
|
65
159
|
for (const match of getDartScopeQuery().matches(root)) {
|
|
66
160
|
const grouped = {};
|
|
@@ -81,9 +175,23 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
81
175
|
seenFnDeclNodes.add(declKey);
|
|
82
176
|
const bodyNode = findFunctionBody(declNode);
|
|
83
177
|
attachArityMetadata(grouped, declNode);
|
|
178
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
179
|
+
// expression, so resolution can type it by folding over structure
|
|
180
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
181
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
182
|
+
// all leave `grouped` untouched.
|
|
183
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
84
184
|
out.push(grouped);
|
|
85
185
|
if (bodyNode !== null) {
|
|
86
|
-
|
|
186
|
+
// The READ-side half of the bare-name field discipline (#2807 review).
|
|
187
|
+
// Rides the SAME synthesized match as `@scope.function` so the mask
|
|
188
|
+
// lands on this member's Function scope; outside the `@scope.`
|
|
189
|
+
// namespace so `anchorCaptureFor` cannot mistake it for the anchor.
|
|
190
|
+
const mask = dartShadowedFieldsCapture(bodyNode, memo);
|
|
191
|
+
out.push({
|
|
192
|
+
'@scope.function': spanCapture('@scope.function', declNode, bodyNode),
|
|
193
|
+
...(mask === undefined ? {} : { '@receiver-owner.shadowed-fields': mask }),
|
|
194
|
+
});
|
|
87
195
|
for (const cm of synthesizeDartReceiverBinding(declNode, bodyNode))
|
|
88
196
|
out.push(cm);
|
|
89
197
|
}
|
|
@@ -101,6 +209,12 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
101
209
|
if (fieldType !== null) {
|
|
102
210
|
grouped['@declaration.field-type'] = syntheticCapture('@declaration.field-type', propNode, fieldType);
|
|
103
211
|
}
|
|
212
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
213
|
+
// expression, so resolution can type it by folding over structure
|
|
214
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
215
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
216
|
+
// all leave `grouped` untouched.
|
|
217
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
104
218
|
out.push(grouped);
|
|
105
219
|
if (fieldType !== null) {
|
|
106
220
|
out.push({
|
|
@@ -109,8 +223,28 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
109
223
|
'@type-binding.type': syntheticCapture('@type-binding.type', propNode, fieldType),
|
|
110
224
|
});
|
|
111
225
|
}
|
|
226
|
+
else {
|
|
227
|
+
// No written type, so the field's type comes from the constructor its
|
|
228
|
+
// initializer calls (#2807). `constructor-inferred` is the weakest
|
|
229
|
+
// source, and the annotated branch above already returned, so an
|
|
230
|
+
// annotated field is untouched either way.
|
|
231
|
+
const callee = dartFieldConstructorCallee(nodeMap['@declaration.name']);
|
|
232
|
+
if (callee !== null) {
|
|
233
|
+
out.push({
|
|
234
|
+
'@type-binding.constructor': nodeToCapture('@type-binding.constructor', propNode),
|
|
235
|
+
'@type-binding.name': syntheticCapture('@type-binding.name', propNode, fieldName),
|
|
236
|
+
'@type-binding.type': syntheticCapture('@type-binding.type', propNode, callee.text),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
112
240
|
continue;
|
|
113
241
|
}
|
|
242
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
243
|
+
// expression, so resolution can type it by folding over structure
|
|
244
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
245
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
246
|
+
// all leave `grouped` untouched.
|
|
247
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
114
248
|
out.push(grouped);
|
|
115
249
|
}
|
|
116
250
|
// ── Pass B: tree-walked references, type inference, heritage ────────────
|
|
@@ -130,11 +264,28 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
130
264
|
}
|
|
131
265
|
if (node.type === 'class_definition') {
|
|
132
266
|
emitHeritage(node, out);
|
|
267
|
+
emitDartFieldAssignmentBindings(node, out, memo);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (node.type === 'extension_declaration') {
|
|
271
|
+
emitExtensionImplementsHeritage(node, out);
|
|
133
272
|
return;
|
|
134
273
|
}
|
|
135
274
|
});
|
|
275
|
+
out.push(...synthesizeCallableFlowCaptures(root, DART_CALLABLE_CAPTURE_OPTIONS));
|
|
136
276
|
return out;
|
|
137
277
|
}
|
|
278
|
+
function dartCallableCallee(selector) {
|
|
279
|
+
if (selector.namedChild(0)?.type !== 'argument_part')
|
|
280
|
+
return null;
|
|
281
|
+
const previous = selector.previousNamedSibling;
|
|
282
|
+
if (previous?.type === 'identifier')
|
|
283
|
+
return previous;
|
|
284
|
+
if (previous?.type !== 'selector')
|
|
285
|
+
return null;
|
|
286
|
+
const inner = previous.namedChild(0);
|
|
287
|
+
return inner !== null && ASSIGNABLE_SELECTORS.has(inner.type) ? selectorName(inner) : null;
|
|
288
|
+
}
|
|
138
289
|
// ─── Function scope synthesis ───────────────────────────────────────────────
|
|
139
290
|
/**
|
|
140
291
|
* The sibling `function_body` of a declaration, or null (abstract/bodyless).
|
|
@@ -149,6 +300,15 @@ export function emitDartScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
149
300
|
* nodes are unaffected.
|
|
150
301
|
*/
|
|
151
302
|
function findFunctionBody(declNode) {
|
|
303
|
+
// A closure literal carries its body as a CHILD (function_expression_body),
|
|
304
|
+
// unlike a Dart declaration whose body is the next named SIBLING. Without
|
|
305
|
+
// this branch the caller synthesizes no @scope.function for a closure at all,
|
|
306
|
+
// so a closure binding has no scope to own its callable def and can never be
|
|
307
|
+
// a call SOURCE (#2699 S4 — this is why Dart alone showed zero child scopes).
|
|
308
|
+
if (declNode.type === 'function_expression') {
|
|
309
|
+
const body = declNode.namedChildren.find((c) => c.type === 'function_expression_body');
|
|
310
|
+
return body ?? null;
|
|
311
|
+
}
|
|
152
312
|
const node = declNode.parent !== null && declNode.parent.type === 'method_signature'
|
|
153
313
|
? declNode.parent
|
|
154
314
|
: declNode;
|
|
@@ -351,6 +511,22 @@ function emitCascadeReference(cascade, out) {
|
|
|
351
511
|
});
|
|
352
512
|
}
|
|
353
513
|
// ─── Local-variable constructor / call-result type inference ────────────────
|
|
514
|
+
/**
|
|
515
|
+
* Is `node` the callee of a construction / free call written directly at this
|
|
516
|
+
* position — a bare identifier whose next named sibling is a `selector`
|
|
517
|
+
* carrying an `argument_part` (`Outer()`)?
|
|
518
|
+
*
|
|
519
|
+
* Dart has no `new` keyword, so a constructor call and a free call are the same
|
|
520
|
+
* shape; the resolver decides which by looking the name up. Anything else — a
|
|
521
|
+
* literal, a member call, an index — is NOT this shape and is left alone rather
|
|
522
|
+
* than guessed at.
|
|
523
|
+
*/
|
|
524
|
+
function isDirectConstruction(node) {
|
|
525
|
+
if (node === null || node.type !== 'identifier')
|
|
526
|
+
return false;
|
|
527
|
+
const next = node.nextNamedSibling;
|
|
528
|
+
return next !== null && next.type === 'selector' && next.namedChild(0)?.type === 'argument_part';
|
|
529
|
+
}
|
|
354
530
|
/** Find the callee identifier of a `var x = Callee(…)` / `await Callee(…)`
|
|
355
531
|
* initializer (a direct free-call / constructor); returns null for member
|
|
356
532
|
* calls or non-call values. */
|
|
@@ -359,11 +535,7 @@ function findDirectCallValue(initVarDef) {
|
|
|
359
535
|
if (firstValue === null)
|
|
360
536
|
return null;
|
|
361
537
|
if (firstValue.type === 'identifier') {
|
|
362
|
-
|
|
363
|
-
if (next !== null && next.type === 'selector' && next.namedChild(0)?.type === 'argument_part') {
|
|
364
|
-
return firstValue;
|
|
365
|
-
}
|
|
366
|
-
return null;
|
|
538
|
+
return isDirectConstruction(firstValue) ? firstValue : null;
|
|
367
539
|
}
|
|
368
540
|
if (firstValue.type === 'unary_expression' || firstValue.type === 'await_expression') {
|
|
369
541
|
let aw = firstValue;
|
|
@@ -374,19 +546,37 @@ function findDirectCallValue(initVarDef) {
|
|
|
374
546
|
aw = inner;
|
|
375
547
|
}
|
|
376
548
|
if (aw.type === 'await_expression') {
|
|
549
|
+
// `namedChild(0)` is the awaited callee; its next named sibling is
|
|
550
|
+
// `namedChild(1)`, so `isDirectConstruction` asks exactly the same
|
|
551
|
+
// question this branch used to spell out.
|
|
377
552
|
const id = aw.namedChild(0);
|
|
378
|
-
|
|
379
|
-
if (id !== null &&
|
|
380
|
-
id.type === 'identifier' &&
|
|
381
|
-
sel !== null &&
|
|
382
|
-
sel.type === 'selector' &&
|
|
383
|
-
sel.namedChild(0)?.type === 'argument_part') {
|
|
553
|
+
if (isDirectConstruction(id))
|
|
384
554
|
return id;
|
|
385
|
-
}
|
|
386
555
|
}
|
|
387
556
|
}
|
|
388
557
|
return null;
|
|
389
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* Callee identifier of a class field initialized by a direct constructor call —
|
|
561
|
+
* `var b = Outer();` / `final b = Outer();` — or `null` for anything else.
|
|
562
|
+
*
|
|
563
|
+
* Dart spells a class field as `declaration(<keyword>, initialized_identifier_list(
|
|
564
|
+
* initialized_identifier))`, NOT the `initialized_variable_definition` that
|
|
565
|
+
* `emitVarTypeBinding` handles — that is the LOCAL form. So an unannotated field
|
|
566
|
+
* had no type binding and could not act as a call receiver (#2807), even though
|
|
567
|
+
* its annotated twin resolved fine.
|
|
568
|
+
*
|
|
569
|
+
* Takes the field's own `@declaration.name` node, whose next named sibling IS
|
|
570
|
+
* the initializer — `initialized_identifier(<name> <value> …)`. Deliberately NOT
|
|
571
|
+
* a search down from the `@declaration.property` node: one `declaration` can
|
|
572
|
+
* hold SEVERAL declarators (`var a = X(), b = Y();`), which the query matches
|
|
573
|
+
* once each with the same property node, so a first-descendant search hands
|
|
574
|
+
* every declarator the FIRST one's initializer and types `b` as `X`.
|
|
575
|
+
*/
|
|
576
|
+
function dartFieldConstructorCallee(nameNode) {
|
|
577
|
+
const value = nameNode.nextNamedSibling;
|
|
578
|
+
return isDirectConstruction(value) ? value : null;
|
|
579
|
+
}
|
|
390
580
|
function emitVarTypeBinding(initVarDef, out) {
|
|
391
581
|
const nameNode = initVarDef.childForFieldName('name');
|
|
392
582
|
if (nameNode === null)
|
|
@@ -401,6 +591,422 @@ function emitVarTypeBinding(initVarDef, out) {
|
|
|
401
591
|
});
|
|
402
592
|
}
|
|
403
593
|
// ─── Heritage ───────────────────────────────────────────────────────────────
|
|
594
|
+
/**
|
|
595
|
+
* Type an inference-typed field from a constructor call ASSIGNED to it —
|
|
596
|
+
* `var r; C() { r = Outer(); }` and `this.r = Outer();` (#2807).
|
|
597
|
+
*
|
|
598
|
+
* Dart is the one language here that writes a field with NO receiver prefix, so
|
|
599
|
+
* `r = Outer()` is syntactically identical to assigning a constructor-local. The
|
|
600
|
+
* discriminator is the class's own declared field set: a bare name binds only
|
|
601
|
+
* when the enclosing class declares it AND the enclosing member binds no name of
|
|
602
|
+
* its own that would shadow it (`collectDartBodyShadows` — parameters, locals,
|
|
603
|
+
* closure parameters, catch bindings, loop variables), which is exactly when
|
|
604
|
+
* Dart itself resolves `r` to the field. A `this.`-prefixed write is unambiguous
|
|
605
|
+
* and needs neither test.
|
|
606
|
+
*
|
|
607
|
+
* Emitted as `constructor-inferred`, the weakest source, so a field that also
|
|
608
|
+
* carries an annotation keeps it. The narrow `@type-binding.dart-field` marker
|
|
609
|
+
* rides the name node for `dartBindingScopeFor` to hoist on — the binding has to
|
|
610
|
+
* land on the Class scope, since the assignment sits inside a constructor's own
|
|
611
|
+
* Function scope where `typeOfMemberOnClass` never looks.
|
|
612
|
+
*/
|
|
613
|
+
function emitDartFieldAssignmentBindings(classNode, out, memo) {
|
|
614
|
+
const body = findChild(classNode, 'class_body');
|
|
615
|
+
if (body === null)
|
|
616
|
+
return;
|
|
617
|
+
// `namedChildren` allocates a fresh wrapper array on every access
|
|
618
|
+
// (node-tree-sitter), and the loop below walks the same list — read it once.
|
|
619
|
+
const members = body.namedChildren;
|
|
620
|
+
const fields = dartClassFieldNames(body, memo);
|
|
621
|
+
if (fields.size === 0)
|
|
622
|
+
return;
|
|
623
|
+
for (const member of members) {
|
|
624
|
+
if (member === null || member.type !== 'function_body')
|
|
625
|
+
continue;
|
|
626
|
+
// A STATIC member's body can never write this class's INSTANCE fields.
|
|
627
|
+
// Dart's static scope holds only the class's static members, so a bare
|
|
628
|
+
// `z = Outer()` inside `static void make()` binds a LIBRARY-level `z` (or is
|
|
629
|
+
// a compile error) — never the same-named instance field. Binding it anyway
|
|
630
|
+
// did not merely add an edge: the write landed on the Class scope at the
|
|
631
|
+
// same `constructor-inferred` strength as the constructor's own, and the
|
|
632
|
+
// `>=` tie-break in `scope-extractor` let it DISPLACE the correct type, so
|
|
633
|
+
// `z.inner()` resolved to the wrong class (#2807 review). The instance
|
|
634
|
+
// static-vs-instance collision TypeScript and JavaScript allow cannot arise
|
|
635
|
+
// in Dart — one class may not declare a static and an instance member of the
|
|
636
|
+
// same name — so this is the only shape the defect takes here.
|
|
637
|
+
//
|
|
638
|
+
// Grammar: every class-member body is a `function_body` whose PREVIOUS named
|
|
639
|
+
// sibling is a `method_signature` (method, constructor, factory, getter,
|
|
640
|
+
// setter, operator, `async`), and `static` is an anonymous direct child of
|
|
641
|
+
// that signature, ahead of the inner `*_signature` node. Detection is the
|
|
642
|
+
// shared `hasKeyword` on child TEXT, never `child.type === 'static'`, which
|
|
643
|
+
// a grammar bump silently breaks — the same rule TypeScript's
|
|
644
|
+
// `isStaticMethodThis` follows.
|
|
645
|
+
//
|
|
646
|
+
// A body whose signature cannot be read at all (a null or unexpected
|
|
647
|
+
// previous sibling — parse recovery) DECLINES to bind: staticness is
|
|
648
|
+
// undecidable there, and a missed field type costs an edge while a wrong one
|
|
649
|
+
// destroys a correct binding.
|
|
650
|
+
const signature = member.previousNamedSibling;
|
|
651
|
+
if (signature === null || signature.type !== 'method_signature')
|
|
652
|
+
continue;
|
|
653
|
+
if (hasKeyword(signature, 'static'))
|
|
654
|
+
continue;
|
|
655
|
+
// Still lazy per assignment, but the memo is now FILE-wide and shared with
|
|
656
|
+
// Pass A's read-side mask, which asks the same question of the same body.
|
|
657
|
+
// The laziness that used to matter here (87-100% of eagerly built sets were
|
|
658
|
+
// discarded, ~15% of total Dart emission) no longer buys much for a class
|
|
659
|
+
// that declares fields — Pass A has already forced those bodies — so this
|
|
660
|
+
// reads the memo rather than paying a second walk. It still short-circuits
|
|
661
|
+
// for a body whose class declares no fields, since `fields.size === 0`
|
|
662
|
+
// returned above before either pass touched it.
|
|
663
|
+
//
|
|
664
|
+
// Not visible to `bench/scope-capture`, which is a RATIO gate — this work is
|
|
665
|
+
// linear, so a constant factor leaves the ratio at 1.0.
|
|
666
|
+
const shadowsOf = () => dartBodyShadows(member, memo);
|
|
667
|
+
walkNamedTree(member, (node) => {
|
|
668
|
+
if (node.type !== 'assignment_expression')
|
|
669
|
+
return;
|
|
670
|
+
const target = node.namedChild(0);
|
|
671
|
+
if (target === null || target.type !== 'assignable_expression')
|
|
672
|
+
return;
|
|
673
|
+
const first = target.namedChild(0);
|
|
674
|
+
if (first === null)
|
|
675
|
+
return;
|
|
676
|
+
let fieldNameNode = null;
|
|
677
|
+
if (first.type === 'identifier' && target.namedChildCount === 1) {
|
|
678
|
+
// Bare `r = …`: a field only when declared here and not shadowed. The
|
|
679
|
+
// `fields` test runs FIRST so the shadow set is only ever built for a
|
|
680
|
+
// name the class actually declares.
|
|
681
|
+
if (!fields.has(first.text) || shadowsOf().has(first.text))
|
|
682
|
+
return;
|
|
683
|
+
fieldNameNode = first;
|
|
684
|
+
}
|
|
685
|
+
else if (first.type === 'this') {
|
|
686
|
+
const selector = target.namedChild(1);
|
|
687
|
+
if (selector === null || selector.type !== 'unconditional_assignable_selector')
|
|
688
|
+
return;
|
|
689
|
+
const nameNode = selector.namedChild(0);
|
|
690
|
+
if (nameNode === null || nameNode.type !== 'identifier')
|
|
691
|
+
return;
|
|
692
|
+
fieldNameNode = nameNode;
|
|
693
|
+
}
|
|
694
|
+
else {
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
if (fieldNameNode === null)
|
|
698
|
+
return;
|
|
699
|
+
// RHS must be a direct construction; anything else is left alone rather
|
|
700
|
+
// than guessed at.
|
|
701
|
+
const callee = node.namedChild(1);
|
|
702
|
+
if (!isDirectConstruction(callee))
|
|
703
|
+
return;
|
|
704
|
+
out.push({
|
|
705
|
+
'@type-binding.constructor': nodeToCapture('@type-binding.constructor', node),
|
|
706
|
+
'@type-binding.dart-field': syntheticCapture('@type-binding.dart-field', fieldNameNode, '1'),
|
|
707
|
+
'@type-binding.name': syntheticCapture('@type-binding.name', fieldNameNode, fieldNameNode.text),
|
|
708
|
+
'@type-binding.type': syntheticCapture('@type-binding.type', callee, callee.text),
|
|
709
|
+
});
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
const nodeSpanKey = (node) => `${node.startIndex}:${node.endIndex}`;
|
|
714
|
+
/**
|
|
715
|
+
* The names a `class_body` declares as INSTANCE-or-static fields, from
|
|
716
|
+
* `declaration(… initialized_identifier_list … initialized_identifier)` — the
|
|
717
|
+
* shape every stored Dart field takes, annotated or not.
|
|
718
|
+
*/
|
|
719
|
+
function dartClassFieldNames(classBody, memo) {
|
|
720
|
+
const key = nodeSpanKey(classBody);
|
|
721
|
+
const cached = memo.fieldsByClassBody.get(key);
|
|
722
|
+
if (cached !== undefined)
|
|
723
|
+
return cached;
|
|
724
|
+
const fields = new Set();
|
|
725
|
+
for (const member of classBody.namedChildren) {
|
|
726
|
+
if (member === null || member.type !== 'declaration')
|
|
727
|
+
continue;
|
|
728
|
+
const list = findChild(member, 'initialized_identifier_list');
|
|
729
|
+
if (list === null)
|
|
730
|
+
continue;
|
|
731
|
+
for (const init of list.namedChildren) {
|
|
732
|
+
if (init === null || init.type !== 'initialized_identifier')
|
|
733
|
+
continue;
|
|
734
|
+
const nameNode = init.namedChild(0);
|
|
735
|
+
if (nameNode !== null && nameNode.type === 'identifier')
|
|
736
|
+
fields.add(nameNode.text);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
memo.fieldsByClassBody.set(key, fields);
|
|
740
|
+
return fields;
|
|
741
|
+
}
|
|
742
|
+
function dartBodyShadows(bodyNode, memo) {
|
|
743
|
+
const key = nodeSpanKey(bodyNode);
|
|
744
|
+
const cached = memo.shadowsByBody.get(key);
|
|
745
|
+
if (cached !== undefined)
|
|
746
|
+
return cached;
|
|
747
|
+
const shadows = collectDartBodyShadows(bodyNode);
|
|
748
|
+
memo.shadowsByBody.set(key, shadows);
|
|
749
|
+
return shadows;
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* The READ half of the bare-name field discipline: the field names a member
|
|
753
|
+
* body REBINDS, published on that member's Function scope as
|
|
754
|
+
* `Scope.ownsReceivers` (#2701) so the receiver walk stops there instead of
|
|
755
|
+
* reaching the Class scope (#2807 review).
|
|
756
|
+
*
|
|
757
|
+
* `emitDartFieldAssignmentBindings` above declines to WRITE a binding for a name
|
|
758
|
+
* the body shadows, but the shadow set gated writes only. A bare-name READ of a
|
|
759
|
+
* shadowing binder the resolver cannot type — `for (final conn in xs) {
|
|
760
|
+
* conn.inner(); }`, where the element type of `xs` is not modelled — therefore
|
|
761
|
+
* walked straight past the local and hit the class field binding this same
|
|
762
|
+
* feature mints, resolving `conn.inner()` to the CONSTRUCTOR's type. That turns
|
|
763
|
+
* "no edge" into a WRONG edge, the one failure mode
|
|
764
|
+
* `scope-resolution/passes/compound-receiver.ts` says must never happen, and it
|
|
765
|
+
* was introduced by the write side rather than pre-existing: delete the
|
|
766
|
+
* constructor and the same read emits nothing.
|
|
767
|
+
*
|
|
768
|
+
* `ownsReceivers` is the right primitive because the walk consults
|
|
769
|
+
* `typeBindings` FIRST at every scope (`scope/walkers.ts`) and only then honours
|
|
770
|
+
* the mask. A shadow the resolver CAN type still wins — an annotated parameter
|
|
771
|
+
* `void probe(Beta conn)` keeps `Beta`, because
|
|
772
|
+
* `synthesizeDartSignatureBindings` anchors parameter bindings on this same
|
|
773
|
+
* body node, so they land on this same Function scope. The mask only fires
|
|
774
|
+
* where the alternative was a fabricated type.
|
|
775
|
+
*
|
|
776
|
+
* ── SCOPE OF THE MASK, AND ITS ACCEPTED COSTS ────────────────────────────────
|
|
777
|
+
*
|
|
778
|
+
* `shadows ∩ fields`, and nothing wider. Three consequences are taken knowingly
|
|
779
|
+
* rather than hidden:
|
|
780
|
+
*
|
|
781
|
+
* 1. NOT every locally bound name is masked — only ones the enclosing class
|
|
782
|
+
* also declares as a field. A library-level `var logger = Logger();`
|
|
783
|
+
* shadowed by a loop variable of the same name still resolves against the
|
|
784
|
+
* library binding and can still produce the wrong edge. That is the general
|
|
785
|
+
* form of the same defect and arguably the more correct fix, but it changes
|
|
786
|
+
* resolution for code this feature never touched; it is recorded here as a
|
|
787
|
+
* known limitation rather than implemented.
|
|
788
|
+
* 2. The mask is BODY-WIDE, exactly as `collectDartBodyShadows` is on the write
|
|
789
|
+
* side. A member that binds `conn` anywhere — a nested closure, one `case`
|
|
790
|
+
* arm — masks `conn` for the whole member, so a read of the genuine field
|
|
791
|
+
* elsewhere in that member loses its edge. Deliberate symmetry: the write
|
|
792
|
+
* side already declines body-wide, and losing an edge is the error this
|
|
793
|
+
* whole line of work chooses over inventing one.
|
|
794
|
+
* 3. `fields` is EVERY field the class declares, not only the ones the
|
|
795
|
+
* constructor-write feature types. An ANNOTATED field shadowed by a binder
|
|
796
|
+
* is masked too, so this reaches resolution that predates #2807 — and it is
|
|
797
|
+
* meant to: which name a body's bare read refers to is a fact about Dart, not
|
|
798
|
+
* about how the field acquired its type. `mixin` bodies are reached for the
|
|
799
|
+
* same reason (the grammar gives a mixin a `class_body` as well), even though
|
|
800
|
+
* `emitDartFieldAssignmentBindings` mints nothing for them. `extension`
|
|
801
|
+
* bodies are a different node (`extension_body`) and are left alone.
|
|
802
|
+
*
|
|
803
|
+
* Returns `undefined` — not an empty marker — when nothing is masked, so the
|
|
804
|
+
* emitted capture set is unchanged for every body that does not shadow a field.
|
|
805
|
+
* Names are sorted so the capture text (and every fingerprint over it) is
|
|
806
|
+
* order-stable.
|
|
807
|
+
*/
|
|
808
|
+
function dartShadowedFieldsCapture(bodyNode, memo) {
|
|
809
|
+
// Only a CLASS-MEMBER body can shadow a field: `function_body` whose parent is
|
|
810
|
+
// the `class_body`. A closure's `function_expression_body` and a top-level
|
|
811
|
+
// function are both excluded, and neither needs the mask — a closure's binders
|
|
812
|
+
// are already in its enclosing member's body-wide shadow set, and the walk
|
|
813
|
+
// passes through the enclosing member's Function scope on its way out.
|
|
814
|
+
if (bodyNode.type !== 'function_body')
|
|
815
|
+
return undefined;
|
|
816
|
+
const classBody = bodyNode.parent;
|
|
817
|
+
if (classBody === null || classBody.type !== 'class_body')
|
|
818
|
+
return undefined;
|
|
819
|
+
const fields = dartClassFieldNames(classBody, memo);
|
|
820
|
+
if (fields.size === 0)
|
|
821
|
+
return undefined;
|
|
822
|
+
const shadows = dartBodyShadows(bodyNode, memo);
|
|
823
|
+
if (shadows.size === 0)
|
|
824
|
+
return undefined;
|
|
825
|
+
const masked = [];
|
|
826
|
+
for (const name of fields) {
|
|
827
|
+
if (shadows.has(name))
|
|
828
|
+
masked.push(name);
|
|
829
|
+
}
|
|
830
|
+
if (masked.length === 0)
|
|
831
|
+
return undefined;
|
|
832
|
+
masked.sort();
|
|
833
|
+
return syntheticCapture('@receiver-owner.shadowed-fields', bodyNode, JSON.stringify(masked));
|
|
834
|
+
}
|
|
835
|
+
/**
|
|
836
|
+
* Every name BOUND by one class-member body — the shadow set the bare-name
|
|
837
|
+
* branch of `emitDartFieldAssignmentBindings` tests against.
|
|
838
|
+
*
|
|
839
|
+
* A local `var` is only ONE of Dart's binders, and a bare `r = Outer()` writes
|
|
840
|
+
* whichever binder wins, so a set built from local declarations alone made a
|
|
841
|
+
* write to any OTHER binder look like a field write. `void reset(Alpha r) { r =
|
|
842
|
+
* Alpha(); }` in a class with a field `r` retyped the FIELD to `Alpha` —
|
|
843
|
+
* fabricating an edge and displacing the type the constructor had correctly
|
|
844
|
+
* given it. Formal parameters are the sharpest case because they are not even
|
|
845
|
+
* inside the body: `function_body` is a SIBLING of the `method_signature` that
|
|
846
|
+
* carries them, so no walk of the body can ever see one.
|
|
847
|
+
*
|
|
848
|
+
* Dart 3 patterns are the SAME defect a second time: `var (r, n) = …;`,
|
|
849
|
+
* `if (o case Beta r)`, `case Beta r:`, `for (var (r, _) in xs)`, list / map /
|
|
850
|
+
* object / rest / cast / null-check / null-assert patterns and pattern
|
|
851
|
+
* assignments all bind `r` through node types no earlier list named, so each of
|
|
852
|
+
* them let a write retype the field. `addDartBinderName` now enumerates the
|
|
853
|
+
* pattern family from the grammar rather than from reported shapes.
|
|
854
|
+
*
|
|
855
|
+
* Deliberately over-approximate in the shadow direction. The set is body-wide
|
|
856
|
+
* (a binder in a nested closure, a `case` arm or a collection-literal element
|
|
857
|
+
* shadows for the whole body), a parameter shape whose name cannot be read
|
|
858
|
+
* contributes nothing rather than being guessed at, and a bare name inside a
|
|
859
|
+
* pattern shadows whether it binds or merely references a constant. All err
|
|
860
|
+
* toward DECLINING to bind, which is the right error: a missed field type costs
|
|
861
|
+
* an edge, a wrong one produces an edge to the wrong class and destroys a
|
|
862
|
+
* correct binding — the failure mode this whole line of work exists to avoid
|
|
863
|
+
* (see `scope-resolution/passes/compound-receiver.ts`).
|
|
864
|
+
*/
|
|
865
|
+
function collectDartBodyShadows(bodyNode) {
|
|
866
|
+
const shadows = new Set();
|
|
867
|
+
// The enclosing function's own formal parameters live OUTSIDE the body, on
|
|
868
|
+
// the `method_signature` sibling that precedes it — the shape every class
|
|
869
|
+
// member takes (method, constructor, factory, static, getter, setter,
|
|
870
|
+
// operator, `async`/`async*`).
|
|
871
|
+
const signature = bodyNode.previousNamedSibling;
|
|
872
|
+
if (signature !== null && signature.type === 'method_signature') {
|
|
873
|
+
walkNamedTree(signature, (n) => addDartBinderName(n, shadows));
|
|
874
|
+
}
|
|
875
|
+
walkNamedTree(bodyNode, (n) => addDartBinderName(n, shadows));
|
|
876
|
+
return shadows;
|
|
877
|
+
}
|
|
878
|
+
/**
|
|
879
|
+
* Record the name `node` binds, if it binds one.
|
|
880
|
+
*
|
|
881
|
+
* The `case` list is the whole point of this function and the reason it is
|
|
882
|
+
* separate: an INCOMPLETE list of binder forms is the exact defect this file has
|
|
883
|
+
* now shipped twice (formal parameters, then every Dart 3 pattern). It is
|
|
884
|
+
* enumerated against `vendor/tree-sitter-dart/grammar.js`, not against the
|
|
885
|
+
* shapes a bug report happened to carry.
|
|
886
|
+
*/
|
|
887
|
+
function addDartBinderName(node, out) {
|
|
888
|
+
switch (node.type) {
|
|
889
|
+
// `var s;`, `final r = 1;`, and the FIRST declarator of `var a = 1, b = 2;`.
|
|
890
|
+
// `for_loop_parts` carries the for-IN variable on the same `name` field
|
|
891
|
+
// (`for (var r in xs)`); the C-style form instead nests a
|
|
892
|
+
// `local_variable_declaration` the walk reaches on its own.
|
|
893
|
+
case 'initialized_variable_definition':
|
|
894
|
+
case 'for_loop_parts': {
|
|
895
|
+
const nameNode = node.childForFieldName('name');
|
|
896
|
+
if (nameNode !== null)
|
|
897
|
+
out.add(nameNode.text);
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
900
|
+
// Formal parameters — of the enclosing member, of a closure
|
|
901
|
+
// (`function_expression`), and of a nested `local_function_declaration`.
|
|
902
|
+
case 'formal_parameter': {
|
|
903
|
+
const name = dartParameterName(node);
|
|
904
|
+
if (name !== null)
|
|
905
|
+
out.add(name);
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
// `on E catch (e, stack)` — every identifier in the list is a binding.
|
|
909
|
+
case 'catch_parameters': {
|
|
910
|
+
for (const child of node.namedChildren) {
|
|
911
|
+
if (child !== null && child.type === 'identifier')
|
|
912
|
+
out.add(child.text);
|
|
913
|
+
}
|
|
914
|
+
return;
|
|
915
|
+
}
|
|
916
|
+
// Second and later declarators of `var a = 1, b = 2;` — fieldless, so the
|
|
917
|
+
// name is the first named child. (A class field is this node type too, but
|
|
918
|
+
// only ever under `initialized_identifier_list`, which no body contains.)
|
|
919
|
+
case 'initialized_identifier': {
|
|
920
|
+
const first = node.namedChild(0);
|
|
921
|
+
if (first !== null && first.type === 'identifier')
|
|
922
|
+
out.add(first.text);
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
// ── Dart 3 patterns ──────────────────────────────────────────────────────
|
|
926
|
+
//
|
|
927
|
+
// EVERY pattern node the grammar emits, and every one of them takes its
|
|
928
|
+
// DIRECT `identifier` children. The grammar rules that would carry a binder
|
|
929
|
+
// are `_pattern_field`, `_map_pattern_entry`, `_list_pattern_element`,
|
|
930
|
+
// `_parenthesized_pattern`, `_outer_pattern`, `_guarded_pattern` and the
|
|
931
|
+
// logical/relational tiers — ALL hidden (`_`-prefixed), so they emit no node
|
|
932
|
+
// of their own and inline their children onto whichever visible pattern node
|
|
933
|
+
// encloses them. Reading direct children is therefore what actually sees a
|
|
934
|
+
// binder; there is no field to ask for (`variable_pattern`,
|
|
935
|
+
// `pattern_variable_declaration` and `constant_pattern` declare none).
|
|
936
|
+
//
|
|
937
|
+
// The first two are where a binder truly lands, and are alone sufficient:
|
|
938
|
+
// `variable_pattern` — `Beta s` / `final s` / `var s`.
|
|
939
|
+
// `constant_pattern` — a BARE name (`(s, n)`, `[s, t]`, `{'k': s}`,
|
|
940
|
+
// `Point(:s)`, `...s`, `(s)`). Dart itself decides bare-name-binds-vs-
|
|
941
|
+
// references-a-constant from the enclosing `final`/`var`, and
|
|
942
|
+
// tree-sitter gives both the same node, so `case kLimit:` shadows too.
|
|
943
|
+
// Over-shadowing a constant reference costs an edge; the other
|
|
944
|
+
// direction fabricates one.
|
|
945
|
+
// The containers after them are DEFENCE, not routing — the walk reaches
|
|
946
|
+
// nested patterns on its own. They matter because the hidden `_pattern_field`
|
|
947
|
+
// already drops a NON-binder label identifier straight onto `record_pattern`
|
|
948
|
+
// / `object_pattern` (and a key onto `map_pattern`), which is proof that this
|
|
949
|
+
// grammar inlines identifiers onto containers. If a grammar revision ever
|
|
950
|
+
// inlines a real binder the same way, it is shadowed here on arrival instead
|
|
951
|
+
// of becoming the third instance of this bug.
|
|
952
|
+
//
|
|
953
|
+
// DELIBERATELY EXCLUDED — `pattern_variable_declaration`, `pattern_assignment`
|
|
954
|
+
// and `for_loop_parts` hold the pattern and the `=`/`in` RHS at the SAME
|
|
955
|
+
// child level (`var [s, t] = xs` → `identifier xs` is a direct child), so
|
|
956
|
+
// taking their direct identifiers would shadow the SOURCE expression's name,
|
|
957
|
+
// which binds nothing. Their pattern child is a case below. Also excluded:
|
|
958
|
+
// `type_identifier` (never an `identifier`, so `Beta` in `Beta s` and `Point`
|
|
959
|
+
// in `Point(…)` cannot be mistaken for binders), `qualified` inside a
|
|
960
|
+
// `constant_pattern` (`Colors.red` nests one level deeper — a qualified name
|
|
961
|
+
// is always a constant reference), and relational/equality operands
|
|
962
|
+
// (`case > kLimit`), which the hidden tier drops onto the enclosing
|
|
963
|
+
// STATEMENT rather than any pattern node.
|
|
964
|
+
case 'variable_pattern':
|
|
965
|
+
case 'constant_pattern':
|
|
966
|
+
case 'record_pattern':
|
|
967
|
+
case 'list_pattern':
|
|
968
|
+
case 'map_pattern':
|
|
969
|
+
case 'object_pattern':
|
|
970
|
+
case 'rest_pattern':
|
|
971
|
+
case 'cast_pattern':
|
|
972
|
+
case 'null_check_pattern':
|
|
973
|
+
case 'null_assert_pattern': {
|
|
974
|
+
for (const child of node.namedChildren) {
|
|
975
|
+
if (child !== null && child.type === 'identifier')
|
|
976
|
+
out.add(child.text);
|
|
977
|
+
}
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
default:
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
/** The name a `formal_parameter` binds, across every shape the grammar gives it. */
|
|
985
|
+
function dartParameterName(param) {
|
|
986
|
+
// `Alpha r`, `final Alpha r`, `void Function(int) r`, `{required Beta r}`,
|
|
987
|
+
// `[Delta r]` — all carry an explicit `name` field.
|
|
988
|
+
const named = param.childForFieldName('name');
|
|
989
|
+
if (named !== null)
|
|
990
|
+
return named.text;
|
|
991
|
+
const only = param.namedChild(0);
|
|
992
|
+
if (only === null)
|
|
993
|
+
return null;
|
|
994
|
+
// An untyped closure parameter (`(r) { … }`) is a bare identifier with no
|
|
995
|
+
// field to read it from.
|
|
996
|
+
if (only.type === 'identifier')
|
|
997
|
+
return only.text;
|
|
998
|
+
// `this.r` / `super.r` bind a parameter NAMED `r` that is initialized from
|
|
999
|
+
// the field — a later bare `r = …` writes that parameter, not the field, so
|
|
1000
|
+
// these shadow exactly like any other.
|
|
1001
|
+
if (only.type === 'constructor_param' || only.type === 'super_formal_parameter') {
|
|
1002
|
+
for (let i = only.namedChildCount - 1; i >= 0; i--) {
|
|
1003
|
+
const child = only.namedChild(i);
|
|
1004
|
+
if (child !== null && child.type === 'identifier')
|
|
1005
|
+
return child.text;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
return null;
|
|
1009
|
+
}
|
|
404
1010
|
function emitHeritage(classNode, out) {
|
|
405
1011
|
const nameNode = classNode.childForFieldName('name');
|
|
406
1012
|
if (nameNode === null)
|
|
@@ -414,9 +1020,15 @@ function emitHeritage(classNode, out) {
|
|
|
414
1020
|
for (let i = 0; i < superclass.namedChildCount; i++) {
|
|
415
1021
|
const c = superclass.namedChild(i);
|
|
416
1022
|
if (c !== null && c.type === 'type_identifier') {
|
|
1023
|
+
// `extends Base<User>` spells the arguments in a SIBLING node, so the
|
|
1024
|
+
// anchor's own text cannot carry them; the sub-tag does (#2912).
|
|
1025
|
+
const args = typeArgumentsAfter(superclass, i);
|
|
417
1026
|
out.push({
|
|
418
1027
|
'@reference.inherits': nodeToCapture('@reference.inherits', c),
|
|
419
1028
|
'@reference.name': nodeToCapture('@reference.name', c),
|
|
1029
|
+
...(args === null
|
|
1030
|
+
? {}
|
|
1031
|
+
: { '@reference.type-arguments': nodeToCapture('@reference.type-arguments', args) }),
|
|
420
1032
|
});
|
|
421
1033
|
break;
|
|
422
1034
|
}
|
|
@@ -434,12 +1046,70 @@ function emitHeritage(classNode, out) {
|
|
|
434
1046
|
emitHeritageMarkers(interfaces, 'implements', className, out);
|
|
435
1047
|
}
|
|
436
1048
|
}
|
|
1049
|
+
function emitExtensionImplementsHeritage(extensionNode, out) {
|
|
1050
|
+
const nameNode = extensionNode.childForFieldName('name');
|
|
1051
|
+
if (nameNode === null)
|
|
1052
|
+
return;
|
|
1053
|
+
const bodyStart = extensionNode.text.indexOf('{');
|
|
1054
|
+
const header = bodyStart === -1 ? extensionNode.text : extensionNode.text.slice(0, bodyStart);
|
|
1055
|
+
const implementsIndex = header.indexOf('implements');
|
|
1056
|
+
if (implementsIndex === -1)
|
|
1057
|
+
return;
|
|
1058
|
+
const className = nameNode.text;
|
|
1059
|
+
const interfaces = header.slice(implementsIndex + 'implements'.length);
|
|
1060
|
+
for (const rawInterface of splitTopLevelCommaList(interfaces)) {
|
|
1061
|
+
const target = /^[ \t]*([A-Za-z_$][A-Za-z0-9_$]*)/.exec(rawInterface)?.[1];
|
|
1062
|
+
if (target === undefined)
|
|
1063
|
+
continue;
|
|
1064
|
+
const payload = encodeMarker('heritage', ['implements', target, className]);
|
|
1065
|
+
out.push({ '@import.heritage': syntheticCapture('@import.heritage', nameNode, payload) });
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
function splitTopLevelCommaList(text) {
|
|
1069
|
+
const parts = [];
|
|
1070
|
+
let start = 0;
|
|
1071
|
+
let angleDepth = 0;
|
|
1072
|
+
for (let i = 0; i < text.length; i++) {
|
|
1073
|
+
const ch = text[i];
|
|
1074
|
+
if (ch === '<') {
|
|
1075
|
+
angleDepth++;
|
|
1076
|
+
continue;
|
|
1077
|
+
}
|
|
1078
|
+
if (ch === '>' && angleDepth > 0) {
|
|
1079
|
+
angleDepth--;
|
|
1080
|
+
continue;
|
|
1081
|
+
}
|
|
1082
|
+
if (ch === ',' && angleDepth === 0) {
|
|
1083
|
+
parts.push(text.slice(start, i));
|
|
1084
|
+
start = i + 1;
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
parts.push(text.slice(start));
|
|
1088
|
+
return parts;
|
|
1089
|
+
}
|
|
437
1090
|
function emitHeritageMarkers(container, kind, className, out) {
|
|
438
1091
|
for (let i = 0; i < container.namedChildCount; i++) {
|
|
439
1092
|
const c = container.namedChild(i);
|
|
440
1093
|
if (c === null || c.type !== 'type_identifier')
|
|
441
1094
|
continue;
|
|
442
|
-
|
|
1095
|
+
// `implements Validator<String>` / `with M<int>`: the arguments ride the
|
|
1096
|
+
// marker payload, because this heritage never becomes a reference SITE —
|
|
1097
|
+
// `emitDartHeritageEdges` reads the marker and emits the edge (#2912).
|
|
1098
|
+
// Dropped rather than encoded when the spelling contains the marker's own
|
|
1099
|
+
// ':' delimiter, which `encodeMarker` rejects outright; absence is the
|
|
1100
|
+
// fail-open value everywhere this is read.
|
|
1101
|
+
const args = typeArgumentsAfter(container, i)?.text;
|
|
1102
|
+
const fields = args === undefined || args.includes(':')
|
|
1103
|
+
? [kind, c.text, className]
|
|
1104
|
+
: [kind, c.text, className, args];
|
|
1105
|
+
const payload = encodeMarker('heritage', fields);
|
|
443
1106
|
out.push({ '@import.heritage': syntheticCapture('@import.heritage', c, payload) });
|
|
444
1107
|
}
|
|
445
1108
|
}
|
|
1109
|
+
/** The `type_arguments` node written immediately after `container`'s named
|
|
1110
|
+
* child at `index` — the arguments of the type that child names — or `null`
|
|
1111
|
+
* when that type was written without any. */
|
|
1112
|
+
function typeArgumentsAfter(container, index) {
|
|
1113
|
+
const next = container.namedChild(index + 1);
|
|
1114
|
+
return next !== null && next.type === 'type_arguments' ? next : null;
|
|
1115
|
+
}
|