gitnexus 1.6.6-rc.99 → 1.6.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/README.md +122 -68
- package/dist/_shared/graph/types.d.ts +17 -1
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -5
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +2 -4
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/scope-resolution/module-scope-index.d.ts +1 -2
- package/dist/_shared/scope-resolution/module-scope-index.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/module-scope-index.js +1 -2
- package/dist/_shared/scope-resolution/module-scope-index.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +24 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +13 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/context.d.ts +1 -0
- package/dist/_shared/scope-resolution/registries/context.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/context.js +6 -0
- package/dist/_shared/scope-resolution/registries/context.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/evidence.d.ts +2 -3
- package/dist/_shared/scope-resolution/registries/evidence.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/evidence.js +2 -3
- package/dist/_shared/scope-resolution/registries/evidence.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/macro-registry.d.ts +29 -0
- package/dist/_shared/scope-resolution/registries/macro-registry.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/registries/macro-registry.js +32 -0
- package/dist/_shared/scope-resolution/registries/macro-registry.js.map +1 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +9 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +1 -1
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +35 -1
- package/dist/cli/ai-context.js +111 -12
- package/dist/cli/analyze-config.d.ts +92 -0
- package/dist/cli/analyze-config.js +364 -0
- package/dist/cli/analyze.d.ts +17 -1
- package/dist/cli/analyze.js +224 -71
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/doctor.d.ts +18 -0
- package/dist/cli/doctor.js +32 -0
- package/dist/cli/i18n/en.d.ts +2 -2
- package/dist/cli/i18n/en.js +2 -2
- package/dist/cli/i18n/resources.d.ts +2 -2
- package/dist/cli/i18n/zh-CN.js +2 -2
- package/dist/cli/index.js +4 -2
- package/dist/cli/resolve-invocation.d.ts +21 -0
- package/dist/cli/resolve-invocation.js +68 -0
- package/dist/cli/setup.d.ts +33 -0
- package/dist/cli/setup.js +96 -35
- package/dist/cli/skill-gen.js +2 -2
- package/dist/cli/wiki.js +20 -4
- package/dist/core/embeddings/embedder.d.ts +1 -1
- package/dist/core/embeddings/embedder.js +14 -1
- package/dist/core/embeddings/runtime-support.d.ts +41 -0
- package/dist/core/embeddings/runtime-support.js +65 -0
- package/dist/core/group/extractors/grpc-patterns/proto.js +2 -1
- package/dist/core/group/extractors/http-patterns/java.js +15 -1
- package/dist/core/ingestion/call-processor.d.ts +57 -227
- package/dist/core/ingestion/call-processor.js +172 -2595
- package/dist/core/ingestion/call-routing.d.ts +6 -5
- package/dist/core/ingestion/call-routing.js +6 -6
- package/dist/core/ingestion/call-types.d.ts +0 -75
- package/dist/core/ingestion/class-extractors/configs/c-cpp.js +26 -1
- package/dist/core/ingestion/class-extractors/configs/ruby.js +3 -0
- package/dist/core/ingestion/class-extractors/generic.js +9 -11
- package/dist/core/ingestion/class-types.d.ts +23 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.d.ts +11 -0
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +227 -73
- package/dist/core/ingestion/cobol-processor.d.ts +1 -0
- package/dist/core/ingestion/cobol-processor.js +51 -2
- package/dist/core/ingestion/emit-references.js +8 -2
- package/dist/core/ingestion/export-detection.d.ts +2 -1
- package/dist/core/ingestion/export-detection.js +2 -6
- package/dist/core/ingestion/field-extractors/configs/dart.d.ts +0 -6
- package/dist/core/ingestion/field-extractors/configs/dart.js +62 -44
- package/dist/core/ingestion/field-extractors/configs/go.d.ts +0 -9
- package/dist/core/ingestion/field-extractors/configs/go.js +40 -1
- package/dist/core/ingestion/field-extractors/configs/jvm.js +43 -4
- package/dist/core/ingestion/field-extractors/configs/php.js +1 -2
- package/dist/core/ingestion/field-extractors/configs/swift.d.ts +12 -1
- package/dist/core/ingestion/field-extractors/configs/swift.js +31 -6
- package/dist/core/ingestion/field-extractors/generic.d.ts +6 -0
- package/dist/core/ingestion/field-extractors/generic.js +5 -4
- package/dist/core/ingestion/field-extractors/typescript.js +0 -29
- package/dist/core/ingestion/filesystem-walker.d.ts +0 -9
- package/dist/core/ingestion/filesystem-walker.js +0 -11
- package/dist/core/ingestion/finalize-orchestrator.js +14 -2
- package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +21 -0
- package/dist/core/ingestion/import-resolvers/configs/swift.js +72 -11
- package/dist/core/ingestion/import-resolvers/python.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/standard.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.js +6 -5
- package/dist/core/ingestion/import-resolvers/utils.d.ts +2 -5
- package/dist/core/ingestion/import-resolvers/utils.js +1 -9
- package/dist/core/ingestion/language-provider.d.ts +39 -119
- package/dist/core/ingestion/language-provider.js +0 -2
- package/dist/core/ingestion/languages/c/capture-side-channel.d.ts +62 -0
- package/dist/core/ingestion/languages/c/capture-side-channel.js +65 -0
- package/dist/core/ingestion/languages/c/captures.js +41 -23
- package/dist/core/ingestion/languages/c/import-decomposer.d.ts +9 -0
- package/dist/core/ingestion/languages/c/import-decomposer.js +15 -0
- package/dist/core/ingestion/languages/c/import-target.js +52 -9
- package/dist/core/ingestion/languages/c/index.d.ts +2 -1
- package/dist/core/ingestion/languages/c/index.js +2 -1
- package/dist/core/ingestion/languages/c/query.js +15 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +47 -4
- package/dist/core/ingestion/languages/c/static-linkage.d.ts +8 -0
- package/dist/core/ingestion/languages/c/static-linkage.js +46 -1
- package/dist/core/ingestion/languages/c-cpp.js +16 -7
- package/dist/core/ingestion/languages/cobol/captures.js +25 -2
- package/dist/core/ingestion/languages/cpp/adl.d.ts +88 -4
- package/dist/core/ingestion/languages/cpp/adl.js +380 -160
- package/dist/core/ingestion/languages/cpp/arity-metadata.js +2 -8
- package/dist/core/ingestion/languages/cpp/capture-side-channel.d.ts +65 -0
- package/dist/core/ingestion/languages/cpp/capture-side-channel.js +78 -0
- package/dist/core/ingestion/languages/cpp/captures.js +162 -54
- package/dist/core/ingestion/languages/cpp/file-local-linkage.d.ts +18 -52
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +49 -1
- package/dist/core/ingestion/languages/cpp/import-decomposer.d.ts +7 -0
- package/dist/core/ingestion/languages/cpp/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/cpp/index.d.ts +1 -0
- package/dist/core/ingestion/languages/cpp/index.js +1 -0
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +8 -0
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +21 -0
- package/dist/core/ingestion/languages/cpp/query.js +21 -0
- package/dist/core/ingestion/languages/cpp/range-bindings.js +20 -5
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +52 -5
- package/dist/core/ingestion/languages/cpp/two-phase-lookup.d.ts +20 -0
- package/dist/core/ingestion/languages/cpp/two-phase-lookup.js +83 -3
- package/dist/core/ingestion/languages/csharp/captures.js +205 -41
- package/dist/core/ingestion/languages/csharp/index.d.ts +3 -4
- package/dist/core/ingestion/languages/csharp/index.js +3 -4
- package/dist/core/ingestion/languages/csharp/interpret.js +17 -3
- package/dist/core/ingestion/languages/csharp/namespace-siblings.d.ts +17 -7
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +129 -124
- package/dist/core/ingestion/languages/csharp/qualified-type-names.d.ts +14 -0
- package/dist/core/ingestion/languages/csharp/qualified-type-names.js +59 -0
- package/dist/core/ingestion/languages/csharp/query.js +13 -0
- package/dist/core/ingestion/languages/csharp/receiver-binding.js +10 -6
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +8 -1
- package/dist/core/ingestion/languages/csharp.js +0 -5
- package/dist/core/ingestion/languages/dart/arity-metadata.d.ts +25 -0
- package/dist/core/ingestion/languages/dart/arity-metadata.js +35 -0
- package/dist/core/ingestion/languages/dart/arity.d.ts +19 -0
- package/dist/core/ingestion/languages/dart/arity.js +31 -0
- package/dist/core/ingestion/languages/dart/built-ins.d.ts +11 -0
- package/dist/core/ingestion/languages/dart/built-ins.js +34 -0
- package/dist/core/ingestion/languages/dart/cache-stats.d.ts +13 -0
- package/dist/core/ingestion/languages/dart/cache-stats.js +24 -0
- package/dist/core/ingestion/languages/dart/captures.d.ts +29 -0
- package/dist/core/ingestion/languages/dart/captures.js +445 -0
- package/dist/core/ingestion/languages/dart/expand-wildcards.d.ts +13 -0
- package/dist/core/ingestion/languages/dart/expand-wildcards.js +31 -0
- package/dist/core/ingestion/languages/dart/import-target.d.ts +15 -0
- package/dist/core/ingestion/languages/dart/import-target.js +65 -0
- package/dist/core/ingestion/languages/dart/index.d.ts +28 -0
- package/dist/core/ingestion/languages/dart/index.js +28 -0
- package/dist/core/ingestion/languages/dart/interpret.d.ts +24 -0
- package/dist/core/ingestion/languages/dart/interpret.js +95 -0
- package/dist/core/ingestion/languages/dart/merge-bindings.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/merge-bindings.js +39 -0
- package/dist/core/ingestion/languages/dart/query.d.ts +26 -0
- package/dist/core/ingestion/languages/dart/query.js +142 -0
- package/dist/core/ingestion/languages/dart/receiver-binding.d.ts +24 -0
- package/dist/core/ingestion/languages/dart/receiver-binding.js +87 -0
- package/dist/core/ingestion/languages/dart/scope-resolver.d.ts +29 -0
- package/dist/core/ingestion/languages/dart/scope-resolver.js +194 -0
- package/dist/core/ingestion/languages/dart/signature-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/dart/signature-bindings.js +51 -0
- package/dist/core/ingestion/languages/dart/simple-hooks.d.ts +20 -0
- package/dist/core/ingestion/languages/dart/simple-hooks.js +47 -0
- package/dist/core/ingestion/languages/dart.d.ts +0 -1
- package/dist/core/ingestion/languages/dart.js +15 -29
- package/dist/core/ingestion/languages/go/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/go/arity-metadata.js +31 -1
- package/dist/core/ingestion/languages/go/captures.js +162 -3
- package/dist/core/ingestion/languages/go/interface-impls.js +476 -50
- package/dist/core/ingestion/languages/go/interpret.js +21 -11
- package/dist/core/ingestion/languages/go/method-owners.js +20 -8
- package/dist/core/ingestion/languages/go/query.js +15 -7
- package/dist/core/ingestion/languages/go/range-binding.js +24 -9
- package/dist/core/ingestion/languages/go/receiver-binding.js +1 -1
- package/dist/core/ingestion/languages/go/scope-resolver.js +2 -2
- package/dist/core/ingestion/languages/go/simple-hooks.js +10 -5
- package/dist/core/ingestion/languages/go/type-binding.d.ts +1 -0
- package/dist/core/ingestion/languages/go/type-binding.js +40 -2
- package/dist/core/ingestion/languages/go.d.ts +0 -1
- package/dist/core/ingestion/languages/go.js +0 -5
- package/dist/core/ingestion/languages/index.d.ts +0 -5
- package/dist/core/ingestion/languages/index.js +0 -3
- package/dist/core/ingestion/languages/java/captures.js +252 -23
- package/dist/core/ingestion/languages/java/interpret.js +12 -6
- package/dist/core/ingestion/languages/java/package-siblings.js +18 -5
- package/dist/core/ingestion/languages/java/query.js +16 -1
- package/dist/core/ingestion/languages/java/scope-resolver.d.ts +2 -8
- package/dist/core/ingestion/languages/java/scope-resolver.js +2 -8
- package/dist/core/ingestion/languages/java.js +0 -5
- package/dist/core/ingestion/languages/javascript/captures.js +185 -11
- package/dist/core/ingestion/languages/javascript/query.js +107 -1
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +57 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +60 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +213 -22
- package/dist/core/ingestion/languages/kotlin/companion-scopes.d.ts +7 -0
- package/dist/core/ingestion/languages/kotlin/companion-scopes.js +10 -0
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/query.js +30 -0
- package/dist/core/ingestion/languages/kotlin/scope-resolver.d.ts +5 -7
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +22 -7
- package/dist/core/ingestion/languages/kotlin.js +8 -5
- package/dist/core/ingestion/languages/php/captures.js +135 -19
- package/dist/core/ingestion/languages/php/import-decomposer.js +21 -63
- package/dist/core/ingestion/languages/php/index.d.ts +3 -4
- package/dist/core/ingestion/languages/php/index.js +3 -4
- package/dist/core/ingestion/languages/php/query.js +5 -0
- package/dist/core/ingestion/languages/php/receiver-binding.js +8 -4
- package/dist/core/ingestion/languages/php.js +0 -4
- package/dist/core/ingestion/languages/python/captures.js +128 -13
- package/dist/core/ingestion/languages/python/depends-references.js +1 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +4 -5
- package/dist/core/ingestion/languages/python/import-target.js +108 -16
- package/dist/core/ingestion/languages/python/index-stats.d.ts +18 -0
- package/dist/core/ingestion/languages/python/index-stats.js +25 -0
- package/dist/core/ingestion/languages/python/index.d.ts +3 -4
- package/dist/core/ingestion/languages/python/index.js +3 -4
- package/dist/core/ingestion/languages/python/query.js +17 -0
- package/dist/core/ingestion/languages/python/scope-resolver.js +7 -6
- package/dist/core/ingestion/languages/python.d.ts +0 -2
- package/dist/core/ingestion/languages/python.js +0 -7
- package/dist/core/ingestion/languages/ruby/captures.js +174 -31
- package/dist/core/ingestion/languages/ruby/import-target.js +2 -1
- package/dist/core/ingestion/languages/ruby/interpret.js +2 -1
- package/dist/core/ingestion/languages/ruby/query.js +10 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +61 -11
- package/dist/core/ingestion/languages/ruby.js +4 -53
- package/dist/core/ingestion/languages/rust/captures.js +95 -13
- package/dist/core/ingestion/languages/rust/query.js +64 -1
- package/dist/core/ingestion/languages/rust/range-binding.js +40 -12
- package/dist/core/ingestion/languages/rust/receiver-binding.js +9 -0
- package/dist/core/ingestion/languages/rust/scope-resolver.js +75 -1
- package/dist/core/ingestion/languages/rust.d.ts +0 -2
- package/dist/core/ingestion/languages/rust.js +0 -6
- package/dist/core/ingestion/languages/swift/arity-metadata.d.ts +24 -0
- package/dist/core/ingestion/languages/swift/arity-metadata.js +41 -0
- package/dist/core/ingestion/languages/swift/arity.d.ts +29 -0
- package/dist/core/ingestion/languages/swift/arity.js +42 -0
- package/dist/core/ingestion/languages/swift/base-type.d.ts +20 -0
- package/dist/core/ingestion/languages/swift/base-type.js +27 -0
- package/dist/core/ingestion/languages/swift/cache-stats.d.ts +15 -0
- package/dist/core/ingestion/languages/swift/cache-stats.js +26 -0
- package/dist/core/ingestion/languages/swift/captures.d.ts +35 -0
- package/dist/core/ingestion/languages/swift/captures.js +495 -0
- package/dist/core/ingestion/languages/swift/implicit-imports.d.ts +34 -0
- package/dist/core/ingestion/languages/swift/implicit-imports.js +57 -0
- package/dist/core/ingestion/languages/swift/import-decomposer.d.ts +24 -0
- package/dist/core/ingestion/languages/swift/import-decomposer.js +84 -0
- package/dist/core/ingestion/languages/swift/import-target.d.ts +33 -0
- package/dist/core/ingestion/languages/swift/import-target.js +81 -0
- package/dist/core/ingestion/languages/swift/index.d.ts +37 -0
- package/dist/core/ingestion/languages/swift/index.js +37 -0
- package/dist/core/ingestion/languages/swift/interpret.d.ts +15 -0
- package/dist/core/ingestion/languages/swift/interpret.js +89 -0
- package/dist/core/ingestion/languages/swift/merge-bindings.d.ts +20 -0
- package/dist/core/ingestion/languages/swift/merge-bindings.js +48 -0
- package/dist/core/ingestion/languages/swift/query.d.ts +46 -0
- package/dist/core/ingestion/languages/swift/query.js +194 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +40 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +161 -0
- package/dist/core/ingestion/languages/swift/scope-resolver.d.ts +50 -0
- package/dist/core/ingestion/languages/swift/scope-resolver.js +189 -0
- package/dist/core/ingestion/languages/swift/sibling-type-bindings.d.ts +34 -0
- package/dist/core/ingestion/languages/swift/sibling-type-bindings.js +65 -0
- package/dist/core/ingestion/languages/swift/signature-bindings.d.ts +25 -0
- package/dist/core/ingestion/languages/swift/signature-bindings.js +66 -0
- package/dist/core/ingestion/languages/swift/simple-hooks.d.ts +37 -0
- package/dist/core/ingestion/languages/swift/simple-hooks.js +60 -0
- package/dist/core/ingestion/languages/swift/target-grouping.d.ts +51 -0
- package/dist/core/ingestion/languages/swift/target-grouping.js +93 -0
- package/dist/core/ingestion/languages/swift/target-siblings.d.ts +30 -0
- package/dist/core/ingestion/languages/swift/target-siblings.js +71 -0
- package/dist/core/ingestion/languages/swift.d.ts +0 -5
- package/dist/core/ingestion/languages/swift.js +11 -87
- package/dist/core/ingestion/languages/typescript/array-callback.d.ts +3 -29
- package/dist/core/ingestion/languages/typescript/array-callback.js +4 -43
- package/dist/core/ingestion/languages/typescript/captures.js +147 -17
- package/dist/core/ingestion/languages/typescript/index.d.ts +3 -4
- package/dist/core/ingestion/languages/typescript/index.js +3 -4
- package/dist/core/ingestion/languages/typescript/query.d.ts +2 -3
- package/dist/core/ingestion/languages/typescript/query.js +125 -4
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +0 -1
- package/dist/core/ingestion/languages/typescript.d.ts +2 -3
- package/dist/core/ingestion/languages/typescript.js +46 -23
- package/dist/core/ingestion/languages/vue/captures.d.ts +46 -0
- package/dist/core/ingestion/languages/vue/captures.js +67 -0
- package/dist/core/ingestion/languages/vue/import-target.d.ts +27 -0
- package/dist/core/ingestion/languages/vue/import-target.js +58 -0
- package/dist/core/ingestion/languages/vue/index.d.ts +49 -0
- package/dist/core/ingestion/languages/vue/index.js +49 -0
- package/dist/core/ingestion/languages/vue/scope-resolver.d.ts +55 -0
- package/dist/core/ingestion/languages/vue/scope-resolver.js +292 -0
- package/dist/core/ingestion/languages/vue.js +12 -4
- package/dist/core/ingestion/local-symbol-pruner.d.ts +11 -0
- package/dist/core/ingestion/local-symbol-pruner.js +63 -0
- package/dist/core/ingestion/method-extractors/configs/dart.js +14 -1
- package/dist/core/ingestion/method-extractors/configs/jvm.js +37 -20
- package/dist/core/ingestion/method-extractors/configs/php.js +0 -1
- package/dist/core/ingestion/method-extractors/configs/swift.js +11 -4
- package/dist/core/ingestion/method-types.d.ts +2 -2
- package/dist/core/ingestion/model/index.d.ts +0 -3
- package/dist/core/ingestion/model/index.js +0 -8
- package/dist/core/ingestion/model/resolve.d.ts +7 -43
- package/dist/core/ingestion/model/resolve.js +7 -226
- package/dist/core/ingestion/model/scope-resolution-indexes.d.ts +46 -1
- package/dist/core/ingestion/model/semantic-model.d.ts +4 -6
- package/dist/core/ingestion/model/semantic-model.js +1 -1
- package/dist/core/ingestion/model/symbol-table.d.ts +3 -4
- package/dist/core/ingestion/model/symbol-table.js +3 -4
- package/dist/core/ingestion/parsing-processor.d.ts +30 -24
- package/dist/core/ingestion/parsing-processor.js +76 -640
- package/dist/core/ingestion/pipeline-phases/communities.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/communities.js +5 -2
- package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +9 -8
- package/dist/core/ingestion/pipeline-phases/cross-file.js +16 -12
- package/dist/core/ingestion/pipeline-phases/index.d.ts +1 -0
- package/dist/core/ingestion/pipeline-phases/index.js +1 -0
- package/dist/core/ingestion/pipeline-phases/mro.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/mro.js +2 -2
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +44 -22
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +426 -565
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +13 -33
- package/dist/core/ingestion/pipeline-phases/parse.js +2 -2
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/processes.js +5 -3
- package/dist/core/ingestion/pipeline-phases/prune-local-symbols.d.ts +14 -0
- package/dist/core/ingestion/pipeline-phases/prune-local-symbols.js +26 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -19
- package/dist/core/ingestion/pipeline.js +4 -2
- package/dist/core/ingestion/resolve-references.js +15 -3
- package/dist/core/ingestion/route-extractors/laravel.d.ts +10 -0
- package/dist/core/ingestion/route-extractors/laravel.js +88 -9
- package/dist/core/ingestion/scope-extractor-bridge.d.ts +2 -1
- package/dist/core/ingestion/scope-extractor-bridge.js +2 -2
- package/dist/core/ingestion/scope-extractor.js +13 -0
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +181 -15
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +21 -10
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +10 -2
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +7 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +58 -6
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +24 -5
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +68 -1
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +189 -29
- package/dist/core/ingestion/scope-resolution/passes/imported-return-types.js +21 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1 -1
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +8 -11
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +171 -50
- package/dist/core/ingestion/scope-resolution/pipeline/registry.d.ts +3 -4
- package/dist/core/ingestion/scope-resolution/pipeline/registry.js +9 -4
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +28 -5
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +191 -24
- package/dist/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +31 -0
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +72 -0
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +440 -39
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +18 -2
- package/dist/core/ingestion/scope-resolution/workspace-index.js +94 -7
- package/dist/core/ingestion/tree-sitter-queries.d.ts +14 -14
- package/dist/core/ingestion/tree-sitter-queries.js +380 -158
- package/dist/core/ingestion/ts-js-hoc-utils.d.ts +12 -0
- package/dist/core/ingestion/ts-js-hoc-utils.js +105 -0
- package/dist/core/ingestion/type-env.d.ts +2 -1
- package/dist/core/ingestion/type-env.js +6 -8
- package/dist/core/ingestion/type-extractors/c-cpp.js +8 -10
- package/dist/core/ingestion/type-extractors/csharp.js +18 -34
- package/dist/core/ingestion/type-extractors/go.js +2 -10
- package/dist/core/ingestion/type-extractors/jvm.js +6 -5
- package/dist/core/ingestion/type-extractors/php.js +1 -1
- package/dist/core/ingestion/type-extractors/python.js +1 -1
- package/dist/core/ingestion/type-extractors/ruby.js +2 -2
- package/dist/core/ingestion/type-extractors/rust.js +0 -16
- package/dist/core/ingestion/type-extractors/shared.d.ts +2 -2
- package/dist/core/ingestion/type-extractors/shared.js +25 -11
- package/dist/core/ingestion/type-extractors/swift.js +5 -5
- package/dist/core/ingestion/type-extractors/types.d.ts +1 -1
- package/dist/core/ingestion/type-extractors/typescript.js +1 -1
- package/dist/core/ingestion/utils/ast-helpers.d.ts +119 -1
- package/dist/core/ingestion/utils/ast-helpers.js +260 -13
- package/dist/core/ingestion/utils/callable-labels.d.ts +13 -0
- package/dist/core/ingestion/utils/callable-labels.js +14 -0
- package/dist/core/ingestion/utils/deferred-resolution-profile.d.ts +10 -0
- package/dist/core/ingestion/utils/deferred-resolution-profile.js +30 -0
- package/dist/core/ingestion/utils/heap-probe.d.ts +20 -0
- package/dist/core/ingestion/utils/heap-probe.js +39 -0
- package/dist/core/ingestion/utils/heritage-marker.d.ts +33 -0
- package/dist/core/ingestion/utils/heritage-marker.js +41 -0
- package/dist/core/ingestion/utils/qualified-name.d.ts +37 -0
- package/dist/core/ingestion/utils/qualified-name.js +67 -0
- package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +49 -0
- package/dist/core/ingestion/variable-extractors/configs/dart.js +76 -62
- package/dist/core/ingestion/variable-extractors/configs/go.js +74 -7
- package/dist/core/ingestion/variable-extractors/configs/jvm.js +35 -8
- package/dist/core/ingestion/variable-extractors/generic.js +40 -12
- package/dist/core/ingestion/variable-types.d.ts +9 -0
- package/dist/core/ingestion/vue-sfc-extractor.d.ts +97 -7
- package/dist/core/ingestion/vue-sfc-extractor.js +433 -11
- package/dist/core/ingestion/workers/parse-worker.d.ts +0 -11
- package/dist/core/ingestion/workers/parse-worker.js +358 -187
- package/dist/core/ingestion/workers/worker-pool.d.ts +78 -9
- package/dist/core/ingestion/workers/worker-pool.js +346 -49
- package/dist/core/lbug/csv-generator.js +20 -2
- package/dist/core/lbug/lbug-adapter.js +29 -10
- package/dist/core/lbug/native-check.js +17 -5
- package/dist/core/lbug/pool-adapter.d.ts +0 -19
- package/dist/core/lbug/pool-adapter.js +40 -77
- package/dist/core/lbug/query-result-utils.d.ts +19 -0
- package/dist/core/lbug/query-result-utils.js +28 -0
- package/dist/core/run-analyze.d.ts +9 -2
- package/dist/core/run-analyze.js +24 -3
- package/dist/core/tree-sitter/parser-loader.d.ts +13 -0
- package/dist/core/tree-sitter/parser-loader.js +4 -0
- package/dist/core/tree-sitter/safe-parse.d.ts +70 -3
- package/dist/core/tree-sitter/safe-parse.js +214 -11
- package/dist/core/wiki/generator.js +13 -5
- package/dist/core/wiki/graph-queries.d.ts +3 -0
- package/dist/core/wiki/graph-queries.js +9 -1
- package/dist/core/wiki/llm-client.d.ts +1 -1
- package/dist/core/wiki/llm-client.js +7 -2
- package/dist/core/wiki/local-cli-client.d.ts +2 -1
- package/dist/core/wiki/local-cli-client.js +62 -4
- package/dist/mcp/compatible-stdio-transport.d.ts +3 -0
- package/dist/mcp/compatible-stdio-transport.js +22 -0
- package/dist/mcp/core/embedder.d.ts +1 -1
- package/dist/mcp/core/embedder.js +13 -1
- package/dist/mcp/local/local-backend.d.ts +37 -5
- package/dist/mcp/local/local-backend.js +227 -129
- package/dist/mcp/resources.js +3 -3
- package/dist/mcp/server.js +9 -1
- package/dist/storage/git.d.ts +11 -0
- package/dist/storage/git.js +30 -0
- package/dist/storage/parse-cache.d.ts +23 -1
- package/dist/storage/parse-cache.js +138 -32
- package/dist/storage/parsedfile-store.d.ts +142 -0
- package/dist/storage/parsedfile-store.js +367 -0
- package/dist/storage/repo-manager.d.ts +2 -1
- package/dist/storage/scope-index-store.d.ts +114 -0
- package/dist/storage/scope-index-store.js +236 -0
- package/dist/types/pipeline.d.ts +6 -3
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +2 -1
- package/hooks/claude/gitnexus-hook.cjs +2 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +323 -0
- package/package.json +4 -5
- package/scripts/bench-scope-resolution.ts +1 -3
- package/scripts/cross-platform-tests.ts +4 -1
- package/skills/gitnexus-cli.md +8 -6
- package/skills/gitnexus-debugging.md +15 -15
- package/skills/gitnexus-exploring.md +11 -11
- package/skills/gitnexus-guide.md +1 -1
- package/skills/gitnexus-impact-analysis.md +10 -10
- package/skills/gitnexus-pr-review.md +19 -19
- package/skills/gitnexus-refactoring.md +25 -25
- package/web/assets/{agent-BRX-afm3.js → agent-EkX7webX.js} +156 -131
- package/web/assets/{architectureDiagram-UL44E2DR-B1oYB8-c.js → architectureDiagram-UL44E2DR-BoczH8cv.js} +1 -1
- package/web/assets/{chunk-LCXTWHL2-SPC6pgWI.js → chunk-LCXTWHL2-By5HB3b-.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-DZXr4Yv3.js → chunk-RG4AUYOV-BQE_DkpL.js} +1 -1
- package/web/assets/{classDiagram-KGZ6W3CR-BqpOj8L9.js → classDiagram-KGZ6W3CR-Dj_02GUH.js} +1 -1
- package/web/assets/{classDiagram-v2-72OJOZXJ-FmElywK2.js → classDiagram-v2-72OJOZXJ-D-NArMpf.js} +1 -1
- package/web/assets/{diagram-3NCE3AQN-BWtJXMDq.js → diagram-3NCE3AQN-VXtXDO95.js} +1 -1
- package/web/assets/{diagram-GF46GFSD-Hh-fChxU.js → diagram-GF46GFSD-B1qab2Ah.js} +1 -1
- package/web/assets/{diagram-QXG6HAR7-DYeQHxGU.js → diagram-QXG6HAR7-BSCHGzzT.js} +1 -1
- package/web/assets/{diagram-WEQXMOUZ-DYGU4T0y.js → diagram-WEQXMOUZ-DHtknmNT.js} +1 -1
- package/web/assets/{erDiagram-L5TCEMPS-bN3wlP2A.js → erDiagram-L5TCEMPS-Db-IYTmm.js} +1 -1
- package/web/assets/{flowDiagram-H6V6AXG4-YACVtF3-.js → flowDiagram-H6V6AXG4-BHDoyVoW.js} +1 -1
- package/web/assets/{index-BhnAdWTt.js → index-BR0IhgbR.js} +10 -10
- package/web/assets/{infoDiagram-3YFTVSEB-BWBzD28-.js → infoDiagram-3YFTVSEB-6h8wbWEe.js} +1 -1
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-B8qYT-j9.js → ishikawaDiagram-BNXS4ZKH-Dx2OkPk1.js} +1 -1
- package/web/assets/{kanban-definition-75IXJCU3-BeoPr5Tl.js → kanban-definition-75IXJCU3-CIIEZfqV.js} +1 -1
- package/web/assets/{mindmap-definition-2TDM6QVE-CdLLN_so.js → mindmap-definition-2TDM6QVE-DUAqydRq.js} +1 -1
- package/web/assets/{pieDiagram-CU6KROY3-DEd2a_k_.js → pieDiagram-CU6KROY3-BntYuYZa.js} +1 -1
- package/web/assets/{requirementDiagram-JXO7QTGE-QNeTo5C_.js → requirementDiagram-JXO7QTGE-QCD6I29n.js} +1 -1
- package/web/assets/{sequenceDiagram-VS2MUI6T-BHC7q7yJ.js → sequenceDiagram-VS2MUI6T-DScFwLz2.js} +1 -1
- package/web/assets/{stateDiagram-7D4R322I-KONnc2Px.js → stateDiagram-7D4R322I-AkRAm6Hl.js} +1 -1
- package/web/assets/{stateDiagram-v2-36443NZ5-C2QfuMlu.js → stateDiagram-v2-36443NZ5-BCK1vigR.js} +1 -1
- package/web/assets/{timeline-definition-O6YCAMPW-D4t4NJx1.js → timeline-definition-O6YCAMPW-BvpIVXjX.js} +1 -1
- package/web/assets/{vennDiagram-MWXL3ELB-6bctC9Yg.js → vennDiagram-MWXL3ELB-BYGWk6dK.js} +1 -1
- package/web/assets/{wardleyDiagram-CUQ6CDDI-BPZYNTvC.js → wardleyDiagram-CUQ6CDDI-Dk1z7H2T.js} +1 -1
- package/web/assets/{xychartDiagram-N2JHSOCM-lBI9O6DW.js → xychartDiagram-N2JHSOCM-2N6NCSWN.js} +1 -1
- package/web/index.html +1 -1
- package/dist/_shared/scope-resolution/shadow/aggregate.d.ts +0 -63
- package/dist/_shared/scope-resolution/shadow/aggregate.d.ts.map +0 -1
- package/dist/_shared/scope-resolution/shadow/aggregate.js +0 -122
- package/dist/_shared/scope-resolution/shadow/aggregate.js.map +0 -1
- package/dist/_shared/scope-resolution/shadow/diff.d.ts +0 -59
- package/dist/_shared/scope-resolution/shadow/diff.d.ts.map +0 -1
- package/dist/_shared/scope-resolution/shadow/diff.js +0 -79
- package/dist/_shared/scope-resolution/shadow/diff.js.map +0 -1
- package/dist/core/ingestion/ast-cache.d.ts +0 -26
- package/dist/core/ingestion/ast-cache.js +0 -48
- package/dist/core/ingestion/heritage-extractors/configs/go.d.ts +0 -13
- package/dist/core/ingestion/heritage-extractors/configs/go.js +0 -20
- package/dist/core/ingestion/heritage-extractors/configs/ruby.d.ts +0 -18
- package/dist/core/ingestion/heritage-extractors/configs/ruby.js +0 -65
- package/dist/core/ingestion/heritage-extractors/generic.d.ts +0 -23
- package/dist/core/ingestion/heritage-extractors/generic.js +0 -47
- package/dist/core/ingestion/heritage-processor.d.ts +0 -54
- package/dist/core/ingestion/heritage-processor.js +0 -367
- package/dist/core/ingestion/heritage-types.d.ts +0 -73
- package/dist/core/ingestion/heritage-types.js +0 -2
- package/dist/core/ingestion/import-processor.d.ts +0 -23
- package/dist/core/ingestion/import-processor.js +0 -377
- package/dist/core/ingestion/model/heritage-map.d.ts +0 -105
- package/dist/core/ingestion/model/heritage-map.js +0 -294
- package/dist/core/ingestion/model/resolution-context.d.ts +0 -93
- package/dist/core/ingestion/model/resolution-context.js +0 -337
- package/dist/core/ingestion/named-bindings/csharp.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/csharp.js +0 -37
- package/dist/core/ingestion/named-bindings/java.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/java.js +0 -29
- package/dist/core/ingestion/named-bindings/kotlin.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/kotlin.js +0 -36
- package/dist/core/ingestion/named-bindings/php.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/php.js +0 -61
- package/dist/core/ingestion/named-bindings/python.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/python.js +0 -49
- package/dist/core/ingestion/named-bindings/rust.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/rust.js +0 -66
- package/dist/core/ingestion/named-bindings/types.d.ts +0 -16
- package/dist/core/ingestion/named-bindings/types.js +0 -6
- package/dist/core/ingestion/named-bindings/typescript.d.ts +0 -3
- package/dist/core/ingestion/named-bindings/typescript.js +0 -58
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +0 -17
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +0 -209
- package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +0 -22
- package/dist/core/ingestion/pipeline-phases/orm-extraction.js +0 -92
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +0 -70
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +0 -312
- package/dist/core/ingestion/registry-primary-flag.d.ts +0 -89
- package/dist/core/ingestion/registry-primary-flag.js +0 -122
- package/dist/core/ingestion/shadow-harness.d.ts +0 -113
- package/dist/core/ingestion/shadow-harness.js +0 -148
- package/dist/core/ingestion/utils/ruby-self-call.d.ts +0 -52
- package/dist/core/ingestion/utils/ruby-self-call.js +0 -59
- package/scripts/ci-list-migrated-languages.ts +0 -24
- package/scripts/run-parity.ts +0 -128
|
@@ -78,6 +78,29 @@ export function markCppAnonymousNamespaceRange(filePath, range) {
|
|
|
78
78
|
export function isCppAnonymousNamespaceScope(scopeId) {
|
|
79
79
|
return anonymousNamespaceScopeIds.has(scopeId);
|
|
80
80
|
}
|
|
81
|
+
/** Snapshot this file's file-local-linkage capture state for the side-channel. */
|
|
82
|
+
export function collectCppFileLocalSideChannel(filePath) {
|
|
83
|
+
const names = fileLocalNames.get(filePath);
|
|
84
|
+
const anon = anonymousNamespaceRangesByFile.get(filePath);
|
|
85
|
+
return {
|
|
86
|
+
fileLocalNames: names === undefined ? [] : [...names],
|
|
87
|
+
anonymousNamespaceRanges: anon === undefined ? [] : [...anon],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Restore this file's file-local-linkage capture state from the side-channel. */
|
|
91
|
+
export function applyCppFileLocalSideChannel(filePath, data) {
|
|
92
|
+
for (const name of data.fileLocalNames)
|
|
93
|
+
markFileLocal(filePath, name);
|
|
94
|
+
if (data.anonymousNamespaceRanges.length > 0) {
|
|
95
|
+
let set = anonymousNamespaceRangesByFile.get(filePath);
|
|
96
|
+
if (set === undefined) {
|
|
97
|
+
set = new Set();
|
|
98
|
+
anonymousNamespaceRangesByFile.set(filePath, set);
|
|
99
|
+
}
|
|
100
|
+
for (const r of data.anonymousNamespaceRanges)
|
|
101
|
+
set.add(r);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
81
104
|
/** Clear tracked file-local names (call at start of each resolution pass). */
|
|
82
105
|
export function clearFileLocalNames() {
|
|
83
106
|
fileLocalNames.clear();
|
|
@@ -205,8 +228,33 @@ export function isCppDefGloballyVisible(filePath, nodeId) {
|
|
|
205
228
|
* does, mirror this filter or harden registration so class/namespace
|
|
206
229
|
* members never enter `localDefs` unqualified.
|
|
207
230
|
*/
|
|
231
|
+
/**
|
|
232
|
+
* Per-pass memo: `moduleScope` → owning `ParsedFile`, keyed on the
|
|
233
|
+
* `parsedFiles` array identity. The shared finalize Phase-4 loop calls
|
|
234
|
+
* `expandsWildcardTo` (→ this) ONCE PER RESOLVED `#include` edge with the same
|
|
235
|
+
* `parsedFiles` reference; the old `parsedFiles.find(...)` was therefore O(F)
|
|
236
|
+
* per edge → O(R·F) overall (at kernel scale the ~25–30k `.h` headers are
|
|
237
|
+
* classified C++, so this fires hard — the C twin in `c/static-linkage.ts`).
|
|
238
|
+
* Building the lookup once collapses it to O(R+F). `WeakMap`-keyed so it is
|
|
239
|
+
* reclaimed with the pass (no cross-pass staleness; mirrors
|
|
240
|
+
* {@link clearFileLocalNames}).
|
|
241
|
+
*/
|
|
242
|
+
const moduleScopeIndexByPass = new WeakMap();
|
|
243
|
+
function moduleScopeIndex(parsedFiles) {
|
|
244
|
+
let index = moduleScopeIndexByPass.get(parsedFiles);
|
|
245
|
+
if (index === undefined) {
|
|
246
|
+
index = new Map();
|
|
247
|
+
// First-wins to preserve `Array.find` semantics (returns the first match).
|
|
248
|
+
for (const p of parsedFiles) {
|
|
249
|
+
if (!index.has(p.moduleScope))
|
|
250
|
+
index.set(p.moduleScope, p);
|
|
251
|
+
}
|
|
252
|
+
moduleScopeIndexByPass.set(parsedFiles, index);
|
|
253
|
+
}
|
|
254
|
+
return index;
|
|
255
|
+
}
|
|
208
256
|
export function expandCppWildcardNames(targetModuleScope, parsedFiles) {
|
|
209
|
-
const target = parsedFiles.
|
|
257
|
+
const target = moduleScopeIndex(parsedFiles).get(targetModuleScope);
|
|
210
258
|
if (target === undefined)
|
|
211
259
|
return [];
|
|
212
260
|
// Build nodeId → owning Scope map from the structural scope tree.
|
|
@@ -4,6 +4,13 @@ import { type SyntaxNode } from '../../utils/ast-helpers.js';
|
|
|
4
4
|
* Decompose a `preproc_include` node into a CaptureMatch with structured
|
|
5
5
|
* import captures. C++ #include maps to a wildcard import (all symbols
|
|
6
6
|
* from the header are visible). Identical to C's splitCInclude.
|
|
7
|
+
*
|
|
8
|
+
* Only literal include paths are emitted as import sources:
|
|
9
|
+
* #include <map> → system_lib_string
|
|
10
|
+
* #include "User.h" → string_literal
|
|
11
|
+
* A computed include like `#include HEADER_MACRO` carries an `identifier`
|
|
12
|
+
* path node (the macro name, not a header path); we skip it so it never
|
|
13
|
+
* becomes a garbage literal import source (issue #1919 F5).
|
|
7
14
|
*/
|
|
8
15
|
export declare function splitCppInclude(node: SyntaxNode): CaptureMatch | null;
|
|
9
16
|
/**
|
|
@@ -3,6 +3,13 @@ import { nodeToCapture, syntheticCapture } from '../../utils/ast-helpers.js';
|
|
|
3
3
|
* Decompose a `preproc_include` node into a CaptureMatch with structured
|
|
4
4
|
* import captures. C++ #include maps to a wildcard import (all symbols
|
|
5
5
|
* from the header are visible). Identical to C's splitCInclude.
|
|
6
|
+
*
|
|
7
|
+
* Only literal include paths are emitted as import sources:
|
|
8
|
+
* #include <map> → system_lib_string
|
|
9
|
+
* #include "User.h" → string_literal
|
|
10
|
+
* A computed include like `#include HEADER_MACRO` carries an `identifier`
|
|
11
|
+
* path node (the macro name, not a header path); we skip it so it never
|
|
12
|
+
* becomes a garbage literal import source (issue #1919 F5).
|
|
6
13
|
*/
|
|
7
14
|
export function splitCppInclude(node) {
|
|
8
15
|
const pathNode = node.childForFieldName?.('path') ?? null;
|
|
@@ -20,6 +27,11 @@ export function splitCppInclude(node) {
|
|
|
20
27
|
return buildIncludeCapture(node, pathNode);
|
|
21
28
|
}
|
|
22
29
|
function buildIncludeCapture(node, pathNode) {
|
|
30
|
+
// Skip computed includes (`#include MACRO`) — the path is an `identifier`,
|
|
31
|
+
// not a literal header path. Emitting it would create a garbage import.
|
|
32
|
+
if (pathNode.type !== 'string_literal' && pathNode.type !== 'system_lib_string') {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
23
35
|
let raw;
|
|
24
36
|
if (pathNode.type === 'string_literal') {
|
|
25
37
|
const content = pathNode.namedChildren.find((c) => c.type === 'string_content');
|
|
@@ -9,3 +9,4 @@ export { cppMergeBindings } from './merge-bindings.js';
|
|
|
9
9
|
export { cppBindingScopeFor, cppImportOwningScope, cppReceiverBinding } from './simple-hooks.js';
|
|
10
10
|
export { resolveCppImportTarget } from './import-target.js';
|
|
11
11
|
export { markFileLocal, isFileLocal, clearFileLocalNames, expandCppWildcardNames, } from './file-local-linkage.js';
|
|
12
|
+
export { collectCppCaptureSideChannel, applyCppCaptureSideChannel, } from './capture-side-channel.js';
|
|
@@ -9,3 +9,4 @@ export { cppMergeBindings } from './merge-bindings.js';
|
|
|
9
9
|
export { cppBindingScopeFor, cppImportOwningScope, cppReceiverBinding } from './simple-hooks.js';
|
|
10
10
|
export { resolveCppImportTarget } from './import-target.js';
|
|
11
11
|
export { markFileLocal, isFileLocal, clearFileLocalNames, expandCppWildcardNames, } from './file-local-linkage.js';
|
|
12
|
+
export { collectCppCaptureSideChannel, applyCppCaptureSideChannel, } from './capture-side-channel.js';
|
|
@@ -38,6 +38,14 @@ interface RangeKey {
|
|
|
38
38
|
* Called from `emitCppScopeCaptures` when the tree-sitter AST shows an
|
|
39
39
|
* `inline` keyword child on `namespace_definition`. */
|
|
40
40
|
export declare function markCppInlineNamespaceRange(filePath: string, range: RangeKey): void;
|
|
41
|
+
/** Snapshot this file's captured inline-namespace ranges for the worker→main
|
|
42
|
+
* side-channel (#1983). `populateCppInlineNamespaceScopes` (in `populateOwners`)
|
|
43
|
+
* later resolves these range keys to ScopeIds on the main thread, so only the
|
|
44
|
+
* capture-time ranges need to cross the boundary. Returns the rangeKey strings
|
|
45
|
+
* as a plain array (empty when this file recorded none). */
|
|
46
|
+
export declare function collectCppInlineNamespaceSideChannel(filePath: string): readonly string[];
|
|
47
|
+
/** Restore this file's captured inline-namespace ranges from the side-channel. */
|
|
48
|
+
export declare function applyCppInlineNamespaceSideChannel(filePath: string, ranges: readonly string[]): void;
|
|
41
49
|
/** Clear all inline-namespace state. Called from `clearFileLocalNames`. */
|
|
42
50
|
export declare function clearCppInlineNamespaces(): void;
|
|
43
51
|
/** Resolve captured ranges to actual ScopeIds by matching scope ranges
|
|
@@ -44,6 +44,27 @@ export function markCppInlineNamespaceRange(filePath, range) {
|
|
|
44
44
|
}
|
|
45
45
|
set.add(rangeKey(range));
|
|
46
46
|
}
|
|
47
|
+
/** Snapshot this file's captured inline-namespace ranges for the worker→main
|
|
48
|
+
* side-channel (#1983). `populateCppInlineNamespaceScopes` (in `populateOwners`)
|
|
49
|
+
* later resolves these range keys to ScopeIds on the main thread, so only the
|
|
50
|
+
* capture-time ranges need to cross the boundary. Returns the rangeKey strings
|
|
51
|
+
* as a plain array (empty when this file recorded none). */
|
|
52
|
+
export function collectCppInlineNamespaceSideChannel(filePath) {
|
|
53
|
+
const set = inlineNamespaceRangesByFile.get(filePath);
|
|
54
|
+
return set === undefined ? [] : [...set];
|
|
55
|
+
}
|
|
56
|
+
/** Restore this file's captured inline-namespace ranges from the side-channel. */
|
|
57
|
+
export function applyCppInlineNamespaceSideChannel(filePath, ranges) {
|
|
58
|
+
if (ranges.length === 0)
|
|
59
|
+
return;
|
|
60
|
+
let set = inlineNamespaceRangesByFile.get(filePath);
|
|
61
|
+
if (set === undefined) {
|
|
62
|
+
set = new Set();
|
|
63
|
+
inlineNamespaceRangesByFile.set(filePath, set);
|
|
64
|
+
}
|
|
65
|
+
for (const r of ranges)
|
|
66
|
+
set.add(r);
|
|
67
|
+
}
|
|
47
68
|
/** Clear all inline-namespace state. Called from `clearFileLocalNames`. */
|
|
48
69
|
export function clearCppInlineNamespaces() {
|
|
49
70
|
inlineNamespaceRangesByFile.clear();
|
|
@@ -47,6 +47,12 @@ const CPP_SCOPE_QUERY = `
|
|
|
47
47
|
(template_argument_list) @declaration.template-arguments)
|
|
48
48
|
body: (field_declaration_list)) @declaration.struct
|
|
49
49
|
|
|
50
|
+
;; Declarations — struct (typedef struct { ... } Name)
|
|
51
|
+
(type_definition
|
|
52
|
+
type: (struct_specifier
|
|
53
|
+
body: (field_declaration_list))
|
|
54
|
+
declarator: (type_identifier) @declaration.name) @declaration.struct
|
|
55
|
+
|
|
50
56
|
;; ─── Declarations — class / struct inside template_declaration ───────
|
|
51
57
|
(template_declaration
|
|
52
58
|
(class_specifier
|
|
@@ -76,6 +82,12 @@ const CPP_SCOPE_QUERY = `
|
|
|
76
82
|
(enum_specifier
|
|
77
83
|
name: (type_identifier) @declaration.name) @declaration.enum
|
|
78
84
|
|
|
85
|
+
;; ─── Declarations — enum (typedef enum { ... } Name) ─────────────────
|
|
86
|
+
(type_definition
|
|
87
|
+
type: (enum_specifier
|
|
88
|
+
body: (enumerator_list))
|
|
89
|
+
declarator: (type_identifier) @declaration.name) @declaration.enum
|
|
90
|
+
|
|
79
91
|
;; ─── Declarations — enum constants ───────────────────────────────────
|
|
80
92
|
(enumerator
|
|
81
93
|
name: (identifier) @declaration.name) @declaration.const
|
|
@@ -260,6 +272,15 @@ const CPP_SCOPE_QUERY = `
|
|
|
260
272
|
declarator: (init_declarator
|
|
261
273
|
declarator: (identifier) @declaration.name)) @declaration.variable
|
|
262
274
|
|
|
275
|
+
;; ─── Declarations — variables (without initializer) ─────────────────
|
|
276
|
+
;; Covers non-leading declarators in mixed declaration lists.
|
|
277
|
+
(declaration
|
|
278
|
+
declarator: (identifier) @declaration.name) @declaration.variable
|
|
279
|
+
|
|
280
|
+
(declaration
|
|
281
|
+
declarator: (pointer_declarator
|
|
282
|
+
declarator: (identifier) @declaration.name)) @declaration.variable
|
|
283
|
+
|
|
263
284
|
;; ─── Declarations — macro definitions ───────────────────────────────
|
|
264
285
|
(preproc_def
|
|
265
286
|
name: (identifier) @declaration.name) @declaration.macro
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getCppParser } from './query.js';
|
|
2
2
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
3
|
-
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
3
|
+
import { parseSourceSafe, ParseTimeoutError } from '../../../tree-sitter/safe-parse.js';
|
|
4
|
+
import { logger } from '../../../logger.js';
|
|
4
5
|
/**
|
|
5
6
|
* Populate range-for loop variable type bindings for C++.
|
|
6
7
|
*
|
|
@@ -20,10 +21,24 @@ export function populateCppRangeBindings(parsedFiles, _indexes, ctx) {
|
|
|
20
21
|
if (sourceText === undefined)
|
|
21
22
|
continue;
|
|
22
23
|
const cachedTree = ctx.treeCache?.get(parsed.filePath);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
let tree;
|
|
25
|
+
if (cachedTree !== undefined) {
|
|
26
|
+
tree = cachedTree;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
try {
|
|
30
|
+
tree = parseSourceSafe(parser, sourceText, undefined, {
|
|
31
|
+
bufferSize: getTreeSitterBufferSize(sourceText),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof ParseTimeoutError) {
|
|
36
|
+
logger.warn({ file: parsed.filePath }, 'cpp range-binding: parse timed out, skipping file');
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
27
42
|
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
28
43
|
if (moduleScope === undefined)
|
|
29
44
|
continue;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { findClassBindingInScope, findEnclosingClassDef, } from '../../scope-resolution/scope/walkers.js';
|
|
2
2
|
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
3
|
import { buildMro, defaultLinearize } from '../../scope-resolution/passes/mro.js';
|
|
4
|
-
import { populateClassOwnedMembers } from '../../scope-resolution/scope/walkers.js';
|
|
4
|
+
import { populateClassOwnedMembers, tagNamespacePrefixes, } from '../../scope-resolution/scope/walkers.js';
|
|
5
5
|
import { cppProvider } from '../c-cpp.js';
|
|
6
6
|
import { cppArityCompatibility } from './arity.js';
|
|
7
7
|
import { cppConversionRank } from './conversion-rank.js';
|
|
@@ -11,10 +11,38 @@ import { scanCppHeaderFiles } from './header-scan.js';
|
|
|
11
11
|
import { expandCppWildcardNames, isFileLocal, clearFileLocalNames, populateCppAnonymousNamespaceScopes, populateCppNonGloballyVisible, isCppDefGloballyVisible, } from './file-local-linkage.js';
|
|
12
12
|
import { populateCppDependentBases, clearCppDependentBases, isCppDependentBaseMember, } from './two-phase-lookup.js';
|
|
13
13
|
import { populateCppAssociatedNamespaces, clearCppAdlState, pickCppAdlCandidates } from './adl.js';
|
|
14
|
+
import { applyCppCaptureSideChannel } from './capture-side-channel.js';
|
|
14
15
|
import { clearCppInlineNamespaces, populateCppInlineNamespaceScopes, resolveCppQualifiedNamespaceMember, } from './inline-namespaces.js';
|
|
15
16
|
import { populateCppRangeBindings } from './range-bindings.js';
|
|
16
17
|
import { cppConstraintCompatibility } from './constraint-filter.js';
|
|
17
18
|
import { clearCppUserDefinedConversions, populateCppUserDefinedConversions, } from './user-defined-conversions.js';
|
|
19
|
+
/**
|
|
20
|
+
* Per-pass memo of the augmented `#include`-resolution file set
|
|
21
|
+
* (`allFilePaths` ∪ header paths), keyed on the two stable source sets.
|
|
22
|
+
* `resolveImportTarget` is called once per C++ `#include`; the old code rebuilt
|
|
23
|
+
* a fresh ~F-entry `Set` on every call AND defeated the shared
|
|
24
|
+
* `resolveCImportTarget` suffix-index memo (in `c/import-target.ts`) by handing
|
|
25
|
+
* it a new set identity each time. Both inputs are stable per pass, so the
|
|
26
|
+
* union is built once and reused. `WeakMap`-keyed → reclaimed with the pass.
|
|
27
|
+
* (Twin of the C resolver's `augmentedFilePaths`.)
|
|
28
|
+
*/
|
|
29
|
+
const augmentedPathsByPass = new WeakMap();
|
|
30
|
+
function augmentedFilePaths(allFilePaths, headerPaths) {
|
|
31
|
+
let byHeaders = augmentedPathsByPass.get(allFilePaths);
|
|
32
|
+
if (byHeaders === undefined) {
|
|
33
|
+
byHeaders = new WeakMap();
|
|
34
|
+
augmentedPathsByPass.set(allFilePaths, byHeaders);
|
|
35
|
+
}
|
|
36
|
+
let augmented = byHeaders.get(headerPaths);
|
|
37
|
+
if (augmented === undefined) {
|
|
38
|
+
const set = new Set(allFilePaths);
|
|
39
|
+
for (const h of headerPaths)
|
|
40
|
+
set.add(h);
|
|
41
|
+
augmented = set;
|
|
42
|
+
byHeaders.set(headerPaths, augmented);
|
|
43
|
+
}
|
|
44
|
+
return augmented;
|
|
45
|
+
}
|
|
18
46
|
/**
|
|
19
47
|
* C++ `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
|
|
20
48
|
* the generic `runScopeResolution` orchestrator (RFC #909 Ring 3).
|
|
@@ -49,10 +77,7 @@ export const cppScopeResolver = {
|
|
|
49
77
|
// detection but are importable from .cpp files via #include.
|
|
50
78
|
const headerPaths = resolutionConfig;
|
|
51
79
|
if (headerPaths !== undefined && headerPaths.size > 0) {
|
|
52
|
-
|
|
53
|
-
for (const h of headerPaths)
|
|
54
|
-
augmented.add(h);
|
|
55
|
-
return resolveCppImportTarget(targetRaw, fromFile, augmented);
|
|
80
|
+
return resolveCppImportTarget(targetRaw, fromFile, augmentedFilePaths(allFilePaths, headerPaths));
|
|
56
81
|
}
|
|
57
82
|
return resolveCppImportTarget(targetRaw, fromFile, allFilePaths);
|
|
58
83
|
},
|
|
@@ -67,8 +92,30 @@ export const cppScopeResolver = {
|
|
|
67
92
|
// `'unknown'` keeps the candidate, preserving "degrade not lie".
|
|
68
93
|
constraintCompatibility: cppConstraintCompatibility,
|
|
69
94
|
buildMro: (graph, parsedFiles, nodeLookup) => buildMro(graph, parsedFiles, nodeLookup, defaultLinearize),
|
|
95
|
+
// Worker-boundary restore (see `ScopeResolver.applyCaptureSideChannel`).
|
|
96
|
+
// `emitCppScopeCaptures` records per-file ADL call-site arg shapes
|
|
97
|
+
// (`markCppAdlSiteArgs`/`markCppAdlSiteNoAdl`), inline-/anonymous-namespace
|
|
98
|
+
// ranges (`markCppInlineNamespaceRange`/`markCppAnonymousNamespaceRange`),
|
|
99
|
+
// dependent-base names (`markCppDependentBase`/`markCppDependentPackBase`),
|
|
100
|
+
// and file-local linkage (`markFileLocal`) into module-level maps as a SIDE
|
|
101
|
+
// EFFECT — none of it is serialized onto the returned ParsedFile's scopes/defs.
|
|
102
|
+
// On the worker path those marks are populated in the worker process and lost
|
|
103
|
+
// across the MessageChannel / disk store; the main thread reuses the
|
|
104
|
+
// serialized ParsedFile and skips `extractParsedFile`, so `populateOwners` +
|
|
105
|
+
// the ADL / two-phase-lookup passes would see empty maps and emit zero edges.
|
|
106
|
+
// The worker stashed a plain-data snapshot on `parsed.captureSideChannel` via
|
|
107
|
+
// `cppProvider.collectCaptureSideChannel`; this restores it into the module
|
|
108
|
+
// maps WITHOUT any tree-sitter re-parse (the #1983 fix — the old re-parse
|
|
109
|
+
// replay re-OOM'd huge `.h`/`.cpp` repos). The freshly-extracted leg never
|
|
110
|
+
// calls this — its marks were just populated in this process.
|
|
111
|
+
applyCaptureSideChannel: applyCppCaptureSideChannel,
|
|
70
112
|
populateOwners: (parsed) => {
|
|
71
113
|
populateClassOwnedMembers(parsed);
|
|
114
|
+
// #1982: tag namespace-nested defs with their enclosing-namespace prefix so
|
|
115
|
+
// resolveDefGraphId can map them to the namespace-qualified structure-phase
|
|
116
|
+
// node (`NS.A.Inner`) instead of collapsing same-tail nested bases via the
|
|
117
|
+
// simpleKey fallback. Does NOT change qualifiedName (resolution unaffected).
|
|
118
|
+
tagNamespacePrefixes(parsed);
|
|
72
119
|
// Resolve inline- and anonymous-namespace ranges (recorded at capture
|
|
73
120
|
// time) to ScopeIds BEFORE `populateCppNonGloballyVisible` runs, so
|
|
74
121
|
// both exemptions see the populated Sets.
|
|
@@ -44,6 +44,26 @@ import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexe
|
|
|
44
44
|
* `populateCppDependentBases`).
|
|
45
45
|
*/
|
|
46
46
|
export declare function markCppDependentBase(filePath: string, className: string, baseName: string, qualifier?: string): void;
|
|
47
|
+
export declare function markCppDependentPackBase(filePath: string, className: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Plain-data, JSON-serializable snapshot of the per-file capture-time
|
|
50
|
+
* two-phase-lookup state. Carried on `ParsedFile.captureSideChannel` across the
|
|
51
|
+
* worker→main boundary (#1983). The resolved `dependentBaseNodeIds` index is
|
|
52
|
+
* rebuilt by `populateCppDependentBases` (workspace pass) after all files have
|
|
53
|
+
* their `populateOwners` applied, so only the two capture-time maps cross.
|
|
54
|
+
*
|
|
55
|
+
* Nested `Map`/`Set` are flattened to arrays here so the snapshot stays plain
|
|
56
|
+
* JSON (avoids relying on the parsedfile-store's Map/Set replacer for nested
|
|
57
|
+
* structures): `dependentBases` is `[className, [baseName, qualifiers[]][]][]`.
|
|
58
|
+
*/
|
|
59
|
+
export interface CppTwoPhaseSideChannel {
|
|
60
|
+
readonly dependentBases: readonly [string, readonly [string, readonly string[]][]][];
|
|
61
|
+
readonly dependentPackBaseClasses: readonly string[];
|
|
62
|
+
}
|
|
63
|
+
/** Snapshot this file's two-phase-lookup capture state for the side-channel. */
|
|
64
|
+
export declare function collectCppTwoPhaseSideChannel(filePath: string): CppTwoPhaseSideChannel;
|
|
65
|
+
/** Restore this file's two-phase-lookup capture state from the side-channel. */
|
|
66
|
+
export declare function applyCppTwoPhaseSideChannel(filePath: string, data: CppTwoPhaseSideChannel): void;
|
|
47
67
|
/** Clear two-phase-lookup state. Called from `clearFileLocalNames`. */
|
|
48
68
|
export declare function clearCppDependentBases(): void;
|
|
49
69
|
/**
|
|
@@ -41,6 +41,12 @@ import { findEnclosingClassDef } from '../../scope-resolution/scope/walkers.js';
|
|
|
41
41
|
* qualifier is '' when the base was unqualified.
|
|
42
42
|
*/
|
|
43
43
|
const dependentBasesByFile = new Map();
|
|
44
|
+
/**
|
|
45
|
+
* Class templates with pack-expanded bases (`struct Mix : Bases...`) have
|
|
46
|
+
* an unknown set of base classes. Unqualified member lookup inside the class
|
|
47
|
+
* cannot safely bind to class-owned methods outside the current class.
|
|
48
|
+
*/
|
|
49
|
+
const dependentPackBaseClassesByFile = new Map();
|
|
44
50
|
/**
|
|
45
51
|
* Post-`populateOwners` resolution: per-class-nodeId, the set of
|
|
46
52
|
* dependent-base-class nodeIds. Built by `populateCppDependentBases`
|
|
@@ -76,9 +82,50 @@ export function markCppDependentBase(filePath, className, baseName, qualifier =
|
|
|
76
82
|
}
|
|
77
83
|
quals.add(qualifier);
|
|
78
84
|
}
|
|
85
|
+
export function markCppDependentPackBase(filePath, className) {
|
|
86
|
+
let perFile = dependentPackBaseClassesByFile.get(filePath);
|
|
87
|
+
if (perFile === undefined) {
|
|
88
|
+
perFile = new Set();
|
|
89
|
+
dependentPackBaseClassesByFile.set(filePath, perFile);
|
|
90
|
+
}
|
|
91
|
+
perFile.add(className);
|
|
92
|
+
}
|
|
93
|
+
/** Snapshot this file's two-phase-lookup capture state for the side-channel. */
|
|
94
|
+
export function collectCppTwoPhaseSideChannel(filePath) {
|
|
95
|
+
const perFile = dependentBasesByFile.get(filePath);
|
|
96
|
+
const dependentBases = [];
|
|
97
|
+
if (perFile !== undefined) {
|
|
98
|
+
for (const [className, bases] of perFile) {
|
|
99
|
+
const baseEntries = [];
|
|
100
|
+
for (const [baseName, quals] of bases) {
|
|
101
|
+
baseEntries.push([baseName, [...quals]]);
|
|
102
|
+
}
|
|
103
|
+
dependentBases.push([className, baseEntries]);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const pack = dependentPackBaseClassesByFile.get(filePath);
|
|
107
|
+
return {
|
|
108
|
+
dependentBases,
|
|
109
|
+
dependentPackBaseClasses: pack === undefined ? [] : [...pack],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** Restore this file's two-phase-lookup capture state from the side-channel. */
|
|
113
|
+
export function applyCppTwoPhaseSideChannel(filePath, data) {
|
|
114
|
+
for (const [className, baseEntries] of data.dependentBases) {
|
|
115
|
+
for (const [baseName, quals] of baseEntries) {
|
|
116
|
+
for (const qualifier of quals) {
|
|
117
|
+
markCppDependentBase(filePath, className, baseName, qualifier);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const className of data.dependentPackBaseClasses) {
|
|
122
|
+
markCppDependentPackBase(filePath, className);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
79
125
|
/** Clear two-phase-lookup state. Called from `clearFileLocalNames`. */
|
|
80
126
|
export function clearCppDependentBases() {
|
|
81
127
|
dependentBasesByFile.clear();
|
|
128
|
+
dependentPackBaseClassesByFile.clear();
|
|
82
129
|
dependentBaseNodeIds.clear();
|
|
83
130
|
}
|
|
84
131
|
/**
|
|
@@ -97,7 +144,7 @@ export function clearCppDependentBases() {
|
|
|
97
144
|
* found (conservative: avoids false associations).
|
|
98
145
|
*/
|
|
99
146
|
export function populateCppDependentBases(parsedFiles) {
|
|
100
|
-
if (dependentBasesByFile.size === 0)
|
|
147
|
+
if (dependentBasesByFile.size === 0 && dependentPackBaseClassesByFile.size === 0)
|
|
101
148
|
return;
|
|
102
149
|
// Build workspace-wide index: simpleName → {nodeId, nsPrefix}[]
|
|
103
150
|
// nsPrefix is the dot-joined namespace path (qualifiedName without the
|
|
@@ -153,6 +200,15 @@ export function populateCppDependentBases(parsedFiles) {
|
|
|
153
200
|
const nsPrefix = lastDot >= 0 ? qn.slice(0, lastDot) : '';
|
|
154
201
|
localClassByName.set(simple, { nodeId: def.nodeId, nsPrefix });
|
|
155
202
|
}
|
|
203
|
+
const packBaseClasses = dependentPackBaseClassesByFile.get(filePath);
|
|
204
|
+
if (packBaseClasses !== undefined) {
|
|
205
|
+
for (const className of packBaseClasses) {
|
|
206
|
+
const classEntry = localClassByName.get(className);
|
|
207
|
+
if (classEntry !== undefined) {
|
|
208
|
+
dependentBaseNodeIds.set(classEntry.nodeId, new Set(['*pack-expansion*']));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
156
212
|
// V3: qualifier-based exact targeting. When the base specifier carries
|
|
157
213
|
// a syntactic qualifier (e.g., `detail` in `detail::Inner<T>`), compute
|
|
158
214
|
// the expected namespace prefix and use exact (===) match. Falls back to
|
|
@@ -247,13 +303,37 @@ export function populateCppDependentBases(parsedFiles) {
|
|
|
247
303
|
* access; missing edges here match the compiler's diagnostic shape.
|
|
248
304
|
*/
|
|
249
305
|
export function isCppDependentBaseMember(callerScopeId, candidateDef, scopes) {
|
|
250
|
-
if (candidateDef.ownerId === undefined)
|
|
251
|
-
return false;
|
|
252
306
|
const enclosing = findEnclosingClassDef(callerScopeId, scopes);
|
|
253
307
|
if (enclosing === undefined)
|
|
254
308
|
return false;
|
|
255
309
|
const bases = dependentBaseNodeIds.get(enclosing.nodeId);
|
|
256
310
|
if (bases === undefined)
|
|
257
311
|
return false;
|
|
312
|
+
if (bases.has('*pack-expansion*')) {
|
|
313
|
+
if (candidateDef.ownerId !== undefined)
|
|
314
|
+
return candidateDef.ownerId !== enclosing.nodeId;
|
|
315
|
+
if (candidateDef.type !== 'Method' && candidateDef.type !== 'Constructor')
|
|
316
|
+
return false;
|
|
317
|
+
const ownerName = getQualifiedParentName(candidateDef.qualifiedName);
|
|
318
|
+
const enclosingName = getQualifiedSimpleName(enclosing.qualifiedName);
|
|
319
|
+
return ownerName !== undefined && ownerName !== enclosingName;
|
|
320
|
+
}
|
|
321
|
+
if (candidateDef.ownerId === undefined)
|
|
322
|
+
return false;
|
|
258
323
|
return bases.has(candidateDef.ownerId);
|
|
259
324
|
}
|
|
325
|
+
function getQualifiedParentName(qualifiedName) {
|
|
326
|
+
if (qualifiedName === undefined)
|
|
327
|
+
return undefined;
|
|
328
|
+
const lastDot = qualifiedName.lastIndexOf('.');
|
|
329
|
+
if (lastDot < 0)
|
|
330
|
+
return undefined;
|
|
331
|
+
const parent = qualifiedName.slice(0, lastDot);
|
|
332
|
+
return getQualifiedSimpleName(parent);
|
|
333
|
+
}
|
|
334
|
+
function getQualifiedSimpleName(qualifiedName) {
|
|
335
|
+
if (qualifiedName === undefined)
|
|
336
|
+
return undefined;
|
|
337
|
+
const lastDot = qualifiedName.lastIndexOf('.');
|
|
338
|
+
return lastDot >= 0 ? qualifiedName.slice(lastDot + 1) : qualifiedName;
|
|
339
|
+
}
|