cgraphx 2.0.2 → 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/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/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,804 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C++ argument-dependent lookup (ADL / Koenig lookup).
|
|
4
|
+
*
|
|
5
|
+
* When ordinary unqualified lookup fails for a free-call site, ADL also
|
|
6
|
+
* considers candidates declared in the **associated namespaces** of the
|
|
7
|
+
* call's argument types (ISO C++ `[basic.lookup.argdep]`). The canonical
|
|
8
|
+
* pattern V1 unlocks:
|
|
9
|
+
*
|
|
10
|
+
* namespace audit { struct Event; void record(Event); }
|
|
11
|
+
* namespace app { void run() { audit::Event e; record(e); } }
|
|
12
|
+
*
|
|
13
|
+
* Without ADL: `record(e)` is unresolved because `app::run` doesn't
|
|
14
|
+
* `using` anything. With V1 ADL: `audit::record` is discovered via
|
|
15
|
+
* `audit::Event`'s associated namespace.
|
|
16
|
+
*
|
|
17
|
+
* ## Current boundary
|
|
18
|
+
*
|
|
19
|
+
* The current implementation covers class-typed arguments (value, pointer,
|
|
20
|
+
* and reference) and template specializations with explicit type arguments:
|
|
21
|
+
* - `audit::Event e`, `audit::Event* p`, `audit::Event** pp`
|
|
22
|
+
* - `audit::Event& r`, `audit::Event&& rr`
|
|
23
|
+
* - `std::vector<audit::Event>` (template namespace + template-arg namespaces)
|
|
24
|
+
*
|
|
25
|
+
* V2 additionally walks class ancestors (via MRO), so base-class enclosing
|
|
26
|
+
* namespaces also contribute associated namespaces.
|
|
27
|
+
*
|
|
28
|
+
* Function-reference arguments follow ISO C++ `[basic.lookup.argdep]`:
|
|
29
|
+
* associated entities come from the parameter types and return type of each
|
|
30
|
+
* referenced function in the overload set, not from the function's enclosing
|
|
31
|
+
* namespace. For `void worker()`, the associated set is empty. For
|
|
32
|
+
* `void worker(api::Token)` or `api::Token make_token()`, `api` is associated
|
|
33
|
+
* through `Token`.
|
|
34
|
+
*
|
|
35
|
+
* For qualified refs (e.g. `utils::worker`) the workspace lookup is restricted
|
|
36
|
+
* to functions/methods named `worker` in `utils`; for unqualified refs the
|
|
37
|
+
* workspace is searched for matching functions/methods by simple name. Locally
|
|
38
|
+
* declared function-pointer variables and function parameters are excluded
|
|
39
|
+
* from this path.
|
|
40
|
+
*
|
|
41
|
+
* ADL candidates are merged with ordinary unqualified-lookup candidates
|
|
42
|
+
* in the free-call fallback before overload narrowing.
|
|
43
|
+
*
|
|
44
|
+
* ## Parenthesized-name suppression
|
|
45
|
+
*
|
|
46
|
+
* `(f)(s)` MUST NOT trigger ADL — the parenthesized name forces ordinary
|
|
47
|
+
* lookup only. `captures.ts` records sites whose `function` child is a
|
|
48
|
+
* `parenthesized_expression` into `noAdlSites`; `pickCppAdlCandidates`
|
|
49
|
+
* short-circuits when the site key is present.
|
|
50
|
+
*
|
|
51
|
+
* ## State lifecycle
|
|
52
|
+
*
|
|
53
|
+
* Five pieces of module-level state populated per pipeline invocation, all
|
|
54
|
+
* reset together by `clearCppAdlState()` (called from
|
|
55
|
+
* `cppScopeResolver.loadResolutionConfig`, alongside `clearFileLocalNames` —
|
|
56
|
+
* NOT from `clearFileLocalNames` itself), grouped by when they fill:
|
|
57
|
+
*
|
|
58
|
+
* - `argInfoBySite` — per-call-site argument shape (capture-time)
|
|
59
|
+
* - `noAdlSites` — call sites with parenthesized function (capture-time)
|
|
60
|
+
* - `classToNamespaceQualifiedName` — class def → its enclosing namespace
|
|
61
|
+
* qualified name (`populateCppAssociatedNamespaces` time)
|
|
62
|
+
* - `adlIndexByPass` — the lazily-built candidate index, memoized weakly on
|
|
63
|
+
* the `parsedFiles` array it was built from (first-`pickCppAdlCandidates`
|
|
64
|
+
* time; see `ensureAdlIndex`)
|
|
65
|
+
*
|
|
66
|
+
* The class→namespace map uses qualified names (not scope IDs) because
|
|
67
|
+
* C++ namespaces are open: `namespace N { ... }` in file A and
|
|
68
|
+
* `namespace N { ... }` in file B produce two distinct Namespace scopes
|
|
69
|
+
* but logically share the same namespace. ADL must consider candidates
|
|
70
|
+
* declared in either file.
|
|
71
|
+
*/
|
|
72
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
73
|
+
exports.validateAdlSeqCoverage = validateAdlSeqCoverage;
|
|
74
|
+
exports.markCppAdlSiteArgs = markCppAdlSiteArgs;
|
|
75
|
+
exports.markCppAdlSiteNoAdl = markCppAdlSiteNoAdl;
|
|
76
|
+
exports.collectCppAdlSideChannel = collectCppAdlSideChannel;
|
|
77
|
+
exports.applyCppAdlSideChannel = applyCppAdlSideChannel;
|
|
78
|
+
exports.clearCppAdlState = clearCppAdlState;
|
|
79
|
+
exports.populateCppAssociatedNamespaces = populateCppAssociatedNamespaces;
|
|
80
|
+
exports.pickCppAdlCandidates = pickCppAdlCandidates;
|
|
81
|
+
const arity_metadata_js_1 = require("./arity-metadata.js");
|
|
82
|
+
const inline_namespaces_js_1 = require("./inline-namespaces.js");
|
|
83
|
+
const argInfoBySite = new Map();
|
|
84
|
+
const noAdlSites = new Set();
|
|
85
|
+
const classToNamespaceQualifiedName = new Map();
|
|
86
|
+
/**
|
|
87
|
+
* Per-`filePath` index of the site keys this file contributed to
|
|
88
|
+
* `argInfoBySite` / `noAdlSites`, kept in **strict lockstep** with those two
|
|
89
|
+
* maps (#1983 perf). Without it, `collectCppAdlSideChannel(filePath)` had to
|
|
90
|
+
* scan the ENTIRE module-level maps (every site of every file the worker
|
|
91
|
+
* parsed in the current sub-batch) and `parseSiteKey` each entry just to pick
|
|
92
|
+
* out one file's slice — O(F²) per sub-batch (~100M `parseSiteKey` calls
|
|
93
|
+
* across the Linux kernel). These indexes turn collect into
|
|
94
|
+
* O(entries-for-this-file).
|
|
95
|
+
*
|
|
96
|
+
* Lockstep invariant: a key is pushed here at most once, exactly when it is
|
|
97
|
+
* first inserted into the corresponding map, and both indexes are cleared
|
|
98
|
+
* wherever `argInfoBySite` / `noAdlSites` are cleared (`clearCppAdlState` and
|
|
99
|
+
* the per-file restore in `applyCppAdlSideChannel`). The "first insert only"
|
|
100
|
+
* guard mirrors the maps' own de-dup (`Map.set` / `Set.add` are idempotent on
|
|
101
|
+
* the key), so iterating an index yields each of this file's keys exactly once
|
|
102
|
+
* — byte-identical to the old filtered full scan.
|
|
103
|
+
*/
|
|
104
|
+
const argInfoSiteKeysByFile = new Map();
|
|
105
|
+
const noAdlSiteKeysByFile = new Map();
|
|
106
|
+
/** Push `key` into the per-file index `idx[filePath]` (creating the bucket on
|
|
107
|
+
* first use). Callers guard against duplicate keys so each key appears once. */
|
|
108
|
+
function pushFileSiteKey(idx, filePath, key) {
|
|
109
|
+
let keys = idx.get(filePath);
|
|
110
|
+
if (keys === undefined) {
|
|
111
|
+
keys = [];
|
|
112
|
+
idx.set(filePath, keys);
|
|
113
|
+
}
|
|
114
|
+
keys.push(key);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Per-pass memo: `parsedFiles` array identity → the built index. `WeakMap`-keyed
|
|
118
|
+
* so the entry lives only as long as the caller's `parsedFiles` array does, and
|
|
119
|
+
* is reclaimed with the pass — mirrors `qualifiedNsIndexByPass` in
|
|
120
|
+
* `inline-namespaces.ts` and `moduleScopeIndexByPass` in `file-local-linkage.ts`.
|
|
121
|
+
*
|
|
122
|
+
* Weak keying is load-bearing, not stylistic: the index holds
|
|
123
|
+
* `SymbolDefinition` references reaching into every ParsedFile's scopes, so the
|
|
124
|
+
* previous module-level strong `let` pair (index + source array) kept the whole
|
|
125
|
+
* C/C++ ParsedFile set alive past the point `scope-resolution/pipeline/phase.ts`
|
|
126
|
+
* evicts `files`/`contents`/`preExtractedByPath` and calls `forceGc()` to
|
|
127
|
+
* reclaim it — C++ is 7th of 16 `SCOPE_RESOLVERS` entries, so the retention
|
|
128
|
+
* survived nine later language passes plus emit.
|
|
129
|
+
*/
|
|
130
|
+
let adlIndexByPass = new WeakMap();
|
|
131
|
+
function siteKey(filePath, line, col) {
|
|
132
|
+
return `${filePath}:${line}:${col}`;
|
|
133
|
+
}
|
|
134
|
+
/** Last segment of a dotted qualified name (matches legacy inline expression). */
|
|
135
|
+
function adlSimpleName(def) {
|
|
136
|
+
return def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
|
|
137
|
+
}
|
|
138
|
+
function isAdlCallableType(type) {
|
|
139
|
+
return type === 'Function' || type === 'Method' || type === 'Constructor';
|
|
140
|
+
}
|
|
141
|
+
function pushNested(map, outerKey, innerKey, def) {
|
|
142
|
+
let inner = map.get(outerKey);
|
|
143
|
+
if (inner === undefined) {
|
|
144
|
+
inner = new Map();
|
|
145
|
+
map.set(outerKey, inner);
|
|
146
|
+
}
|
|
147
|
+
let arr = inner.get(innerKey);
|
|
148
|
+
if (arr === undefined) {
|
|
149
|
+
arr = [];
|
|
150
|
+
inner.set(innerKey, arr);
|
|
151
|
+
}
|
|
152
|
+
arr.push(def);
|
|
153
|
+
}
|
|
154
|
+
function pushFlat(map, key, def) {
|
|
155
|
+
let arr = map.get(key);
|
|
156
|
+
if (arr === undefined) {
|
|
157
|
+
arr = [];
|
|
158
|
+
map.set(key, arr);
|
|
159
|
+
}
|
|
160
|
+
arr.push(def);
|
|
161
|
+
}
|
|
162
|
+
/** Build the ADL candidate index in a single pass over the workspace. The
|
|
163
|
+
* visitation order (file-major; per file, all namespace scopes before all
|
|
164
|
+
* class scopes; ownedDefs in declaration order) mirrors the legacy push
|
|
165
|
+
* order so `seqByNodeId` reconstructs identical candidate ordering. */
|
|
166
|
+
function buildAdlIndex(scopes, parsedFiles) {
|
|
167
|
+
const idx = {
|
|
168
|
+
classDefsBySimple: new Map(),
|
|
169
|
+
nsCandidates: new Map(),
|
|
170
|
+
friendCandidates: new Map(),
|
|
171
|
+
nsFunctionsByQName: new Map(),
|
|
172
|
+
nsFunctionsBySimple: new Map(),
|
|
173
|
+
seqByNodeId: new Map(),
|
|
174
|
+
};
|
|
175
|
+
// (1) class-like defs by simple name — preserve byId order so arr[0] is the
|
|
176
|
+
// legacy `firstMatch` and `arr.length > 1` is the legacy `ambiguous`.
|
|
177
|
+
for (const def of scopes.defs.byId.values()) {
|
|
178
|
+
if (def.type !== 'Class' &&
|
|
179
|
+
def.type !== 'Struct' &&
|
|
180
|
+
def.type !== 'Interface' &&
|
|
181
|
+
def.type !== 'Enum')
|
|
182
|
+
continue;
|
|
183
|
+
pushFlat(idx.classDefsBySimple, adlSimpleName(def), def);
|
|
184
|
+
}
|
|
185
|
+
let seq = 0;
|
|
186
|
+
for (const parsed of parsedFiles) {
|
|
187
|
+
const scopesById = new Map();
|
|
188
|
+
for (const sc of parsed.scopes)
|
|
189
|
+
scopesById.set(sc.id, sc);
|
|
190
|
+
// parent → children, built once (replaces the legacy O(scopes²) walk).
|
|
191
|
+
const childrenByParent = new Map();
|
|
192
|
+
for (const sc of parsed.scopes) {
|
|
193
|
+
if (sc.parent === null)
|
|
194
|
+
continue;
|
|
195
|
+
let kids = childrenByParent.get(sc.parent);
|
|
196
|
+
if (kids === undefined) {
|
|
197
|
+
kids = [];
|
|
198
|
+
childrenByParent.set(sc.parent, kids);
|
|
199
|
+
}
|
|
200
|
+
kids.push(sc);
|
|
201
|
+
}
|
|
202
|
+
// PASS A — namespace-owned candidates (+ function-reference indexes).
|
|
203
|
+
for (const scope of parsed.scopes) {
|
|
204
|
+
if (scope.kind !== 'Namespace')
|
|
205
|
+
continue;
|
|
206
|
+
const qName = computeNamespaceQName(scope, scopesById);
|
|
207
|
+
// Registration keys reproduce the legacy membership test: own QName
|
|
208
|
+
// always; for an inline namespace child of a Namespace, also the parent
|
|
209
|
+
// QName (ISO C++ inline-namespace transparency for ADL).
|
|
210
|
+
const keys = [];
|
|
211
|
+
if (qName !== '')
|
|
212
|
+
keys.push(qName);
|
|
213
|
+
if ((0, inline_namespaces_js_1.isCppInlineNamespaceScope)(scope.id)) {
|
|
214
|
+
const parentScope = scope.parent !== null ? scopesById.get(scope.parent) : undefined;
|
|
215
|
+
if (parentScope !== undefined && parentScope.kind === 'Namespace') {
|
|
216
|
+
const parentQName = computeNamespaceQName(parentScope, scopesById);
|
|
217
|
+
if (parentQName !== '' && parentQName !== qName)
|
|
218
|
+
keys.push(parentQName);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
for (const def of scope.ownedDefs) {
|
|
222
|
+
if (def.type === 'Function' || def.type === 'Method') {
|
|
223
|
+
const sn = adlSimpleName(def);
|
|
224
|
+
pushFlat(idx.nsFunctionsBySimple, sn, def);
|
|
225
|
+
if (qName !== '')
|
|
226
|
+
pushNested(idx.nsFunctionsByQName, qName, sn, def);
|
|
227
|
+
}
|
|
228
|
+
if (!isAdlCallableType(def.type))
|
|
229
|
+
continue;
|
|
230
|
+
const s = seq++;
|
|
231
|
+
idx.seqByNodeId.set(def.nodeId, s);
|
|
232
|
+
const sn = adlSimpleName(def);
|
|
233
|
+
for (const key of keys)
|
|
234
|
+
pushNested(idx.nsCandidates, key, sn, def);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// PASS B — hidden-friend + class-member candidates for associated classes.
|
|
238
|
+
for (const scope of parsed.scopes) {
|
|
239
|
+
if (scope.kind !== 'Class')
|
|
240
|
+
continue;
|
|
241
|
+
// Enclosing-namespace QName(s) of the class def(s) in this scope.
|
|
242
|
+
const classNsKeys = new Set();
|
|
243
|
+
for (const def of scope.ownedDefs) {
|
|
244
|
+
if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
|
|
245
|
+
continue;
|
|
246
|
+
const nsQName = classToNamespaceQualifiedName.get(def.nodeId);
|
|
247
|
+
if (nsQName !== undefined)
|
|
248
|
+
classNsKeys.add(nsQName);
|
|
249
|
+
}
|
|
250
|
+
if (classNsKeys.size === 0)
|
|
251
|
+
continue;
|
|
252
|
+
// Friend functions: callable defs in child Function scopes.
|
|
253
|
+
for (const childScope of childrenByParent.get(scope.id) ?? []) {
|
|
254
|
+
if (childScope.kind !== 'Function')
|
|
255
|
+
continue;
|
|
256
|
+
for (const def of childScope.ownedDefs) {
|
|
257
|
+
if (!isAdlCallableType(def.type))
|
|
258
|
+
continue;
|
|
259
|
+
const s = seq++;
|
|
260
|
+
idx.seqByNodeId.set(def.nodeId, s);
|
|
261
|
+
const sn = adlSimpleName(def);
|
|
262
|
+
for (const key of classNsKeys)
|
|
263
|
+
pushNested(idx.friendCandidates, key, sn, def);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Class-member callables.
|
|
267
|
+
for (const def of scope.ownedDefs) {
|
|
268
|
+
if (!isAdlCallableType(def.type))
|
|
269
|
+
continue;
|
|
270
|
+
const s = seq++;
|
|
271
|
+
idx.seqByNodeId.set(def.nodeId, s);
|
|
272
|
+
const sn = adlSimpleName(def);
|
|
273
|
+
for (const key of classNsKeys)
|
|
274
|
+
pushNested(idx.friendCandidates, key, sn, def);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Dev/test-only invariant guard: every def bucketed into nsCandidates/
|
|
279
|
+
// friendCandidates must have a seqByNodeId entry, otherwise the `?? 0`
|
|
280
|
+
// fallback in pickCppAdlCandidates could collapse two seq-0 candidates and
|
|
281
|
+
// silently drop a CALLS edge. Gated like the rest of the resolver's opt-in
|
|
282
|
+
// validation (see contract/scope-resolver.ts and reconcile-ownership.ts):
|
|
283
|
+
// active in dev/test, off in production and when VALIDATE_SEMANTIC_MODEL=0.
|
|
284
|
+
if (process.env.NODE_ENV !== 'production' && process.env.VALIDATE_SEMANTIC_MODEL !== '0') {
|
|
285
|
+
const missing = validateAdlSeqCoverage(idx);
|
|
286
|
+
if (missing.length > 0) {
|
|
287
|
+
throw new Error(`[cpp-adl] seq-coverage invariant violated: ${missing.length} candidate def(s) ` +
|
|
288
|
+
`bucketed without a seqByNodeId entry (e.g. ${missing.slice(0, 5).join(', ')}). ` +
|
|
289
|
+
`Every def pushed into nsCandidates/friendCandidates must be seq-assigned in the ` +
|
|
290
|
+
`same build block — see pickCppAdlCandidates' \`?? 0\` fallback.`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return idx;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Return the nodeIds present in the index's candidate buckets
|
|
297
|
+
* (`nsCandidates` + `friendCandidates`) but missing from `seqByNodeId`, each
|
|
298
|
+
* reported once. Empty array means the seq-coverage invariant holds — which it
|
|
299
|
+
* must, since `buildAdlIndex` assigns a seq to every callable def in the same
|
|
300
|
+
* block that buckets it. Exported for the dev-gated guard in `buildAdlIndex`
|
|
301
|
+
* and its unit test.
|
|
302
|
+
*/
|
|
303
|
+
function validateAdlSeqCoverage(idx) {
|
|
304
|
+
const missing = new Set();
|
|
305
|
+
for (const buckets of [idx.nsCandidates, idx.friendCandidates]) {
|
|
306
|
+
for (const bySimple of buckets.values()) {
|
|
307
|
+
for (const defs of bySimple.values()) {
|
|
308
|
+
for (const def of defs) {
|
|
309
|
+
if (!idx.seqByNodeId.has(def.nodeId))
|
|
310
|
+
missing.add(def.nodeId);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return [...missing];
|
|
316
|
+
}
|
|
317
|
+
/** Build the ADL index on first use of a given `parsedFiles` set; reuse it for
|
|
318
|
+
* every subsequent call site in the same pipeline run. Reset by
|
|
319
|
+
* `clearCppAdlState`.
|
|
320
|
+
*
|
|
321
|
+
* Lifetime: the memoized entry is reachable only while the caller still holds
|
|
322
|
+
* the `parsedFiles` array. Once the pipeline drops it, the entry — and the
|
|
323
|
+
* `SymbolDefinition` references it holds into those files' scopes — becomes
|
|
324
|
+
* collectable; nothing here pins it (see {@link adlIndexByPass}).
|
|
325
|
+
*
|
|
326
|
+
* Staleness is keyed on `parsedFiles` reference identity ONLY, but the index
|
|
327
|
+
* is a function of THREE inputs: `parsedFiles` (namespace/friend candidates),
|
|
328
|
+
* `scopes` (`classDefsBySimple`, read from `scopes.defs.byId`), and the
|
|
329
|
+
* module-level `classToNamespaceQualifiedName` (friend-candidate keys). The
|
|
330
|
+
* WeakMap key covers only the first, so the explicit clear is still REQUIRED
|
|
331
|
+
* for the other two: a later pass may hand back the same `parsedFiles`
|
|
332
|
+
* reference with different `scopes` / class→namespace state, and identity
|
|
333
|
+
* alone would serve the stale index. This is sound for the current pipeline
|
|
334
|
+
* because all three are built together once per `runScopeResolution` pass and
|
|
335
|
+
* `clearCppAdlState` runs in `loadResolutionConfig` at the start of every
|
|
336
|
+
* pass. Callers MUST call `clearCppAdlState` between any two passes that
|
|
337
|
+
* change `scopes` or `classToNamespaceQualifiedName` while reusing the same
|
|
338
|
+
* `parsedFiles` array reference — otherwise a stale index would be served.
|
|
339
|
+
* (No such caller exists today; widening the key to also cover `scopes` is
|
|
340
|
+
* deferred until one does.) */
|
|
341
|
+
function ensureAdlIndex(scopes, parsedFiles) {
|
|
342
|
+
let index = adlIndexByPass.get(parsedFiles);
|
|
343
|
+
if (index === undefined) {
|
|
344
|
+
index = buildAdlIndex(scopes, parsedFiles);
|
|
345
|
+
adlIndexByPass.set(parsedFiles, index);
|
|
346
|
+
}
|
|
347
|
+
return index;
|
|
348
|
+
}
|
|
349
|
+
/** Record per-call-site argument info. Called once per call site from
|
|
350
|
+
* `emitCppScopeCaptures`. */
|
|
351
|
+
function markCppAdlSiteArgs(filePath, line, col, args) {
|
|
352
|
+
const key = siteKey(filePath, line, col);
|
|
353
|
+
// Lockstep with `argInfoSiteKeysByFile`: index the key only on first insert
|
|
354
|
+
// (a re-mark overwrites the value but must NOT duplicate the index entry).
|
|
355
|
+
if (!argInfoBySite.has(key))
|
|
356
|
+
pushFileSiteKey(argInfoSiteKeysByFile, filePath, key);
|
|
357
|
+
argInfoBySite.set(key, args);
|
|
358
|
+
}
|
|
359
|
+
/** Mark a call site as ADL-suppressed (function child wrapped in
|
|
360
|
+
* `parenthesized_expression`, e.g. `(f)(s)`). */
|
|
361
|
+
function markCppAdlSiteNoAdl(filePath, line, col) {
|
|
362
|
+
const key = siteKey(filePath, line, col);
|
|
363
|
+
// Lockstep with `noAdlSiteKeysByFile`: index the key only on first insert.
|
|
364
|
+
if (!noAdlSites.has(key))
|
|
365
|
+
pushFileSiteKey(noAdlSiteKeysByFile, filePath, key);
|
|
366
|
+
noAdlSites.add(key);
|
|
367
|
+
}
|
|
368
|
+
const SITE_KEY_RE = /^(.*):(\d+):(\d+)$/;
|
|
369
|
+
/** Split a `filePath:line:col` site key, tolerating colons in the path. */
|
|
370
|
+
function parseSiteKey(key) {
|
|
371
|
+
const m = SITE_KEY_RE.exec(key);
|
|
372
|
+
if (m === null)
|
|
373
|
+
return undefined;
|
|
374
|
+
return { filePath: m[1], line: Number(m[2]), col: Number(m[3]) };
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Snapshot this file's ADL capture state for the worker→main side-channel.
|
|
378
|
+
*
|
|
379
|
+
* Uses the per-file `argInfoSiteKeysByFile` / `noAdlSiteKeysByFile` indexes to
|
|
380
|
+
* touch only THIS file's entries — O(entries-for-this-file) — instead of the
|
|
381
|
+
* old O(all-entries) full scan over `argInfoBySite` / `noAdlSites` (#1983).
|
|
382
|
+
* The output order, and therefore the serialized JSON shape, is byte-identical
|
|
383
|
+
* to the old filtered scan: the index records keys in the same insertion order
|
|
384
|
+
* the maps' own iteration would have yielded for this file, and each key is
|
|
385
|
+
* indexed exactly once (mark guards on first insert), so the same per-file
|
|
386
|
+
* subsequence is produced.
|
|
387
|
+
*
|
|
388
|
+
* `parseSiteKey` is still used to recover `line:col` from each key, but now
|
|
389
|
+
* only for this file's keys (a bounded handful), never for the whole batch.
|
|
390
|
+
*/
|
|
391
|
+
function collectCppAdlSideChannel(filePath) {
|
|
392
|
+
const args = [];
|
|
393
|
+
for (const key of argInfoSiteKeysByFile.get(filePath) ?? []) {
|
|
394
|
+
const value = argInfoBySite.get(key);
|
|
395
|
+
const parsed = parseSiteKey(key);
|
|
396
|
+
if (value !== undefined && parsed !== undefined) {
|
|
397
|
+
args.push([parsed.line, parsed.col, value]);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
const noAdl = [];
|
|
401
|
+
for (const key of noAdlSiteKeysByFile.get(filePath) ?? []) {
|
|
402
|
+
const parsed = parseSiteKey(key);
|
|
403
|
+
if (parsed !== undefined) {
|
|
404
|
+
noAdl.push([parsed.line, parsed.col]);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return { argInfoBySite: args, noAdlSites: noAdl };
|
|
408
|
+
}
|
|
409
|
+
/** Restore this file's ADL capture state from the side-channel (no parse).
|
|
410
|
+
* Keeps the per-file site-key indexes in lockstep with `argInfoBySite` /
|
|
411
|
+
* `noAdlSites` (first-insert-only) so a later `collectCppAdlSideChannel` on
|
|
412
|
+
* the same process would still produce a correct, duplicate-free snapshot. */
|
|
413
|
+
function applyCppAdlSideChannel(filePath, data) {
|
|
414
|
+
for (const [line, col, value] of data.argInfoBySite) {
|
|
415
|
+
const key = siteKey(filePath, line, col);
|
|
416
|
+
if (!argInfoBySite.has(key))
|
|
417
|
+
pushFileSiteKey(argInfoSiteKeysByFile, filePath, key);
|
|
418
|
+
argInfoBySite.set(key, value);
|
|
419
|
+
}
|
|
420
|
+
for (const [line, col] of data.noAdlSites) {
|
|
421
|
+
const key = siteKey(filePath, line, col);
|
|
422
|
+
if (!noAdlSites.has(key))
|
|
423
|
+
pushFileSiteKey(noAdlSiteKeysByFile, filePath, key);
|
|
424
|
+
noAdlSites.add(key);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/** Clear ADL state. Called from `cppScopeResolver.loadResolutionConfig`
|
|
428
|
+
* (alongside `clearFileLocalNames`) so all C++ resolver per-pipeline state is
|
|
429
|
+
* reset together at the start of each resolution pass. */
|
|
430
|
+
function clearCppAdlState() {
|
|
431
|
+
argInfoBySite.clear();
|
|
432
|
+
noAdlSites.clear();
|
|
433
|
+
// Lockstep: the per-file site-key indexes mirror argInfoBySite/noAdlSites and
|
|
434
|
+
// MUST be cleared together — a stale index would resurrect a prior pass's
|
|
435
|
+
// (or prior file's, after a re-key) keys into the next snapshot.
|
|
436
|
+
argInfoSiteKeysByFile.clear();
|
|
437
|
+
noAdlSiteKeysByFile.clear();
|
|
438
|
+
classToNamespaceQualifiedName.clear();
|
|
439
|
+
// The candidate index is dropped by REASSIGNING a fresh `WeakMap`: `WeakMap`
|
|
440
|
+
// has no `.clear()`, and swapping the instance discards every memoized entry
|
|
441
|
+
// at once — the exact invalidation the previous `adlIndex = undefined` pair
|
|
442
|
+
// provided. Required even though the map is keyed on `parsedFiles` identity,
|
|
443
|
+
// because the index also depends on `scopes` and
|
|
444
|
+
// `classToNamespaceQualifiedName`, which the key cannot observe (see
|
|
445
|
+
// {@link ensureAdlIndex}).
|
|
446
|
+
adlIndexByPass = new WeakMap();
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Walk `parsed.scopes` to record each Class def's enclosing namespace
|
|
450
|
+
* qualified name. Run from the cpp resolver's `populateOwners` hook so
|
|
451
|
+
* the index is available before any resolution pass consults it.
|
|
452
|
+
*
|
|
453
|
+
* Computes the namespace's qualified name by walking parent scope chain
|
|
454
|
+
* and looking up Namespace defs in each parent's `ownedDefs`. The
|
|
455
|
+
* resulting name is dot-joined (matching `populateClassOwnedMembers`'s
|
|
456
|
+
* dotted convention; conversion to `::` is consumer-internal).
|
|
457
|
+
*/
|
|
458
|
+
function populateCppAssociatedNamespaces(parsed) {
|
|
459
|
+
const scopesById = new Map();
|
|
460
|
+
for (const scope of parsed.scopes)
|
|
461
|
+
scopesById.set(scope.id, scope);
|
|
462
|
+
for (const scope of parsed.scopes) {
|
|
463
|
+
if (scope.kind !== 'Class')
|
|
464
|
+
continue;
|
|
465
|
+
const nsQName = computeEnclosingNamespaceQName(scope, scopesById);
|
|
466
|
+
if (nsQName === '')
|
|
467
|
+
continue;
|
|
468
|
+
for (const def of scope.ownedDefs) {
|
|
469
|
+
if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
|
|
470
|
+
continue;
|
|
471
|
+
classToNamespaceQualifiedName.set(def.nodeId, nsQName);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// Enum defs live in Namespace scopes directly (not inside Class scopes).
|
|
475
|
+
// Map each Enum def to its enclosing namespace so ADL on enum-typed
|
|
476
|
+
// arguments contributes the correct associated namespace.
|
|
477
|
+
for (const scope of parsed.scopes) {
|
|
478
|
+
if (scope.kind !== 'Namespace')
|
|
479
|
+
continue;
|
|
480
|
+
const nsQName = computeNamespaceQName(scope, scopesById);
|
|
481
|
+
if (nsQName === '')
|
|
482
|
+
continue;
|
|
483
|
+
for (const def of scope.ownedDefs) {
|
|
484
|
+
if (def.type !== 'Enum')
|
|
485
|
+
continue;
|
|
486
|
+
classToNamespaceQualifiedName.set(def.nodeId, nsQName);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* ADL candidate collector. Returns:
|
|
492
|
+
* - `readonly SymbolDefinition[]` — ADL candidates to merge with
|
|
493
|
+
* ordinary unqualified lookup candidates.
|
|
494
|
+
* - `undefined` — no ADL candidates.
|
|
495
|
+
*
|
|
496
|
+
* Fires only when:
|
|
497
|
+
* - the call site is not in `noAdlSites` (parenthesized form), AND
|
|
498
|
+
* - at least one argument resolves to a named class type (value,
|
|
499
|
+
* pointer, or reference; but not function pointer, literal, or primitive).
|
|
500
|
+
*/
|
|
501
|
+
function pickCppAdlCandidates(site, callerParsed, scopes, parsedFiles) {
|
|
502
|
+
const key = siteKey(callerParsed.filePath, site.atRange.startLine, site.atRange.startCol);
|
|
503
|
+
if (noAdlSites.has(key))
|
|
504
|
+
return undefined;
|
|
505
|
+
const args = argInfoBySite.get(key);
|
|
506
|
+
if (args === undefined || args.length === 0)
|
|
507
|
+
return undefined;
|
|
508
|
+
// Build the workspace-wide ADL candidate index once; reuse for every site.
|
|
509
|
+
const idx = ensureAdlIndex(scopes, parsedFiles);
|
|
510
|
+
// Collect associated namespace QNames from every participating class-typed arg
|
|
511
|
+
// and from function-reference args.
|
|
512
|
+
const associatedNamespaces = new Set();
|
|
513
|
+
for (const arg of args) {
|
|
514
|
+
collectAssociatedNamespacesForAdlArg(arg, scopes, idx, associatedNamespaces);
|
|
515
|
+
if (arg.functionRefText !== undefined) {
|
|
516
|
+
collectFunctionTypeAssociatedNamespaces(arg.functionRefText, scopes, idx, associatedNamespaces);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (associatedNamespaces.size === 0)
|
|
520
|
+
return undefined;
|
|
521
|
+
// Gather candidates from the prebuilt index instead of re-scanning every
|
|
522
|
+
// parsed file. For each associated namespace, pull:
|
|
523
|
+
// - namespace-owned callables (`nsCandidates`, includes inline-namespace
|
|
524
|
+
// transparency), AND
|
|
525
|
+
// - hidden-friend / class-member callables of associated classes
|
|
526
|
+
// (`friendCandidates`, ISO C++ `[basic.lookup.argdep]` §2).
|
|
527
|
+
// Dedup by nodeId and sort by visitation sequence so the candidate list is
|
|
528
|
+
// byte-for-byte identical to the legacy file-major scan order.
|
|
529
|
+
const bySeq = new Map();
|
|
530
|
+
const seenKey = new Set();
|
|
531
|
+
const collectFrom = (buckets) => {
|
|
532
|
+
for (const ns of associatedNamespaces) {
|
|
533
|
+
const matches = buckets.get(ns)?.get(site.name);
|
|
534
|
+
if (matches === undefined)
|
|
535
|
+
continue;
|
|
536
|
+
for (const def of matches) {
|
|
537
|
+
if (seenKey.has(def.nodeId))
|
|
538
|
+
continue;
|
|
539
|
+
seenKey.add(def.nodeId);
|
|
540
|
+
// `?? 0` is unreachable: every bucketed def is seq-assigned in the same
|
|
541
|
+
// block that buckets it in buildAdlIndex (PASS A / PASS B). The dev-gated
|
|
542
|
+
// validateAdlSeqCoverage guard in buildAdlIndex fails loudly if that ever
|
|
543
|
+
// breaks, rather than letting two seq-0 defs collide and drop a candidate.
|
|
544
|
+
bySeq.set(idx.seqByNodeId.get(def.nodeId) ?? 0, def);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
};
|
|
548
|
+
collectFrom(idx.nsCandidates);
|
|
549
|
+
collectFrom(idx.friendCandidates);
|
|
550
|
+
if (bySeq.size === 0)
|
|
551
|
+
return undefined;
|
|
552
|
+
return [...bySeq.entries()].sort((a, b) => a[0] - b[0]).map(([, def]) => def);
|
|
553
|
+
}
|
|
554
|
+
function collectAssociatedNamespacesForAdlArg(arg, scopes, idx, associatedNamespaces) {
|
|
555
|
+
// For template args this may be the template name itself (e.g. `vector`);
|
|
556
|
+
// simple-name lookup can match project classes with the same name (known
|
|
557
|
+
// V1/V2 simplification).
|
|
558
|
+
addAssociatedNamespaceForClassName(arg.simpleClassName, scopes, idx, associatedNamespaces);
|
|
559
|
+
// Includes template-owner namespaces (e.g. `std` in std::vector<T>). If
|
|
560
|
+
// that surfaces extra candidates, merged-candidate overload narrowing in
|
|
561
|
+
// free-call-fallback suppresses arbitrary edge emission.
|
|
562
|
+
if (arg.templateNamespace.length > 0)
|
|
563
|
+
associatedNamespaces.add(arg.templateNamespace);
|
|
564
|
+
for (const ns of arg.templateArgNamespaces) {
|
|
565
|
+
if (ns.length > 0)
|
|
566
|
+
associatedNamespaces.add(ns);
|
|
567
|
+
}
|
|
568
|
+
for (const className of arg.templateArgClassNames) {
|
|
569
|
+
addAssociatedNamespaceForClassName(className, scopes, idx, associatedNamespaces);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
function addAssociatedNamespaceForClassName(simpleClassName, scopes, idx, associatedNamespaces) {
|
|
573
|
+
if (simpleClassName.length === 0)
|
|
574
|
+
return;
|
|
575
|
+
const classLookup = findCppClassDefBySimpleName(idx, simpleClassName);
|
|
576
|
+
if (classLookup === undefined)
|
|
577
|
+
return;
|
|
578
|
+
const { classDef, ambiguous } = classLookup;
|
|
579
|
+
const nsQName = classToNamespaceQualifiedName.get(classDef.nodeId);
|
|
580
|
+
if (nsQName !== undefined)
|
|
581
|
+
associatedNamespaces.add(nsQName);
|
|
582
|
+
// Preserve V1 collision behavior for the direct class namespace, but avoid
|
|
583
|
+
// amplifying a same-simple-name collision by walking an arbitrary class's
|
|
584
|
+
// full MRO chain.
|
|
585
|
+
if (ambiguous)
|
|
586
|
+
return;
|
|
587
|
+
for (const ancestorDefId of scopes.methodDispatch.mroFor(classDef.nodeId)) {
|
|
588
|
+
const ancestorNsQName = classToNamespaceQualifiedName.get(ancestorDefId);
|
|
589
|
+
if (ancestorNsQName !== undefined)
|
|
590
|
+
associatedNamespaces.add(ancestorNsQName);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
/** Walk upward from a Class scope, finding the innermost enclosing
|
|
594
|
+
* Namespace scope, and return that namespace's qualified name (dot-
|
|
595
|
+
* joined, outermost-first). Returns '' when the class has no enclosing
|
|
596
|
+
* namespace (e.g., declared at translation-unit scope). */
|
|
597
|
+
function computeEnclosingNamespaceQName(classScope, scopesById) {
|
|
598
|
+
let parentId = classScope.parent;
|
|
599
|
+
while (parentId !== null) {
|
|
600
|
+
const parent = scopesById.get(parentId);
|
|
601
|
+
if (parent === undefined)
|
|
602
|
+
return '';
|
|
603
|
+
if (parent.kind === 'Namespace') {
|
|
604
|
+
return computeNamespaceQName(parent, scopesById);
|
|
605
|
+
}
|
|
606
|
+
parentId = parent.parent;
|
|
607
|
+
}
|
|
608
|
+
return '';
|
|
609
|
+
}
|
|
610
|
+
/** Walk upward from a Namespace scope collecting each enclosing
|
|
611
|
+
* Namespace's simple name (innermost last). Returns the dot-joined
|
|
612
|
+
* qualified name (e.g., `outer.inner`). The namespace's own def lives
|
|
613
|
+
* in its OWN scope's `ownedDefs` (the C++ extractor stamps the
|
|
614
|
+
* namespace-decl def into the namespace scope itself, not the parent
|
|
615
|
+
* module scope). */
|
|
616
|
+
function computeNamespaceQName(nsScope, scopesById) {
|
|
617
|
+
const segments = [];
|
|
618
|
+
let currentId = nsScope.parent;
|
|
619
|
+
let current = nsScope;
|
|
620
|
+
// Outer guard against pathological cycles in malformed scope trees.
|
|
621
|
+
let safety = 64;
|
|
622
|
+
while (current !== undefined && safety-- > 0) {
|
|
623
|
+
const nsDef = findNamespaceDefInScope(current);
|
|
624
|
+
if (nsDef === undefined) {
|
|
625
|
+
// No name found — bail out. Returning a partial QName would risk
|
|
626
|
+
// false ADL associations.
|
|
627
|
+
return '';
|
|
628
|
+
}
|
|
629
|
+
const simple = nsDef.qualifiedName?.split('.').pop() ?? nsDef.qualifiedName ?? '';
|
|
630
|
+
segments.unshift(simple);
|
|
631
|
+
// Walk up to next enclosing namespace (skipping non-namespace parents).
|
|
632
|
+
let nextId = currentId;
|
|
633
|
+
let nextNs;
|
|
634
|
+
while (nextId !== null) {
|
|
635
|
+
const nx = scopesById.get(nextId);
|
|
636
|
+
if (nx === undefined)
|
|
637
|
+
break;
|
|
638
|
+
if (nx.kind === 'Namespace') {
|
|
639
|
+
nextNs = nx;
|
|
640
|
+
currentId = nx.parent;
|
|
641
|
+
break;
|
|
642
|
+
}
|
|
643
|
+
nextId = nx.parent;
|
|
644
|
+
}
|
|
645
|
+
current = nextNs;
|
|
646
|
+
}
|
|
647
|
+
return segments.join('.');
|
|
648
|
+
}
|
|
649
|
+
/** Find the Namespace def attached to this scope (the namespace's own
|
|
650
|
+
* decl, stamped into its own `ownedDefs` by the C++ extractor). Returns
|
|
651
|
+
* the first Namespace-type def encountered — for normal C++ the scope
|
|
652
|
+
* carries exactly one Namespace-typed self def. */
|
|
653
|
+
function findNamespaceDefInScope(scope) {
|
|
654
|
+
for (const def of scope.ownedDefs) {
|
|
655
|
+
if (def.type === 'Namespace')
|
|
656
|
+
return def;
|
|
657
|
+
}
|
|
658
|
+
return undefined;
|
|
659
|
+
}
|
|
660
|
+
/** Find a class-like or enum def by simple name across the workspace.
|
|
661
|
+
* V1 still arbitrary-picks the first match on collisions (multiple defs
|
|
662
|
+
* share the simple name), but reports the collision so callers can avoid
|
|
663
|
+
* amplifying that uncertainty (for example by skipping MRO expansion).
|
|
664
|
+
* C++ ADL strictness would require full type-driven lookup.
|
|
665
|
+
*
|
|
666
|
+
* ISO C++ `[basic.lookup.argdep]` §2: enumerations contribute their
|
|
667
|
+
* enclosing namespace to the associated set, just like class types. */
|
|
668
|
+
function findCppClassDefBySimpleName(idx, simpleName) {
|
|
669
|
+
// `classDefsBySimple` preserves `scopes.defs.byId` order, so `[0]` is the
|
|
670
|
+
// legacy first-match and `length > 1` is the legacy `ambiguous` flag.
|
|
671
|
+
const matches = idx.classDefsBySimple.get(simpleName);
|
|
672
|
+
if (matches === undefined)
|
|
673
|
+
return undefined;
|
|
674
|
+
const first = matches[0];
|
|
675
|
+
if (first === undefined)
|
|
676
|
+
return undefined;
|
|
677
|
+
return { classDef: first, ambiguous: matches.length > 1 };
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Contribute associated namespaces for a function-reference argument by walking
|
|
681
|
+
* the referenced overload set's parameter and return types.
|
|
682
|
+
*/
|
|
683
|
+
function collectFunctionTypeAssociatedNamespaces(refText, scopes, idx, out) {
|
|
684
|
+
const colonIdx = refText.lastIndexOf('::');
|
|
685
|
+
if (colonIdx !== -1) {
|
|
686
|
+
// Qualified ref: extract namespace prefix and normalise :: → dot notation.
|
|
687
|
+
const nsText = refText.slice(0, colonIdx).replace(/::/g, '.');
|
|
688
|
+
if (nsText === '')
|
|
689
|
+
return;
|
|
690
|
+
const simpleName = refText.slice(colonIdx + 2);
|
|
691
|
+
// Only Function/Method defs named `simpleName` in `nsText` contribute
|
|
692
|
+
// (the index already restricts to those types); this guards against an
|
|
693
|
+
// `a::b` arg that names a variable / enum value / type alias blindly
|
|
694
|
+
// contributing `a` to the associated set (false-positive CALLS edge).
|
|
695
|
+
const matches = idx.nsFunctionsByQName.get(nsText)?.get(simpleName);
|
|
696
|
+
if (matches !== undefined) {
|
|
697
|
+
for (const def of matches)
|
|
698
|
+
collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out);
|
|
699
|
+
}
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
// Unqualified function references are approximated workspace-wide, matching
|
|
703
|
+
// the previous V1 lookup scope. The stricter part of this PR is what each
|
|
704
|
+
// overload contributes: only namespaces from parameter/return types, never
|
|
705
|
+
// the function's own enclosing namespace.
|
|
706
|
+
const matches = idx.nsFunctionsBySimple.get(refText);
|
|
707
|
+
if (matches !== undefined) {
|
|
708
|
+
for (const def of matches)
|
|
709
|
+
collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
function collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out) {
|
|
713
|
+
const parameterTypes = def.parameterTypeClasses?.map((typeClass) => typeClass.base);
|
|
714
|
+
for (const paramType of parameterTypes ?? def.parameterTypes ?? []) {
|
|
715
|
+
collectAssociatedNamespacesForFunctionTypeText(paramType, scopes, idx, out);
|
|
716
|
+
}
|
|
717
|
+
if (def.returnType !== undefined) {
|
|
718
|
+
collectAssociatedNamespacesForFunctionTypeText(def.returnType, scopes, idx, out);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
function collectAssociatedNamespacesForFunctionTypeText(typeText, scopes, idx, out) {
|
|
722
|
+
for (const token of extractCppTypeNameTokens(typeText)) {
|
|
723
|
+
if (isIgnoredCppAdlNamespace(token.namespaceName))
|
|
724
|
+
continue;
|
|
725
|
+
addAssociatedNamespaceForClassName(token.simpleName, scopes, idx, out);
|
|
726
|
+
if (token.namespaceName !== '')
|
|
727
|
+
out.add(token.namespaceName);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
function extractCppTypeNameTokens(typeText) {
|
|
731
|
+
const cleaned = (0, arity_metadata_js_1.normalizeCppParamType)(typeText);
|
|
732
|
+
if (cleaned === '' || isPrimitiveCppAdlType(cleaned))
|
|
733
|
+
return [];
|
|
734
|
+
const out = [];
|
|
735
|
+
const seen = new Set();
|
|
736
|
+
const tokenSource = typeText.includes('<') ? `${cleaned} ${typeText}` : cleaned;
|
|
737
|
+
for (const rawToken of tokenSource.match(/[A-Za-z_]\w*(?:::[A-Za-z_]\w*)*/g) ?? []) {
|
|
738
|
+
if (isPrimitiveCppAdlType(rawToken))
|
|
739
|
+
continue;
|
|
740
|
+
const segments = rawToken.split('::').filter((part) => part.length > 0);
|
|
741
|
+
const simpleName = segments.at(-1) ?? '';
|
|
742
|
+
if (simpleName === '' || isPrimitiveCppAdlType(simpleName))
|
|
743
|
+
continue;
|
|
744
|
+
const namespaceName = segments.length > 1 ? segments.slice(0, -1).join('.') : '';
|
|
745
|
+
const key = `${namespaceName}\0${simpleName}`;
|
|
746
|
+
if (seen.has(key))
|
|
747
|
+
continue;
|
|
748
|
+
seen.add(key);
|
|
749
|
+
out.push({
|
|
750
|
+
simpleName,
|
|
751
|
+
namespaceName,
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
return out;
|
|
755
|
+
}
|
|
756
|
+
const CPP_ADL_PRIMITIVE_OR_KEYWORD_TYPES = new Set([
|
|
757
|
+
'alignas',
|
|
758
|
+
'alignof',
|
|
759
|
+
'auto',
|
|
760
|
+
'bool',
|
|
761
|
+
'char',
|
|
762
|
+
'char8_t',
|
|
763
|
+
'char16_t',
|
|
764
|
+
'char32_t',
|
|
765
|
+
'class',
|
|
766
|
+
'const',
|
|
767
|
+
'consteval',
|
|
768
|
+
'constexpr',
|
|
769
|
+
'constinit',
|
|
770
|
+
'decltype',
|
|
771
|
+
'double',
|
|
772
|
+
'enum',
|
|
773
|
+
'explicit',
|
|
774
|
+
'extern',
|
|
775
|
+
'float',
|
|
776
|
+
'inline',
|
|
777
|
+
'int',
|
|
778
|
+
'long',
|
|
779
|
+
'mutable',
|
|
780
|
+
'noexcept',
|
|
781
|
+
'null',
|
|
782
|
+
'register',
|
|
783
|
+
'short',
|
|
784
|
+
'signed',
|
|
785
|
+
'static',
|
|
786
|
+
'string',
|
|
787
|
+
'struct',
|
|
788
|
+
'template',
|
|
789
|
+
'thread_local',
|
|
790
|
+
'typename',
|
|
791
|
+
'union',
|
|
792
|
+
'unknown',
|
|
793
|
+
'unsigned',
|
|
794
|
+
'void',
|
|
795
|
+
'volatile',
|
|
796
|
+
'wchar_t',
|
|
797
|
+
'...',
|
|
798
|
+
]);
|
|
799
|
+
function isPrimitiveCppAdlType(typeText) {
|
|
800
|
+
return CPP_ADL_PRIMITIVE_OR_KEYWORD_TYPES.has(typeText);
|
|
801
|
+
}
|
|
802
|
+
function isIgnoredCppAdlNamespace(namespaceName) {
|
|
803
|
+
return namespaceName === 'std' || namespaceName.startsWith('std.');
|
|
804
|
+
}
|