cgraphx 2.0.2 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.claude-template/FLOW-MAP.md +13 -3
- package/dist/.claude-template/agents/task-history.md +186 -0
- package/dist/.claude-template/commands/end.md +1 -0
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
- package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
- package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
- package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
- package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
- package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
- package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
- package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
- package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
- package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
- package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
- package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
- 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/dbquery/cli.d.ts.map +1 -1
- package/dist/core/dbquery/cli.js +5 -4
- package/dist/core/dbquery/cli.js.map +1 -1
- package/dist/core/dbquery/config.d.ts.map +1 -1
- package/dist/core/dbquery/config.js +39 -3
- package/dist/core/dbquery/config.js.map +1 -1
- package/dist/core/dbquery/drivers/http.d.ts +23 -0
- package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
- package/dist/core/dbquery/drivers/http.js +125 -0
- package/dist/core/dbquery/drivers/http.js.map +1 -0
- package/dist/core/dbquery/drivers/mysql.js +1 -1
- package/dist/core/dbquery/drivers/mysql.js.map +1 -1
- package/dist/core/dbquery/drivers/postgres.js +1 -1
- package/dist/core/dbquery/drivers/postgres.js.map +1 -1
- package/dist/core/dbquery/executor.d.ts.map +1 -1
- package/dist/core/dbquery/executor.js +46 -12
- package/dist/core/dbquery/executor.js.map +1 -1
- package/dist/core/dbquery/format.d.ts.map +1 -1
- package/dist/core/dbquery/format.js +2 -1
- package/dist/core/dbquery/format.js.map +1 -1
- package/dist/core/dbquery/init.d.ts.map +1 -1
- package/dist/core/dbquery/init.js +7 -0
- package/dist/core/dbquery/init.js.map +1 -1
- package/dist/core/dbquery/types.d.ts +55 -7
- package/dist/core/dbquery/types.d.ts.map +1 -1
- package/dist/core/directory.d.ts +17 -0
- package/dist/core/directory.d.ts.map +1 -1
- package/dist/core/directory.js +37 -0
- package/dist/core/directory.js.map +1 -1
- package/dist/core/features/cli.d.ts.map +1 -1
- package/dist/core/features/cli.js +3 -2
- package/dist/core/features/cli.js.map +1 -1
- package/dist/core/features/scanner.d.ts +1 -1
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +20 -4
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/markdown/cli.d.ts.map +1 -1
- package/dist/core/markdown/cli.js +9 -8
- package/dist/core/markdown/cli.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/dist/web/register.d.ts.map +1 -1
- package/dist/web/register.js +2 -1
- package/dist/web/register.js.map +1 -1
- package/package.json +1 -1
- package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
- /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C++ inline namespace support (U5 of plan 2026-05-13-001).
|
|
4
|
+
*
|
|
5
|
+
* `inline namespace v1 { void foo(); }` has two ISO C++ semantics that
|
|
6
|
+
* GitNexus must model:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Transitive unqualified visibility.** Names declared in an inline
|
|
9
|
+
* namespace are reachable by unqualified lookup from the enclosing
|
|
10
|
+
* namespace's scope, as if they were declared directly there.
|
|
11
|
+
* `populateCppNonGloballyVisible` (file-local-linkage.ts) treats
|
|
12
|
+
* inline-namespace members as globally visible for cross-file
|
|
13
|
+
* unqualified lookup.
|
|
14
|
+
*
|
|
15
|
+
* 2. **Transitive qualified visibility.** `outer::foo()` resolves to
|
|
16
|
+
* `outer::v1::foo()` when `v1` is inline. The qualified-namespace
|
|
17
|
+
* receiver resolver (`resolveCppQualifiedNamespaceMember`) walks
|
|
18
|
+
* inline-namespace children transitively when collecting candidates —
|
|
19
|
+
* once per pipeline run, into {@link QualifiedNsMemberIndex} (#2788).
|
|
20
|
+
*
|
|
21
|
+
* State lifecycle: capture-time `markCppInlineNamespaceRange` records each
|
|
22
|
+
* inline namespace's source range; `populateCppInlineNamespaceScopes`
|
|
23
|
+
* resolves ranges to `ScopeId`s during `populateOwners`. Cleared via
|
|
24
|
+
* `clearCppInlineNamespaces`, called from
|
|
25
|
+
* `cppScopeResolver.loadResolutionConfig` at the start of every pass.
|
|
26
|
+
*
|
|
27
|
+
* STL idiom this enables: `std::__1::vector` (libc++) and `std::__cxx11`
|
|
28
|
+
* (libstdc++) are inline namespaces of `std`. With this support,
|
|
29
|
+
* `std::vector` qualified calls resolve to the inline-namespace
|
|
30
|
+
* declaration transparently.
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.markCppInlineNamespaceRange = markCppInlineNamespaceRange;
|
|
34
|
+
exports.collectCppInlineNamespaceSideChannel = collectCppInlineNamespaceSideChannel;
|
|
35
|
+
exports.applyCppInlineNamespaceSideChannel = applyCppInlineNamespaceSideChannel;
|
|
36
|
+
exports.clearCppInlineNamespaces = clearCppInlineNamespaces;
|
|
37
|
+
exports.populateCppInlineNamespaceScopes = populateCppInlineNamespaceScopes;
|
|
38
|
+
exports.isCppInlineNamespaceScope = isCppInlineNamespaceScope;
|
|
39
|
+
exports.resolveCppQualifiedNamespaceMember = resolveCppQualifiedNamespaceMember;
|
|
40
|
+
const overload_narrowing_js_1 = require("../../scope-resolution/passes/overload-narrowing.js");
|
|
41
|
+
const callable_labels_js_1 = require("../../utils/callable-labels.js");
|
|
42
|
+
const env_js_1 = require("../../utils/env.js");
|
|
43
|
+
const conversion_rank_js_1 = require("./conversion-rank.js");
|
|
44
|
+
const inlineNamespaceRangesByFile = new Map();
|
|
45
|
+
const inlineNamespaceScopeIds = new Set();
|
|
46
|
+
/** Bumped by every writer of {@link inlineNamespaceScopeIds}. The qualified-ns
|
|
47
|
+
* index is a function of both `parsedFiles` and that Set; its WeakMap key sees
|
|
48
|
+
* only the first, so the memo stamps this epoch and a missed
|
|
49
|
+
* {@link clearCppInlineNamespaces} degrades to a rebuild, not a stale answer. */
|
|
50
|
+
let inlineNamespaceEpoch = 0;
|
|
51
|
+
function rangeKey(r) {
|
|
52
|
+
return `${r.startLine}:${r.startCol}:${r.endLine}:${r.endCol}`;
|
|
53
|
+
}
|
|
54
|
+
/** Capture-time: record a namespace_definition's range as inline.
|
|
55
|
+
* Called from `emitCppScopeCaptures` when the tree-sitter AST shows an
|
|
56
|
+
* `inline` keyword child on `namespace_definition`. */
|
|
57
|
+
function markCppInlineNamespaceRange(filePath, range) {
|
|
58
|
+
let set = inlineNamespaceRangesByFile.get(filePath);
|
|
59
|
+
if (set === undefined) {
|
|
60
|
+
set = new Set();
|
|
61
|
+
inlineNamespaceRangesByFile.set(filePath, set);
|
|
62
|
+
}
|
|
63
|
+
set.add(rangeKey(range));
|
|
64
|
+
}
|
|
65
|
+
/** Snapshot this file's captured inline-namespace ranges for the worker→main
|
|
66
|
+
* side-channel (#1983). `populateCppInlineNamespaceScopes` (in `populateOwners`)
|
|
67
|
+
* later resolves these range keys to ScopeIds on the main thread, so only the
|
|
68
|
+
* capture-time ranges need to cross the boundary. Returns the rangeKey strings
|
|
69
|
+
* as a plain array (empty when this file recorded none). */
|
|
70
|
+
function collectCppInlineNamespaceSideChannel(filePath) {
|
|
71
|
+
const set = inlineNamespaceRangesByFile.get(filePath);
|
|
72
|
+
return set === undefined ? [] : [...set];
|
|
73
|
+
}
|
|
74
|
+
/** Restore this file's captured inline-namespace ranges from the side-channel. */
|
|
75
|
+
function applyCppInlineNamespaceSideChannel(filePath, ranges) {
|
|
76
|
+
if (ranges.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
let set = inlineNamespaceRangesByFile.get(filePath);
|
|
79
|
+
if (set === undefined) {
|
|
80
|
+
set = new Set();
|
|
81
|
+
inlineNamespaceRangesByFile.set(filePath, set);
|
|
82
|
+
}
|
|
83
|
+
for (const r of ranges)
|
|
84
|
+
set.add(r);
|
|
85
|
+
}
|
|
86
|
+
/** Clear all inline-namespace state. Called from
|
|
87
|
+
* `cppScopeResolver.loadResolutionConfig` at the start of every pass.
|
|
88
|
+
*
|
|
89
|
+
* The qualified-namespace index is dropped by REASSIGNING a fresh `WeakMap`
|
|
90
|
+
* (`WeakMap` has no `.clear()`) so its entries — and the `SymbolDefinition`
|
|
91
|
+
* references they hold — are released here rather than waiting on the key.
|
|
92
|
+
* Correctness does not rest on that: {@link inlineNamespaceEpoch} invalidates
|
|
93
|
+
* any surviving entry. */
|
|
94
|
+
function clearCppInlineNamespaces() {
|
|
95
|
+
inlineNamespaceRangesByFile.clear();
|
|
96
|
+
inlineNamespaceScopeIds.clear();
|
|
97
|
+
inlineNamespaceEpoch++;
|
|
98
|
+
qualifiedNsIndexByPass = new WeakMap();
|
|
99
|
+
}
|
|
100
|
+
/** Resolve captured ranges to actual ScopeIds by matching scope ranges
|
|
101
|
+
* against the inline-namespace ranges recorded for this file. Run from
|
|
102
|
+
* the cpp resolver's `populateOwners` hook so the per-pipeline Set is
|
|
103
|
+
* populated before any resolution pass consults it. */
|
|
104
|
+
function populateCppInlineNamespaceScopes(parsed) {
|
|
105
|
+
const ranges = inlineNamespaceRangesByFile.get(parsed.filePath);
|
|
106
|
+
if (ranges === undefined || ranges.size === 0)
|
|
107
|
+
return;
|
|
108
|
+
inlineNamespaceEpoch++;
|
|
109
|
+
for (const scope of parsed.scopes) {
|
|
110
|
+
if (scope.kind !== 'Namespace')
|
|
111
|
+
continue;
|
|
112
|
+
if (ranges.has(rangeKey(scope.range))) {
|
|
113
|
+
inlineNamespaceScopeIds.add(scope.id);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Predicate consumed by `populateCppNonGloballyVisible` to exempt
|
|
118
|
+
* inline-namespace members from cross-file unqualified-lookup
|
|
119
|
+
* exclusion (they remain reachable as if declared at the enclosing
|
|
120
|
+
* namespace's level). */
|
|
121
|
+
function isCppInlineNamespaceScope(scopeId) {
|
|
122
|
+
return inlineNamespaceScopeIds.has(scopeId);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Dev/test-only mutation tripwire on the arrays this module shares across call
|
|
126
|
+
* sites ({@link NO_DEFS} and every `membersByReceiver` memo entry): an in-place
|
|
127
|
+
* `.sort()`/`.splice()` ever added to `overload-narrowing.ts` would corrupt
|
|
128
|
+
* every LATER resolution of the same pair, not just its own call, and freezing
|
|
129
|
+
* makes that a loud `TypeError` instead. DEV-ONLY because the types already
|
|
130
|
+
* reject it — the memo and `narrowOverloadCandidates`' parameter are both
|
|
131
|
+
* `readonly SymbolDefinition[]`, so only a cast gets past — while the freeze is
|
|
132
|
+
* not free: V8 moves a frozen array to `PACKED_FROZEN_ELEMENTS`, off the
|
|
133
|
+
* builtin fast path for the `.filter`/`.map`/`.some` narrowing runs over it at
|
|
134
|
+
* every multi-candidate call site (measured 4.6×; large bench arm 100.3 → 70.6ms
|
|
135
|
+
* with it off). Gated on `isSemanticModelValidatorEnabled()` — the OPT-IN form,
|
|
136
|
+
* not `adl.ts`'s opt-out `NODE_ENV !== 'production'`: `NODE_ENV` is unset in a
|
|
137
|
+
* CLI `analyze`, so the opt-out form would keep paying the freeze exactly where
|
|
138
|
+
* the cost lands. Read once at load because this one is per-call-site.
|
|
139
|
+
*/
|
|
140
|
+
const FREEZE_SHARED_CANDIDATES = (0, env_js_1.isSemanticModelValidatorEnabled)();
|
|
141
|
+
/** Shared empties: most namespace scopes declare no callables, and most
|
|
142
|
+
* qualified receivers name no namespace at all. `NO_DEFS` is process-wide, so
|
|
143
|
+
* it gets the same dev-only freeze the memoized arrays do. */
|
|
144
|
+
const NO_MEMBERS = new Map();
|
|
145
|
+
const NO_DEFS = FREEZE_SHARED_CANDIDATES ? Object.freeze([]) : [];
|
|
146
|
+
/** Simple (last-segment) name of a def, matching the legacy scan exactly —
|
|
147
|
+
* including the empty-string fallback for a def with no `qualifiedName`, and
|
|
148
|
+
* the empty last segment of a trailing-dot name. `lastIndexOf` + `slice`
|
|
149
|
+
* rather than `split('.').pop()`: same result, no intermediate array, and this
|
|
150
|
+
* runs per callable def and per namespace scope at build. */
|
|
151
|
+
function simpleNameOf(def) {
|
|
152
|
+
const qualified = def.qualifiedName;
|
|
153
|
+
if (qualified == null)
|
|
154
|
+
return '';
|
|
155
|
+
const lastDot = qualified.lastIndexOf('.');
|
|
156
|
+
return lastDot === -1 ? qualified : qualified.slice(lastDot + 1);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Per-pass memo: `parsedFiles` array identity → the built index. `WeakMap`-keyed
|
|
160
|
+
* so the entry lives only as long as the caller's `parsedFiles` array does, and
|
|
161
|
+
* is reclaimed with the pass — mirrors `moduleScopeIndexByPass` in
|
|
162
|
+
* `file-local-linkage.ts`.
|
|
163
|
+
*
|
|
164
|
+
* Weak keying is load-bearing, not stylistic: the index holds
|
|
165
|
+
* `SymbolDefinition` references reaching into every ParsedFile's scopes, so a
|
|
166
|
+
* module-level strong `let` pair (index + source array) kept the whole C/C++
|
|
167
|
+
* ParsedFile set alive past the point `scope-resolution/pipeline/phase.ts`
|
|
168
|
+
* evicts `files`/`contents`/`preExtractedByPath` and calls `forceGc()` to
|
|
169
|
+
* reclaim it — C++ is 7th of 16 `SCOPE_RESOLVERS` entries, so the retention
|
|
170
|
+
* survived nine later language passes plus emit (104.2 MB measured).
|
|
171
|
+
*/
|
|
172
|
+
let qualifiedNsIndexByPass = new WeakMap();
|
|
173
|
+
/** Build the index in two linear passes per file: one to make a node per
|
|
174
|
+
* `Namespace` scope, one to link inline children and register receivers.
|
|
175
|
+
* Linking needs both endpoints to exist and `parsed.scopes` does not promise
|
|
176
|
+
* parents precede children, hence two passes rather than one — but only the
|
|
177
|
+
* first pass filters `parsed.scopes`; it hands the second the `[scope, node]`
|
|
178
|
+
* pairs it already found. */
|
|
179
|
+
function buildQualifiedNsMemberIndex(parsedFiles) {
|
|
180
|
+
const rootsByReceiver = new Map();
|
|
181
|
+
for (const parsed of parsedFiles) {
|
|
182
|
+
const nodesByScope = new Map();
|
|
183
|
+
const namespaces = [];
|
|
184
|
+
for (const sc of parsed.scopes) {
|
|
185
|
+
if (sc.kind !== 'Namespace')
|
|
186
|
+
continue;
|
|
187
|
+
const node = { ownMembers: bucketOwnMembers(sc), inlineChildren: [] };
|
|
188
|
+
nodesByScope.set(sc.id, node);
|
|
189
|
+
namespaces.push([sc, node]);
|
|
190
|
+
}
|
|
191
|
+
for (const [sc, node] of namespaces) {
|
|
192
|
+
// A non-`Namespace` parent (a Module scope, say) has no node, so the
|
|
193
|
+
// inline child links to nothing — hence the `?.` below.
|
|
194
|
+
if (sc.parent !== null && inlineNamespaceScopeIds.has(sc.id)) {
|
|
195
|
+
nodesByScope.get(sc.parent)?.inlineChildren.push(node);
|
|
196
|
+
}
|
|
197
|
+
const nsDef = findNamespaceDefInScope(sc);
|
|
198
|
+
if (nsDef === undefined)
|
|
199
|
+
continue;
|
|
200
|
+
const nsName = simpleNameOf(nsDef);
|
|
201
|
+
let roots = rootsByReceiver.get(nsName);
|
|
202
|
+
if (roots === undefined) {
|
|
203
|
+
roots = [];
|
|
204
|
+
rootsByReceiver.set(nsName, roots);
|
|
205
|
+
}
|
|
206
|
+
roots.push(node);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return { rootsByReceiver, membersByReceiver: new Map() };
|
|
210
|
+
}
|
|
211
|
+
/** Bucket a namespace scope's own callable `ownedDefs` by member simple name.
|
|
212
|
+
* No descent: inline children are separate nodes reached by the walk. */
|
|
213
|
+
function bucketOwnMembers(scope) {
|
|
214
|
+
let members;
|
|
215
|
+
for (const def of scope.ownedDefs) {
|
|
216
|
+
if (!(0, callable_labels_js_1.isOverloadableCallable)(def.type))
|
|
217
|
+
continue;
|
|
218
|
+
const simple = simpleNameOf(def);
|
|
219
|
+
members ??= new Map();
|
|
220
|
+
let arr = members.get(simple);
|
|
221
|
+
if (arr === undefined) {
|
|
222
|
+
arr = [];
|
|
223
|
+
members.set(simple, arr);
|
|
224
|
+
}
|
|
225
|
+
arr.push(def);
|
|
226
|
+
}
|
|
227
|
+
return members ?? NO_MEMBERS;
|
|
228
|
+
}
|
|
229
|
+
/** Candidates for `receiver::member`, memoized on the index per pair so a
|
|
230
|
+
* repeated call site costs two Map lookups. */
|
|
231
|
+
function qualifiedNsMembers(index, receiverName, memberName) {
|
|
232
|
+
const roots = index.rootsByReceiver.get(receiverName);
|
|
233
|
+
// No namespace by that name — the most common outcome in real source. Left
|
|
234
|
+
// unmemoized deliberately: it is already O(1), and memoizing would grow the
|
|
235
|
+
// index by an entry per unresolved receiver name in the workspace.
|
|
236
|
+
if (roots === undefined)
|
|
237
|
+
return NO_DEFS;
|
|
238
|
+
let byMember = index.membersByReceiver.get(receiverName);
|
|
239
|
+
if (byMember === undefined) {
|
|
240
|
+
byMember = new Map();
|
|
241
|
+
index.membersByReceiver.set(receiverName, byMember);
|
|
242
|
+
}
|
|
243
|
+
let hits = byMember.get(memberName);
|
|
244
|
+
if (hits === undefined) {
|
|
245
|
+
// Memoization makes this array shared by every call site in the pass rather
|
|
246
|
+
// than rebuilt per call, so it carries the dev-only mutation tripwire (see
|
|
247
|
+
// {@link FREEZE_SHARED_CANDIDATES}).
|
|
248
|
+
hits = gatherQualifiedNsMember(roots, memberName);
|
|
249
|
+
if (FREEZE_SHARED_CANDIDATES)
|
|
250
|
+
hits = Object.freeze(hits);
|
|
251
|
+
byMember.set(memberName, hits);
|
|
252
|
+
}
|
|
253
|
+
return hits;
|
|
254
|
+
}
|
|
255
|
+
/** Pre-order depth-first walk of every scope named `receiverName` and its
|
|
256
|
+
* transitive inline-namespace children, collecting callables named
|
|
257
|
+
* `memberName` — the index twin of the legacy
|
|
258
|
+
* `findMemberInNamespaceTransitive`.
|
|
259
|
+
*
|
|
260
|
+
* Iterative, not recursive: nesting depth is whatever the input file says, and
|
|
261
|
+
* a recursive descent threw `RangeError` past ~8k levels (see
|
|
262
|
+
* {@link QualifiedNsMemberIndex}). */
|
|
263
|
+
function gatherQualifiedNsMember(roots, memberName) {
|
|
264
|
+
const hits = [];
|
|
265
|
+
const stack = [];
|
|
266
|
+
// `visited` spans ALL roots, reproducing the legacy per-receiver `seenNodeId`
|
|
267
|
+
// dedup: `namespace ns { inline namespace ns { … } }` registers both scopes
|
|
268
|
+
// under receiver `ns`, and the outer walk already collected the inner's defs.
|
|
269
|
+
// Node identity is equivalent to the legacy nodeId key because a node always
|
|
270
|
+
// contributes the same defs. It doubles as the guard that a malformed parent
|
|
271
|
+
// cycle terminates instead of spinning — the one regression an explicit stack
|
|
272
|
+
// could otherwise introduce over recursion's `RangeError`.
|
|
273
|
+
const visited = new Set();
|
|
274
|
+
for (const root of roots) {
|
|
275
|
+
stack.push(root);
|
|
276
|
+
while (stack.length > 0) {
|
|
277
|
+
const node = stack.pop();
|
|
278
|
+
if (visited.has(node))
|
|
279
|
+
continue;
|
|
280
|
+
visited.add(node);
|
|
281
|
+
const own = node.ownMembers.get(memberName);
|
|
282
|
+
if (own !== undefined)
|
|
283
|
+
for (const def of own)
|
|
284
|
+
hits.push(def);
|
|
285
|
+
// Reverse push so children pop in declaration order — the legacy walk's
|
|
286
|
+
// pre-order depth-first candidate order (see
|
|
287
|
+
// {@link QualifiedNsMemberIndex.rootsByReceiver}).
|
|
288
|
+
const kids = node.inlineChildren;
|
|
289
|
+
for (let i = kids.length - 1; i >= 0; i--)
|
|
290
|
+
stack.push(kids[i]);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return hits.length === 0 ? NO_DEFS : hits;
|
|
294
|
+
}
|
|
295
|
+
/** Build the index on first use of a given `parsedFiles` set; reuse it for
|
|
296
|
+
* every subsequent call site that passes the same array reference AND the same
|
|
297
|
+
* {@link inlineNamespaceEpoch}.
|
|
298
|
+
*
|
|
299
|
+
* Both keys are needed because the index is a function of TWO inputs:
|
|
300
|
+
* `parsedFiles` and the module-level `inlineNamespaceScopeIds` (which inline
|
|
301
|
+
* children get descended into). A later pass may hand back the same
|
|
302
|
+
* `parsedFiles` reference with different inline-namespace state, so identity
|
|
303
|
+
* alone would serve a stale index — the epoch is what makes that a checked
|
|
304
|
+
* rebuild instead of a documented obligation on the clear site.
|
|
305
|
+
*
|
|
306
|
+
* Lifetime: the entry is reachable only while the caller still holds the
|
|
307
|
+
* `parsedFiles` array; nothing here pins it (see {@link qualifiedNsIndexByPass}).
|
|
308
|
+
*
|
|
309
|
+
* Same STALENESS contract as `ensureAdlIndex` in `adl.ts`, minus that
|
|
310
|
+
* sibling's dev-gated `validateAdlSeqCoverage` guard: this index has no `?? 0`
|
|
311
|
+
* defaulting read to silently collide on, so there is nothing for such a guard
|
|
312
|
+
* to catch. */
|
|
313
|
+
function qualifiedNsMemberIndex(parsedFiles) {
|
|
314
|
+
const memo = qualifiedNsIndexByPass.get(parsedFiles);
|
|
315
|
+
if (memo !== undefined && memo.epoch === inlineNamespaceEpoch)
|
|
316
|
+
return memo.index;
|
|
317
|
+
const index = buildQualifiedNsMemberIndex(parsedFiles);
|
|
318
|
+
qualifiedNsIndexByPass.set(parsedFiles, { epoch: inlineNamespaceEpoch, index });
|
|
319
|
+
return index;
|
|
320
|
+
}
|
|
321
|
+
/** Constant narrowing hooks for the C++ qualified-receiver path — hoisted so
|
|
322
|
+
* the literal is not reallocated at every multi-candidate call site. */
|
|
323
|
+
const CPP_NARROWING_HOOKS = {
|
|
324
|
+
conversionRankFn: conversion_rank_js_1.cppConversionRank,
|
|
325
|
+
conversionOnlyArgTypePrefixes: conversion_rank_js_1.CPP_CONVERSION_ONLY_ARG_TYPE_PREFIXES,
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* Find the Namespace scopes whose simple name matches `receiverName` and
|
|
329
|
+
* return their callable members matching `memberName`, transitively
|
|
330
|
+
* including inline-namespace children (since they're members of the
|
|
331
|
+
* enclosing namespace under ISO C++). Served from a per-pipeline index
|
|
332
|
+
* ({@link QualifiedNsMemberIndex}), not a per-call-site workspace scan.
|
|
333
|
+
*
|
|
334
|
+
* Returns the most specific (innermost) match — for `outer::foo()`
|
|
335
|
+
* where `inline namespace v1` declares `foo`, returns `v1::foo`. When
|
|
336
|
+
* multiple inline-namespace children declare the same name, ISO C++
|
|
337
|
+
* leaves the call ambiguous; returns `'ambiguous'` so the caller
|
|
338
|
+
* suppresses edge emission rather than picking arbitrarily (#1564).
|
|
339
|
+
*
|
|
340
|
+
* Two production call sites, both in `scope-resolver.ts`:
|
|
341
|
+
* - `resolveQualifiedReceiverMember` — the `outer::foo()` qualified-receiver
|
|
342
|
+
* hook. Passes `callsite`, so a multi-candidate set can be narrowed by
|
|
343
|
+
* arity and argument types.
|
|
344
|
+
* - `resolveAdlCandidates` — resolving a `using ns::name;` named import back
|
|
345
|
+
* to its namespace member, for template-class method bodies where the
|
|
346
|
+
* lexical walk misses that visibility. Passes NO `callsite`, which makes
|
|
347
|
+
* the narrowing filters below pass-throughs: on that path any receiver
|
|
348
|
+
* whose member has more than one candidate returns `'ambiguous'` (and the
|
|
349
|
+
* caller then skips it) rather than being disambiguated.
|
|
350
|
+
*/
|
|
351
|
+
function resolveCppQualifiedNamespaceMember(receiverName, memberName, parsedFiles, _scopes, callsite) {
|
|
352
|
+
const allHits = qualifiedNsMembers(qualifiedNsMemberIndex(parsedFiles), receiverName, memberName);
|
|
353
|
+
if (allHits.length === 0)
|
|
354
|
+
return undefined;
|
|
355
|
+
if (allHits.length === 1)
|
|
356
|
+
return allHits[0];
|
|
357
|
+
// Multi-candidate: thread call-site arity/argument-types through the
|
|
358
|
+
// `resolveQualifiedReceiverMember` contract so `narrowOverloadCandidates`
|
|
359
|
+
// can disambiguate via exact-type match and, when available, conversion-rank
|
|
360
|
+
// scoring (`cppConversionRank`). Same-signature ambiguity is still detected
|
|
361
|
+
// by `isOverloadAmbiguousAfterNormalization` below.
|
|
362
|
+
const narrowed = (0, overload_narrowing_js_1.narrowOverloadCandidates)(allHits, callsite?.arity, callsite?.argumentTypes, callsite !== undefined ? CPP_NARROWING_HOOKS : undefined);
|
|
363
|
+
if (narrowed.length === 1)
|
|
364
|
+
return narrowed[0];
|
|
365
|
+
if (narrowed.length === 0)
|
|
366
|
+
return undefined;
|
|
367
|
+
if ((0, overload_narrowing_js_1.isOverloadAmbiguousAfterNormalization)(narrowed, undefined))
|
|
368
|
+
return 'ambiguous';
|
|
369
|
+
// Multiple surviving candidates (distinct signatures) — conservative
|
|
370
|
+
// suppress because we lack call-site info to disambiguate.
|
|
371
|
+
return 'ambiguous';
|
|
372
|
+
}
|
|
373
|
+
function findNamespaceDefInScope(scope) {
|
|
374
|
+
for (const def of scope.ownedDefs) {
|
|
375
|
+
if (def.type === 'Namespace')
|
|
376
|
+
return def;
|
|
377
|
+
}
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.interpretCppImport = interpretCppImport;
|
|
4
|
+
exports.interpretCppTypeBinding = interpretCppTypeBinding;
|
|
5
|
+
exports.stripCppSpecifiers = stripCppSpecifiers;
|
|
6
|
+
exports.normalizeCppTypeName = normalizeCppTypeName;
|
|
7
|
+
/**
|
|
8
|
+
* Interpret a C++ import capture into a ParsedImport.
|
|
9
|
+
*
|
|
10
|
+
* C++ has three import forms:
|
|
11
|
+
* 1. #include "file.h" → wildcard import (all symbols from header)
|
|
12
|
+
* 2. using namespace X; → wildcard import (all symbols from namespace X)
|
|
13
|
+
* 3. using X::name; → named import (single symbol from namespace X)
|
|
14
|
+
*
|
|
15
|
+
* System headers (#include <...>) are not resolved to local files.
|
|
16
|
+
*/
|
|
17
|
+
function interpretCppImport(captures) {
|
|
18
|
+
const source = captures['@import.source']?.text;
|
|
19
|
+
if (source === undefined)
|
|
20
|
+
return null;
|
|
21
|
+
// System headers are not resolved to local files
|
|
22
|
+
if (captures['@import.system'] !== undefined)
|
|
23
|
+
return null;
|
|
24
|
+
const kind = captures['@import.kind']?.text;
|
|
25
|
+
if (kind === 'named') {
|
|
26
|
+
// using X::name — named import
|
|
27
|
+
const importedName = captures['@import.name']?.text;
|
|
28
|
+
if (importedName === undefined)
|
|
29
|
+
return null;
|
|
30
|
+
return { kind: 'named', targetRaw: source, localName: importedName, importedName };
|
|
31
|
+
}
|
|
32
|
+
// #include or using namespace — wildcard import
|
|
33
|
+
return { kind: 'wildcard', targetRaw: source };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Interpret a C++ type-binding capture into a ParsedTypeBinding.
|
|
37
|
+
*
|
|
38
|
+
* Source classification (strongest → weakest):
|
|
39
|
+
* - `'parameter-annotation'` — function parameter type
|
|
40
|
+
* - `'annotation'` — explicit type declaration (`User user;`)
|
|
41
|
+
* - `'assignment-inferred'` — typed init (`User user = ...`)
|
|
42
|
+
* - `'constructor'` — constructor call (`auto u = User(...)` / `User{}`)
|
|
43
|
+
* - `'return'` — function return type
|
|
44
|
+
* - `'field'` — class field type
|
|
45
|
+
* - `'alias'` — `auto x = existingVar`
|
|
46
|
+
*/
|
|
47
|
+
function interpretCppTypeBinding(captures) {
|
|
48
|
+
const name = captures['@type-binding.name']?.text;
|
|
49
|
+
const type = captures['@type-binding.type']?.text;
|
|
50
|
+
if (name === undefined || type === undefined)
|
|
51
|
+
return null;
|
|
52
|
+
let source = 'annotation';
|
|
53
|
+
if (captures['@type-binding.parameter'] !== undefined) {
|
|
54
|
+
source = 'parameter-annotation';
|
|
55
|
+
}
|
|
56
|
+
else if (captures['@type-binding.constructor'] !== undefined) {
|
|
57
|
+
source = 'constructor-inferred';
|
|
58
|
+
}
|
|
59
|
+
else if (captures['@type-binding.return'] !== undefined) {
|
|
60
|
+
source = 'return-annotation';
|
|
61
|
+
}
|
|
62
|
+
else if (captures['@type-binding.field'] !== undefined) {
|
|
63
|
+
// Field types are structurally equivalent to annotations — the type
|
|
64
|
+
// is explicitly written, not inferred.
|
|
65
|
+
source = 'annotation';
|
|
66
|
+
}
|
|
67
|
+
else if (captures['@type-binding.member-access'] !== undefined) {
|
|
68
|
+
// auto addr = user.address — the type is inferred from the member access.
|
|
69
|
+
// Synthesize a dotted rawName ("receiver.field") so compound-receiver
|
|
70
|
+
// can resolve the chain: look up receiver's class, then field's type.
|
|
71
|
+
const receiver = captures['@type-binding.member-access-receiver']?.text;
|
|
72
|
+
if (receiver !== undefined) {
|
|
73
|
+
return { boundName: name, rawTypeName: `${receiver}.${type}`, source: 'assignment-inferred' };
|
|
74
|
+
}
|
|
75
|
+
source = 'assignment-inferred';
|
|
76
|
+
}
|
|
77
|
+
else if (captures['@type-binding.alias'] !== undefined) {
|
|
78
|
+
// auto alias = existingVar — the type is inferred from the RHS variable.
|
|
79
|
+
source = 'assignment-inferred';
|
|
80
|
+
}
|
|
81
|
+
else if (captures['@type-binding.assignment'] !== undefined) {
|
|
82
|
+
source = 'assignment-inferred';
|
|
83
|
+
}
|
|
84
|
+
else if (captures['@type-binding.annotation'] !== undefined) {
|
|
85
|
+
source = 'annotation';
|
|
86
|
+
}
|
|
87
|
+
// A member field's type is captured AS WRITTEN, qualifier and all
|
|
88
|
+
// (`ns::Repo<User>`), because the query matches the outer
|
|
89
|
+
// `qualified_identifier` — one depth-agnostic pattern per declarator shape
|
|
90
|
+
// instead of one per qualifier depth. The qualifier is dropped HERE; see the
|
|
91
|
+
// "Field type, QUALIFIED" block in query.ts for why the qualified spelling
|
|
92
|
+
// resolves to nothing and the tail resolves like the bare one.
|
|
93
|
+
//
|
|
94
|
+
// FIELDS ONLY. `@type-binding.parameter` and `@type-binding.assignment` also
|
|
95
|
+
// capture qualified spellings (their patterns use `type: (_)`), and reducing
|
|
96
|
+
// THOSE would newly bind every qualified local and parameter in the workspace
|
|
97
|
+
// — a far wider change than the member-field miss this closes, and not one
|
|
98
|
+
// anything here has measured.
|
|
99
|
+
const effectiveType = captures['@type-binding.field'] === undefined ? type : cppQualifiedTail(type);
|
|
100
|
+
// The reduced spelling is also the AS-WRITTEN one, and saying so is load
|
|
101
|
+
// bearing. `collectTypeBindings` derives `TypeRef.declaredSpelling` from
|
|
102
|
+
// `@type-binding.type` whenever that text differs from `rawTypeName`, and it
|
|
103
|
+
// now does for every qualified member. `declaredSpelling` exists to keep a
|
|
104
|
+
// CONTAINER distinguishable from a class of the same name after capture
|
|
105
|
+
// reduced it; a qualifier is not a container — `ns::Address` and `Address`
|
|
106
|
+
// have the identical member set — so recording one here would answer
|
|
107
|
+
// "container, as written" for a plain member and hand `elementTypeOf` a
|
|
108
|
+
// spelling it never sees for the bare form.
|
|
109
|
+
const declaredSpelling = cppPointerSpelling(captures, effectiveType, name) ??
|
|
110
|
+
(effectiveType === type ? undefined : effectiveType);
|
|
111
|
+
return declaredSpelling === undefined
|
|
112
|
+
? { boundName: name, rawTypeName: normalizeCppTypeName(effectiveType), source }
|
|
113
|
+
: {
|
|
114
|
+
boundName: name,
|
|
115
|
+
rawTypeName: normalizeCppTypeName(effectiveType),
|
|
116
|
+
declaredSpelling,
|
|
117
|
+
source,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The tail of a `::`-qualified type spelling — `a::b::Repo<User>` → `Repo<User>`,
|
|
122
|
+
* `ns::Address` → `Address`, an unqualified spelling unchanged.
|
|
123
|
+
*
|
|
124
|
+
* Only TOP-LEVEL separators count, so a qualified TYPE ARGUMENT survives:
|
|
125
|
+
* `std::vector<std::string>` reduces to `vector<std::string>`, not to `string`.
|
|
126
|
+
* That is the same string the old per-depth rules produced by capturing the
|
|
127
|
+
* inner node, so the reduction is textual where it used to be structural and
|
|
128
|
+
* the result is identical for every depth they covered.
|
|
129
|
+
*/
|
|
130
|
+
function cppQualifiedTail(text) {
|
|
131
|
+
let angleDepth = 0;
|
|
132
|
+
let lastSeparator = -1;
|
|
133
|
+
for (let i = 0; i < text.length; i++) {
|
|
134
|
+
const ch = text[i];
|
|
135
|
+
if (ch === '<')
|
|
136
|
+
angleDepth++;
|
|
137
|
+
else if (ch === '>') {
|
|
138
|
+
if (angleDepth > 0)
|
|
139
|
+
angleDepth--;
|
|
140
|
+
}
|
|
141
|
+
else if (angleDepth === 0 && ch === ':' && text[i + 1] === ':') {
|
|
142
|
+
lastSeparator = i;
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (lastSeparator === -1)
|
|
147
|
+
return text;
|
|
148
|
+
const tail = text.slice(lastSeparator + 2).trim();
|
|
149
|
+
// A spelling that ends in `::` has no tail to reduce to. Cannot arise from a
|
|
150
|
+
// parsed `qualified_identifier`, but returning an empty type name would make
|
|
151
|
+
// the binding claim a type of `""`, so the written spelling is kept instead.
|
|
152
|
+
return tail.length === 0 ? text : tail;
|
|
153
|
+
}
|
|
154
|
+
/** Anchors whose capture spans a whole declaration, so the declarator — and
|
|
155
|
+
* with it the pointer — is inside the captured text. */
|
|
156
|
+
const CPP_WHOLE_DECLARATION_ANCHORS = [
|
|
157
|
+
'@type-binding.parameter',
|
|
158
|
+
'@type-binding.annotation',
|
|
159
|
+
'@type-binding.assignment',
|
|
160
|
+
];
|
|
161
|
+
const squeezeWhitespace = (text) => text.replace(/\s+/g, '');
|
|
162
|
+
/**
|
|
163
|
+
* `User* repos` — the written spelling, when tree-sitter-cpp hangs the pointer
|
|
164
|
+
* off the DECLARATOR rather than the type.
|
|
165
|
+
*
|
|
166
|
+
* `@type-binding.type` is a bare `User` there, so the binding records `User` and
|
|
167
|
+
* nothing downstream can tell `repos[0]` (pointer subscript, element `User`)
|
|
168
|
+
* from `grid[0]` on a class with `operator[]` (element: whatever the operator
|
|
169
|
+
* returns). The index step needs that distinction and declines without it, so
|
|
170
|
+
* the pointer is reconstructed here — at the capture layer, from the anchor,
|
|
171
|
+
* which spans the whole declaration.
|
|
172
|
+
*
|
|
173
|
+
* EXACT SHAPE ONLY: the declaration must be precisely `<type> * <name>` once
|
|
174
|
+
* whitespace is removed. `const T*`, `T**`, an array declarator, a reference,
|
|
175
|
+
* a function pointer — none match, and none get a spelling, so the index step
|
|
176
|
+
* declines for them. A loose match would hand back container evidence that is
|
|
177
|
+
* not there and re-mint the confidently wrong edge this exists to prevent.
|
|
178
|
+
*/
|
|
179
|
+
function cppPointerSpelling(captures, typeText, nameText) {
|
|
180
|
+
// The target below always contains a literal `*`, so an anchor whose text has
|
|
181
|
+
// none can never equal it. Testing that FIRST is the whole optimisation: this
|
|
182
|
+
// runs on every C++ type binding and the overwhelming majority declare no
|
|
183
|
+
// pointer, so the squeezes (three `replace` passes over the declaration, the
|
|
184
|
+
// type and the name) are skipped entirely for them. `target` is built lazily
|
|
185
|
+
// on the first star-bearing anchor for the same reason.
|
|
186
|
+
let target;
|
|
187
|
+
for (const anchor of CPP_WHOLE_DECLARATION_ANCHORS) {
|
|
188
|
+
const text = captures[anchor]?.text;
|
|
189
|
+
if (text === undefined || !text.includes('*'))
|
|
190
|
+
continue;
|
|
191
|
+
if (target === undefined) {
|
|
192
|
+
const type = squeezeWhitespace(typeText);
|
|
193
|
+
const name = squeezeWhitespace(nameText);
|
|
194
|
+
if (type.length === 0 || name.length === 0)
|
|
195
|
+
return undefined;
|
|
196
|
+
target = `${type}*${name}`;
|
|
197
|
+
}
|
|
198
|
+
if (squeezeWhitespace(text) === target)
|
|
199
|
+
return `${typeText.trim()}*`;
|
|
200
|
+
}
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
/** Declaration specifiers that carry no type identity. Held in ONE place so
|
|
204
|
+
* every consumer agrees on the keyword list — the resolver's element-type
|
|
205
|
+
* hook strips exactly the same set before deciding whether a spelling is a
|
|
206
|
+
* pointer, and a silently diverging copy there would make the two disagree
|
|
207
|
+
* about what `const T*` is. */
|
|
208
|
+
const CPP_SPECIFIER_RE = /\b(const|volatile|restrict|static|extern|inline|mutable|constexpr|consteval)\b/g;
|
|
209
|
+
/** Remove C++ declaration specifiers from `text` and trim the result. */
|
|
210
|
+
function stripCppSpecifiers(text) {
|
|
211
|
+
return text.replace(CPP_SPECIFIER_RE, '').trim();
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Normalize a C++ type name: strip pointer/array/reference syntax,
|
|
215
|
+
* qualifiers, while preserving template arguments for specialization-aware
|
|
216
|
+
* receiver binding (`List<User>` vs `List<Order>`).
|
|
217
|
+
*
|
|
218
|
+
* Keeping template arguments here allows receiver-bound fallback to match
|
|
219
|
+
* specialization-specific class defs first; non-template behavior is preserved
|
|
220
|
+
* by base-name fallback in resolveClassBindingForName.
|
|
221
|
+
*/
|
|
222
|
+
function normalizeCppTypeName(text) {
|
|
223
|
+
let t = stripCppSpecifiers(text);
|
|
224
|
+
// Strip pointer stars
|
|
225
|
+
while (t.endsWith('*'))
|
|
226
|
+
t = t.slice(0, -1).trim();
|
|
227
|
+
while (t.startsWith('*'))
|
|
228
|
+
t = t.slice(1).trim();
|
|
229
|
+
// Strip reference markers
|
|
230
|
+
while (t.endsWith('&'))
|
|
231
|
+
t = t.slice(0, -1).trim();
|
|
232
|
+
// Strip array brackets
|
|
233
|
+
t = t.replace(/\[.*?\]/g, '').trim();
|
|
234
|
+
// Strip struct/union/enum/class prefixes
|
|
235
|
+
t = t.replace(/^(struct|union|enum|class)\s+/, '');
|
|
236
|
+
// Strip leading :: (global namespace qualifier)
|
|
237
|
+
t = t.replace(/^::/, '');
|
|
238
|
+
return t;
|
|
239
|
+
}
|