gitnexus 1.6.10-rc.99 → 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/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 +77 -32
- 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 +15 -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 +309 -15
- 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/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 +297 -15
- package/dist/core/ingestion/utils/ast-helpers.js +578 -46
- 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 -6
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -441
- package/dist/storage/repo-manager.js +312 -221
- 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
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - propagatesReturnTypesAcrossImports (default true)
|
|
16
16
|
* - fieldFallbackOnMethodLookup (default true — turn OFF for
|
|
17
17
|
* statically-typed languages; the heuristic over-connects)
|
|
18
|
-
* -
|
|
18
|
+
* - elementTypeOf — container element type, by subscript or accessor
|
|
19
19
|
* - collapseMemberCallsByCallerTarget — one edge per caller/target
|
|
20
20
|
* - populateNamespaceSiblings — cross-file implicit visibility
|
|
21
21
|
* - hoistTypeBindingsToModule — enable ONLY when method return
|
|
@@ -113,13 +113,24 @@
|
|
|
113
113
|
* 3. Case 0.5 implicit-`this` chain walk — GATED: fires only for
|
|
114
114
|
* languages that set `resolveThisViaEnclosingClass === true`;
|
|
115
115
|
* it intercepts every bare-`this` call/read/write site ahead of
|
|
116
|
-
* Case 4 and does NOT emit
|
|
117
|
-
*
|
|
118
|
-
*
|
|
116
|
+
* Case 4 and does NOT emit the interface-dispatch fan-out that
|
|
117
|
+
* Cases 0, 3b and 4 all perform (Case 0 gained it in #2829 and
|
|
118
|
+
* Case 3b in #2832, leaving 0.5 the only INSTANCE-receiver case
|
|
119
|
+
* that folds or walks to a receiver type without fanning out.
|
|
120
|
+
* Read that narrowly: Case 2 also walks an MRO and its binding
|
|
121
|
+
* admits `Interface`, but its receiver IS the type name, so the
|
|
122
|
+
* site is static dispatch and a fan-out would be wrong; Cases 3
|
|
123
|
+
* and 5 resolve by direct lookup rather than a fold or MRO walk,
|
|
124
|
+
* and no language is known to reach Case 3 with an Interface —
|
|
125
|
+
* every one that could strips the namespace qualifier first,
|
|
126
|
+
* sending it to Case 4), so enabling the toggle
|
|
127
|
+
* for a language changes that language's `this` dispatch
|
|
128
|
+
* semantics (see the toggle's doc below)
|
|
119
129
|
* 4. Case 1 namespace-receiver
|
|
120
130
|
* 5. Case 2 class-name receiver
|
|
121
131
|
* 6. Case 3 dotted typeBinding for namespace prefix
|
|
122
|
-
* 7. Case 3b chain-typebinding (compound resolver
|
|
132
|
+
* 7. Case 3b chain-typebinding (compound resolver + interface-dispatch
|
|
133
|
+
* fan-out on an Interface fold, #2832)
|
|
123
134
|
* 8. Case 4 simple typeBinding (MRO walk + findOwnedMember)
|
|
124
135
|
* Reordering or merging cases changes resolution semantics. The
|
|
125
136
|
* numbering is part of the contract — keep the comments.
|
|
@@ -267,6 +278,7 @@
|
|
|
267
278
|
* Plan that introduced most of these invariants:
|
|
268
279
|
* `docs/plans/2026-04-20-001-refactor-emit-pipeline-generalization-plan.md`.
|
|
269
280
|
*/
|
|
281
|
+
import type { DecorationStripper } from '../scope/walkers.js';
|
|
270
282
|
import type { BindingRef, Callsite, ConstraintContext, ParsedFile, ParsedImport, ReferenceSite, ScopeId, SupportedLanguages, SymbolDefinition } from '../../../../_shared/index.js';
|
|
271
283
|
import type { KnowledgeGraph } from '../../../graph/types.js';
|
|
272
284
|
import type { GraphNodeLookup } from '../graph-bridge/node-lookup.js';
|
|
@@ -274,6 +286,8 @@ import { LanguageProvider } from '../../language-provider.js';
|
|
|
274
286
|
import { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
275
287
|
import type { SemanticModel } from '../../model/semantic-model.js';
|
|
276
288
|
import type { ConversionRankFn } from '../passes/overload-narrowing.js';
|
|
289
|
+
import type { HeritageTypeArgumentSink } from '../utils/generic-instantiation.js';
|
|
290
|
+
import type { WorkspaceResolutionIndex } from '../workspace-index.js';
|
|
277
291
|
/** A LinearizeStrategy receives the full ancestor map so C3-style
|
|
278
292
|
* algorithms (which need to merge each parent's MRO) can implement
|
|
279
293
|
* themselves. Python's depth-first first-seen only consumes
|
|
@@ -295,6 +309,52 @@ export interface ImportResolutionContext {
|
|
|
295
309
|
/** Re-exported for ScopeResolver consumers — same shape as
|
|
296
310
|
* `RegistryProviders.constraintCompatibility`'s third parameter. */
|
|
297
311
|
export type { ConstraintContext } from '../../../../_shared/index.js';
|
|
312
|
+
/** How a container's element was reached in the source. */
|
|
313
|
+
export type ElementAccessRoute = {
|
|
314
|
+
readonly kind: 'index';
|
|
315
|
+
} | {
|
|
316
|
+
readonly kind: 'accessor';
|
|
317
|
+
readonly name: string;
|
|
318
|
+
};
|
|
319
|
+
/** One structurally-detected implementor plus the receiver form in which it
|
|
320
|
+
* satisfies the interface (see `detectInterfaceImplementations`). */
|
|
321
|
+
export interface StructuralImplementor {
|
|
322
|
+
readonly structDefId: string;
|
|
323
|
+
readonly receiverForm: 'value' | 'pointer';
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* One interface whose satisfaction check could not be COMPLETED for at least
|
|
327
|
+
* one candidate type — not one that was checked and came out negative.
|
|
328
|
+
*
|
|
329
|
+
* The distinction is the whole point (#2873): a detector that reports only
|
|
330
|
+
* positives makes "nobody implements this" and "we could not tell whether
|
|
331
|
+
* anybody implements this" byte-identical, and the second one silently becomes
|
|
332
|
+
* a confident zero in `impact`. Consumers must not turn these into edges; they
|
|
333
|
+
* exist so a query can say it is answering with a lower bound.
|
|
334
|
+
*/
|
|
335
|
+
export interface UndecidedSatisfaction {
|
|
336
|
+
readonly interfaceDefId: string;
|
|
337
|
+
readonly interfaceName: string;
|
|
338
|
+
readonly filePath: string;
|
|
339
|
+
/** How many candidate types went unjudged for this interface. */
|
|
340
|
+
readonly undecidedCandidates: number;
|
|
341
|
+
/**
|
|
342
|
+
* The candidate types themselves, by name.
|
|
343
|
+
*
|
|
344
|
+
* Both sides are recorded because a query arrives from either one. Asking
|
|
345
|
+
* `impact` about the IMPLEMENTATION — the case #2873 reports — never touches
|
|
346
|
+
* the interface node at all: the walk starts at a method whose owner has no
|
|
347
|
+
* heritage edge precisely because the check was undecided, so an
|
|
348
|
+
* interface-keyed record alone would leave that query unhedged.
|
|
349
|
+
*/
|
|
350
|
+
readonly candidateNames: readonly string[];
|
|
351
|
+
}
|
|
352
|
+
/** What `detectInterfaceImplementations` answers: the positives, plus the
|
|
353
|
+
* questions it could not answer. */
|
|
354
|
+
export interface StructuralImplementationResult {
|
|
355
|
+
readonly implementations: Map<string, readonly StructuralImplementor[]>;
|
|
356
|
+
readonly undecided: readonly UndecidedSatisfaction[];
|
|
357
|
+
}
|
|
298
358
|
export interface ScopeResolver {
|
|
299
359
|
/** Identity for telemetry + per-language flag check. */
|
|
300
360
|
readonly language: SupportedLanguages;
|
|
@@ -331,6 +391,12 @@ export interface ScopeResolver {
|
|
|
331
391
|
* when a PSR-4 import names a function instead of a file.
|
|
332
392
|
*/
|
|
333
393
|
resolveImportTarget(targetRaw: string, fromFile: string, allFilePaths: ReadonlySet<string>, resolutionConfig?: unknown, context?: ImportResolutionContext): string | readonly string[] | null;
|
|
394
|
+
/**
|
|
395
|
+
* Optionally reclassify an import as a namespace handle after target
|
|
396
|
+
* resolution proves the imported name is itself a module. Returning false
|
|
397
|
+
* retains ordinary named-binding behavior.
|
|
398
|
+
*/
|
|
399
|
+
readonly isNamespaceImport?: (parsedImport: ParsedImport, targetFile: string, fromFile: string) => boolean;
|
|
334
400
|
/**
|
|
335
401
|
* Enumerate names visible through a wildcard import after the target
|
|
336
402
|
* module scope has been linked. Languages that do not support
|
|
@@ -456,9 +522,19 @@ export interface ScopeResolver {
|
|
|
456
522
|
* shape. Must be idempotent (the orchestrator may call it more than once
|
|
457
523
|
* during re-resolution).
|
|
458
524
|
*
|
|
525
|
+
* `recordTypeArguments` is the same sink `preEmitInheritanceEdges` writes to:
|
|
526
|
+
* the generic INSTANTIATION a heritage clause was written with, so
|
|
527
|
+
* interface-dispatch fan-out can refuse an implementor of an incompatible one
|
|
528
|
+
* (#2912). An implementation that emits an edge for a generic base
|
|
529
|
+
* (`impl Validator<String> for V`, `class V implements Validator<String>`)
|
|
530
|
+
* should call it with the same (source, target) graph ids it just used;
|
|
531
|
+
* anything not recorded reads as "unknown" and keeps the pre-#2912 fan-out.
|
|
532
|
+
* Ignoring it entirely is correct for a language whose heritage carries no
|
|
533
|
+
* type arguments (Ruby `include`).
|
|
534
|
+
*
|
|
459
535
|
* Default: undefined (no extra heritage edges needed).
|
|
460
536
|
*/
|
|
461
|
-
readonly emitHeritageEdges?: (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, scopes?: ScopeResolutionIndexes) => void;
|
|
537
|
+
readonly emitHeritageEdges?: (graph: KnowledgeGraph, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup, scopes?: ScopeResolutionIndexes, recordTypeArguments?: HeritageTypeArgumentSink) => void;
|
|
462
538
|
/**
|
|
463
539
|
* Optional hook to emit IMPORTS edges that no syntactic import
|
|
464
540
|
* statement produces. Some languages grant files implicit visibility
|
|
@@ -610,19 +686,56 @@ export interface ScopeResolver {
|
|
|
610
686
|
*/
|
|
611
687
|
readonly fieldFallbackOnMethodLookup?: boolean;
|
|
612
688
|
/**
|
|
613
|
-
*
|
|
614
|
-
*
|
|
615
|
-
*
|
|
616
|
-
*
|
|
617
|
-
*
|
|
618
|
-
*
|
|
619
|
-
*
|
|
620
|
-
*
|
|
621
|
-
*
|
|
622
|
-
*
|
|
623
|
-
*
|
|
689
|
+
* Element type of a container, reached either by a subscript (`repos[0]`) or
|
|
690
|
+
* by a property-style collection view (`dict.Values`). Returns the element
|
|
691
|
+
* type's simple name, or `undefined` when the container does not unwrap by
|
|
692
|
+
* that route — in which case the caller resumes its normal walk.
|
|
693
|
+
*
|
|
694
|
+
* ONE hook for both routes, deliberately. They were previously two
|
|
695
|
+
* (`unwrapCollectionAccessor` for the property route, `unwrapCollectionElement`
|
|
696
|
+
* for the subscript route), which meant a language implementing one silently
|
|
697
|
+
* got nothing for the other: C# parsed `Dictionary<K,V>` for `.Values` but
|
|
698
|
+
* returned nothing for `list[0]`, and TypeScript did the reverse. Two entries
|
|
699
|
+
* answering one question, each accreting an implementation per language.
|
|
700
|
+
*
|
|
701
|
+
* `via` carries the route so a provider can distinguish them where it matters
|
|
702
|
+
* (a `Dictionary` yields its VALUE type by subscript but either type by
|
|
703
|
+
* accessor name); a provider that does not care can ignore it.
|
|
704
|
+
*
|
|
705
|
+
* Consulted ONLY where the source actually performed the access. It is NOT a
|
|
706
|
+
* general type-name normalizer: unwrapping a container at a bare class lookup
|
|
707
|
+
* would let `repos.find(x)` fold to `Repo.find`, because a container's member
|
|
708
|
+
* set is not its element's. For the same reason it is deliberately separate
|
|
709
|
+
* from `stripTypePreservingDecoration`: a pointer or a nullable leaves the
|
|
710
|
+
* member set unchanged and is safe to strip at the lookup; a container is not.
|
|
711
|
+
*
|
|
712
|
+
* ## The `index` route is REQUIRED, and `undefined` means "not a container"
|
|
713
|
+
*
|
|
714
|
+
* A language that leaves the `index` route unanswered gets NO index folding —
|
|
715
|
+
* the structural fold declines the step rather than passing the position
|
|
716
|
+
* through. That is not a default worth softening. `undefined` used to mean
|
|
717
|
+
* "fall back to identity", on the theory that a capture layer which already
|
|
718
|
+
* reduced the container (Go's `normalizeGoTypeName`, C#/TypeScript's
|
|
719
|
+
* `stripGeneric`) leaves nothing to unwrap. The theory holds for a container;
|
|
720
|
+
* it is false for an ordinary class the source happened to subscript, and
|
|
721
|
+
* `rawName` cannot tell those apart — `repos: User[]` and `grid: Grid` both
|
|
722
|
+
* arrive as a bare resolvable class name. Identity there typed `grid[0].run()`
|
|
723
|
+
* as `Grid.run` and `t[0].Render()` as `Table.Render`: a wrong owner, which
|
|
724
|
+
* this pipeline ranks strictly below a missing edge.
|
|
725
|
+
*
|
|
726
|
+
* The hook is therefore handed `TypeRef.declaredSpelling` — the annotation AS
|
|
727
|
+
* WRITTEN, retained by the scope extractor precisely because capture-time
|
|
728
|
+
* normalization destroys it — falling back to `rawName` only when nothing was
|
|
729
|
+
* normalized away. So a provider sees `User[]`, `List[User]`, `[]*User` or
|
|
730
|
+
* `Dictionary<string, User>`, never the post-reduction `User`, and answering
|
|
731
|
+
* `undefined` for a spelling it does not recognize as a container is an
|
|
732
|
+
* ANSWER, not an absence.
|
|
733
|
+
*
|
|
734
|
+
* Implementations may return a still-DECORATED element name (Go's `[]*User`
|
|
735
|
+
* yields `*User`): the index step looks the element up through
|
|
736
|
+
* `stripTypePreservingDecoration`, so the pointer resolves.
|
|
624
737
|
*/
|
|
625
|
-
readonly
|
|
738
|
+
readonly elementTypeOf?: (containerType: string, via: ElementAccessRoute) => string | undefined;
|
|
626
739
|
/**
|
|
627
740
|
* Collapse member-call CALLS edges by `(caller, target)` rather
|
|
628
741
|
* than per-site. Default `false` — scope-resolution's contract
|
|
@@ -667,6 +780,57 @@ export interface ScopeResolver {
|
|
|
667
780
|
* Swift — opt in.
|
|
668
781
|
*/
|
|
669
782
|
readonly constructorCallTargetsClass?: boolean;
|
|
783
|
+
/**
|
|
784
|
+
* How this language spells a construction expression, so the compound
|
|
785
|
+
* receiver resolver can type an INLINE constructor receiver — the
|
|
786
|
+
* `Service(db).do_work()` shape, where the receiver is the constructed
|
|
787
|
+
* value itself rather than a binding that holds it (#2708).
|
|
788
|
+
*
|
|
789
|
+
* The rule is the same in every language ("constructing a class yields
|
|
790
|
+
* an instance of that class"); only the surface syntax differs, so the
|
|
791
|
+
* syntax is declared here and the rule lives once in
|
|
792
|
+
* `resolveCompoundReceiverClass`:
|
|
793
|
+
*
|
|
794
|
+
* - `bare: true` — `Service(db).m()` (Python)
|
|
795
|
+
* - `keyword: 'new'` — `new Service(db).m()` (JS/TS, C#)
|
|
796
|
+
* - `selector: 'new'` — `Service.new.m()` (Ruby)
|
|
797
|
+
*
|
|
798
|
+
* Java is deliberately NOT wired even though it spells construction with
|
|
799
|
+
* `new`: its capture layer already rewrites an `object_creation_expression`
|
|
800
|
+
* receiver to the constructed type's simple name (#2564), so the raw
|
|
801
|
+
* `new Svc()` text never reaches this resolver and the declaration would be
|
|
802
|
+
* unreachable. Measured both ways — Java resolves the shape identically with
|
|
803
|
+
* and without it.
|
|
804
|
+
*
|
|
805
|
+
* Opting in is per-language ON PURPOSE rather than universal, for two
|
|
806
|
+
* reasons. Correctness: `bare` would mistype `stat(&st).field` in C,
|
|
807
|
+
* where a struct and a function may share a name and the free call is
|
|
808
|
+
* NOT a construction. Evidence: PHP, Swift, Dart and Kotlin already
|
|
809
|
+
* resolve this shape through their own capture-side paths (verified
|
|
810
|
+
* per language — the receiver typing here changed nothing for them),
|
|
811
|
+
* so they stay unwired rather than carrying a redundant declaration.
|
|
812
|
+
*
|
|
813
|
+
* Only affects receiver TYPING. Which node a construction call links
|
|
814
|
+
* to is a separate question, owned by `constructorCallTargetsClass`.
|
|
815
|
+
* Path-syntax constructors (Rust `Foo::new(x)`) are not covered — they
|
|
816
|
+
* are not member calls and never reach this resolver.
|
|
817
|
+
*/
|
|
818
|
+
readonly constructionSyntax?: {
|
|
819
|
+
/** A free call naming a class constructs it: `Service(db)`. */
|
|
820
|
+
readonly bare?: boolean;
|
|
821
|
+
/** Prefix keyword form: `new Service(db)`. */
|
|
822
|
+
readonly keyword?: string;
|
|
823
|
+
/** Member-selector form on the class itself: `Service.new(db)`.
|
|
824
|
+
* Applies only when the receiver names the CLASS — `factory.new` is an
|
|
825
|
+
* ordinary call to a member named `new` on an instance and keeps normal
|
|
826
|
+
* member resolution. KNOWN LIMITATION: a class that OVERRIDES the
|
|
827
|
+
* selector at class level (Ruby `def self.new` returning some other
|
|
828
|
+
* type) is still read as construction, because the scope model records
|
|
829
|
+
* no staticness for a member, so `def new` and `def self.new` are
|
|
830
|
+
* indistinguishable here. Modelling that needs per-member staticness
|
|
831
|
+
* from the language provider first. */
|
|
832
|
+
readonly selector?: string;
|
|
833
|
+
};
|
|
670
834
|
/**
|
|
671
835
|
* Optional per-slot conversion-rank function for overload resolution.
|
|
672
836
|
* When provided, `narrowOverloadCandidates` uses ranked scoring as a
|
|
@@ -750,6 +914,24 @@ export interface ScopeResolver {
|
|
|
750
914
|
* receiver class is a dispatch candidate).
|
|
751
915
|
*/
|
|
752
916
|
readonly isStaticOnly?: (def: SymbolDefinition) => boolean;
|
|
917
|
+
/**
|
|
918
|
+
* Optional canonicalizer for a written GENERIC TYPE ARGUMENT, so two
|
|
919
|
+
* spellings of one type compare equal during interface-dispatch
|
|
920
|
+
* instantiation matching (#2912).
|
|
921
|
+
*
|
|
922
|
+
* The case it exists for is a language with predefined ALIASES: C# `string`
|
|
923
|
+
* and `String` are the same type, so `IValidator<string>` must still fan out
|
|
924
|
+
* to `class V : IValidator<String>`. Without the hook the two spellings look
|
|
925
|
+
* like two instantiations and the implementor is pruned — a missing edge,
|
|
926
|
+
* which is the failure direction #2912 is most concerned to avoid.
|
|
927
|
+
*
|
|
928
|
+
* Called ONLY on the two sides of one argument comparison, never on a name
|
|
929
|
+
* used for lookup, so it may map to whatever canonical form the language
|
|
930
|
+
* prefers (`string` → `String`, or the reverse) as long as it is consistent.
|
|
931
|
+
* Languages whose types have one spelling each leave it undefined and the
|
|
932
|
+
* comparison stays exact.
|
|
933
|
+
*/
|
|
934
|
+
readonly normalizeTypeArgument?: (name: string) => string;
|
|
753
935
|
/**
|
|
754
936
|
* Optional predicate to gate free-call fallback emission by caller-side
|
|
755
937
|
* visibility. When provided, `pickUniqueGlobalCallable` rejects candidates
|
|
@@ -803,6 +985,39 @@ export interface ScopeResolver {
|
|
|
803
985
|
readonly startCol: number;
|
|
804
986
|
};
|
|
805
987
|
}, callerParsed: ParsedFile, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[]) => readonly SymbolDefinition[] | undefined;
|
|
988
|
+
/**
|
|
989
|
+
* Optional resolver for a module-qualified FREE call — a call written with
|
|
990
|
+
* an explicit path but no value receiver (Rust `tools::dispatch(...)`, where
|
|
991
|
+
* `tools` names a module, not a variable or a type).
|
|
992
|
+
*
|
|
993
|
+
* These sites are captured as free calls (`callForm === 'free'`) with the
|
|
994
|
+
* written path preserved in `site.rawQualifiedName`. Without this hook the
|
|
995
|
+
* qualifier is inert and the scope-chain walk resolves the bare tail name —
|
|
996
|
+
* which silently binds to a same-named definition in the CALLER's own file
|
|
997
|
+
* when one exists, producing a self-loop and dropping the real cross-module
|
|
998
|
+
* edge (#2730: `fn dispatch` in `sched.rs` calling `tools::dispatch`
|
|
999
|
+
* resolved to itself, so `impact` reported the central dispatcher as
|
|
1000
|
+
* risk LOW with 0 affected processes).
|
|
1001
|
+
*
|
|
1002
|
+
* `emitFreeCallFallback` invokes this BEFORE the implicit-`this` and
|
|
1003
|
+
* scope-chain lookups, so an explicit path outranks a lexical shadow.
|
|
1004
|
+
* Returning `undefined` (unqualified call, unknown module, or no such
|
|
1005
|
+
* member in the named module) falls through to the unchanged chain — the
|
|
1006
|
+
* hook is strictly additive and never removes an edge the prior tiers
|
|
1007
|
+
* would have produced.
|
|
1008
|
+
*
|
|
1009
|
+
* Languages whose qualified calls carry a value/type receiver (`x.foo()`,
|
|
1010
|
+
* `Type::foo()`) are served by the receiver-bound-calls pass and leave
|
|
1011
|
+
* this undefined.
|
|
1012
|
+
*/
|
|
1013
|
+
readonly resolveQualifiedFreeCall?: (site: {
|
|
1014
|
+
readonly name: string;
|
|
1015
|
+
readonly rawQualifiedName?: string;
|
|
1016
|
+
/** Needed to locate the calling MODULE, not just the calling file — a
|
|
1017
|
+
* relative anchor (`super::`) is resolved against the module the call
|
|
1018
|
+
* sits in, which may be an inline `mod` block inside that file. */
|
|
1019
|
+
readonly inScope: ScopeId;
|
|
1020
|
+
}, callerParsed: ParsedFile, scopes: ScopeResolutionIndexes, workspaceIndex: WorkspaceResolutionIndex, allFilePaths: ReadonlySet<string>) => SymbolDefinition | undefined;
|
|
806
1021
|
/**
|
|
807
1022
|
* Optional resolver for qualified-receiver member calls where the
|
|
808
1023
|
* receiver is a namespace (not a class) and ordinary scope-chain /
|
|
@@ -821,6 +1036,40 @@ export interface ScopeResolver {
|
|
|
821
1036
|
* `undefined` to fall through to the remaining cases.
|
|
822
1037
|
*/
|
|
823
1038
|
readonly resolveQualifiedReceiverMember?: (receiverName: string, memberName: string, callerScope: ScopeId, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], callsite?: Callsite) => SymbolDefinition | 'ambiguous' | undefined;
|
|
1039
|
+
/**
|
|
1040
|
+
* Every receiver spelling under which a namespace import's target is
|
|
1041
|
+
* reachable, and the file each spelling names (#2826). Returning
|
|
1042
|
+
* `undefined` keeps the shared default: the local binding name alone,
|
|
1043
|
+
* mapped to the edge's own target file.
|
|
1044
|
+
*
|
|
1045
|
+
* Python needs this because one `import a.b.c` statement binds THREE
|
|
1046
|
+
* spellings at once — `a`, `a.b` and `a.b.c` — each naming a DIFFERENT
|
|
1047
|
+
* file (`a/__init__.py`, `a/b/__init__.py`, `a/b/c.py`), while
|
|
1048
|
+
* `ImportEdge` carries only the leaf. The default keyed `a` (its
|
|
1049
|
+
* `localName`) to the LEAF, so `a.helper()` resolved into `a/b/c.py`
|
|
1050
|
+
* whenever that module happened to export `helper` — a wrong edge — and
|
|
1051
|
+
* `a.b.mid()` resolved to nothing at all.
|
|
1052
|
+
*
|
|
1053
|
+
* Shared code cannot derive this. Swift's `import Foo.Bar` produces an
|
|
1054
|
+
* edge shape identical to Python's (`localName: 'Foo'`,
|
|
1055
|
+
* `targetExportedName: 'Foo.Bar'`), yet there the FIRST segment is the
|
|
1056
|
+
* resolved target and `Foo.Bar` names a nested TYPE; keying it would hand
|
|
1057
|
+
* `resolveConstructionExpressionClass` an authoritative namespace — that
|
|
1058
|
+
* branch deliberately does not fall through on a miss — and break
|
|
1059
|
+
* `Foo.Bar(x)` construction that resolves correctly today. And the
|
|
1060
|
+
* `__init__.py` convention that turns a dotted prefix into a file is
|
|
1061
|
+
* Python's alone.
|
|
1062
|
+
*
|
|
1063
|
+
* `moduleFileExists` reports whether a path is a module the workspace
|
|
1064
|
+
* actually parsed, so a provider can propose a prefix file and have it
|
|
1065
|
+
* dropped when absent (a PEP-420 namespace package has no `__init__.py`)
|
|
1066
|
+
* rather than minting a key to a file that is not there.
|
|
1067
|
+
*/
|
|
1068
|
+
readonly namespaceReceiverPaths?: (edge: {
|
|
1069
|
+
readonly localName: string;
|
|
1070
|
+
readonly importPath: string;
|
|
1071
|
+
readonly targetFile: string;
|
|
1072
|
+
}, moduleFileExists: (filePath: string) => boolean) => readonly (readonly [spelling: string, targetFile: string])[] | undefined;
|
|
824
1073
|
/**
|
|
825
1074
|
* Optional language-specific member-lattice lookup. Runs for a resolved
|
|
826
1075
|
* simple receiver type before the generic flattened-MRO walk. Languages
|
|
@@ -887,6 +1136,38 @@ export interface ScopeResolver {
|
|
|
887
1136
|
* level bindings.
|
|
888
1137
|
*/
|
|
889
1138
|
readonly hoistTypeBindingsToModule?: boolean;
|
|
1139
|
+
/**
|
|
1140
|
+
* Strip ONE layer of type-preserving decoration off a declared type name,
|
|
1141
|
+
* or return `undefined` when there is nothing left to strip.
|
|
1142
|
+
*
|
|
1143
|
+
* Exists because a declared type is stored as written. Go's
|
|
1144
|
+
* `synthesizeGoReceiverBinding` keeps `typeNode.text`, so a pointer-receiver
|
|
1145
|
+
* method binds its receiver to the literal `*Host` — which matches no class
|
|
1146
|
+
* binding, so receiver-chain resolution declines at the base and every
|
|
1147
|
+
* `h.field.method()` in the dominant Go idiom loses its `CALLS` edge (#2766).
|
|
1148
|
+
* The stored binding is deliberately left decorated (`method-owners.ts`
|
|
1149
|
+
* consumes `*T` vs `T` to model Go's value and pointer method sets), so the
|
|
1150
|
+
* normalization belongs at LOOKUP, never as a rewrite of the binding.
|
|
1151
|
+
*
|
|
1152
|
+
* TYPE-PRESERVING ONLY. Pointer, reference, `const`, nullable, borrow,
|
|
1153
|
+
* deref-transparent smart pointer and sigil all leave the member set
|
|
1154
|
+
* unchanged. A CONTAINER — array, slice, map, `Option` — does not: stripping
|
|
1155
|
+
* one here would type `repos: Repo[]` as `Repo` and let `repos.find(x)` fold
|
|
1156
|
+
* to `Repo.find`, a confident wrong edge the ambiguity gate cannot catch
|
|
1157
|
+
* because `Repo` binds uniquely. Containers are unwrapped only by an index
|
|
1158
|
+
* step that consumed a subscript.
|
|
1159
|
+
*
|
|
1160
|
+
* Consulted ONLY after every undecorated lookup has failed, and only by
|
|
1161
|
+
* receiver-chain base and step resolution — the shared class lookup keeps
|
|
1162
|
+
* exact-name behaviour for its other ~two dozen callers, several of which are
|
|
1163
|
+
* shaped `findClassBindingInScope(...) ?? otherResolver(...)` and would have
|
|
1164
|
+
* their fallback suppressed by a global widening.
|
|
1165
|
+
*
|
|
1166
|
+
* Leave undefined for languages whose declared types carry no type-preserving
|
|
1167
|
+
* decoration. Measured: only Go needs it for a receiver base; Rust, C#, Swift,
|
|
1168
|
+
* TypeScript and C++ need it for field types.
|
|
1169
|
+
*/
|
|
1170
|
+
readonly stripTypePreservingDecoration?: DecorationStripper;
|
|
890
1171
|
/**
|
|
891
1172
|
* Whether the compound-receiver resolver should strip C-style cast
|
|
892
1173
|
* expressions from receiver-position text before resolving it —
|
|
@@ -913,7 +1194,7 @@ export interface ScopeResolver {
|
|
|
913
1194
|
*
|
|
914
1195
|
* A second opting language must extend the classifier grammar or
|
|
915
1196
|
* convert this toggle into a per-language classifier hook (the
|
|
916
|
-
* `
|
|
1197
|
+
* `elementTypeOf` pattern) — do not flip this flag for
|
|
917
1198
|
* another language as-is.
|
|
918
1199
|
*
|
|
919
1200
|
* Known non-goal: the compound-receiver options built from this
|
|
@@ -929,10 +1210,19 @@ export interface ScopeResolver {
|
|
|
929
1210
|
* Languages like Go use structural typing — a struct satisfies an
|
|
930
1211
|
* interface if its method set is a superset, without an explicit
|
|
931
1212
|
* `implements` keyword. Runs after finalize, before resolution passes.
|
|
932
|
-
* Returns: Map<interface_DefId,
|
|
1213
|
+
* Returns: Map<interface_DefId, StructuralImplementor[]>, where each entry
|
|
1214
|
+
* names the implementing type AND the form in which it implements.
|
|
1215
|
+
*
|
|
1216
|
+
* `receiverForm` is not a confidence signal — it is the language's own
|
|
1217
|
+
* distinction. In Go the method set of `T` and of `*T` differ (a
|
|
1218
|
+
* pointer-receiver method belongs only to `*T`), so `receiverForm: 'pointer'`
|
|
1219
|
+
* means the VALUE type does not implement the interface and only `*T` does.
|
|
1220
|
+
* `'value'` means both do. Consumers that only want blast radius can ignore
|
|
1221
|
+
* it; consumers reasoning about assignability must not.
|
|
1222
|
+
*
|
|
933
1223
|
* Default: undefined (no structural interface detection).
|
|
934
1224
|
*/
|
|
935
|
-
readonly detectInterfaceImplementations?: (parsedFiles: readonly ParsedFile[], indexes: ScopeResolutionIndexes, model: SemanticModel) =>
|
|
1225
|
+
readonly detectInterfaceImplementations?: (parsedFiles: readonly ParsedFile[], indexes: ScopeResolutionIndexes, model: SemanticModel) => StructuralImplementationResult;
|
|
936
1226
|
/**
|
|
937
1227
|
* Optional: mirror typeBindings from namespace-import target modules
|
|
938
1228
|
* into the importer's module scope. Languages like Go use namespace
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - propagatesReturnTypesAcrossImports (default true)
|
|
16
16
|
* - fieldFallbackOnMethodLookup (default true — turn OFF for
|
|
17
17
|
* statically-typed languages; the heuristic over-connects)
|
|
18
|
-
* -
|
|
18
|
+
* - elementTypeOf — container element type, by subscript or accessor
|
|
19
19
|
* - collapseMemberCallsByCallerTarget — one edge per caller/target
|
|
20
20
|
* - populateNamespaceSiblings — cross-file implicit visibility
|
|
21
21
|
* - hoistTypeBindingsToModule — enable ONLY when method return
|
|
@@ -113,13 +113,24 @@
|
|
|
113
113
|
* 3. Case 0.5 implicit-`this` chain walk — GATED: fires only for
|
|
114
114
|
* languages that set `resolveThisViaEnclosingClass === true`;
|
|
115
115
|
* it intercepts every bare-`this` call/read/write site ahead of
|
|
116
|
-
* Case 4 and does NOT emit
|
|
117
|
-
*
|
|
118
|
-
*
|
|
116
|
+
* Case 4 and does NOT emit the interface-dispatch fan-out that
|
|
117
|
+
* Cases 0, 3b and 4 all perform (Case 0 gained it in #2829 and
|
|
118
|
+
* Case 3b in #2832, leaving 0.5 the only INSTANCE-receiver case
|
|
119
|
+
* that folds or walks to a receiver type without fanning out.
|
|
120
|
+
* Read that narrowly: Case 2 also walks an MRO and its binding
|
|
121
|
+
* admits `Interface`, but its receiver IS the type name, so the
|
|
122
|
+
* site is static dispatch and a fan-out would be wrong; Cases 3
|
|
123
|
+
* and 5 resolve by direct lookup rather than a fold or MRO walk,
|
|
124
|
+
* and no language is known to reach Case 3 with an Interface —
|
|
125
|
+
* every one that could strips the namespace qualifier first,
|
|
126
|
+
* sending it to Case 4), so enabling the toggle
|
|
127
|
+
* for a language changes that language's `this` dispatch
|
|
128
|
+
* semantics (see the toggle's doc below)
|
|
119
129
|
* 4. Case 1 namespace-receiver
|
|
120
130
|
* 5. Case 2 class-name receiver
|
|
121
131
|
* 6. Case 3 dotted typeBinding for namespace prefix
|
|
122
|
-
* 7. Case 3b chain-typebinding (compound resolver
|
|
132
|
+
* 7. Case 3b chain-typebinding (compound resolver + interface-dispatch
|
|
133
|
+
* fan-out on an Interface fold, #2832)
|
|
123
134
|
* 8. Case 4 simple typeBinding (MRO walk + findOwnedMember)
|
|
124
135
|
* Reordering or merging cases changes resolution semantics. The
|
|
125
136
|
* numbering is part of the contract — keep the comments.
|
|
@@ -52,6 +52,9 @@ export declare function tryEmitEdge(graph: KnowledgeGraph, scopes: ScopeResoluti
|
|
|
52
52
|
startCol: number;
|
|
53
53
|
};
|
|
54
54
|
readonly kind: string;
|
|
55
|
+
/** See {@link isPhantomCalleeRead}. Set by the extractor from the
|
|
56
|
+
* language's `@reference.callee-position` marker; absent otherwise. */
|
|
57
|
+
readonly inCalleePosition?: boolean;
|
|
55
58
|
}, targetDef: SymbolDefinition, reason: string, seen: Set<string>, confidence?: number, collapseByCallerTarget?: boolean, calleeCapture?: CalleeIdCaptureCtx): boolean;
|
|
56
59
|
/**
|
|
57
60
|
* Variant of `tryEmitEdge` that takes a pre-resolved target graph id
|
|
@@ -65,6 +68,15 @@ export declare function tryEmitEdge(graph: KnowledgeGraph, scopes: ScopeResoluti
|
|
|
65
68
|
*
|
|
66
69
|
* All other invariants of `tryEmitEdge` apply: dedup key shape, collapse
|
|
67
70
|
* flag honoring, edge-type mapping, caller-id resolution.
|
|
71
|
+
*
|
|
72
|
+
* ONE deliberate exception: the {@link isPhantomCalleeRead} suppression is not
|
|
73
|
+
* applied here, because it keys on the target's node label and this entry point
|
|
74
|
+
* is handed an id rather than a def. Reachable only for a `read` site marked
|
|
75
|
+
* `inCalleePosition` whose receiver typed as an object-literal VALUE — a
|
|
76
|
+
* JS/TS-shaped registration. No language that sets the marker resolves through
|
|
77
|
+
* this bridge today (verified for Go, whose func-valued struct-literal fields
|
|
78
|
+
* resolve through the owned-member path instead). A language adding the marker
|
|
79
|
+
* must re-check this path.
|
|
68
80
|
*/
|
|
69
81
|
export declare function tryEmitEdgeWithExplicitTargetId(graph: KnowledgeGraph, scopes: ScopeResolutionIndexes, nodeLookup: GraphNodeLookup, site: {
|
|
70
82
|
readonly inScope: ScopeId;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* (or TypeScript-specific, etc.) logic. The dedup key is
|
|
15
15
|
* language-agnostic — no language needs to change it.
|
|
16
16
|
*/
|
|
17
|
+
import { CALL_TARGET_TYPES } from '../../model/symbol-table.js';
|
|
17
18
|
import { resolveCallerGraphId, resolveDefGraphId } from '../graph-bridge/ids.js';
|
|
18
19
|
/**
|
|
19
20
|
* Map a `Reference.kind` to a graph edge type. `import-use` is dropped
|
|
@@ -48,6 +49,38 @@ export function mapReferenceKindToEdgeType(kind) {
|
|
|
48
49
|
return undefined;
|
|
49
50
|
}
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Is this read site a PHANTOM — a duplicate of the call happening beside it?
|
|
54
|
+
*
|
|
55
|
+
* Some languages' member-read capture also matches the callee of a member call,
|
|
56
|
+
* so `obj.f()` produces a `call` site on `f` AND a `read` site on `obj.f` at the
|
|
57
|
+
* same position (Go's `@reference.read` matches every `selector_expression`).
|
|
58
|
+
* The capture layer marks that second site `inCalleePosition` rather than
|
|
59
|
+
* dropping it, because the two cases it covers are indistinguishable there:
|
|
60
|
+
*
|
|
61
|
+
* - tail resolves to a METHOD → phantom. The ACCESSES edge duplicates the
|
|
62
|
+
* CALLS edge emitted for the same source position; suppress it.
|
|
63
|
+
* - tail resolves to a FIELD → genuine. `h.dep.Work()` where
|
|
64
|
+
* `Work func() error` reads a func-typed struct field and calls the value
|
|
65
|
+
* it holds. That read is the field's only ACCESSES evidence — keep it.
|
|
66
|
+
*
|
|
67
|
+
* Only the resolved target's kind separates them, which is why this decision
|
|
68
|
+
* lives at emission and not in any language's capture code. Sites without the
|
|
69
|
+
* marker are untouched, so a genuine method VALUE (`f := obj.method`) — never in
|
|
70
|
+
* callee position — keeps its read.
|
|
71
|
+
*
|
|
72
|
+
* "Invoked rather than read" is `CALL_TARGET_TYPES` — the canonical callable
|
|
73
|
+
* target set (`FREE_CALLABLE_TYPES` ∪ Method/Constructor), not a local copy. A
|
|
74
|
+
* hand-rolled `{Function, Method, Constructor}` silently omits `Macro` (C/C++)
|
|
75
|
+
* and `Delegate` (C#), the two labels that set exists to add, and drops the
|
|
76
|
+
* `satisfies` guard in `symbol-table.ts` that compile-enforces every free
|
|
77
|
+
* callable label against `LABEL_BEHAVIOR`.
|
|
78
|
+
*/
|
|
79
|
+
function isPhantomCalleeRead(site, targetDef) {
|
|
80
|
+
if (site.kind !== 'read' || site.inCalleePosition !== true)
|
|
81
|
+
return false;
|
|
82
|
+
return CALL_TARGET_TYPES.has(targetDef.type);
|
|
83
|
+
}
|
|
51
84
|
/**
|
|
52
85
|
* Resolve caller + target to graph ids and emit the edge. Returns true
|
|
53
86
|
* if the edge was emitted (not deduped, not skipped).
|
|
@@ -58,6 +91,11 @@ export function mapReferenceKindToEdgeType(kind) {
|
|
|
58
91
|
* double-emit a resolution one of them already produced.
|
|
59
92
|
*/
|
|
60
93
|
export function tryEmitEdge(graph, scopes, nodeLookup, site, targetDef, reason, seen, confidence = 0.85, collapseByCallerTarget = false, calleeCapture) {
|
|
94
|
+
// A read that only exists because it is the callee of the call beside it, and
|
|
95
|
+
// whose tail resolved to a callable, is that call restated as an access —
|
|
96
|
+
// checked first because it needs no id resolution.
|
|
97
|
+
if (isPhantomCalleeRead(site, targetDef))
|
|
98
|
+
return false;
|
|
61
99
|
// Inheritance edges are emitted directly by `preEmitInheritanceEdges` (which
|
|
62
100
|
// owns the enclosing-class caller and the EXTENDS-vs-IMPLEMENTS type), so this
|
|
63
101
|
// generic bridge derives caller + edge type purely from the site.
|
|
@@ -110,6 +148,15 @@ export function tryEmitEdge(graph, scopes, nodeLookup, site, targetDef, reason,
|
|
|
110
148
|
*
|
|
111
149
|
* All other invariants of `tryEmitEdge` apply: dedup key shape, collapse
|
|
112
150
|
* flag honoring, edge-type mapping, caller-id resolution.
|
|
151
|
+
*
|
|
152
|
+
* ONE deliberate exception: the {@link isPhantomCalleeRead} suppression is not
|
|
153
|
+
* applied here, because it keys on the target's node label and this entry point
|
|
154
|
+
* is handed an id rather than a def. Reachable only for a `read` site marked
|
|
155
|
+
* `inCalleePosition` whose receiver typed as an object-literal VALUE — a
|
|
156
|
+
* JS/TS-shaped registration. No language that sets the marker resolves through
|
|
157
|
+
* this bridge today (verified for Go, whose func-valued struct-literal fields
|
|
158
|
+
* resolve through the owned-member path instead). A language adding the marker
|
|
159
|
+
* must re-check this path.
|
|
113
160
|
*/
|
|
114
161
|
export function tryEmitEdgeWithExplicitTargetId(graph, scopes, nodeLookup, site, targetGraphId, reason, seen, confidence = 0.85, collapseByCallerTarget = false, calleeCapture) {
|
|
115
162
|
const callerGraphId = resolveCallerGraphId(site.inScope, scopes, nodeLookup, site.atRange);
|
|
@@ -20,23 +20,28 @@ import type { NodeLabel, ParameterTypeClass, ScopeId, SymbolDefinition } from '.
|
|
|
20
20
|
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
21
21
|
import { type GraphNodeLookup } from '../graph-bridge/node-lookup.js';
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Labels that may legitimately ANCHOR a CALLS/ACCESSES edge as the
|
|
24
|
+
* source ("caller"). A Variable / Property can be the TARGET of an
|
|
25
|
+
* edge (e.g., a write-access to `user.name`), but it cannot be a
|
|
26
|
+
* caller — variables don't execute code, so attributing a call to a
|
|
27
|
+
* sibling Variable in the same scope produces nonsense edges like
|
|
28
|
+
* `Variable:create → Function:create` (which the simpleKey fallback
|
|
29
|
+
* in `resolveDefGraphId` then silently rewrites to
|
|
30
|
+
* `Function:create → Function:create`, a self-loop that doesn't exist
|
|
31
|
+
* in the source).
|
|
24
32
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* without the type prefix).
|
|
33
|
-
*
|
|
34
|
-
* Falls back to the simple name for definitions whose qualifier the
|
|
35
|
-
* lookup didn't capture (rare, but keeps cross-file simple-name
|
|
36
|
-
* resolution working for languages that don't yet synthesize
|
|
37
|
-
* qualifiers).
|
|
33
|
+
* Module-level call expressions inside a `const X = expr(args)`
|
|
34
|
+
* declaration are the canonical case where this used to fail: the
|
|
35
|
+
* walk-up over module scope's ownedDefs (only Variables) would land
|
|
36
|
+
* on the FIRST Variable, get name-aliased to its sibling Function
|
|
37
|
+
* with the same simple name, and emit a self-CALLS. With this label
|
|
38
|
+
* restricted to function/class-likes, those calls correctly fall
|
|
39
|
+
* through to the File-node fallback at the bottom of the walk.
|
|
38
40
|
*/
|
|
41
|
+
export declare const CALLER_ANCHOR_LABELS: ReadonlySet<NodeLabel>;
|
|
39
42
|
export declare function resolveDefGraphId(filePath: string, def: {
|
|
43
|
+
/** Scope-resolution def id — carries the declaration position (#2699). */
|
|
44
|
+
nodeId?: string;
|
|
40
45
|
qualifiedName?: string;
|
|
41
46
|
type?: NodeLabel;
|
|
42
47
|
parameterTypes?: readonly string[];
|
|
@@ -51,7 +56,7 @@ export declare function resolveDefGraphId(filePath: string, def: {
|
|
|
51
56
|
export declare function simpleQualifiedName(def: SymbolDefinition): string | undefined;
|
|
52
57
|
/**
|
|
53
58
|
* Walk the scope chain from `startScope` upward looking for the first
|
|
54
|
-
* scope whose `ownedDefs` contains a
|
|
59
|
+
* scope whose `ownedDefs` contains a callable or class-like anchor — that's
|
|
55
60
|
* our caller anchor. Translate via `nodeLookup` to the graph-node ID.
|
|
56
61
|
*
|
|
57
62
|
* Module-level references (e.g. Python `u = models.User()` at top
|