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
|
@@ -34,6 +34,7 @@ import { isDev, isSemanticModelValidatorEnabled } from '../../utils/env.js';
|
|
|
34
34
|
import { logHeapProbe } from '../../utils/heap-probe.js';
|
|
35
35
|
import { clearParsedFileStore, loadParsedFilesForPaths, forceGc, } from '../../../../storage/parsedfile-store.js';
|
|
36
36
|
import { buildFunctionNodeIndex } from '../../taint/summary-harvest-driver.js';
|
|
37
|
+
import { buildPropertyNameIndex } from '../passes/unique-name-properties.js';
|
|
37
38
|
import { PdgEmitSink } from '../../../lbug/pdg-emit-sink.js';
|
|
38
39
|
import { resolveNativeSafeStorageDir } from '../../../lbug/lbug-config.js';
|
|
39
40
|
import { logger } from '../../../logger.js';
|
|
@@ -43,9 +44,11 @@ const NOOP_OUTPUT = Object.freeze({
|
|
|
43
44
|
importsEmitted: 0,
|
|
44
45
|
referenceEdgesEmitted: 0,
|
|
45
46
|
resolutionOutcomes: [],
|
|
47
|
+
// Deliberately absent, not `[]`: nothing ran, so nothing was decided either.
|
|
46
48
|
perLanguage: new Map(),
|
|
47
49
|
functionSummaries: [],
|
|
48
50
|
callSummaries: [],
|
|
51
|
+
propertyInference: { ambiguous: 0, ambiguousNames: [], crossLanguage: 0, crossLanguageNames: [] },
|
|
49
52
|
});
|
|
50
53
|
/** Select source files that must be materialized for one resolver pass. */
|
|
51
54
|
export function selectScopeSourcePathsToRead(provider, primaryFilePaths, preExtractedByPath) {
|
|
@@ -118,6 +121,7 @@ export const scopeResolutionPhase = {
|
|
|
118
121
|
let totalRefs = 0;
|
|
119
122
|
let anyRan = false;
|
|
120
123
|
const resolutionOutcomes = [];
|
|
124
|
+
const undecidedSatisfaction = [];
|
|
121
125
|
// M4 (#2084 U1): per-function taint summaries accumulated across every
|
|
122
126
|
// language pass; the cross-function fixpoint phase reads this output.
|
|
123
127
|
const functionSummaries = [];
|
|
@@ -192,6 +196,13 @@ export const scopeResolutionPhase = {
|
|
|
192
196
|
const sharedFnNodeIndex = ctx.options?.pdg === true && totalScopeFiles > 0
|
|
193
197
|
? buildFunctionNodeIndex(ctx.graph)
|
|
194
198
|
: undefined;
|
|
199
|
+
// Same treatment for the `Property`-by-name index the unique-name pass
|
|
200
|
+
// consults: a whole-graph node scan, language-agnostic, and previously
|
|
201
|
+
// rebuilt inside every qualifying language pass. Language filtering happens
|
|
202
|
+
// at LOOKUP time against that language's own file set, so one shared index
|
|
203
|
+
// serves all of them without widening what any single language can resolve
|
|
204
|
+
// to.
|
|
205
|
+
const sharedPropertyNameIndex = totalScopeFiles > 0 ? buildPropertyNameIndex(ctx.graph) : undefined;
|
|
195
206
|
// Streaming/chunked PDG emit (#2202): when enabled (the caller has already
|
|
196
207
|
// gated this to full-rebuild + `--pdg`), route the BasicBlock + intra-file
|
|
197
208
|
// PDG-edge layer to CSV-on-disk through one sink shared across every
|
|
@@ -223,6 +234,11 @@ export const scopeResolutionPhase = {
|
|
|
223
234
|
// finalize/propagate/a provider hook) must still release the sink's file
|
|
224
235
|
// descriptors. finalize() runs on the success path; the finally closes the
|
|
225
236
|
// sink only when finalize did not (idempotent via the sink's `finalized`).
|
|
237
|
+
// R3-1 accumulators — see the warning after the language loop.
|
|
238
|
+
let crossLanguagePropertyReads = 0;
|
|
239
|
+
const crossLanguageAnchorsByName = new Map();
|
|
240
|
+
let ambiguousPropertyReads = 0;
|
|
241
|
+
const ambiguousPropertyNames = new Set();
|
|
226
242
|
let pdgEmitManifest;
|
|
227
243
|
let pdgSinkSettled = false;
|
|
228
244
|
try {
|
|
@@ -322,6 +338,7 @@ export const scopeResolutionPhase = {
|
|
|
322
338
|
files,
|
|
323
339
|
resolutionConfig,
|
|
324
340
|
prebuiltNodeLookup: sharedNodeLookup,
|
|
341
|
+
prebuiltPropertyNameIndex: sharedPropertyNameIndex,
|
|
325
342
|
prebuiltFunctionNodeIndex: sharedFnNodeIndex,
|
|
326
343
|
preExtractedParsedFiles: preExtractedByPath,
|
|
327
344
|
scopeIndexStorePath: parsedFileStorePath,
|
|
@@ -406,6 +423,7 @@ export const scopeResolutionPhase = {
|
|
|
406
423
|
processedScopeFiles += langFileCount;
|
|
407
424
|
anyRan = true;
|
|
408
425
|
functionSummaries.push(...stats.functionSummaries);
|
|
426
|
+
undecidedSatisfaction.push(...stats.undecidedSatisfaction);
|
|
409
427
|
callSummaries.push(...stats.callSummaries);
|
|
410
428
|
totalFiles += stats.filesProcessed;
|
|
411
429
|
totalImports += stats.importsEmitted;
|
|
@@ -418,6 +436,35 @@ export const scopeResolutionPhase = {
|
|
|
418
436
|
if (isDev) {
|
|
419
437
|
logger.info(`[scope-resolution:${lang}] ${stats.filesProcessed} files → ${stats.importsEmitted} IMPORTS + ${stats.referenceEdgesEmitted} reference edges (${stats.resolve.unresolved} unresolved sites, ${stats.referenceSkipped} skipped)`);
|
|
420
438
|
}
|
|
439
|
+
// R3-1. Accumulated across languages and reported once below, NOT gated
|
|
440
|
+
// on isDev: a field whose only definition lives in another language
|
|
441
|
+
// answers an empty ACCESSES query that is byte-identical to "unused",
|
|
442
|
+
// and that is the confident-empty failure this whole series removes.
|
|
443
|
+
ambiguousPropertyReads += stats.uniqueNamePropertyAmbiguous;
|
|
444
|
+
for (const n of stats.uniqueNamePropertyAmbiguousNames)
|
|
445
|
+
ambiguousPropertyNames.add(n);
|
|
446
|
+
crossLanguagePropertyReads += stats.uniqueNamePropertyCrossLanguage;
|
|
447
|
+
for (const entry of stats.uniqueNamePropertyCrossLanguageNames) {
|
|
448
|
+
const existing = crossLanguageAnchorsByName.get(entry.name);
|
|
449
|
+
if (existing === undefined) {
|
|
450
|
+
crossLanguageAnchorsByName.set(entry.name, new Set(entry.languages));
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
for (const l of entry.languages)
|
|
454
|
+
existing.add(l);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
if (crossLanguagePropertyReads > 0) {
|
|
459
|
+
const sample = Array.from(crossLanguageAnchorsByName)
|
|
460
|
+
.slice(0, 10)
|
|
461
|
+
.map(([name, langs]) => `${name} (${Array.from(langs).sort().join('/')})`)
|
|
462
|
+
.join(', ');
|
|
463
|
+
logger.warn(`[scope-resolution] ${crossLanguagePropertyReads} property read/write site(s) name a field ` +
|
|
464
|
+
`that IS defined in this workspace, but only in another language, so per-language inference ` +
|
|
465
|
+
`declined to link them. Queries for these fields return an empty result that does NOT mean ` +
|
|
466
|
+
`"unused" — it means the definition anchor is in a different language. ` +
|
|
467
|
+
`Affected: ${sample}${crossLanguageAnchorsByName.size > 10 ? ', …' : ''}`);
|
|
421
468
|
}
|
|
422
469
|
// Finalize the streaming PDG sink (#2202) once after the last language:
|
|
423
470
|
// flush + close its CSV writers and capture the COPY manifest. forceGc at
|
|
@@ -464,10 +511,20 @@ export const scopeResolutionPhase = {
|
|
|
464
511
|
importsEmitted: totalImports,
|
|
465
512
|
referenceEdgesEmitted: totalRefs,
|
|
466
513
|
resolutionOutcomes,
|
|
514
|
+
undecidedSatisfaction,
|
|
467
515
|
perLanguage,
|
|
468
516
|
functionSummaries,
|
|
469
517
|
callSummaries,
|
|
470
518
|
pdgEmitManifest,
|
|
519
|
+
propertyInference: {
|
|
520
|
+
ambiguous: ambiguousPropertyReads,
|
|
521
|
+
ambiguousNames: Array.from(ambiguousPropertyNames).sort().slice(0, 25),
|
|
522
|
+
crossLanguage: crossLanguagePropertyReads,
|
|
523
|
+
crossLanguageNames: Array.from(crossLanguageAnchorsByName)
|
|
524
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
525
|
+
.slice(0, 25)
|
|
526
|
+
.map(([name, languages]) => ({ name, languages: Array.from(languages).sort() })),
|
|
527
|
+
},
|
|
471
528
|
};
|
|
472
529
|
},
|
|
473
530
|
};
|
|
@@ -30,7 +30,8 @@ import { buildGraphNodeLookup } from '../graph-bridge/node-lookup.js';
|
|
|
30
30
|
import { type FunctionNodeIndex } from '../../taint/summary-harvest-driver.js';
|
|
31
31
|
import type { FunctionSummary } from '../../taint/summary-model.js';
|
|
32
32
|
import type { CallSummary } from '../../taint/call-summary-model.js';
|
|
33
|
-
import type
|
|
33
|
+
import { type PropertyNameIndex } from '../passes/unique-name-properties.js';
|
|
34
|
+
import type { ScopeResolver, UndecidedSatisfaction } from '../contract/scope-resolver.js';
|
|
34
35
|
import type { ResolutionOutcome, ResolutionOutcomeRecorder } from '../resolution-outcome.js';
|
|
35
36
|
export type ScopeResolutionSubPhase = 'extracting' | 'analyzing types' | 'resolving references' | 'linking symbols';
|
|
36
37
|
interface RunScopeResolutionInput {
|
|
@@ -129,6 +130,14 @@ interface RunScopeResolutionInput {
|
|
|
129
130
|
* (tests / isolated calls) it is built locally for the pdg-enabled language.
|
|
130
131
|
*/
|
|
131
132
|
readonly prebuiltFunctionNodeIndex?: FunctionNodeIndex;
|
|
133
|
+
/**
|
|
134
|
+
* `Property`-by-name index built ONCE by the caller and shared across every
|
|
135
|
+
* language pass. Like the two above it is a whole-graph scan and is
|
|
136
|
+
* language-agnostic; the per-language restriction is applied at lookup time
|
|
137
|
+
* against that language's own file set, so sharing the index does not widen
|
|
138
|
+
* what any single language can resolve to. Built locally when omitted.
|
|
139
|
+
*/
|
|
140
|
+
readonly prebuiltPropertyNameIndex?: PropertyNameIndex;
|
|
132
141
|
/**
|
|
133
142
|
* Opaque per-language import-resolution config (e.g. tsconfig path
|
|
134
143
|
* aliases for TypeScript). Loaded once by the caller via
|
|
@@ -191,7 +200,52 @@ interface RunScopeResolutionStats {
|
|
|
191
200
|
* #2437 false-safe gap for exactly those keys (names are in the warn log).
|
|
192
201
|
*/
|
|
193
202
|
readonly propertyDispatchSkippedKeys: number;
|
|
203
|
+
/** Cross-file value references resolved through finalized import bindings. */
|
|
204
|
+
readonly importedValueRefEdges: number;
|
|
205
|
+
/**
|
|
206
|
+
* ACCESSES edges recovered by property NAME (A1/A5) — the last-resort pass
|
|
207
|
+
* for receivers no precise pass could type.
|
|
208
|
+
*/
|
|
209
|
+
readonly uniqueNamePropertyEdges: number;
|
|
210
|
+
/**
|
|
211
|
+
* Read/write sites left unresolved because two or more `Property` defs share
|
|
212
|
+
* the name, so a unique-name match would have been a coin flip. This is the
|
|
213
|
+
* population a receiver-typing improvement would convert into precise edges.
|
|
214
|
+
*/
|
|
215
|
+
readonly uniqueNamePropertyAmbiguous: number;
|
|
216
|
+
/**
|
|
217
|
+
* Of `uniqueNamePropertyEdges`, how many the name carried several definitions
|
|
218
|
+
* for and same-file or direct-import evidence narrowed to one. Strict
|
|
219
|
+
* workspace uniqueness refused every one of these (R2).
|
|
220
|
+
*/
|
|
221
|
+
readonly uniqueNamePropertyNarrowed: number;
|
|
222
|
+
/**
|
|
223
|
+
* The distinct field names behind `uniqueNamePropertyAmbiguous`, capped. A
|
|
224
|
+
* count says a coverage gap exists; the names say WHICH fields are
|
|
225
|
+
* unanswerable, so the gap is actionable rather than merely measured.
|
|
226
|
+
*/
|
|
227
|
+
readonly uniqueNamePropertyAmbiguousNames: readonly string[];
|
|
228
|
+
/**
|
|
229
|
+
* Read/write sites whose name IS defined in the workspace but only in another
|
|
230
|
+
* LANGUAGE, so per-language inference declined. Separate from
|
|
231
|
+
* `uniqueNamePropertyAmbiguous` because the remedy differs: ambiguity wants
|
|
232
|
+
* better receiver typing, this wants an anchor in the reading language (R3-1).
|
|
233
|
+
*/
|
|
234
|
+
readonly uniqueNamePropertyCrossLanguage: number;
|
|
235
|
+
/** Those names with the languages their definitions actually live in. */
|
|
236
|
+
readonly uniqueNamePropertyCrossLanguageNames: readonly {
|
|
237
|
+
readonly name: string;
|
|
238
|
+
readonly languages: string[];
|
|
239
|
+
}[];
|
|
194
240
|
readonly resolutionOutcomes: readonly ResolutionOutcome[];
|
|
241
|
+
/**
|
|
242
|
+
* Interfaces whose structural-satisfaction check could not be completed for
|
|
243
|
+
* at least one candidate type (#2873). NOT the same as "no implementors" —
|
|
244
|
+
* these are questions the analyzer could not answer, and they are reported so
|
|
245
|
+
* `impact` can hedge a zero instead of asserting one. Empty for every
|
|
246
|
+
* language whose resolver has no `detectInterfaceImplementations` hook.
|
|
247
|
+
*/
|
|
248
|
+
readonly undecidedSatisfaction: readonly UndecidedSatisfaction[];
|
|
195
249
|
/**
|
|
196
250
|
* Per-function taint summaries harvested in the pdg window (#2084 M4 U1).
|
|
197
251
|
* Empty unless `input.pdg === true` and the language has a registered taint
|
|
@@ -40,17 +40,22 @@ import { harvestFileCallSummaries } from '../../taint/summary-harvest-driver.js'
|
|
|
40
40
|
import { resolveDefGraphId } from '../graph-bridge/ids.js';
|
|
41
41
|
import { buildPopulatedMethodDispatch } from '../graph-bridge/method-dispatch.js';
|
|
42
42
|
import { propagateImportedReturnTypes } from '../passes/imported-return-types.js';
|
|
43
|
-
import { emitReceiverBoundCalls } from '../passes/receiver-bound-calls.js';
|
|
43
|
+
import { emitReceiverBoundCalls, MAX_INTERFACE_DISPATCH_FANOUT, } from '../passes/receiver-bound-calls.js';
|
|
44
44
|
import { emitFreeCallFallback } from '../passes/free-call-fallback.js';
|
|
45
45
|
import { emitPropertyDispatchCalls, MAX_PROPERTY_DISPATCH_FANOUT, } from '../passes/property-dispatch.js';
|
|
46
46
|
import { emitReferencesViaLookup } from '../graph-bridge/references-to-edges.js';
|
|
47
|
+
import { buildPropertyNameIndex, emitUniqueNamePropertyAccesses, } from '../passes/unique-name-properties.js';
|
|
48
|
+
import { emitReturnShapeMemberAccesses } from '../passes/return-shape-members.js';
|
|
49
|
+
import { emitImportedValueReferences } from '../passes/imported-value-refs.js';
|
|
47
50
|
import { createCalleeIdAccumulator, } from '../graph-bridge/callee-id-sink.js';
|
|
48
51
|
import { emitImportEdges } from '../graph-bridge/imports-to-edges.js';
|
|
49
52
|
import { callableFlowSiteKey, collectDeferredIndirectSites, emitCallableValueFlow, } from '../passes/callable-value-flow.js';
|
|
50
53
|
import { findEnclosingClassDef, resolveInheritanceBaseInScope } from '../scope/walkers.js';
|
|
54
|
+
import { heritageTypeArgumentsKey, } from '../utils/generic-instantiation.js';
|
|
51
55
|
import { buildWorkspaceResolutionIndex } from '../workspace-index.js';
|
|
52
56
|
import { logHeapProbe } from '../../utils/heap-probe.js';
|
|
53
57
|
import { parseTruthyEnv } from '../../utils/env.js';
|
|
58
|
+
import { isValueDefinitionLabel } from '../../utils/ast-helpers.js';
|
|
54
59
|
import { TransitionalScopeTree } from '../../../../storage/scope-index-store.js';
|
|
55
60
|
import { forceGc } from '../../../../storage/parsedfile-store.js';
|
|
56
61
|
import { logger } from '../../../logger.js';
|
|
@@ -90,8 +95,18 @@ function emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetG
|
|
|
90
95
|
* reference-edge bridge from re-emitting the same sites later.
|
|
91
96
|
*
|
|
92
97
|
* @returns Site keys to seed the downstream handled-site skip set.
|
|
98
|
+
*
|
|
99
|
+
* The generic INSTANTIATION each heritage edge was written with (#2912) goes to
|
|
100
|
+
* `recordTypeArguments` rather than out through the return, because the caller
|
|
101
|
+
* shares that sink with the language heritage hook — see
|
|
102
|
+
* `HeritageTypeArguments` in `utils/generic-instantiation.ts`. This pass is
|
|
103
|
+
* where the pairing exists at all: the site carries the arguments and this is
|
|
104
|
+
* the only code that resolves the site to a (subtype, supertype) pair, so
|
|
105
|
+
* recording it here costs one map write per generic heritage edge, while
|
|
106
|
+
* recovering it downstream would mean redoing the resolution against a graph
|
|
107
|
+
* edge that no longer carries the spelling.
|
|
93
108
|
*/
|
|
94
|
-
function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
|
|
109
|
+
function preEmitInheritanceEdges(graph, scopes, nodeLookup, recordTypeArguments) {
|
|
95
110
|
const handledSites = new Set();
|
|
96
111
|
const seen = new Set();
|
|
97
112
|
// Tracks inheritance edges emitted during this pass so the structural
|
|
@@ -104,9 +119,7 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
|
|
|
104
119
|
if (site.kind !== 'inherits')
|
|
105
120
|
continue;
|
|
106
121
|
const scope = scopes.scopeTree.getScope(site.inScope);
|
|
107
|
-
const siteKey = scope?.filePath !== undefined
|
|
108
|
-
? `${scope.filePath}:${site.atRange.startLine}:${site.atRange.startCol}`
|
|
109
|
-
: undefined;
|
|
122
|
+
const siteKey = scope?.filePath !== undefined ? callableFlowSiteKey(scope.filePath, site.atRange) : undefined;
|
|
110
123
|
if (siteKey !== undefined) {
|
|
111
124
|
// Intentionally suppress every `inherits` site from the generic
|
|
112
125
|
// reference bridge, even when this pre-pass can't emit an EXTENDS
|
|
@@ -139,6 +152,12 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
|
|
|
139
152
|
// EXTENDS branch, so such languages are unchanged.
|
|
140
153
|
const edgeType = targetDef.type === 'Interface' || targetDef.type === 'Trait' ? 'IMPLEMENTS' : 'EXTENDS';
|
|
141
154
|
emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site);
|
|
155
|
+
// The instantiation this heritage clause wrote (`: IValidator<string>`),
|
|
156
|
+
// keyed by the same graph-id pair the edge itself carries. Only generic
|
|
157
|
+
// bases produce an entry; the sink owns the first-writer-wins rule.
|
|
158
|
+
if (site.typeArguments !== undefined) {
|
|
159
|
+
recordTypeArguments(callerGraphId, targetGraphId, site.typeArguments);
|
|
160
|
+
}
|
|
142
161
|
}
|
|
143
162
|
return handledSites;
|
|
144
163
|
}
|
|
@@ -156,7 +175,7 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
|
|
|
156
175
|
*/
|
|
157
176
|
function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, provider, indexes, model) {
|
|
158
177
|
if (provider.detectInterfaceImplementations === undefined)
|
|
159
|
-
return
|
|
178
|
+
return [];
|
|
160
179
|
const graphIdByDefId = new Map();
|
|
161
180
|
for (const parsed of parsedFiles) {
|
|
162
181
|
for (const def of parsed.localDefs) {
|
|
@@ -171,14 +190,13 @@ function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, pr
|
|
|
171
190
|
for (const rel of graph.iterRelationshipsByType('IMPLEMENTS')) {
|
|
172
191
|
existing.add(`${rel.sourceId}->${rel.targetId}`);
|
|
173
192
|
}
|
|
174
|
-
let emitted = 0;
|
|
175
193
|
const detected = provider.detectInterfaceImplementations(parsedFiles, indexes, model);
|
|
176
|
-
for (const [interfaceDefId, implementorDefIds] of detected) {
|
|
194
|
+
for (const [interfaceDefId, implementorDefIds] of detected.implementations) {
|
|
177
195
|
const targetId = graphIdByDefId.get(interfaceDefId);
|
|
178
196
|
if (targetId === undefined)
|
|
179
197
|
continue;
|
|
180
|
-
for (const
|
|
181
|
-
const sourceId = graphIdByDefId.get(
|
|
198
|
+
for (const implementor of implementorDefIds) {
|
|
199
|
+
const sourceId = graphIdByDefId.get(implementor.structDefId);
|
|
182
200
|
if (sourceId === undefined)
|
|
183
201
|
continue;
|
|
184
202
|
const edgeKey = `${sourceId}->${targetId}`;
|
|
@@ -191,18 +209,30 @@ function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, pr
|
|
|
191
209
|
targetId,
|
|
192
210
|
type: 'IMPLEMENTS',
|
|
193
211
|
confidence: 0.85,
|
|
194
|
-
reason
|
|
212
|
+
// The receiver form rides in `reason` because relationships carry no
|
|
213
|
+
// arbitrary properties — adding one would change the relation DDL and
|
|
214
|
+
// move SCHEMA_FINGERPRINT, forcing a full re-analyze for a fact that a
|
|
215
|
+
// string already expresses. `-pointer` means ONLY the pointer type
|
|
216
|
+
// implements: `var x I = T{}` is invalid, `var x I = &T{}` is fine.
|
|
217
|
+
// The unsuffixed form is unchanged from before, so a consumer matching
|
|
218
|
+
// the old string keeps seeing exactly the value-form implementors.
|
|
219
|
+
reason: implementor.receiverForm === 'pointer'
|
|
220
|
+
? `${provider.language}-structural-implements-pointer`
|
|
221
|
+
: `${provider.language}-structural-implements`,
|
|
195
222
|
});
|
|
196
|
-
emitted++;
|
|
197
223
|
}
|
|
198
224
|
}
|
|
199
|
-
|
|
225
|
+
// The interfaces this provider could not decide. They mint no edges — they
|
|
226
|
+
// exist so a query can report a lower bound instead of a confident zero
|
|
227
|
+
// (#2873); see `undecided-satisfaction.ts`.
|
|
228
|
+
return detected.undecided;
|
|
200
229
|
}
|
|
201
230
|
export function runScopeResolution(input, provider) {
|
|
202
231
|
const { graph, files } = input;
|
|
203
232
|
const callableFlowOnly = provider.scopeResolutionEdgeMode === 'callable-flow-only';
|
|
204
233
|
const onWarn = input.onWarn ?? (() => { });
|
|
205
234
|
const resolutionOutcomes = [];
|
|
235
|
+
const undecidedSatisfaction = [];
|
|
206
236
|
const recordResolutionOutcome = (outcome) => {
|
|
207
237
|
resolutionOutcomes.push(outcome);
|
|
208
238
|
input.recordResolutionOutcome?.(outcome);
|
|
@@ -289,7 +319,15 @@ export function runScopeResolution(input, provider) {
|
|
|
289
319
|
referenceEdgesEmitted: 0,
|
|
290
320
|
referenceSkipped: 0,
|
|
291
321
|
propertyDispatchSkippedKeys: 0,
|
|
322
|
+
importedValueRefEdges: 0,
|
|
323
|
+
uniqueNamePropertyEdges: 0,
|
|
324
|
+
uniqueNamePropertyAmbiguous: 0,
|
|
325
|
+
uniqueNamePropertyNarrowed: 0,
|
|
326
|
+
uniqueNamePropertyAmbiguousNames: [],
|
|
327
|
+
uniqueNamePropertyCrossLanguage: 0,
|
|
328
|
+
uniqueNamePropertyCrossLanguageNames: [],
|
|
292
329
|
resolutionOutcomes,
|
|
330
|
+
undecidedSatisfaction,
|
|
293
331
|
functionSummaries: [],
|
|
294
332
|
callSummaries: [],
|
|
295
333
|
};
|
|
@@ -316,7 +354,15 @@ export function runScopeResolution(input, provider) {
|
|
|
316
354
|
referenceEdgesEmitted: 0,
|
|
317
355
|
referenceSkipped: 0,
|
|
318
356
|
propertyDispatchSkippedKeys: 0,
|
|
357
|
+
importedValueRefEdges: 0,
|
|
358
|
+
uniqueNamePropertyEdges: 0,
|
|
359
|
+
uniqueNamePropertyAmbiguous: 0,
|
|
360
|
+
uniqueNamePropertyNarrowed: 0,
|
|
361
|
+
uniqueNamePropertyAmbiguousNames: [],
|
|
362
|
+
uniqueNamePropertyCrossLanguage: 0,
|
|
363
|
+
uniqueNamePropertyCrossLanguageNames: [],
|
|
319
364
|
resolutionOutcomes,
|
|
365
|
+
undecidedSatisfaction,
|
|
320
366
|
functionSummaries: [],
|
|
321
367
|
callSummaries: [],
|
|
322
368
|
};
|
|
@@ -335,21 +381,36 @@ export function runScopeResolution(input, provider) {
|
|
|
335
381
|
parsedFiles,
|
|
336
382
|
parsedImport,
|
|
337
383
|
}),
|
|
384
|
+
isNamespaceImport: (parsedImport, targetFile, fromFile) => provider.isNamespaceImport?.(parsedImport, targetFile, fromFile) ?? false,
|
|
338
385
|
expandsWildcardTo: (targetModuleScope) => provider.expandsWildcardTo?.(targetModuleScope, parsedFiles) ?? [],
|
|
339
386
|
mergeBindings: (existing, incoming, scopeId) => provider.mergeBindings(existing, incoming, scopeId),
|
|
340
387
|
},
|
|
341
388
|
});
|
|
342
389
|
logHeapProbe('sr-post-finalize', `lang=${provider.language}`);
|
|
390
|
+
// One store and ONE writer rule for heritage instantiations (#2912), shared by
|
|
391
|
+
// the pre-pass below and by the language hook further down — a heritage shape
|
|
392
|
+
// the pre-pass cannot express (Rust `impl T for S`, Dart `implements`) records
|
|
393
|
+
// through the same sink. FIRST writer wins: a repeated (sub, super) pair is a
|
|
394
|
+
// partial declaration or a re-listed base, and letting a later entry overwrite
|
|
395
|
+
// the first would make dispatch depend on file order.
|
|
396
|
+
const heritageTypeArguments = new Map();
|
|
397
|
+
const recordHeritageTypeArguments = (subtypeGraphId, supertypeGraphId, typeArguments) => {
|
|
398
|
+
if (typeArguments.length === 0)
|
|
399
|
+
return;
|
|
400
|
+
const key = heritageTypeArgumentsKey(subtypeGraphId, supertypeGraphId);
|
|
401
|
+
if (!heritageTypeArguments.has(key))
|
|
402
|
+
heritageTypeArguments.set(key, typeArguments);
|
|
403
|
+
};
|
|
343
404
|
const preEmittedInheritanceSites = callableFlowOnly
|
|
344
405
|
? new Set()
|
|
345
|
-
: preEmitInheritanceEdges(graph, finalized, nodeLookup);
|
|
406
|
+
: preEmitInheritanceEdges(graph, finalized, nodeLookup, recordHeritageTypeArguments);
|
|
346
407
|
// Call-based heritage hook (e.g., Ruby include/extend/prepend) — emits
|
|
347
408
|
// IMPLEMENTS edges that `preEmitInheritanceEdges` cannot produce because
|
|
348
409
|
// the heritage declarations are syntactic method calls, not grammar-level
|
|
349
410
|
// heritage clauses. Must run BEFORE `buildMro` so MRO construction sees
|
|
350
411
|
// the freshly-emitted IMPLEMENTS edges.
|
|
351
412
|
if (!callableFlowOnly) {
|
|
352
|
-
provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized);
|
|
413
|
+
provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized, recordHeritageTypeArguments);
|
|
353
414
|
}
|
|
354
415
|
// Implicit IMPORTS-edge hook — for languages whose files have compiler-
|
|
355
416
|
// implicit cross-file visibility (no syntactic import statement). The
|
|
@@ -368,7 +429,7 @@ export function runScopeResolution(input, provider) {
|
|
|
368
429
|
? buildGraphNodeLookup(graph)
|
|
369
430
|
: nodeLookup;
|
|
370
431
|
if (!callableFlowOnly) {
|
|
371
|
-
emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel);
|
|
432
|
+
undecidedSatisfaction.push(...emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel));
|
|
372
433
|
}
|
|
373
434
|
const mroByClassDefId = provider.buildMro(graph, parsedFiles, postHeritageNodeLookup);
|
|
374
435
|
const extendsOnlyMroByClassDefId = provider.buildExtendsOnlyMro?.(graph, parsedFiles, postHeritageNodeLookup);
|
|
@@ -447,6 +508,76 @@ export function runScopeResolution(input, provider) {
|
|
|
447
508
|
});
|
|
448
509
|
const tResolve = PROF ? process.hrtime.bigint() : 0n;
|
|
449
510
|
logHeapProbe('sr-post-resolve', `lang=${provider.language}`);
|
|
511
|
+
// Value defs bound at MODULE LEVEL. A read of a block-local `const` must not
|
|
512
|
+
// mint an edge — that would retain the inert locals `pruneLocalSymbols` drops.
|
|
513
|
+
//
|
|
514
|
+
// Built HERE, above the out-of-core seal, and deliberately from `parsedFiles`
|
|
515
|
+
// rather than `emitParsedFiles`. The seal below replaces the latter with a
|
|
516
|
+
// scope-STRIPPED copy, so building this after it walked `scopes: []` for every
|
|
517
|
+
// file and produced an empty set — which the filter then reads as "no def is
|
|
518
|
+
// module-level" and drops EVERY `Const`/`Variable`/`Static` ACCESSES edge in
|
|
519
|
+
// the repo, in all languages, on the one path (`GITNEXUS_DISK_SCOPE_INDEX=1`)
|
|
520
|
+
// taken by the largest repos. Nothing failed and nothing logged; the edges
|
|
521
|
+
// were simply absent, which is the confident-empty answer this PR exists to
|
|
522
|
+
// remove.
|
|
523
|
+
//
|
|
524
|
+
// ── The question is "is this def FUNCTION-LOCAL?", so ask exactly that ──
|
|
525
|
+
//
|
|
526
|
+
// This was first written as an ALLOWLIST of module-scope value defs, and that
|
|
527
|
+
// shape carried a defect that only shows outside JavaScript. A value def is
|
|
528
|
+
// not partitioned into {module-level, block-local}; there is a third home —
|
|
529
|
+
// a CLASS body. Java/C# fields and Python class attributes live there, and an
|
|
530
|
+
// allowlist keyed on "module level" excludes all of them by construction.
|
|
531
|
+
// Worse, the guard written to make that safe could not fire: the set is armed
|
|
532
|
+
// whenever a Module scope is FOUND, and Java has module scopes while having no
|
|
533
|
+
// module-level values at all, so for Java it armed permanently empty.
|
|
534
|
+
//
|
|
535
|
+
// Inverting it removes the whole class. A BLOCKLIST of defs positively
|
|
536
|
+
// identified as function-local fails safe: anything the walk does not
|
|
537
|
+
// recognise — a Java field, a Python class attribute, a language whose scopes
|
|
538
|
+
// could not be inspected at all — is emitted rather than dropped. That also
|
|
539
|
+
// retires `moduleScopesInspected`; there is nothing left to arm, because an
|
|
540
|
+
// empty blocklist and an uninspected one mean the same thing and both mean
|
|
541
|
+
// "emit". The failure mode moves from "silently deletes a whole edge class"
|
|
542
|
+
// to "retains an inert local", which is the direction this work wants.
|
|
543
|
+
//
|
|
544
|
+
// Built HERE, above the out-of-core seal, and deliberately from `parsedFiles`
|
|
545
|
+
// rather than `emitParsedFiles`. The seal below replaces the latter with a
|
|
546
|
+
// scope-STRIPPED copy, so building this after it walked `scopes: []` for every
|
|
547
|
+
// file and produced an empty set. Under the old allowlist that read as "no def
|
|
548
|
+
// is module-level" and dropped EVERY `Const`/`Variable`/`Static` ACCESSES edge
|
|
549
|
+
// in the repo on the one path (`GITNEXUS_DISK_SCOPE_INDEX=1`) taken by the
|
|
550
|
+
// largest repos. Under the blocklist the same mistake would merely stop
|
|
551
|
+
// filtering — still wrong, still worth the ordering, no longer catastrophic.
|
|
552
|
+
//
|
|
553
|
+
// A scope is function-local when its chain to the root passes through a
|
|
554
|
+
// `Function`. `Block`/`Expression`/`Object` alone are not enough: a bare block
|
|
555
|
+
// at module level still holds module-level values, and a `Namespace` nested in
|
|
556
|
+
// a function IS local, which the chain walk gets right for free.
|
|
557
|
+
const functionLocalValueDefIds = new Set();
|
|
558
|
+
for (const parsed of parsedFiles) {
|
|
559
|
+
const scopeById = new Map(parsed.scopes.map((sc) => [sc.id, sc]));
|
|
560
|
+
for (const scope of parsed.scopes) {
|
|
561
|
+
let cursor = scope;
|
|
562
|
+
let insideFunction = false;
|
|
563
|
+
while (cursor !== undefined) {
|
|
564
|
+
if (cursor.kind === 'Function') {
|
|
565
|
+
insideFunction = true;
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
cursor = cursor.parent === null ? undefined : scopeById.get(cursor.parent);
|
|
569
|
+
}
|
|
570
|
+
if (!insideFunction)
|
|
571
|
+
continue;
|
|
572
|
+
for (const [, refs] of scope.bindings) {
|
|
573
|
+
for (const ref of refs) {
|
|
574
|
+
if (isValueDefinitionLabel(ref.def.type)) {
|
|
575
|
+
functionLocalValueDefIds.add(ref.def.nodeId);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
450
581
|
// ── Out-of-core scope seal boundary ─────────────────────────────────────
|
|
451
582
|
// Pass-A (finalize + propagate + resolve) is done; all whole-language reads
|
|
452
583
|
// of `Scope.bindings` are behind us. Emit reaches scopes ONLY via
|
|
@@ -494,12 +625,37 @@ export function runScopeResolution(input, provider) {
|
|
|
494
625
|
? undefined
|
|
495
626
|
: (filePath, line, col) => callableArgumentSites.has(`${filePath}:${line}:${col}`))
|
|
496
627
|
: undefined;
|
|
497
|
-
const
|
|
498
|
-
?
|
|
628
|
+
const receiverBound = callableFlowOnly
|
|
629
|
+
? {
|
|
630
|
+
emitted: 0,
|
|
631
|
+
dispatchFanoutSkipped: 0,
|
|
632
|
+
dispatchFanoutSkippedNames: [],
|
|
633
|
+
}
|
|
499
634
|
: emitReceiverBoundCalls(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, provider, workspaceIndex, readonlyModel, {
|
|
500
635
|
recordResolutionOutcome,
|
|
501
636
|
calleeIdSink: calleeIdAccumulator,
|
|
637
|
+
// The pass's only source of positive EXTERNAL evidence for a dropped
|
|
638
|
+
// receiver (`console.log`, `fetch(...)`). Same hook, same spelling as
|
|
639
|
+
// the `emitFreeCallFallback` wiring below.
|
|
640
|
+
isBuiltInName: provider.languageProvider.isBuiltInName,
|
|
641
|
+
// What each heritage clause instantiated its base with, so the
|
|
642
|
+
// interface-dispatch fan-out can refuse an incompatible instantiation
|
|
643
|
+
// (#2912). Empty under `callableFlowOnly`, which emits no dispatch.
|
|
644
|
+
heritageTypeArguments,
|
|
502
645
|
});
|
|
646
|
+
const receiverExtras = receiverBound.emitted;
|
|
647
|
+
if (receiverBound.dispatchFanoutSkipped > 0) {
|
|
648
|
+
// Never drop dispatch coverage silently (#2829) — same contract as the
|
|
649
|
+
// property-dispatch cap below. An interface member over the cap loses real
|
|
650
|
+
// implementors, so `impact()` on those implementations under-reports; an
|
|
651
|
+
// operator has to be able to see WHICH member lost them.
|
|
652
|
+
logger.warn({
|
|
653
|
+
lang: provider.language,
|
|
654
|
+
dispatchFanoutSkipped: receiverBound.dispatchFanoutSkipped,
|
|
655
|
+
dispatchFanoutSkippedNames: receiverBound.dispatchFanoutSkippedNames,
|
|
656
|
+
fanoutCap: MAX_INTERFACE_DISPATCH_FANOUT,
|
|
657
|
+
}, 'interface-dispatch: members over the fan-out cap dropped implementors (their CALLS edges were not emitted)');
|
|
658
|
+
}
|
|
503
659
|
const unresolvedReceiverExtras = !callableFlowOnly && provider.emitUnresolvedReceiverEdges !== undefined
|
|
504
660
|
? provider.emitUnresolvedReceiverEdges(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, readonlyModel)
|
|
505
661
|
: 0;
|
|
@@ -513,6 +669,7 @@ export function runScopeResolution(input, provider) {
|
|
|
513
669
|
freeCallsRequireInstanceOwnership: provider.freeCallsRequireInstanceOwnership === true,
|
|
514
670
|
isCallableVisibleFromCaller: provider.isCallableVisibleFromCaller,
|
|
515
671
|
resolveAdlCandidates: provider.resolveAdlCandidates,
|
|
672
|
+
resolveQualifiedFreeCall: provider.resolveQualifiedFreeCall,
|
|
516
673
|
conversionRankFn: provider.conversionRankFn,
|
|
517
674
|
conversionOnlyArgTypePrefixes: provider.conversionOnlyArgTypePrefixes,
|
|
518
675
|
constraintCompatibility: provider.constraintCompatibility,
|
|
@@ -525,7 +682,64 @@ export function runScopeResolution(input, provider) {
|
|
|
525
682
|
referenceSkipSites.add(key);
|
|
526
683
|
const { emitted, skipped } = callableFlowOnly
|
|
527
684
|
? { emitted: 0, skipped: 0 }
|
|
528
|
-
: emitReferencesViaLookup(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator
|
|
685
|
+
: emitReferencesViaLookup(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator,
|
|
686
|
+
// A blocklist, so it needs no arming: empty means "nothing identified as
|
|
687
|
+
// function-local", which is also what an uninspected repo means, and
|
|
688
|
+
// both correctly emit. See the build site above for why the earlier
|
|
689
|
+
// allowlist could not be made safe this way.
|
|
690
|
+
functionLocalValueDefIds);
|
|
691
|
+
// Last-resort property resolution by workspace-unique name (A1/A5). Runs
|
|
692
|
+
// after every precise pass and only sees what they left behind, so a
|
|
693
|
+
// scope-resolved target always wins. Sites the generic bridge already
|
|
694
|
+
// resolved are excluded explicitly: `graph.addRelationship` is
|
|
695
|
+
// first-write-wins per edge id, which stops a DUPLICATE but not a second
|
|
696
|
+
// edge to a DIFFERENT target, and second-guessing a resolved receiver is
|
|
697
|
+
// exactly the wrong-edge-in-the-safety-gate case this must not create.
|
|
698
|
+
const uniqueNameSkipSites = new Set(referenceSkipSites);
|
|
699
|
+
for (const [fromScope, refs] of referenceIndex.bySourceScope) {
|
|
700
|
+
const fromFilePath = indexes.scopeTree.getScope(fromScope)?.filePath;
|
|
701
|
+
if (fromFilePath === undefined)
|
|
702
|
+
continue;
|
|
703
|
+
for (const ref of refs) {
|
|
704
|
+
uniqueNameSkipSites.add(callableFlowSiteKey(fromFilePath, ref.atRange));
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
// Gated on the language's own field-name-fallback policy. A statically-typed
|
|
708
|
+
// language sets `fieldFallbackOnMethodLookup: false` precisely because
|
|
709
|
+
// matching a member by name over-connects when a real type system could have
|
|
710
|
+
// answered exactly; inferring an ACCESSES edge by name is the same claim, so
|
|
711
|
+
// it must obey the same opt-out rather than route around it.
|
|
712
|
+
// Cross-file value references (A2): the read/write counterpart to
|
|
713
|
+
// `emitFreeCallFallback`. Runs BEFORE unique-name inference so a precise
|
|
714
|
+
// import-resolved target always wins over a name guess.
|
|
715
|
+
const importedValueRefs = callableFlowOnly
|
|
716
|
+
? { emitted: 0 }
|
|
717
|
+
: emitImportedValueReferences(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites);
|
|
718
|
+
// A language that opts out of name fallback still gets DETECTION. Skipping
|
|
719
|
+
// the pass outright also skipped its reporting, so a TypeScript read whose
|
|
720
|
+
// only anchor is JavaScript answered the same silent empty as the JS-read /
|
|
721
|
+
// TS-anchor case R3-1 was filed about — the identical defect, mirrored.
|
|
722
|
+
// `reportOnly` counts without emitting: no edge, no inference, no change to
|
|
723
|
+
// what the opt-out protects.
|
|
724
|
+
// PRECISE first (R3-5). A call result's return shape names WHICH producer a
|
|
725
|
+
// receiver holds, so it answers exactly the case name inference must refuse:
|
|
726
|
+
// several functions returning the same field name. Sites it resolves are
|
|
727
|
+
// added to the skip set, so the fallback below never second-guesses them.
|
|
728
|
+
const sharedPropertyIndex = input.prebuiltPropertyNameIndex ?? buildPropertyNameIndex(graph);
|
|
729
|
+
const returnShapeMembers = callableFlowOnly
|
|
730
|
+
? { emitted: 0, memberNotOnShape: 0 }
|
|
731
|
+
: emitReturnShapeMemberAccesses(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites, sharedPropertyIndex, uniqueNameSkipSites);
|
|
732
|
+
const nameFallbackDisabled = provider.fieldFallbackOnMethodLookup === false;
|
|
733
|
+
const uniqueNameProperties = callableFlowOnly
|
|
734
|
+
? {
|
|
735
|
+
emitted: 0,
|
|
736
|
+
ambiguous: 0,
|
|
737
|
+
narrowed: 0,
|
|
738
|
+
ambiguousNames: [],
|
|
739
|
+
crossLanguageOnly: 0,
|
|
740
|
+
crossLanguageOnlyNames: [],
|
|
741
|
+
}
|
|
742
|
+
: emitUniqueNamePropertyAccesses(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites, finalized, sharedPropertyIndex, nameFallbackDisabled);
|
|
529
743
|
// value-ref registrations (#2437): USES edges at the registration sites
|
|
530
744
|
// plus field-based dispatch — synthesized CALLS from member-call sites to
|
|
531
745
|
// functions registered under the same property key. This runs after the
|
|
@@ -933,7 +1147,15 @@ export function runScopeResolution(input, provider) {
|
|
|
933
1147
|
propertyDispatch.callsEmitted,
|
|
934
1148
|
referenceSkipped: skipped,
|
|
935
1149
|
propertyDispatchSkippedKeys: propertyDispatch.skippedKeys,
|
|
1150
|
+
importedValueRefEdges: importedValueRefs.emitted,
|
|
1151
|
+
uniqueNamePropertyEdges: uniqueNameProperties.emitted,
|
|
1152
|
+
uniqueNamePropertyAmbiguous: uniqueNameProperties.ambiguous,
|
|
1153
|
+
uniqueNamePropertyNarrowed: uniqueNameProperties.narrowed,
|
|
1154
|
+
uniqueNamePropertyAmbiguousNames: uniqueNameProperties.ambiguousNames,
|
|
1155
|
+
uniqueNamePropertyCrossLanguage: uniqueNameProperties.crossLanguageOnly,
|
|
1156
|
+
uniqueNamePropertyCrossLanguageNames: uniqueNameProperties.crossLanguageOnlyNames,
|
|
936
1157
|
resolutionOutcomes,
|
|
1158
|
+
undecidedSatisfaction,
|
|
937
1159
|
functionSummaries: harvestedSummaries,
|
|
938
1160
|
callSummaries: harvestedCallSummaries,
|
|
939
1161
|
};
|