cgraphx 2.0.1 → 2.0.3
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/dist/.claude-template/FLOW-MAP.md +7 -5
- package/dist/.claude-template/commands/end.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
- package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
- package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
- package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
- package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
- package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/features/scanner.d.ts +2 -0
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +27 -6
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `runScopeResolution` — generic registry-primary resolution
|
|
4
|
+
* orchestrator.
|
|
5
|
+
*
|
|
6
|
+
* ParsedFile[] (one per file via `extractParsedFile`)
|
|
7
|
+
* │ finalizeScopeModel( + provider hooks adapted to FinalizeHooks)
|
|
8
|
+
* ▼
|
|
9
|
+
* ScopeResolutionIndexes
|
|
10
|
+
* │ resolveReferenceSites
|
|
11
|
+
* ▼
|
|
12
|
+
* ReferenceIndex
|
|
13
|
+
* │ emitReceiverBoundCalls (FIRST — see Contract Invariant I1)
|
|
14
|
+
* │ emitFreeCallFallback (THEN)
|
|
15
|
+
* │ emitReferencesViaLookup (LAST — uses handledSites)
|
|
16
|
+
* │ emitImportEdges
|
|
17
|
+
* ▼
|
|
18
|
+
* KnowledgeGraph
|
|
19
|
+
*
|
|
20
|
+
* Per-language entry points (e.g. `runPythonScopeResolution` in
|
|
21
|
+
* `languages/python/scope-resolver.ts`) construct an `ScopeResolver` and
|
|
22
|
+
* delegate here.
|
|
23
|
+
*
|
|
24
|
+
* Plan: `docs/plans/2026-04-20-001-refactor-emit-pipeline-generalization-plan.md`.
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.runScopeResolution = runScopeResolution;
|
|
28
|
+
const utils_js_1 = require("../../../../lib/utils.js");
|
|
29
|
+
const owned_members_lookup_js_1 = require("../../model/owned-members-lookup.js");
|
|
30
|
+
const reconcile_ownership_js_1 = require("./reconcile-ownership.js");
|
|
31
|
+
const validate_bindings_immutability_js_1 = require("./validate-bindings-immutability.js");
|
|
32
|
+
const scope_extractor_bridge_js_1 = require("../../scope-extractor-bridge.js");
|
|
33
|
+
const finalize_orchestrator_js_1 = require("../../finalize-orchestrator.js");
|
|
34
|
+
const resolve_references_js_1 = require("../../resolve-references.js");
|
|
35
|
+
const node_lookup_js_1 = require("../graph-bridge/node-lookup.js");
|
|
36
|
+
const ids_js_1 = require("../graph-bridge/ids.js");
|
|
37
|
+
const method_dispatch_js_1 = require("../graph-bridge/method-dispatch.js");
|
|
38
|
+
const imported_return_types_js_1 = require("../passes/imported-return-types.js");
|
|
39
|
+
const receiver_bound_calls_js_1 = require("../passes/receiver-bound-calls.js");
|
|
40
|
+
const free_call_fallback_js_1 = require("../passes/free-call-fallback.js");
|
|
41
|
+
const property_dispatch_js_1 = require("../passes/property-dispatch.js");
|
|
42
|
+
const references_to_edges_js_1 = require("../graph-bridge/references-to-edges.js");
|
|
43
|
+
const callee_id_sink_js_1 = require("../graph-bridge/callee-id-sink.js");
|
|
44
|
+
const imports_to_edges_js_1 = require("../graph-bridge/imports-to-edges.js");
|
|
45
|
+
const callable_value_flow_js_1 = require("../passes/callable-value-flow.js");
|
|
46
|
+
const walkers_js_1 = require("../scope/walkers.js");
|
|
47
|
+
const workspace_index_js_1 = require("../workspace-index.js");
|
|
48
|
+
const heap_probe_js_1 = require("../../utils/heap-probe.js");
|
|
49
|
+
const env_js_1 = require("../../utils/env.js");
|
|
50
|
+
const scope_index_store_js_1 = require("../../../../storage/scope-index-store.js");
|
|
51
|
+
const parsedfile_store_js_1 = require("../../../../storage/parsedfile-store.js");
|
|
52
|
+
const logger_js_1 = require("../../../logger.js");
|
|
53
|
+
/**
|
|
54
|
+
* Emit one class-owned inheritance edge directly (the inheritance pre-pass is
|
|
55
|
+
* the authoritative emitter — see `preEmitInheritanceEdges`). Encapsulates the
|
|
56
|
+
* dual dedup contract so the two sets' joint semantics live in one place:
|
|
57
|
+
* - `existing` — coarse per-`(caller, target, type)` gate, seeded from the
|
|
58
|
+
* graph (so this pass is a no-op when the legacy path already emitted it).
|
|
59
|
+
* - `seen` — per-site key shared with the generic edge bridge so the two
|
|
60
|
+
* passes never double-emit the same resolution.
|
|
61
|
+
* The `dedupKey` and `rel:` id shape match `tryEmitEdge` exactly, so graph
|
|
62
|
+
* output stays byte-identical. The caller is the enclosing class (NOT the
|
|
63
|
+
* method/constructor `resolveCallerGraphId` would prefer — that broke MRO for
|
|
64
|
+
* C# 12 primary constructors, #1951); the edge type is pre-discriminated.
|
|
65
|
+
*/
|
|
66
|
+
function emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site) {
|
|
67
|
+
const edgeKey = `${edgeType}:${callerGraphId}->${targetGraphId}`;
|
|
68
|
+
const dedupKey = `${edgeKey}:${site.atRange.startLine}:${site.atRange.startCol}`;
|
|
69
|
+
if (existing.has(edgeKey) || seen.has(dedupKey))
|
|
70
|
+
return;
|
|
71
|
+
seen.add(dedupKey);
|
|
72
|
+
existing.add(edgeKey);
|
|
73
|
+
graph.addRelationship({
|
|
74
|
+
id: `rel:${dedupKey}`,
|
|
75
|
+
sourceId: callerGraphId,
|
|
76
|
+
targetId: targetGraphId,
|
|
77
|
+
type: edgeType,
|
|
78
|
+
confidence: 0.85,
|
|
79
|
+
reason: 'scope-resolution: inherits',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve inheritance reference sites early and pre-emit their EXTENDS edges
|
|
84
|
+
* before MRO construction. This lets template-base captures contribute to the
|
|
85
|
+
* graph in time for `buildMro`, while `handledSites` prevents the generic
|
|
86
|
+
* reference-edge bridge from re-emitting the same sites later.
|
|
87
|
+
*
|
|
88
|
+
* @returns Site keys to seed the downstream handled-site skip set.
|
|
89
|
+
*/
|
|
90
|
+
function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
|
|
91
|
+
const handledSites = new Set();
|
|
92
|
+
const seen = new Set();
|
|
93
|
+
// Tracks inheritance edges emitted during this pass so the structural
|
|
94
|
+
// interface-implementation pass (emitDetectedInterfaceImplementations) and
|
|
95
|
+
// repeated `inherits` sites don't double-emit. Starts empty: this pre-pass is
|
|
96
|
+
// the authoritative inheritance emitter — no EXTENDS/IMPLEMENTS edges exist in
|
|
97
|
+
// the graph before it runs (the legacy heritage path was removed in #942).
|
|
98
|
+
const existing = new Set();
|
|
99
|
+
for (const site of scopes.referenceSites) {
|
|
100
|
+
if (site.kind !== 'inherits')
|
|
101
|
+
continue;
|
|
102
|
+
const scope = scopes.scopeTree.getScope(site.inScope);
|
|
103
|
+
const siteKey = scope?.filePath !== undefined
|
|
104
|
+
? `${scope.filePath}:${site.atRange.startLine}:${site.atRange.startCol}`
|
|
105
|
+
: undefined;
|
|
106
|
+
if (siteKey !== undefined) {
|
|
107
|
+
// Intentionally suppress every `inherits` site from the generic
|
|
108
|
+
// reference bridge, even when this pre-pass can't emit an EXTENDS
|
|
109
|
+
// edge. The shared bridge resolves the source via
|
|
110
|
+
// `resolveCallerGraphId`, which can degrade class-heritage sites into
|
|
111
|
+
// method-owned EXTENDS edges once methods exist on the class. This
|
|
112
|
+
// pre-pass is the authoritative inheritance emitter and pins the source
|
|
113
|
+
// to the enclosing class (via the `callerGraphId` override below), so
|
|
114
|
+
// suppression keeps `buildMro` and the final graph class-owned.
|
|
115
|
+
handledSites.add(siteKey);
|
|
116
|
+
}
|
|
117
|
+
// Resolve the deriving (caller) class first and reuse it as the enclosing
|
|
118
|
+
// context for qualified-base resolution — avoids a second findEnclosingClassDef
|
|
119
|
+
// walk per qualified site (#1982 perf). Both need the same enclosing class.
|
|
120
|
+
const callerClass = (0, walkers_js_1.findEnclosingClassDef)(site.inScope, scopes);
|
|
121
|
+
if (callerClass === undefined)
|
|
122
|
+
continue;
|
|
123
|
+
const targetDef = (0, walkers_js_1.resolveInheritanceBaseInScope)(site.inScope, site.name, scopes, site.rawQualifiedName, callerClass);
|
|
124
|
+
if (targetDef === undefined)
|
|
125
|
+
continue;
|
|
126
|
+
const callerGraphId = (0, ids_js_1.resolveDefGraphId)(callerClass.filePath, callerClass, nodeLookup);
|
|
127
|
+
const targetGraphId = (0, ids_js_1.resolveDefGraphId)(targetDef.filePath, targetDef, nodeLookup);
|
|
128
|
+
if (callerGraphId === undefined || targetGraphId === undefined)
|
|
129
|
+
continue;
|
|
130
|
+
// Discriminate EXTENDS vs IMPLEMENTS by the resolved target's symbol kind:
|
|
131
|
+
// conforming to an interface OR mixing in a trait/protocol is IMPLEMENTS,
|
|
132
|
+
// deriving from a class-like is EXTENDS. The discriminator is purely
|
|
133
|
+
// symbol-kind-driven (no language is named here, per AGENTS.md): a base that
|
|
134
|
+
// resolves to neither an Interface nor a Trait symbol always takes the
|
|
135
|
+
// EXTENDS branch, so such languages are unchanged.
|
|
136
|
+
const edgeType = targetDef.type === 'Interface' || targetDef.type === 'Trait' ? 'IMPLEMENTS' : 'EXTENDS';
|
|
137
|
+
emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site);
|
|
138
|
+
}
|
|
139
|
+
return handledSites;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Emit language-inferred structural interface implementations before MRO and
|
|
143
|
+
* interface dispatch are built. Languages such as Go do not declare
|
|
144
|
+
* `implements` explicitly, so their resolver can infer defId-level interface
|
|
145
|
+
* satisfaction from parsed files and this bridge converts those defIds to
|
|
146
|
+
* graph node ids.
|
|
147
|
+
*
|
|
148
|
+
* Existing explicit IMPLEMENTS edges win: the local `existing` set prevents
|
|
149
|
+
* duplicate structural edges and keeps this hook language-neutral. The reason
|
|
150
|
+
* string carries the provider language (`go-structural-implements`) so callers
|
|
151
|
+
* can distinguish inferred edges from source-declared heritage.
|
|
152
|
+
*/
|
|
153
|
+
function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, provider, indexes, model) {
|
|
154
|
+
if (provider.detectInterfaceImplementations === undefined)
|
|
155
|
+
return 0;
|
|
156
|
+
const graphIdByDefId = new Map();
|
|
157
|
+
for (const parsed of parsedFiles) {
|
|
158
|
+
for (const def of parsed.localDefs) {
|
|
159
|
+
if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
|
|
160
|
+
continue;
|
|
161
|
+
const graphId = (0, ids_js_1.resolveDefGraphId)(parsed.filePath, def, nodeLookup);
|
|
162
|
+
if (graphId !== undefined)
|
|
163
|
+
graphIdByDefId.set(def.nodeId, graphId);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const existing = new Set();
|
|
167
|
+
for (const rel of graph.iterRelationshipsByType('IMPLEMENTS')) {
|
|
168
|
+
existing.add(`${rel.sourceId}->${rel.targetId}`);
|
|
169
|
+
}
|
|
170
|
+
let emitted = 0;
|
|
171
|
+
const detected = provider.detectInterfaceImplementations(parsedFiles, indexes, model);
|
|
172
|
+
for (const [interfaceDefId, implementorDefIds] of detected) {
|
|
173
|
+
const targetId = graphIdByDefId.get(interfaceDefId);
|
|
174
|
+
if (targetId === undefined)
|
|
175
|
+
continue;
|
|
176
|
+
for (const implementor of implementorDefIds) {
|
|
177
|
+
const sourceId = graphIdByDefId.get(implementor.structDefId);
|
|
178
|
+
if (sourceId === undefined)
|
|
179
|
+
continue;
|
|
180
|
+
const edgeKey = `${sourceId}->${targetId}`;
|
|
181
|
+
if (existing.has(edgeKey))
|
|
182
|
+
continue;
|
|
183
|
+
existing.add(edgeKey);
|
|
184
|
+
graph.addRelationship({
|
|
185
|
+
id: (0, utils_js_1.generateId)('IMPLEMENTS', edgeKey),
|
|
186
|
+
sourceId,
|
|
187
|
+
targetId,
|
|
188
|
+
type: 'IMPLEMENTS',
|
|
189
|
+
confidence: 0.85,
|
|
190
|
+
// The receiver form rides in `reason` because relationships carry no
|
|
191
|
+
// arbitrary properties — adding one would change the relation DDL and
|
|
192
|
+
// move SCHEMA_FINGERPRINT, forcing a full re-analyze for a fact that a
|
|
193
|
+
// string already expresses. `-pointer` means ONLY the pointer type
|
|
194
|
+
// implements: `var x I = T{}` is invalid, `var x I = &T{}` is fine.
|
|
195
|
+
// The unsuffixed form is unchanged from before, so a consumer matching
|
|
196
|
+
// the old string keeps seeing exactly the value-form implementors.
|
|
197
|
+
reason: implementor.receiverForm === 'pointer'
|
|
198
|
+
? `${provider.language}-structural-implements-pointer`
|
|
199
|
+
: `${provider.language}-structural-implements`,
|
|
200
|
+
});
|
|
201
|
+
emitted++;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return emitted;
|
|
205
|
+
}
|
|
206
|
+
function runScopeResolution(input, provider) {
|
|
207
|
+
const { graph, files } = input;
|
|
208
|
+
const callableFlowOnly = provider.scopeResolutionEdgeMode === 'callable-flow-only';
|
|
209
|
+
const onWarn = input.onWarn ?? (() => { });
|
|
210
|
+
const resolutionOutcomes = [];
|
|
211
|
+
const recordResolutionOutcome = (outcome) => {
|
|
212
|
+
resolutionOutcomes.push(outcome);
|
|
213
|
+
input.recordResolutionOutcome?.(outcome);
|
|
214
|
+
};
|
|
215
|
+
const PROF = process.env.PROF_SCOPE_RESOLUTION === '1';
|
|
216
|
+
const tStart = PROF ? process.hrtime.bigint() : 0n;
|
|
217
|
+
let fileContents;
|
|
218
|
+
const getFileContents = () => {
|
|
219
|
+
if (fileContents === undefined) {
|
|
220
|
+
fileContents = new Map();
|
|
221
|
+
for (const f of files)
|
|
222
|
+
fileContents.set(f.path, f.content);
|
|
223
|
+
}
|
|
224
|
+
return fileContents;
|
|
225
|
+
};
|
|
226
|
+
// ── Phase 1: extract each file → ParsedFile ────────────────────────────
|
|
227
|
+
const parsedFiles = [];
|
|
228
|
+
let filesSkipped = 0;
|
|
229
|
+
const treeCache = input.treeCache;
|
|
230
|
+
const preExtracted = input.preExtractedParsedFiles;
|
|
231
|
+
let preExtractedHits = 0;
|
|
232
|
+
const progressInterval = files.length > 0 ? Math.max(1, Math.floor(files.length / 50)) : 1;
|
|
233
|
+
input.onProgress?.('extracting', 0, files.length);
|
|
234
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-extract-start', `lang=${provider.language} files=${files.length}`);
|
|
235
|
+
for (let fileIdx = 0; fileIdx < files.length; fileIdx++) {
|
|
236
|
+
const file = files[fileIdx];
|
|
237
|
+
let parsed;
|
|
238
|
+
// Fast path: a worker (during the parse phase) already produced a
|
|
239
|
+
// ParsedFile for this file via `extractParsedFile`. Reuse it
|
|
240
|
+
// directly — skips a tree-sitter re-parse on the main thread.
|
|
241
|
+
let reusedPreExtracted = false;
|
|
242
|
+
if (preExtracted !== undefined) {
|
|
243
|
+
parsed = preExtracted.get(file.path);
|
|
244
|
+
if (parsed !== undefined) {
|
|
245
|
+
preExtractedHits++;
|
|
246
|
+
reusedPreExtracted = true;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (parsed === undefined) {
|
|
250
|
+
const cachedTree = treeCache?.get(file.path);
|
|
251
|
+
parsed = (0, scope_extractor_bridge_js_1.extractParsedFile)(provider.languageProvider, file.content, file.path, onWarn, cachedTree);
|
|
252
|
+
if (parsed === undefined) {
|
|
253
|
+
filesSkipped++;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Worker-boundary restore: a pre-extracted ParsedFile was produced by
|
|
258
|
+
// `extractParsedFile` running INSIDE a worker, so any capture-time
|
|
259
|
+
// module-level side-channel state (`emitScopeCaptures` side effects that
|
|
260
|
+
// are NOT serialized onto the ParsedFile's scopes/defs — C++ ADL/namespace
|
|
261
|
+
// marks) was populated in the worker process and is missing here. The
|
|
262
|
+
// worker stashed a plain-data snapshot on `parsed.captureSideChannel` (via
|
|
263
|
+
// `collectCaptureSideChannel`); write it back into the module maps now,
|
|
264
|
+
// BEFORE populateOwners consumes the resolved ranges. NO re-parse — that is
|
|
265
|
+
// the #1983 fix. The fresh-extract leg above already populated those marks
|
|
266
|
+
// in this process, so it skips the restore. See
|
|
267
|
+
// `ScopeResolver.applyCaptureSideChannel`.
|
|
268
|
+
if (reusedPreExtracted && provider.applyCaptureSideChannel !== undefined) {
|
|
269
|
+
provider.applyCaptureSideChannel(parsed);
|
|
270
|
+
}
|
|
271
|
+
provider.populateOwners(parsed);
|
|
272
|
+
parsedFiles.push(parsed);
|
|
273
|
+
if ((fileIdx + 1) % progressInterval === 0 || fileIdx === files.length - 1) {
|
|
274
|
+
input.onProgress?.('extracting', fileIdx + 1, files.length);
|
|
275
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-extract-progress', `lang=${provider.language} idx=${fileIdx + 1}/${files.length} parsedFiles=${parsedFiles.length} preExtractedHits=${preExtractedHits}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (PROF && preExtracted !== undefined) {
|
|
279
|
+
logger_js_1.logger.warn(`[scope-resolution prof] pre-extracted hits: ${preExtractedHits}/${files.length}`);
|
|
280
|
+
}
|
|
281
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-extract-end', `lang=${provider.language} parsedFiles=${parsedFiles.length} preExtractedHits=${preExtractedHits} skipped=${filesSkipped}`);
|
|
282
|
+
provider.populateWorkspaceOwners?.(parsedFiles, { fileContents: getFileContents() });
|
|
283
|
+
// A callable-flow-only provider has no reason to build the whole-graph
|
|
284
|
+
// lookup or finalize ordinary references when none of its files emitted a
|
|
285
|
+
// callable fact. This keeps the opt-in path proportional to source scanning
|
|
286
|
+
// for repositories that use the provider but no first-class callables.
|
|
287
|
+
if (callableFlowOnly &&
|
|
288
|
+
!parsedFiles.some((parsed) => (parsed.callableFlowSites?.length ?? 0) > 0)) {
|
|
289
|
+
return {
|
|
290
|
+
filesProcessed: parsedFiles.length,
|
|
291
|
+
filesSkipped,
|
|
292
|
+
importsEmitted: 0,
|
|
293
|
+
resolve: { sitesProcessed: 0, referencesEmitted: 0, unresolved: 0 },
|
|
294
|
+
referenceEdgesEmitted: 0,
|
|
295
|
+
referenceSkipped: 0,
|
|
296
|
+
propertyDispatchSkippedKeys: 0,
|
|
297
|
+
resolutionOutcomes,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
// Reconcile scope-resolution's ownership view into the SemanticModel.
|
|
301
|
+
// See `reconcile-ownership.ts` for the full rationale (Contract
|
|
302
|
+
// Invariant I9). Debug-mode validator runs immediately after to
|
|
303
|
+
// catch drift between `parsed.localDefs` and the registries.
|
|
304
|
+
//
|
|
305
|
+
// PHASE BOUNDARY: `input.model` is `MutableSemanticModel` up to this
|
|
306
|
+
// point (write phase: reconciliation). After this line no further
|
|
307
|
+
// writes are expected — downstream passes consume `readonlyModel`
|
|
308
|
+
// (narrowed to `SemanticModel`) so accidental writes would surface
|
|
309
|
+
// as type errors.
|
|
310
|
+
(0, reconcile_ownership_js_1.reconcileOwnership)(parsedFiles, input.model);
|
|
311
|
+
(0, reconcile_ownership_js_1.validateOwnershipParity)(parsedFiles, input.model, onWarn);
|
|
312
|
+
const readonlyModel = input.model;
|
|
313
|
+
if (parsedFiles.length === 0) {
|
|
314
|
+
return {
|
|
315
|
+
filesProcessed: 0,
|
|
316
|
+
filesSkipped,
|
|
317
|
+
importsEmitted: 0,
|
|
318
|
+
resolve: { sitesProcessed: 0, referencesEmitted: 0, unresolved: 0 },
|
|
319
|
+
referenceEdgesEmitted: 0,
|
|
320
|
+
referenceSkipped: 0,
|
|
321
|
+
propertyDispatchSkippedKeys: 0,
|
|
322
|
+
resolutionOutcomes,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const tExtract = PROF ? process.hrtime.bigint() : 0n;
|
|
326
|
+
// ── Phase 2: finalize → ScopeResolutionIndexes ─────────────────────────
|
|
327
|
+
input.onProgress?.('analyzing types', files.length, files.length);
|
|
328
|
+
const allFilePaths = new Set(parsedFiles.map((f) => f.filePath));
|
|
329
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-pre-nodeLookup', `lang=${provider.language}`);
|
|
330
|
+
const nodeLookup = input.prebuiltNodeLookup ?? (0, node_lookup_js_1.buildGraphNodeLookup)(graph);
|
|
331
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-post-nodeLookup', `lang=${provider.language}`);
|
|
332
|
+
const resolutionConfig = input.resolutionConfig;
|
|
333
|
+
const finalized = (0, finalize_orchestrator_js_1.finalizeScopeModel)(parsedFiles, {
|
|
334
|
+
hooks: {
|
|
335
|
+
resolveImportTarget: (targetRaw, fromFile, _workspaceIndex, parsedImport) => provider.resolveImportTarget(targetRaw, fromFile, allFilePaths, resolutionConfig, {
|
|
336
|
+
parsedFiles,
|
|
337
|
+
parsedImport,
|
|
338
|
+
}),
|
|
339
|
+
isNamespaceImport: (parsedImport, targetFile, fromFile) => provider.isNamespaceImport?.(parsedImport, targetFile, fromFile) ?? false,
|
|
340
|
+
expandsWildcardTo: (targetModuleScope) => provider.expandsWildcardTo?.(targetModuleScope, parsedFiles) ?? [],
|
|
341
|
+
mergeBindings: (existing, incoming, scopeId) => provider.mergeBindings(existing, incoming, scopeId),
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-post-finalize', `lang=${provider.language}`);
|
|
345
|
+
const preEmittedInheritanceSites = callableFlowOnly
|
|
346
|
+
? new Set()
|
|
347
|
+
: preEmitInheritanceEdges(graph, finalized, nodeLookup);
|
|
348
|
+
// Call-based heritage hook (e.g., Ruby include/extend/prepend) — emits
|
|
349
|
+
// IMPLEMENTS edges that `preEmitInheritanceEdges` cannot produce because
|
|
350
|
+
// the heritage declarations are syntactic method calls, not grammar-level
|
|
351
|
+
// heritage clauses. Must run BEFORE `buildMro` so MRO construction sees
|
|
352
|
+
// the freshly-emitted IMPLEMENTS edges.
|
|
353
|
+
if (!callableFlowOnly) {
|
|
354
|
+
provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized);
|
|
355
|
+
}
|
|
356
|
+
// Implicit IMPORTS-edge hook — for languages whose files have compiler-
|
|
357
|
+
// implicit cross-file visibility (no syntactic import statement). The
|
|
358
|
+
// finalized-ImportEdge pipeline (`emitImportEdges`) cannot produce these
|
|
359
|
+
// because there is no `ImportEdge` to materialize. Idempotent.
|
|
360
|
+
if (!callableFlowOnly) {
|
|
361
|
+
provider.emitImplicitImportEdges?.(graph, parsedFiles, nodeLookup, resolutionConfig);
|
|
362
|
+
}
|
|
363
|
+
// Rebuild the node lookup after heritage-edge emission. Languages like
|
|
364
|
+
// Ruby create Property graph nodes inside `emitHeritageEdges`; those
|
|
365
|
+
// nodes must be visible to downstream passes (`emitReceiverBoundCalls`
|
|
366
|
+
// resolves write-access targets via `resolveDefGraphId` which consults
|
|
367
|
+
// `nodeLookup`). Without this rebuild, Property nodes added by the
|
|
368
|
+
// heritage hook are invisible and ACCESSES edges silently fail to emit.
|
|
369
|
+
const postHeritageNodeLookup = !callableFlowOnly && provider.emitHeritageEdges !== undefined
|
|
370
|
+
? (0, node_lookup_js_1.buildGraphNodeLookup)(graph)
|
|
371
|
+
: nodeLookup;
|
|
372
|
+
if (!callableFlowOnly) {
|
|
373
|
+
emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel);
|
|
374
|
+
}
|
|
375
|
+
const mroByClassDefId = provider.buildMro(graph, parsedFiles, postHeritageNodeLookup);
|
|
376
|
+
const extendsOnlyMroByClassDefId = provider.buildExtendsOnlyMro?.(graph, parsedFiles, postHeritageNodeLookup);
|
|
377
|
+
// Replace the empty MethodDispatchIndex that finalizeScopeModel
|
|
378
|
+
// builds by design with the populated one derived from the
|
|
379
|
+
// language's MRO. Spread produces a fresh `ScopeResolutionIndexes`
|
|
380
|
+
// instead of mutating the finalized result through an `as` cast —
|
|
381
|
+
// downstream passes get an object whose readonly guarantees match
|
|
382
|
+
// the type system.
|
|
383
|
+
const indexes = {
|
|
384
|
+
...finalized,
|
|
385
|
+
methodDispatch: (0, method_dispatch_js_1.buildPopulatedMethodDispatch)(mroByClassDefId, extendsOnlyMroByClassDefId),
|
|
386
|
+
};
|
|
387
|
+
// Build the workspace resolution index ONCE — scope-valued lookups
|
|
388
|
+
// (`classScopeByDefId`, `moduleScopeByFile`) that `SemanticModel`
|
|
389
|
+
// cannot carry. Must run AFTER `populateOwners` (so owned defs are
|
|
390
|
+
// attributed correctly) and AFTER finalize (so module-scope
|
|
391
|
+
// bindings are available).
|
|
392
|
+
// Pass the scopeTree so the index's class/module Scope lookups are id-backed
|
|
393
|
+
// views that delegate to it (out-of-core scope index) — the index pins no Scope objects, so the
|
|
394
|
+
// disk seal can reclaim them. Byte-identical: the view returns the same Scope
|
|
395
|
+
// the resident tree holds (or a value-identical revived one in disk mode).
|
|
396
|
+
const workspaceIndex = (0, workspace_index_js_1.buildWorkspaceResolutionIndex)(parsedFiles, indexes.scopeTree);
|
|
397
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-post-workspaceIndex', `lang=${provider.language}`);
|
|
398
|
+
// Cross-file implicit-namespace visibility (C#). Must run before
|
|
399
|
+
// propagateImportedReturnTypes so the latter pass sees siblings'
|
|
400
|
+
// class bindings when chasing return-type chains across files.
|
|
401
|
+
// The hook writes to `bindingAugmentations` only; finalized
|
|
402
|
+
// `indexes.bindings` remains immutable post-finalize (I8).
|
|
403
|
+
if (provider.populateNamespaceSiblings !== undefined) {
|
|
404
|
+
provider.populateNamespaceSiblings(parsedFiles, indexes, {
|
|
405
|
+
fileContents: getFileContents(),
|
|
406
|
+
treeCache,
|
|
407
|
+
resolutionConfig,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
const tFinalize = PROF ? process.hrtime.bigint() : 0n;
|
|
411
|
+
// Cross-package namespace typeBinding mirroring. Runs before
|
|
412
|
+
// propagateImportedReturnTypes so the SCC-ordered pass sees the
|
|
413
|
+
// mirrored bindings.
|
|
414
|
+
if (provider.mirrorNamespaceTypeBindings !== undefined) {
|
|
415
|
+
provider.mirrorNamespaceTypeBindings(parsedFiles, indexes, workspaceIndex, resolutionConfig);
|
|
416
|
+
}
|
|
417
|
+
// Cross-file return-type propagation (Contract Invariant I3 timing:
|
|
418
|
+
// after finalize, before resolve). Split-timed separately so the
|
|
419
|
+
// SCC-ordered pass's cost is observable (PR #1050 made this O(files)
|
|
420
|
+
// with chain-follow per importer; quadratic regressions show up
|
|
421
|
+
// here, not in finalize).
|
|
422
|
+
if (provider.propagatesReturnTypesAcrossImports !== false) {
|
|
423
|
+
(0, imported_return_types_js_1.propagateImportedReturnTypes)(parsedFiles, indexes, workspaceIndex);
|
|
424
|
+
}
|
|
425
|
+
const tRangeBindStart = PROF ? process.hrtime.bigint() : 0n;
|
|
426
|
+
if (provider.populateRangeBindings !== undefined) {
|
|
427
|
+
provider.populateRangeBindings(parsedFiles, indexes, {
|
|
428
|
+
fileContents: getFileContents(),
|
|
429
|
+
treeCache,
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
const tPropagate = PROF ? process.hrtime.bigint() : 0n;
|
|
433
|
+
// Opt-in I8 invariant guard. Runs once after all post-finalize hooks
|
|
434
|
+
// (`populateNamespaceSiblings`, `propagateImportedReturnTypes`) have
|
|
435
|
+
// had a chance to drift, so a single sweep covers the full
|
|
436
|
+
// post-finalize surface visible to `resolveReferenceSites`. No-op in
|
|
437
|
+
// default CLI runs; enabled by NODE_ENV=development or
|
|
438
|
+
// VALIDATE_SEMANTIC_MODEL=1.
|
|
439
|
+
(0, validate_bindings_immutability_js_1.validateBindingsImmutability)(indexes, onWarn);
|
|
440
|
+
// ── Phase 3: resolve references via Registry.lookup ────────────────────
|
|
441
|
+
input.onProgress?.('resolving references', files.length, files.length);
|
|
442
|
+
const registryProviders = {
|
|
443
|
+
arityCompatibility: provider.arityCompatibility,
|
|
444
|
+
};
|
|
445
|
+
const { referenceIndex, stats: resolveStats } = (0, resolve_references_js_1.resolveReferenceSites)({
|
|
446
|
+
scopes: indexes,
|
|
447
|
+
providers: registryProviders,
|
|
448
|
+
ownedMembersByOwner: (ownerDefId, memberName) => (0, owned_members_lookup_js_1.lookupOwnedMembersByOwner)(readonlyModel, ownerDefId, memberName),
|
|
449
|
+
});
|
|
450
|
+
const tResolve = PROF ? process.hrtime.bigint() : 0n;
|
|
451
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-post-resolve', `lang=${provider.language}`);
|
|
452
|
+
// ── Out-of-core scope seal boundary ─────────────────────────────────────
|
|
453
|
+
// Pass-A (finalize + propagate + resolve) is done; all whole-language reads
|
|
454
|
+
// of `Scope.bindings` are behind us. Emit reaches scopes ONLY via
|
|
455
|
+
// `scopeTree.getScope` (a point lookup), so seal the TransitionalScopeTree to
|
|
456
|
+
// disk now and drop the resident scopes. The scopes are pinned from THREE
|
|
457
|
+
// sides: (1) the model's frozen `scopeTree` — released by `seal()` nulling its
|
|
458
|
+
// resident backing from the inside; (2) `input.preExtractedParsedFiles` (held
|
|
459
|
+
// by the caller for its own post-run release) — released here since run.ts is
|
|
460
|
+
// its last reader after extract; (3) this function's `parsedFiles` — replaced
|
|
461
|
+
// by a scope-stripped copy that keeps only what emit reads (referenceSites /
|
|
462
|
+
// filePath / localDefs). All three released → the heavy payload is collectible.
|
|
463
|
+
let emitParsedFiles = parsedFiles;
|
|
464
|
+
if (input.scopeIndexStorePath !== undefined &&
|
|
465
|
+
(0, env_js_1.parseTruthyEnv)(process.env.CGRAPH_DISK_SCOPE_INDEX) &&
|
|
466
|
+
indexes.scopeTree instanceof scope_index_store_js_1.TransitionalScopeTree) {
|
|
467
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-seal-pre', `lang=${provider.language}`);
|
|
468
|
+
indexes.scopeTree.seal(input.scopeIndexStorePath);
|
|
469
|
+
emitParsedFiles = parsedFiles.map((p) => ({ ...p, scopes: [] }));
|
|
470
|
+
parsedFiles.length = 0;
|
|
471
|
+
if (preExtracted !== undefined)
|
|
472
|
+
preExtracted.clear();
|
|
473
|
+
(0, parsedfile_store_js_1.forceGc)();
|
|
474
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-seal-post', `lang=${provider.language}`);
|
|
475
|
+
}
|
|
476
|
+
// ── Phase 4: emit graph edges (LOAD-BEARING ORDER — see I1) ────────────
|
|
477
|
+
input.onProgress?.('linking symbols', files.length, files.length);
|
|
478
|
+
const handledSites = new Set(preEmittedInheritanceSites);
|
|
479
|
+
const deferredIndirectSites = (0, callable_value_flow_js_1.collectDeferredIndirectSites)(emitParsedFiles, indexes);
|
|
480
|
+
const callableArgumentSites = new Set();
|
|
481
|
+
if (deferredIndirectSites.size > 0) {
|
|
482
|
+
for (const parsed of emitParsedFiles) {
|
|
483
|
+
for (const site of parsed.callableFlowSites ?? []) {
|
|
484
|
+
if (site.kind === 'argument') {
|
|
485
|
+
callableArgumentSites.add((0, callable_value_flow_js_1.callableFlowSiteKey)(parsed.filePath, site.callSite));
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
// Resolved-callee-id accumulator (#2227 U2 + callable-value-flow). Created
|
|
491
|
+
// when indirect-call facts need direct targets for actual→formal propagation.
|
|
492
|
+
// Populated below at every CALLS emit path before dedup.
|
|
493
|
+
const calleeIdAccumulator = deferredIndirectSites.size > 0
|
|
494
|
+
? (0, callee_id_sink_js_1.createCalleeIdAccumulator)((filePath, line, col) => callableArgumentSites.has(`${filePath}:${line}:${col}`))
|
|
495
|
+
: undefined;
|
|
496
|
+
const receiverBound = callableFlowOnly
|
|
497
|
+
? {
|
|
498
|
+
emitted: 0,
|
|
499
|
+
dispatchFanoutSkipped: 0,
|
|
500
|
+
dispatchFanoutSkippedNames: [],
|
|
501
|
+
}
|
|
502
|
+
: (0, receiver_bound_calls_js_1.emitReceiverBoundCalls)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, provider, workspaceIndex, readonlyModel, {
|
|
503
|
+
recordResolutionOutcome,
|
|
504
|
+
calleeIdSink: calleeIdAccumulator,
|
|
505
|
+
// The pass's only source of positive EXTERNAL evidence for a dropped
|
|
506
|
+
// receiver (`console.log`, `fetch(...)`). Same hook, same spelling as
|
|
507
|
+
// the `emitFreeCallFallback` wiring below.
|
|
508
|
+
isBuiltInName: provider.languageProvider.isBuiltInName,
|
|
509
|
+
});
|
|
510
|
+
const receiverExtras = receiverBound.emitted;
|
|
511
|
+
if (receiverBound.dispatchFanoutSkipped > 0) {
|
|
512
|
+
// Never drop dispatch coverage silently (#2829) — same contract as the
|
|
513
|
+
// property-dispatch cap below. An interface member over the cap loses real
|
|
514
|
+
// implementors, so `impact()` on those implementations under-reports; an
|
|
515
|
+
// operator has to be able to see WHICH member lost them.
|
|
516
|
+
logger_js_1.logger.warn({
|
|
517
|
+
lang: provider.language,
|
|
518
|
+
dispatchFanoutSkipped: receiverBound.dispatchFanoutSkipped,
|
|
519
|
+
dispatchFanoutSkippedNames: receiverBound.dispatchFanoutSkippedNames,
|
|
520
|
+
fanoutCap: receiver_bound_calls_js_1.MAX_INTERFACE_DISPATCH_FANOUT,
|
|
521
|
+
}, 'interface-dispatch: members over the fan-out cap dropped implementors (their CALLS edges were not emitted)');
|
|
522
|
+
}
|
|
523
|
+
const unresolvedReceiverExtras = !callableFlowOnly && provider.emitUnresolvedReceiverEdges !== undefined
|
|
524
|
+
? provider.emitUnresolvedReceiverEdges(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, readonlyModel)
|
|
525
|
+
: 0;
|
|
526
|
+
const freeCallExtras = callableFlowOnly
|
|
527
|
+
? 0
|
|
528
|
+
: (0, free_call_fallback_js_1.emitFreeCallFallback)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, referenceIndex, handledSites, readonlyModel, workspaceIndex, {
|
|
529
|
+
allowGlobalFallback: provider.allowGlobalFreeCallFallback === true,
|
|
530
|
+
constructorCallTargetsClass: provider.constructorCallTargetsClass === true,
|
|
531
|
+
isFileLocalDef: provider.isFileLocalDef,
|
|
532
|
+
isBuiltInName: provider.languageProvider.isBuiltInName,
|
|
533
|
+
freeCallsRequireInstanceOwnership: provider.freeCallsRequireInstanceOwnership === true,
|
|
534
|
+
isCallableVisibleFromCaller: provider.isCallableVisibleFromCaller,
|
|
535
|
+
resolveAdlCandidates: provider.resolveAdlCandidates,
|
|
536
|
+
resolveQualifiedFreeCall: provider.resolveQualifiedFreeCall,
|
|
537
|
+
conversionRankFn: provider.conversionRankFn,
|
|
538
|
+
conversionOnlyArgTypePrefixes: provider.conversionOnlyArgTypePrefixes,
|
|
539
|
+
constraintCompatibility: provider.constraintCompatibility,
|
|
540
|
+
recordResolutionOutcome,
|
|
541
|
+
calleeIdSink: calleeIdAccumulator,
|
|
542
|
+
skipSites: deferredIndirectSites,
|
|
543
|
+
});
|
|
544
|
+
const referenceSkipSites = new Set(handledSites);
|
|
545
|
+
for (const key of deferredIndirectSites)
|
|
546
|
+
referenceSkipSites.add(key);
|
|
547
|
+
const { emitted, skipped } = callableFlowOnly
|
|
548
|
+
? { emitted: 0, skipped: 0 }
|
|
549
|
+
: (0, references_to_edges_js_1.emitReferencesViaLookup)(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator);
|
|
550
|
+
// value-ref registrations (#2437): USES edges at the registration sites
|
|
551
|
+
// plus field-based dispatch — synthesized CALLS from member-call sites to
|
|
552
|
+
// functions registered under the same property key. This runs after the
|
|
553
|
+
// ordinary precise passes but before callable-value-flow: property-dispatched
|
|
554
|
+
// wrapper calls must populate the callee accumulator before actual→formal
|
|
555
|
+
// propagation. `graph.addRelationship` remains first-write-wins, so precise
|
|
556
|
+
// edges already emitted for a site retain ownership.
|
|
557
|
+
const propertyDispatch = callableFlowOnly
|
|
558
|
+
? { usesEmitted: 0, callsEmitted: 0, skippedKeys: 0, skippedKeyNames: [] }
|
|
559
|
+
: (0, property_dispatch_js_1.emitPropertyDispatchCalls)(graph, indexes, emitParsedFiles, postHeritageNodeLookup, calleeIdAccumulator);
|
|
560
|
+
if (propertyDispatch.skippedKeys > 0) {
|
|
561
|
+
// Never drop dispatch coverage silently: a hook table larger than the
|
|
562
|
+
// fan-out cap means member calls through those keys get no synthesized
|
|
563
|
+
// CALLS — the #2437 false-safe gap reappears for exactly those keys.
|
|
564
|
+
logger_js_1.logger.warn({
|
|
565
|
+
lang: provider.language,
|
|
566
|
+
skippedKeys: propertyDispatch.skippedKeys,
|
|
567
|
+
skippedKeyNames: propertyDispatch.skippedKeyNames,
|
|
568
|
+
fanoutCap: property_dispatch_js_1.MAX_PROPERTY_DISPATCH_FANOUT,
|
|
569
|
+
}, 'property-dispatch: keys over the fan-out cap were dropped (no CALLS synthesized for them)');
|
|
570
|
+
}
|
|
571
|
+
const callableValueFlow = calleeIdAccumulator === undefined
|
|
572
|
+
? {
|
|
573
|
+
emitted: 0,
|
|
574
|
+
resolvedInvokes: 0,
|
|
575
|
+
ambiguousInvokes: 0,
|
|
576
|
+
unmatchedInvokes: 0,
|
|
577
|
+
iterations: 0,
|
|
578
|
+
}
|
|
579
|
+
: (0, callable_value_flow_js_1.emitCallableValueFlow)({
|
|
580
|
+
graph,
|
|
581
|
+
scopes: indexes,
|
|
582
|
+
parsedFiles: emitParsedFiles,
|
|
583
|
+
nodeLookup: postHeritageNodeLookup,
|
|
584
|
+
calleeIds: calleeIdAccumulator,
|
|
585
|
+
language: provider.language,
|
|
586
|
+
collapseByCallerTarget: provider.collapseMemberCallsByCallerTarget === true,
|
|
587
|
+
isCallableValueTarget: provider.isCallableValueTarget,
|
|
588
|
+
hasFileLocalCallableLinkage: provider.hasFileLocalCallableLinkage,
|
|
589
|
+
onWarn: (warning) => logger_js_1.logger.warn(warning, 'callable-value-flow: candidate set exceeded the cap; no partial CALLS emitted'),
|
|
590
|
+
});
|
|
591
|
+
const importsEmitted = callableFlowOnly
|
|
592
|
+
? 0
|
|
593
|
+
: (0, imports_to_edges_js_1.emitImportEdges)(graph, indexes.imports, indexes.scopeTree, provider.importEdgeReason);
|
|
594
|
+
// Language-specific supplementary edges (e.g. Vue template-derived
|
|
595
|
+
// BINDS_EVENT_HANDLER / EMITS_EVENT / CALLS / ACCESSES edges).
|
|
596
|
+
// Runs last so the full graph — including import edges — is visible.
|
|
597
|
+
if (!callableFlowOnly && provider.emitPostResolutionEdges !== undefined) {
|
|
598
|
+
provider.emitPostResolutionEdges(graph, emitParsedFiles, postHeritageNodeLookup, indexes, {
|
|
599
|
+
fileContents: getFileContents(),
|
|
600
|
+
resolutionConfig,
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
if (PROF) {
|
|
604
|
+
const tEnd = process.hrtime.bigint();
|
|
605
|
+
const ns = (a, b) => Number(b - a) / 1_000_000;
|
|
606
|
+
logger_js_1.logger.warn(`[scope-resolution prof] extract=${ns(tStart, tExtract).toFixed(0)}ms` +
|
|
607
|
+
` finalize=${ns(tExtract, tFinalize).toFixed(0)}ms` +
|
|
608
|
+
` propagate=${ns(tFinalize, tPropagate).toFixed(0)}ms` +
|
|
609
|
+
` rangeBind=${ns(tRangeBindStart, tPropagate).toFixed(1)}ms` +
|
|
610
|
+
` resolve=${ns(tPropagate, tResolve).toFixed(0)}ms` +
|
|
611
|
+
` emit=${ns(tResolve, tEnd).toFixed(0)}ms` +
|
|
612
|
+
` total=${ns(tStart, tEnd).toFixed(0)}ms` +
|
|
613
|
+
` (${parsedFiles.length} files)`);
|
|
614
|
+
}
|
|
615
|
+
(0, heap_probe_js_1.logHeapProbe)('sr-end', `lang=${provider.language} parsedFiles=${parsedFiles.length}`);
|
|
616
|
+
return {
|
|
617
|
+
filesProcessed: parsedFiles.length,
|
|
618
|
+
filesSkipped,
|
|
619
|
+
importsEmitted,
|
|
620
|
+
resolve: resolveStats,
|
|
621
|
+
referenceEdgesEmitted: emitted +
|
|
622
|
+
receiverExtras +
|
|
623
|
+
unresolvedReceiverExtras +
|
|
624
|
+
freeCallExtras +
|
|
625
|
+
callableValueFlow.emitted +
|
|
626
|
+
propertyDispatch.usesEmitted +
|
|
627
|
+
propertyDispatch.callsEmitted,
|
|
628
|
+
referenceSkipped: skipped,
|
|
629
|
+
propertyDispatchSkippedKeys: propertyDispatch.skippedKeys,
|
|
630
|
+
resolutionOutcomes,
|
|
631
|
+
};
|
|
632
|
+
}
|