gitnexus 1.6.10-rc.98 → 1.6.10
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 +177 -18
- package/dist/_shared/graph/types.d.ts +21 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -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 +16 -0
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +19 -7
- 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/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
- 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 +278 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +3 -2
- package/dist/cli/ai-context.js +71 -16
- 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 +21 -113
- package/dist/cli/analyze.js +172 -29
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.js +32 -5
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.js +2 -1
- 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 +229 -21
- package/dist/cli/help-i18n.js +1 -2
- package/dist/cli/i18n/en.d.ts +11 -9
- package/dist/cli/i18n/en.js +13 -9
- package/dist/cli/i18n/resources.d.ts +15 -11
- package/dist/cli/i18n/zh-CN.d.ts +4 -2
- package/dist/cli/i18n/zh-CN.js +11 -9
- package/dist/cli/index.js +8 -4
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.js +4 -3
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +74 -17
- package/dist/cli/wiki.js +53 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +54 -13
- package/dist/core/analyzer-identity.d.ts +80 -0
- package/dist/core/analyzer-identity.js +364 -26
- package/dist/core/augmentation/engine.js +86 -71
- 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/embedding-pipeline.d.ts +8 -0
- package/dist/core/embeddings/embedding-pipeline.js +253 -14
- package/dist/core/embeddings/http-client.d.ts +5 -0
- package/dist/core/embeddings/http-client.js +142 -27
- 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.d.ts +204 -1
- package/dist/core/group/bridge-db.js +401 -28
- package/dist/core/group/completeness.d.ts +130 -0
- package/dist/core/group/completeness.js +83 -0
- package/dist/core/group/config-parser.js +0 -5
- package/dist/core/group/cross-impact.d.ts +46 -1
- package/dist/core/group/cross-impact.js +220 -19
- package/dist/core/group/cross-trace.d.ts +32 -11
- package/dist/core/group/cross-trace.js +114 -20
- package/dist/core/group/extractors/http-patterns/java.js +278 -22
- package/dist/core/group/extractors/http-patterns/node.js +332 -216
- 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/extractors/python-workspace-extractor.js +5 -2
- package/dist/core/group/group-lock.d.ts +31 -0
- package/dist/core/group/group-lock.js +166 -0
- package/dist/core/group/service.js +297 -16
- package/dist/core/group/storage.d.ts +3 -0
- package/dist/core/group/storage.js +7 -39
- package/dist/core/group/sync.d.ts +49 -3
- package/dist/core/group/sync.js +0 -0
- package/dist/core/group/types.d.ts +183 -8
- package/dist/core/group/types.js +28 -1
- 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 +77 -2
- package/dist/core/index-freshness.js +109 -2
- 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 +6 -6
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +81 -82
- package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
- package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
- package/dist/core/ingestion/di-extractors/spring.js +8 -1
- 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/filesystem-walker.js +30 -14
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
- 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-catalog.js +1 -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/di-metadata.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
- 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 +429 -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 +65 -19
- 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 +29 -1
- package/dist/core/ingestion/language-config.js +110 -35
- package/dist/core/ingestion/language-provider.d.ts +209 -7
- package/dist/core/ingestion/language-provider.js +37 -0
- package/dist/core/ingestion/languages/c/captures.js +7 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/scope-resolver.js +20 -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/scope-resolver.js +27 -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 +14 -2
- 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 +48 -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 +19 -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 +598 -16
- 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 +6 -1
- package/dist/core/ingestion/languages/go/captures.js +108 -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 +4 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/java/captures.js +129 -44
- 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/query.js +16 -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 +10 -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-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
- package/dist/core/ingestion/languages/java/spring-di.js +41 -9
- 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 +94 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +262 -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 +211 -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-siblings.js +77 -9
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
- 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/query.js +28 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
- 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-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 +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
- 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/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +319 -51
- package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
- package/dist/core/ingestion/languages/php/import-target.js +192 -62
- package/dist/core/ingestion/languages/php/query.js +31 -0
- 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.js +29 -0
- 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 -7
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
- package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
- package/dist/core/ingestion/languages/python.js +13 -0
- package/dist/core/ingestion/languages/ruby/captures.js +158 -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 +39 -1
- 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 +39 -6
- 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 +87 -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 +267 -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/convex-endpoint-metadata.d.ts +7 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -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/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +303 -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 +292 -0
- package/dist/core/ingestion/languages/typescript.js +93 -2
- 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/pipeline-phases/di.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/di.js +136 -21
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
- package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
- 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/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +26 -2
- package/dist/core/ingestion/pipeline.js +60 -11
- 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 +66 -6
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
- package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +876 -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/java-const-resolver.d.ts +114 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
- package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
- package/dist/core/ingestion/route-extractors/nest.js +523 -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 +214 -29
- 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 +311 -16
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
- 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 +58 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
- 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 +39 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
- 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 +3 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
- 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 +5 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
- 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 +29 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
- 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 +905 -22
- 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/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +678 -4
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +2 -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 +322 -16
- package/dist/core/ingestion/utils/ast-helpers.js +727 -150
- 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 +59 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
- 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 +80 -0
- package/dist/core/ingestion/workers/callable-id.js +125 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +493 -54
- package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
- package/dist/core/ingestion/workers/worker-pool.js +91 -3
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +72 -17
- package/dist/core/lbug/extension-load-error.js +13 -2
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +31 -6
- 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 +290 -11
- package/dist/core/lbug/lbug-adapter.js +652 -69
- package/dist/core/lbug/native-check.d.ts +21 -0
- package/dist/core/lbug/native-check.js +248 -32
- 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 +9 -0
- package/dist/core/lbug/pool-adapter.js +164 -14
- 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 +163 -4
- package/dist/core/lbug/schema.js +404 -159
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/run-analyze.d.ts +147 -0
- package/dist/core/run-analyze.js +1215 -179
- 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 +150 -9
- package/dist/core/search/fts-indexes.js +241 -23
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +29 -3
- package/dist/core/wiki/llm-client.js +47 -12
- 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/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +2 -1
- package/dist/mcp/local/bean-metadata.js +22 -1
- package/dist/mcp/local/convex-metadata.d.ts +8 -0
- package/dist/mcp/local/convex-metadata.js +45 -0
- package/dist/mcp/local/local-backend.d.ts +174 -11
- package/dist/mcp/local/local-backend.js +1678 -331
- 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/repository-policy.d.ts +1 -0
- package/dist/mcp/repository-policy.js +5 -0
- package/dist/mcp/resources.js +26 -4
- package/dist/mcp/server.js +23 -13
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +76 -23
- package/dist/server/analyze-job.d.ts +37 -2
- package/dist/server/analyze-job.js +13 -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 +1 -1
- package/dist/server/analyze-worker-core.js +10 -1
- 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/api.d.ts +2 -11
- package/dist/server/api.js +164 -163
- 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/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/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 +131 -0
- package/dist/storage/git.js +236 -2
- package/dist/storage/index-lock.d.ts +102 -0
- package/dist/storage/index-lock.js +660 -0
- package/dist/storage/parse-cache.js +588 -3
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -435
- package/dist/storage/repo-manager.js +312 -215
- 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 +11 -2
- package/scripts/cross-platform-shard.ts +153 -0
- package/scripts/cross-platform-tests.ts +122 -0
- package/scripts/run-cross-platform.ts +16 -5
- 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-plan/README.md +11 -6
- package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +12 -6
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/SKILL.md +4 -1
- package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-Dr4l5EOp.js +662 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
- package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
- 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-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
- 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-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
- package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
- 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-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
- 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-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
- 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/error-D9MtuG9s.js +1 -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-D7mTFcvQ.js → index-2zdvEdzg.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-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
- package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
- package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
- package/web/assets/node.browser-U-KyT5AW.js +1 -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/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
- 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-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
- package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
- package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
- 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-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
- 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 +16 -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/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
- package/web/assets/agent-Ds-lkZjX.js +0 -626
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.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-CA7OhIEf.js +0 -124
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.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-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-BZeP-55u.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-LRIF4GLE-n59lhprL.js +0 -1
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.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-ByqTVLvh.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.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-T368on4D.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/node-Ct_zna8U.js +0 -8
- 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-Bv4LpAbr.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/sdk-CzHHH8tD.js +0 -37
- package/web/assets/src-Cv1eWg0o.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
- 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-BD1iK1SX.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -12,7 +12,34 @@
|
|
|
12
12
|
* The `ScopeResolver` hook signature is `(targetRaw, fromFile, allFilePaths)`;
|
|
13
13
|
* `targetRaw` arrives already quote-stripped from `interpretDartImport`.
|
|
14
14
|
*/
|
|
15
|
+
import { perFileSet } from '../../import-resolvers/per-file-set.js';
|
|
15
16
|
import { DART_HERITAGE_PREFIX } from './interpret.js';
|
|
17
|
+
const getDartFileIndex = perFileSet((allFilePaths) => {
|
|
18
|
+
const byBasename = new Map();
|
|
19
|
+
for (const fp of allFilePaths) {
|
|
20
|
+
const base = fp.slice(fp.lastIndexOf('/') + 1);
|
|
21
|
+
let bucket = byBasename.get(base);
|
|
22
|
+
if (bucket === undefined) {
|
|
23
|
+
bucket = [];
|
|
24
|
+
byBasename.set(base, bucket);
|
|
25
|
+
}
|
|
26
|
+
bucket.push(fp);
|
|
27
|
+
}
|
|
28
|
+
return { byBasename };
|
|
29
|
+
});
|
|
30
|
+
/** First file (in Set-iteration order) that IS `candidate` or ends with
|
|
31
|
+
* `/<candidate>` — the exact predicate of the scans this replaces. */
|
|
32
|
+
function findByPathSuffix(allFilePaths, candidate) {
|
|
33
|
+
const bucket = getDartFileIndex(allFilePaths).byBasename.get(candidate.slice(candidate.lastIndexOf('/') + 1));
|
|
34
|
+
if (bucket === undefined)
|
|
35
|
+
return null;
|
|
36
|
+
const suffix = '/' + candidate;
|
|
37
|
+
for (const fp of bucket) {
|
|
38
|
+
if (fp === candidate || fp.endsWith(suffix))
|
|
39
|
+
return fp;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
16
43
|
/** Resolve a relative path against the importer's directory, normalizing
|
|
17
44
|
* `.`/`..` segments, then confirm it exists in the workspace file set. */
|
|
18
45
|
function resolveRelative(rel, fromFile, allFilePaths) {
|
|
@@ -31,11 +58,7 @@ function resolveRelative(rel, fromFile, allFilePaths) {
|
|
|
31
58
|
if (allFilePaths.has(target))
|
|
32
59
|
return target;
|
|
33
60
|
// Suffix fallback for absolute/rooted workspace paths.
|
|
34
|
-
|
|
35
|
-
if (fp === target || fp.endsWith('/' + target))
|
|
36
|
-
return fp;
|
|
37
|
-
}
|
|
38
|
-
return null;
|
|
61
|
+
return findByPathSuffix(allFilePaths, target);
|
|
39
62
|
}
|
|
40
63
|
export function resolveDartImportTarget(targetRaw, fromFile, allFilePaths) {
|
|
41
64
|
if (targetRaw.startsWith(DART_HERITAGE_PREFIX))
|
|
@@ -52,11 +75,11 @@ export function resolveDartImportTarget(targetRaw, fromFile, allFilePaths) {
|
|
|
52
75
|
if (slash === -1)
|
|
53
76
|
return null;
|
|
54
77
|
const relPath = targetRaw.slice(slash + 1);
|
|
78
|
+
// Candidate priority is load-bearing: `lib/<rel>` before bare `<rel>`.
|
|
55
79
|
for (const candidate of [`lib/${relPath}`, relPath]) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
80
|
+
const hit = findByPathSuffix(allFilePaths, candidate);
|
|
81
|
+
if (hit !== null)
|
|
82
|
+
return hit;
|
|
60
83
|
}
|
|
61
84
|
return null; // external package
|
|
62
85
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* - `scope-resolver.ts` — `ScopeResolver` registered in `SCOPE_RESOLVERS`
|
|
20
20
|
* - `cache-stats.ts` — PROF_SCOPE_RESOLUTION cache hit/miss counters
|
|
21
21
|
*/
|
|
22
|
-
export { emitDartScopeCaptures } from './captures.js';
|
|
22
|
+
export { emitDartScopeCaptures, dartScopeOwnsReceivers } from './captures.js';
|
|
23
23
|
export { getDartCaptureCacheStats, resetDartCaptureCacheStats } from './cache-stats.js';
|
|
24
24
|
export { interpretDartImport, interpretDartTypeBinding, normalizeDartType, DART_HERITAGE_PREFIX, } from './interpret.js';
|
|
25
25
|
export { dartMergeBindings } from './merge-bindings.js';
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* - `scope-resolver.ts` — `ScopeResolver` registered in `SCOPE_RESOLVERS`
|
|
20
20
|
* - `cache-stats.ts` — PROF_SCOPE_RESOLUTION cache hit/miss counters
|
|
21
21
|
*/
|
|
22
|
-
export { emitDartScopeCaptures } from './captures.js';
|
|
22
|
+
export { emitDartScopeCaptures, dartScopeOwnsReceivers } from './captures.js';
|
|
23
23
|
export { getDartCaptureCacheStats, resetDartCaptureCacheStats } from './cache-stats.js';
|
|
24
24
|
export { interpretDartImport, interpretDartTypeBinding, normalizeDartType, DART_HERITAGE_PREFIX, } from './interpret.js';
|
|
25
25
|
export { dartMergeBindings } from './merge-bindings.js';
|
|
@@ -40,7 +40,15 @@ const DART_SCOPE_QUERY = `
|
|
|
40
40
|
(enum_declaration) @scope.class
|
|
41
41
|
|
|
42
42
|
; ── Declarations — types ─────────────────────────────────────────────────────
|
|
43
|
-
|
|
43
|
+
; The type-parameter list is matched as an UNNAMED optional child: the Dart
|
|
44
|
+
; grammar hangs \`type_parameters\` off \`class_definition\` without a field name.
|
|
45
|
+
; Recording it is what lets instantiation-aware interface dispatch tell a type
|
|
46
|
+
; VARIABLE (\`class Box<T> implements Validator<T>\`) from a concrete argument
|
|
47
|
+
; (\`class V implements Validator<String>\`) — see #2912; absent parameters are
|
|
48
|
+
; indistinguishable from a language that captures none, and read as unknown.
|
|
49
|
+
(class_definition
|
|
50
|
+
name: (identifier) @declaration.name
|
|
51
|
+
(type_parameters)? @declaration.type-parameters) @declaration.class
|
|
44
52
|
(mixin_declaration (identifier) @declaration.name) @declaration.trait
|
|
45
53
|
(extension_declaration name: (identifier) @declaration.name) @declaration.class
|
|
46
54
|
(enum_declaration name: (identifier) @declaration.name) @declaration.enum
|
|
@@ -90,6 +98,43 @@ const DART_SCOPE_QUERY = `
|
|
|
90
98
|
(function_signature
|
|
91
99
|
name: (identifier) @declaration.name) @declaration.function)
|
|
92
100
|
|
|
101
|
+
; ── Declarations — closure bound to a local ──────────────────────────────────
|
|
102
|
+
;
|
|
103
|
+
; var handler = (int x) => target(x); / var blk = (int y) { ... };
|
|
104
|
+
;
|
|
105
|
+
; Anchor discipline (same contract as javascript/query.ts): @declaration.function
|
|
106
|
+
; sits on the INNER function_expression, NOT on the local_variable_declaration
|
|
107
|
+
; wrapper. Dart is the one language that declares NO @scope.function in this
|
|
108
|
+
; file — its function scopes are SYNTHESIZED in captures.ts from
|
|
109
|
+
; declNode + findFunctionBody(declNode). So this rule deliberately does not add
|
|
110
|
+
; a @scope.function of its own: doing that would collide with the synthesized
|
|
111
|
+
; one at identical range, and duplicate scope ids make buildScopeTree throw,
|
|
112
|
+
; which drops the whole file. Instead findFunctionBody now understands a
|
|
113
|
+
; closure's child function_expression_body, so the existing synthesis produces
|
|
114
|
+
; exactly one scope, anchored on the same node as the declaration (#2699 S4).
|
|
115
|
+
;; THREE binding shapes, not one. Dart wraps only the FIRST local declarator in
|
|
116
|
+
;; initialized_variable_definition; a top-level var and every later declarator
|
|
117
|
+
;; are initialized_identifier, and a top-level final/const is
|
|
118
|
+
;; static_final_declaration. Matching only the first shape left idiomatic
|
|
119
|
+
;; top-level closures and the g of "var f = ..., g = ..." with no declaration
|
|
120
|
+
;; capture, so findFunctionBody never synthesized their scope and they could
|
|
121
|
+
;; never be call SOURCES.
|
|
122
|
+
;;
|
|
123
|
+
;; This mirrors DART_CALLABLE_CAPTURE_OPTIONS.bindingNodeTypes in captures.ts,
|
|
124
|
+
;; which already listed all three for callable-flow. The two lists must stay in
|
|
125
|
+
;; step; dart-closure-binding-shapes.test.ts pins that.
|
|
126
|
+
(initialized_variable_definition
|
|
127
|
+
(identifier) @declaration.name
|
|
128
|
+
(function_expression) @declaration.function)
|
|
129
|
+
|
|
130
|
+
(initialized_identifier
|
|
131
|
+
(identifier) @declaration.name
|
|
132
|
+
(function_expression) @declaration.function)
|
|
133
|
+
|
|
134
|
+
(static_final_declaration
|
|
135
|
+
(identifier) @declaration.name
|
|
136
|
+
(function_expression) @declaration.function)
|
|
137
|
+
|
|
93
138
|
; ── Declarations — methods (inside class/mixin/extension bodies) ─────────────
|
|
94
139
|
(method_signature
|
|
95
140
|
(function_signature
|
|
@@ -124,6 +169,58 @@ const DART_SCOPE_QUERY = `
|
|
|
124
169
|
(initialized_identifier
|
|
125
170
|
. (identifier) @declaration.name))) @declaration.property
|
|
126
171
|
|
|
172
|
+
; Inference-typed fields — \`var b = Outer();\`, \`final b = Outer();\`,
|
|
173
|
+
; \`late final b = Outer();\`, \`static var b = Outer();\` (#2807). The two
|
|
174
|
+
; patterns above require a written type, so a field whose type comes from its
|
|
175
|
+
; initializer produced NO property declaration at all — no Property node, and
|
|
176
|
+
; nothing for captures.ts to hang a type binding on, so \`b.inner()\` could not
|
|
177
|
+
; resolve its receiver while the annotated twin resolved fine.
|
|
178
|
+
;
|
|
179
|
+
; Dart spells the keyword as \`inferred_type\` for \`var\` and \`final_builtin\`
|
|
180
|
+
; for \`final\` / \`late final\`; both are class fields and both are idiomatic,
|
|
181
|
+
; so covering only one would leave the more common Dart style broken.
|
|
182
|
+
(declaration
|
|
183
|
+
(inferred_type)
|
|
184
|
+
(initialized_identifier_list
|
|
185
|
+
(initialized_identifier
|
|
186
|
+
. (identifier) @declaration.name))) @declaration.property
|
|
187
|
+
(declaration
|
|
188
|
+
(final_builtin)
|
|
189
|
+
(initialized_identifier_list
|
|
190
|
+
(initialized_identifier
|
|
191
|
+
. (identifier) @declaration.name))) @declaration.property
|
|
192
|
+
|
|
193
|
+
; ── Declarations — closure bindings (#2693) ──────────────────────────────────
|
|
194
|
+
; \`var f = (x) => x;\` binds a callable. Without a declaration the binding has
|
|
195
|
+
; no SymbolDefinition, so callable-value-flow has nothing to attach its seed to
|
|
196
|
+
; and \`f()\` stays unresolved even though the graph emits a Function node for it.
|
|
197
|
+
;
|
|
198
|
+
; Restricted to a function_expression value on purpose: declaring every Dart
|
|
199
|
+
; variable would mint defs repo-wide for no resolution benefit. The top-level
|
|
200
|
+
; rule is anchored under (program) — the same disambiguation the graph-node
|
|
201
|
+
; query uses — so class-body fields, which reuse initialized_identifier_list
|
|
202
|
+
; and are already @declaration.property, are never matched twice.
|
|
203
|
+
(program
|
|
204
|
+
(initialized_identifier_list
|
|
205
|
+
(initialized_identifier
|
|
206
|
+
(identifier) @declaration.name
|
|
207
|
+
(function_expression))) @declaration.variable)
|
|
208
|
+
(program
|
|
209
|
+
(static_final_declaration_list
|
|
210
|
+
(static_final_declaration
|
|
211
|
+
(identifier) @declaration.name
|
|
212
|
+
(function_expression))) @declaration.variable)
|
|
213
|
+
(initialized_variable_definition
|
|
214
|
+
name: (identifier) @declaration.name
|
|
215
|
+
value: (function_expression)) @declaration.variable
|
|
216
|
+
; Second and later declarators of \`var f = .., g = ..;\` are nested
|
|
217
|
+
; initialized_identifier children of the same initialized_variable_definition,
|
|
218
|
+
; which the field-based rule above only reaches for the first name.
|
|
219
|
+
(initialized_variable_definition
|
|
220
|
+
(initialized_identifier
|
|
221
|
+
(identifier) @declaration.name
|
|
222
|
+
(function_expression)) @declaration.variable)
|
|
223
|
+
|
|
127
224
|
; ── Imports / re-exports ─────────────────────────────────────────────────────
|
|
128
225
|
(import_or_export
|
|
129
226
|
(library_import
|
|
@@ -33,6 +33,7 @@ import { generateId } from '../../../../lib/utils.js';
|
|
|
33
33
|
import { dartProvider } from '../dart.js';
|
|
34
34
|
import { dartArityCompatibility, dartMergeBindings, resolveDartImportTarget } from './index.js';
|
|
35
35
|
import { decodeMarker } from '../../utils/heritage-marker.js';
|
|
36
|
+
import { typeApplicationArguments } from '../../utils/template-arguments.js';
|
|
36
37
|
import { expandDartWildcardNames } from './expand-wildcards.js';
|
|
37
38
|
/**
|
|
38
39
|
* Resolve a class simple name to a graph id with FILE AFFINITY: prefer a
|
|
@@ -60,7 +61,7 @@ function pickClassByName(name, preferredFile, defsByName) {
|
|
|
60
61
|
* which keeps cross-file same-name classes from collapsing (mirror of Ruby's
|
|
61
62
|
* `emitRubyMixinEdges`, with the #1951-style file-affinity hardening).
|
|
62
63
|
*/
|
|
63
|
-
function emitDartHeritageEdges(graph, parsedFiles, nodeLookup) {
|
|
64
|
+
function emitDartHeritageEdges(graph, parsedFiles, nodeLookup, recordTypeArguments) {
|
|
64
65
|
const defsByName = new Map();
|
|
65
66
|
for (const parsed of parsedFiles) {
|
|
66
67
|
for (const def of parsed.localDefs) {
|
|
@@ -97,11 +98,21 @@ function emitDartHeritageEdges(graph, parsedFiles, nodeLookup) {
|
|
|
97
98
|
const parts = decoded.fields;
|
|
98
99
|
if (parts.length < 3)
|
|
99
100
|
continue;
|
|
100
|
-
const [kind, baseName, childName] = parts;
|
|
101
|
+
const [kind, baseName, childName, rawTypeArguments] = parts;
|
|
101
102
|
const childId = pickClassByName(childName, parsed.filePath, defsByName);
|
|
102
103
|
const baseId = pickClassByName(baseName, parsed.filePath, defsByName);
|
|
103
104
|
if (childId === undefined || baseId === undefined || childId === baseId)
|
|
104
105
|
continue;
|
|
106
|
+
// The instantiation this clause was written with — `implements
|
|
107
|
+
// Validator<String>` (#2912). Recorded before the dedup below, since the
|
|
108
|
+
// FIRST writer wins on both sides and an edge deduped here still needs
|
|
109
|
+
// its arguments. A marker from a pre-#2912 cache has no fourth field,
|
|
110
|
+
// which reads as unknown.
|
|
111
|
+
if (rawTypeArguments !== undefined) {
|
|
112
|
+
const typeArguments = typeApplicationArguments(rawTypeArguments);
|
|
113
|
+
if (typeArguments !== undefined)
|
|
114
|
+
recordTypeArguments?.(childId, baseId, typeArguments);
|
|
115
|
+
}
|
|
105
116
|
const key = `${childId}->${baseId}:${kind}`;
|
|
106
117
|
if (emitted.has(key))
|
|
107
118
|
continue;
|
|
@@ -183,7 +194,7 @@ export const dartScopeResolver = {
|
|
|
183
194
|
isSuperReceiver: (text) => text.trim() === 'super',
|
|
184
195
|
// `implements` / `with` IMPLEMENTS edges (extends rides the generic
|
|
185
196
|
// inherits pre-pass; these need an explicit, kind-independent edge type).
|
|
186
|
-
emitHeritageEdges: (graph, parsedFiles, nodeLookup) => emitDartHeritageEdges(graph, parsedFiles, nodeLookup),
|
|
197
|
+
emitHeritageEdges: (graph, parsedFiles, nodeLookup, _scopes, recordTypeArguments) => emitDartHeritageEdges(graph, parsedFiles, nodeLookup, recordTypeArguments),
|
|
187
198
|
// Dart is statically typed — the field-fallback heuristic over-connects.
|
|
188
199
|
fieldFallbackOnMethodLookup: false,
|
|
189
200
|
propagatesReturnTypesAcrossImports: true,
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* - `dartReceiverBinding` — the implicit `this`/`super` receiver of a
|
|
15
15
|
* Function scope.
|
|
16
16
|
*/
|
|
17
|
+
import { walkToScope } from '../../utils/scope-tree-walk.js';
|
|
17
18
|
export function dartBindingScopeFor(decl, innermost, tree) {
|
|
18
19
|
// (1) Return-type bindings hoist to the Module scope.
|
|
19
20
|
if (decl['@type-binding.return'] !== undefined) {
|
|
@@ -28,6 +29,14 @@ export function dartBindingScopeFor(decl, innermost, tree) {
|
|
|
28
29
|
return cur.id;
|
|
29
30
|
return null;
|
|
30
31
|
}
|
|
32
|
+
// (1b) A field typed from a constructor assigned to it (`r = Outer();` in a
|
|
33
|
+
// constructor body) must live on the CLASS scope — the assignment sits inside
|
|
34
|
+
// the constructor's own Function scope, where `typeOfMemberOnClass` never
|
|
35
|
+
// looks (#2807). Gated on the dedicated marker, never on
|
|
36
|
+
// `@type-binding.constructor` at large, which also fires for genuine locals.
|
|
37
|
+
if (decl['@type-binding.dart-field'] !== undefined) {
|
|
38
|
+
return walkToScope(innermost, tree, 'Class');
|
|
39
|
+
}
|
|
31
40
|
// (2) Function/method/constructor names are visible in the enclosing scope.
|
|
32
41
|
if (decl['@declaration.function'] !== undefined ||
|
|
33
42
|
decl['@declaration.method'] !== undefined ||
|
|
@@ -27,7 +27,7 @@ import { createVariableExtractor } from '../variable-extractors/generic.js';
|
|
|
27
27
|
import { dartVariableConfig } from '../variable-extractors/configs/dart.js';
|
|
28
28
|
import { createCallExtractor } from '../call-extractors/generic.js';
|
|
29
29
|
import { dartCallConfig } from '../call-extractors/configs/dart.js';
|
|
30
|
-
import { emitDartScopeCaptures, interpretDartImport, interpretDartTypeBinding, dartBindingScopeFor, dartImportOwningScope, dartReceiverBinding, dartMergeBindings, dartArityCompatibility, } from './dart/index.js';
|
|
30
|
+
import { emitDartScopeCaptures, dartScopeOwnsReceivers, interpretDartImport, interpretDartTypeBinding, dartBindingScopeFor, dartImportOwningScope, dartReceiverBinding, dartMergeBindings, dartArityCompatibility, } from './dart/index.js';
|
|
31
31
|
import { DART_BUILT_INS } from './dart/built-ins.js';
|
|
32
32
|
import { preprocessDartExtensionTypes } from './dart/extension-type-preprocess.js';
|
|
33
33
|
/**
|
|
@@ -119,6 +119,11 @@ export const dartProvider = defineLanguage({
|
|
|
119
119
|
// emit-side `ScopeResolver` lives in `dart/scope-resolver.ts`; the same
|
|
120
120
|
// function references flow through both interfaces.
|
|
121
121
|
emitScopeCaptures: emitDartScopeCaptures,
|
|
122
|
+
// Dart's `ownsReceivers` masks FIELD NAMES a member body rebinds, not `this`
|
|
123
|
+
// (which Dart binds lexically in every closure form, so there is nothing to
|
|
124
|
+
// own). See `dartShadowedFieldsCapture` in `dart/captures.ts` for why the
|
|
125
|
+
// read side needs the mask and what it deliberately does not cover.
|
|
126
|
+
scopeOwnsReceivers: dartScopeOwnsReceivers,
|
|
122
127
|
cfgVisitor: createDartCfgVisitor(),
|
|
123
128
|
interpretImport: interpretDartImport,
|
|
124
129
|
interpretTypeBinding: interpretDartTypeBinding,
|
|
@@ -8,6 +8,44 @@ import { synthesizeGoTypeBindings, extractSimpleTypeNameText } from './type-bind
|
|
|
8
8
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
9
9
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
10
10
|
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
11
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
12
|
+
/** Range for a capture that marks no source span. */
|
|
13
|
+
const ZERO_RANGE = Object.freeze({ startLine: 0, startCol: 0, endLine: 0, endCol: 0 });
|
|
14
|
+
/**
|
|
15
|
+
* The callee-position marker, allocated once for the whole process.
|
|
16
|
+
*
|
|
17
|
+
* This capture is a PRESENCE FLAG, not a payload: `scope-extractor.ts` reads it
|
|
18
|
+
* only as `match['@reference.callee-position'] !== undefined`, and the tag is
|
|
19
|
+
* listed in `KNOWN_SUB_TAGS`, so `anchorCaptureFor` never considers its range
|
|
20
|
+
* when picking a reference anchor. Nothing else in the pipeline touches it.
|
|
21
|
+
* (Its range used to duplicate `@reference.read`'s exactly, and that capture is
|
|
22
|
+
* still emitted, so the one place that scans every capture's range — the
|
|
23
|
+
* synthetic Module-scope span in `scope-extractor.ts` — sees the same maximum.)
|
|
24
|
+
*
|
|
25
|
+
* Minting it per site from the read node was therefore pure cost, and not a
|
|
26
|
+
* cheap one: `node.text` is an `input.substring` behind N-API index marshals,
|
|
27
|
+
* and `startPosition` / `endPosition` are two more round-trips each. A frozen
|
|
28
|
+
* singleton carries exactly the same information — its presence — for free.
|
|
29
|
+
*/
|
|
30
|
+
const CALLEE_POSITION_MARKER = Object.freeze({
|
|
31
|
+
name: '@reference.callee-position',
|
|
32
|
+
range: ZERO_RANGE,
|
|
33
|
+
text: '',
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Presence-only marker for an embedded field written as `*T` rather than `T`.
|
|
37
|
+
*
|
|
38
|
+
* Go's method-set rules treat the two forms differently — `S{T}` promotes only
|
|
39
|
+
* the value-receiver methods of `T` into `MS(S)`, while `S{*T}` promotes both
|
|
40
|
+
* value- and pointer-receiver ones (go.dev/ref/spec#Struct_types). Structural
|
|
41
|
+
* interface detection cannot give an exact answer without knowing which was
|
|
42
|
+
* written, so the spelling is recorded here and interpreted downstream.
|
|
43
|
+
*/
|
|
44
|
+
const EMBEDDED_POINTER_MARKER = Object.freeze({
|
|
45
|
+
name: '@reference.embedded-pointer',
|
|
46
|
+
range: ZERO_RANGE,
|
|
47
|
+
text: '',
|
|
48
|
+
});
|
|
11
49
|
const GO_CALLABLE_CAPTURE_OPTIONS = {
|
|
12
50
|
functionNodeTypes: new Set(['function_declaration', 'method_declaration', 'func_literal']),
|
|
13
51
|
callNodeTypes: new Set(['call_expression']),
|
|
@@ -40,6 +78,25 @@ const GO_CALLABLE_CAPTURE_OPTIONS = {
|
|
|
40
78
|
return destinations.map((destination, index) => ({ destination, source: sources[index] }));
|
|
41
79
|
},
|
|
42
80
|
};
|
|
81
|
+
/**
|
|
82
|
+
* Is this `selector_expression` in CALLEE position — the `function` child of an
|
|
83
|
+
* enclosing `call_expression` — rather than free-standing?
|
|
84
|
+
*
|
|
85
|
+
* `h.dep.Work` in `h.dep.Work()` is in callee position; `f := h.dep.Work` (a
|
|
86
|
+
* method value, or a func-typed field value) is not.
|
|
87
|
+
*
|
|
88
|
+
* Callee position alone does NOT make the selector a non-read. Go dispatches
|
|
89
|
+
* `h.dep.Work()` through a func-typed struct field just as readily as through a
|
|
90
|
+
* method, and this predicate cannot tell the two apart — `call_expression` has
|
|
91
|
+
* the same shape either way, and the tail's declaration may live in another
|
|
92
|
+
* package. See {@link emitGoScopeCaptures} for what is done with the answer.
|
|
93
|
+
*/
|
|
94
|
+
function isCalleeOfMemberCall(node) {
|
|
95
|
+
const parent = node.parent;
|
|
96
|
+
if (parent === null || parent.type !== 'call_expression')
|
|
97
|
+
return false;
|
|
98
|
+
return parent.childForFieldName('function')?.id === node.id;
|
|
99
|
+
}
|
|
43
100
|
export function emitGoScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
44
101
|
let tree = cachedTree;
|
|
45
102
|
if (tree === undefined) {
|
|
@@ -127,6 +184,12 @@ export function emitGoScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
127
184
|
grouped['@declaration.return-type'] = syntheticCapture('@declaration.return-type', fnNode, arity.returnType);
|
|
128
185
|
}
|
|
129
186
|
}
|
|
187
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
188
|
+
// expression, so resolution can type it by folding over structure
|
|
189
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
190
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
191
|
+
// all leave `grouped` untouched.
|
|
192
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
130
193
|
out.push(grouped);
|
|
131
194
|
continue;
|
|
132
195
|
}
|
|
@@ -141,6 +204,39 @@ export function emitGoScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
141
204
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(computeGoCallArity(callNode)));
|
|
142
205
|
}
|
|
143
206
|
}
|
|
207
|
+
// Mark — do NOT drop — the read site on a member call's callee.
|
|
208
|
+
//
|
|
209
|
+
// The `@reference.read` pattern matches every `selector_expression`, so
|
|
210
|
+
// `h.dep.Work()` yields THREE sites: the call on `Work`, a read on the inner
|
|
211
|
+
// `h.dep` (the genuine field read), and a read on the OUTER `h.dep.Work`.
|
|
212
|
+
//
|
|
213
|
+
// That third site is a phantom ONLY when `Work` is a method: it then
|
|
214
|
+
// resolves through `findOwnedMember` (which prefers methods over fields) and
|
|
215
|
+
// emits an ACCESSES edge to the METHOD duplicating the CALLS edge at the
|
|
216
|
+
// same position — `v.impl.DoWork()` emitting both `CALLS -> DoWork` and
|
|
217
|
+
// `ACCESSES -> DoWork`.
|
|
218
|
+
//
|
|
219
|
+
// When `Work` is a FUNC-TYPED STRUCT FIELD (`Work func() error` — callback
|
|
220
|
+
// structs, hook structs, hand-rolled mocks) the very same syntax is a
|
|
221
|
+
// genuine field read followed by an indirect call through the value it
|
|
222
|
+
// holds, and that read is the field's only ACCESSES evidence. Dropping the
|
|
223
|
+
// site here deleted it (#2782 review).
|
|
224
|
+
//
|
|
225
|
+
// Method-vs-field is not knowable at capture: `call_expression` has the same
|
|
226
|
+
// shape either way and the tail's declaration may live in another package.
|
|
227
|
+
// So the capture layer records the POSITION and edge emission — which knows
|
|
228
|
+
// the resolved target's kind — decides. See `ReferenceSite.inCalleePosition`
|
|
229
|
+
// and `tryEmitEdge`.
|
|
230
|
+
const readNode = nodeMap['@reference.read'];
|
|
231
|
+
if (readNode !== undefined && isCalleeOfMemberCall(readNode)) {
|
|
232
|
+
grouped['@reference.callee-position'] = CALLEE_POSITION_MARKER;
|
|
233
|
+
}
|
|
234
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
235
|
+
// expression, so resolution can type it by folding over structure
|
|
236
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
237
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
238
|
+
// all leave `grouped` untouched.
|
|
239
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
144
240
|
out.push(grouped);
|
|
145
241
|
}
|
|
146
242
|
// Layer on type-binding synthesis (new/make/qualified composite literal)
|
|
@@ -241,7 +337,12 @@ function synthesizeGoInheritanceReferences(root) {
|
|
|
241
337
|
continue;
|
|
242
338
|
// `field.type` is the embedded base — bare/qualified/generic, with any
|
|
243
339
|
// `*` pointer marker as an unnamed sibling token (already unwrapped).
|
|
244
|
-
|
|
340
|
+
// That token is the ONLY record of `*T` versus `T`, and the two have
|
|
341
|
+
// different method sets, so read it off the field text before it is
|
|
342
|
+
// lost. An embedded field has no name, so a leading `*` can only be
|
|
343
|
+
// the pointer marker.
|
|
344
|
+
const embeddedAsPointer = field.text.trimStart().startsWith('*');
|
|
345
|
+
emitGoEmbedInheritance(field.childForFieldName('type'), out, embeddedAsPointer);
|
|
245
346
|
}
|
|
246
347
|
}
|
|
247
348
|
else if (typeNode.type === 'interface_type') {
|
|
@@ -252,7 +353,8 @@ function synthesizeGoInheritanceReferences(root) {
|
|
|
252
353
|
// `shouldSkipExtends`); a single-element `type_elem` is the embed.
|
|
253
354
|
if (elem.type !== 'type_elem' || elem.namedChildCount !== 1)
|
|
254
355
|
continue;
|
|
255
|
-
|
|
356
|
+
// An interface embed is never a pointer form.
|
|
357
|
+
emitGoEmbedInheritance(elem.namedChild(0), out, false);
|
|
256
358
|
}
|
|
257
359
|
}
|
|
258
360
|
}
|
|
@@ -264,7 +366,7 @@ function synthesizeGoInheritanceReferences(root) {
|
|
|
264
366
|
* node, reducing the name to its bare simple identifier. No-ops when `baseNode`
|
|
265
367
|
* is null or not one of the embed shapes.
|
|
266
368
|
*/
|
|
267
|
-
function emitGoEmbedInheritance(baseNode, out) {
|
|
369
|
+
function emitGoEmbedInheritance(baseNode, out, embeddedAsPointer) {
|
|
268
370
|
if (baseNode === null)
|
|
269
371
|
return;
|
|
270
372
|
const nameNode = goEmbedBaseNameNode(baseNode);
|
|
@@ -273,6 +375,9 @@ function emitGoEmbedInheritance(baseNode, out) {
|
|
|
273
375
|
out.push({
|
|
274
376
|
'@reference.inherits': nodeToCapture('@reference.inherits', baseNode),
|
|
275
377
|
'@reference.name': nodeToCapture('@reference.name', nameNode),
|
|
378
|
+
// Added ONLY for the pointer form, so a value embed's capture set is
|
|
379
|
+
// byte-identical to what it was before this marker existed.
|
|
380
|
+
...(embeddedAsPointer ? { '@reference.embedded-pointer': EMBEDDED_POINTER_MARKER } : {}),
|
|
276
381
|
});
|
|
277
382
|
}
|
|
278
383
|
/**
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ParsedFile, SymbolDefinition } from '../../../../_shared/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Stamp every generic interface in `parsedFiles` with its type-parameter names,
|
|
4
|
+
* read out of the declaration's own source text.
|
|
5
|
+
*
|
|
6
|
+
* WHY SOURCE TEXT AND NOT A CAPTURE. The tree has the list right there
|
|
7
|
+
* (`type_spec` carries a `type_parameters` field), and capturing it would be two
|
|
8
|
+
* lines. But captures run inside the PARSE WORKER, whose script is resolved from
|
|
9
|
+
* the compiled `dist/` build, and their output is additionally memoized by the
|
|
10
|
+
* parse cache and the durable ParsedFile store — so a capture-side change is
|
|
11
|
+
* invisible until a rebuild AND a cache-version bump, and silently wrong in
|
|
12
|
+
* between. Everything here runs on the main thread from data the pipeline
|
|
13
|
+
* already materialized, so it is correct on the first run and needs neither.
|
|
14
|
+
*
|
|
15
|
+
* The scan is exact rather than a grep over the file: an interface declaration
|
|
16
|
+
* owns a `Class` scope whose range spans exactly its `type_spec`
|
|
17
|
+
* (`Repo[T any] interface{ … }`), so the text is sliced by that range and the
|
|
18
|
+
* type parameters are, by grammar, whatever sits between the brackets that
|
|
19
|
+
* IMMEDIATELY follow the name. Comments and strings elsewhere in the file cannot
|
|
20
|
+
* reach it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function stampGoInterfaceTypeParameters(parsedFiles: readonly ParsedFile[], fileContents: ReadonlyMap<string, string>): void;
|
|
23
|
+
/** Read back a stamp, rejecting anything whose shape does not match — the
|
|
24
|
+
* sidecar is optional and a hand-built fixture def carries none. */
|
|
25
|
+
export declare function readGoTypeParameters(def: SymbolDefinition): readonly string[] | undefined;
|
|
26
|
+
/** Index of the delimiter closing the one at `open`, or -1 when unbalanced.
|
|
27
|
+
* Tracks `[]`, `{}` and `()` together so an `interface{ M(a, b int) }`
|
|
28
|
+
* constraint cannot end the list early. */
|
|
29
|
+
export declare function matchingGoDelimiter(text: string, open: number): number;
|
|
30
|
+
/** Split on commas that are not nested inside brackets, braces or parens. */
|
|
31
|
+
export declare function splitTopLevelGoList(text: string): string[];
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stamp every generic interface in `parsedFiles` with its type-parameter names,
|
|
3
|
+
* read out of the declaration's own source text.
|
|
4
|
+
*
|
|
5
|
+
* WHY SOURCE TEXT AND NOT A CAPTURE. The tree has the list right there
|
|
6
|
+
* (`type_spec` carries a `type_parameters` field), and capturing it would be two
|
|
7
|
+
* lines. But captures run inside the PARSE WORKER, whose script is resolved from
|
|
8
|
+
* the compiled `dist/` build, and their output is additionally memoized by the
|
|
9
|
+
* parse cache and the durable ParsedFile store — so a capture-side change is
|
|
10
|
+
* invisible until a rebuild AND a cache-version bump, and silently wrong in
|
|
11
|
+
* between. Everything here runs on the main thread from data the pipeline
|
|
12
|
+
* already materialized, so it is correct on the first run and needs neither.
|
|
13
|
+
*
|
|
14
|
+
* The scan is exact rather than a grep over the file: an interface declaration
|
|
15
|
+
* owns a `Class` scope whose range spans exactly its `type_spec`
|
|
16
|
+
* (`Repo[T any] interface{ … }`), so the text is sliced by that range and the
|
|
17
|
+
* type parameters are, by grammar, whatever sits between the brackets that
|
|
18
|
+
* IMMEDIATELY follow the name. Comments and strings elsewhere in the file cannot
|
|
19
|
+
* reach it.
|
|
20
|
+
*/
|
|
21
|
+
export function stampGoInterfaceTypeParameters(parsedFiles, fileContents) {
|
|
22
|
+
for (const parsed of parsedFiles) {
|
|
23
|
+
// Deferred so a file with no interface declaration never indexes its lines.
|
|
24
|
+
let lines;
|
|
25
|
+
for (const scope of parsed.scopes) {
|
|
26
|
+
if (scope.kind !== 'Class')
|
|
27
|
+
continue;
|
|
28
|
+
const iface = scope.ownedDefs.find((def) => def.type === 'Interface');
|
|
29
|
+
if (iface?.qualifiedName === undefined)
|
|
30
|
+
continue;
|
|
31
|
+
if (lines === undefined) {
|
|
32
|
+
const source = fileContents.get(parsed.filePath);
|
|
33
|
+
if (source === undefined)
|
|
34
|
+
break;
|
|
35
|
+
lines = { source, starts: buildLineStarts(source) };
|
|
36
|
+
}
|
|
37
|
+
const declaration = sliceRange(lines.source, lines.starts, scope.range);
|
|
38
|
+
if (declaration === undefined)
|
|
39
|
+
continue;
|
|
40
|
+
const names = goTypeParameterNames(declaration, simpleGoName(iface.qualifiedName));
|
|
41
|
+
if (names === undefined)
|
|
42
|
+
continue;
|
|
43
|
+
iface.goTypeParameters = names;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Read back a stamp, rejecting anything whose shape does not match — the
|
|
48
|
+
* sidecar is optional and a hand-built fixture def carries none. */
|
|
49
|
+
export function readGoTypeParameters(def) {
|
|
50
|
+
const names = def.goTypeParameters;
|
|
51
|
+
if (!Array.isArray(names) || names.length === 0)
|
|
52
|
+
return undefined;
|
|
53
|
+
return names.every((name) => typeof name === 'string') ? names : undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The declared type-parameter names of `Name[…] interface{…}`, in source order,
|
|
57
|
+
* or `undefined` when the declaration is not generic.
|
|
58
|
+
*
|
|
59
|
+
* Go spec, Type parameter declarations: the list is comma-separated and one
|
|
60
|
+
* entry may declare SEVERAL names sharing one constraint — `[K, V any]` declares
|
|
61
|
+
* `K` and `V`, and `[S ~[]E, E any]` declares `S` and `E`. Each entry therefore
|
|
62
|
+
* contributes exactly its FIRST token as a name; anything after it is the
|
|
63
|
+
* constraint, which is not needed here (satisfaction of a constraint is a
|
|
64
|
+
* separate question from implementation of an interface, and constraints are
|
|
65
|
+
* never harvested as instantiations — see `interface-impls.ts`).
|
|
66
|
+
*/
|
|
67
|
+
function goTypeParameterNames(declaration, interfaceName) {
|
|
68
|
+
if (!declaration.startsWith(interfaceName))
|
|
69
|
+
return undefined;
|
|
70
|
+
if (declaration[interfaceName.length] !== '[')
|
|
71
|
+
return undefined;
|
|
72
|
+
const close = matchingGoDelimiter(declaration, interfaceName.length);
|
|
73
|
+
if (close === -1)
|
|
74
|
+
return undefined;
|
|
75
|
+
const names = [];
|
|
76
|
+
for (const entry of splitTopLevelGoList(declaration.slice(interfaceName.length + 1, close))) {
|
|
77
|
+
const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(entry)?.[0];
|
|
78
|
+
if (name === undefined)
|
|
79
|
+
return undefined;
|
|
80
|
+
names.push(name);
|
|
81
|
+
}
|
|
82
|
+
return names.length === 0 ? undefined : names;
|
|
83
|
+
}
|
|
84
|
+
/** Index of the delimiter closing the one at `open`, or -1 when unbalanced.
|
|
85
|
+
* Tracks `[]`, `{}` and `()` together so an `interface{ M(a, b int) }`
|
|
86
|
+
* constraint cannot end the list early. */
|
|
87
|
+
export function matchingGoDelimiter(text, open) {
|
|
88
|
+
let depth = 0;
|
|
89
|
+
for (let i = open; i < text.length; i += 1) {
|
|
90
|
+
const ch = text[i];
|
|
91
|
+
if (ch === '[' || ch === '{' || ch === '(')
|
|
92
|
+
depth += 1;
|
|
93
|
+
else if (ch === ']' || ch === '}' || ch === ')') {
|
|
94
|
+
depth -= 1;
|
|
95
|
+
if (depth === 0)
|
|
96
|
+
return i;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return -1;
|
|
100
|
+
}
|
|
101
|
+
/** Split on commas that are not nested inside brackets, braces or parens. */
|
|
102
|
+
export function splitTopLevelGoList(text) {
|
|
103
|
+
const parts = [];
|
|
104
|
+
let depth = 0;
|
|
105
|
+
let start = 0;
|
|
106
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
107
|
+
const ch = text[i];
|
|
108
|
+
if (ch === '[' || ch === '{' || ch === '(')
|
|
109
|
+
depth += 1;
|
|
110
|
+
else if (ch === ']' || ch === '}' || ch === ')')
|
|
111
|
+
depth -= 1;
|
|
112
|
+
else if (ch === ',' && depth === 0) {
|
|
113
|
+
parts.push(text.slice(start, i));
|
|
114
|
+
start = i + 1;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
parts.push(text.slice(start));
|
|
118
|
+
return parts.map((part) => part.trim()).filter((part) => part.length > 0);
|
|
119
|
+
}
|
|
120
|
+
function simpleGoName(qualifiedName) {
|
|
121
|
+
const dot = qualifiedName.lastIndexOf('.');
|
|
122
|
+
return dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1);
|
|
123
|
+
}
|
|
124
|
+
/** Offsets at which each 1-based line begins. */
|
|
125
|
+
function buildLineStarts(source) {
|
|
126
|
+
const starts = [0, 0];
|
|
127
|
+
for (let i = 0; i < source.length; i += 1) {
|
|
128
|
+
if (source[i] === '\n')
|
|
129
|
+
starts.push(i + 1);
|
|
130
|
+
}
|
|
131
|
+
return starts;
|
|
132
|
+
}
|
|
133
|
+
/** `Range` is 1-based on lines and 0-based on columns (`syntheticCapture`). */
|
|
134
|
+
function sliceRange(source, lineStarts, range) {
|
|
135
|
+
const start = lineStarts[range.startLine];
|
|
136
|
+
const end = lineStarts[range.endLine];
|
|
137
|
+
if (start === undefined || end === undefined)
|
|
138
|
+
return undefined;
|
|
139
|
+
return source.slice(start + range.startCol, end + range.endCol);
|
|
140
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { GoModuleConfig } from '../../language-config.js';
|
|
2
1
|
/**
|
|
3
2
|
* Resolve a Go import path to ALL .go files in the matching package directory.
|
|
4
3
|
*
|
|
@@ -8,14 +7,8 @@ import type { GoModuleConfig } from '../../language-config.js';
|
|
|
8
7
|
* IMPORTS edge fanout AND binding materialization for every exported symbol in
|
|
9
8
|
* the package.
|
|
10
9
|
*
|
|
11
|
-
* Strategy
|
|
12
|
-
* 1. go.mod
|
|
13
|
-
* 2.
|
|
10
|
+
* Strategy:
|
|
11
|
+
* 1. With go.mod: resolve only imports owned by that module
|
|
12
|
+
* 2. Without go.mod / GOPATH: progressively shorter directory suffixes
|
|
14
13
|
*/
|
|
15
14
|
export declare function resolveGoImportTarget(targetRaw: string, _fromFile: string, allFilePaths: ReadonlySet<string>, resolutionConfig?: unknown): string | readonly string[] | null;
|
|
16
|
-
/** Preserved for backward compat. */
|
|
17
|
-
export interface GoResolveContext {
|
|
18
|
-
readonly fromFile: string;
|
|
19
|
-
readonly allFilePaths: ReadonlySet<string>;
|
|
20
|
-
readonly goModule?: GoModuleConfig;
|
|
21
|
-
}
|