gitnexus 1.6.6-rc.98 → 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 +247 -26
- 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
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Heritage Map
|
|
3
|
-
*
|
|
4
|
-
* Unified inheritance data structure built from accumulated
|
|
5
|
-
* {@link ExtractedHeritage} records **after all chunks complete** (between
|
|
6
|
-
* chunk processing and call resolution). Consumes `ExtractedHeritage[]` and
|
|
7
|
-
* resolves type names to nodeIds via `lookupClassByName`, NOT graph-edge
|
|
8
|
-
* queries.
|
|
9
|
-
*
|
|
10
|
-
* Combines two concerns:
|
|
11
|
-
* 1. **Parent/ancestor lookup** (MRO-aware method resolution)
|
|
12
|
-
* 2. **Implementor lookup** (interface dispatch — which files contain
|
|
13
|
-
* classes implementing a given interface)
|
|
14
|
-
*/
|
|
15
|
-
import { getLanguageFromFilename } from '../../../_shared/index.js';
|
|
16
|
-
import { isDeferredResolutionProfileEnabled, logDeferredProfile, } from '../utils/deferred-resolution-profile.js';
|
|
17
|
-
/**
|
|
18
|
-
* Determine whether a heritage.extends capture is actually an IMPLEMENTS
|
|
19
|
-
* relationship. Consults the symbol table first (authoritative — Tier 1 /
|
|
20
|
-
* Tier 2 resolution); falls back to the injected {@link HeritageResolutionStrategy}
|
|
21
|
-
* heuristics for external symbols not present in the graph.
|
|
22
|
-
*/
|
|
23
|
-
export const resolveExtendsType = (parentName, currentFilePath, ctx, strategy) => {
|
|
24
|
-
const resolved = ctx.resolve(parentName, currentFilePath);
|
|
25
|
-
if (resolved && resolved.candidates.length > 0) {
|
|
26
|
-
const isInterface = resolved.candidates[0].type === 'Interface';
|
|
27
|
-
return isInterface
|
|
28
|
-
? { type: 'IMPLEMENTS', idPrefix: 'Interface' }
|
|
29
|
-
: { type: 'EXTENDS', idPrefix: 'Class' };
|
|
30
|
-
}
|
|
31
|
-
// Unresolved symbol — fall back to strategy heuristics.
|
|
32
|
-
if (strategy.interfaceNamePattern?.test(parentName)) {
|
|
33
|
-
return { type: 'IMPLEMENTS', idPrefix: 'Interface' };
|
|
34
|
-
}
|
|
35
|
-
if (strategy.defaultEdge === 'IMPLEMENTS') {
|
|
36
|
-
return { type: 'IMPLEMENTS', idPrefix: 'Interface' };
|
|
37
|
-
}
|
|
38
|
-
return { type: 'EXTENDS', idPrefix: 'Class' };
|
|
39
|
-
};
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
// Public types
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
/** Maximum ancestor chain depth to prevent runaway traversal. */
|
|
44
|
-
const MAX_ANCESTOR_DEPTH = 32;
|
|
45
|
-
/** Shared empty set returned when no implementors are found. */
|
|
46
|
-
const EMPTY_SET = new Set();
|
|
47
|
-
/** Default strategy used when `buildHeritageMap` is called without an
|
|
48
|
-
* explicit `getHeritageStrategy` callback — the fallback for a language
|
|
49
|
-
* whose provider sets no interface-name pattern and no non-default
|
|
50
|
-
* `heritageDefaultEdge`. */
|
|
51
|
-
const DEFAULT_HERITAGE_STRATEGY = { defaultEdge: 'EXTENDS' };
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
// Builder
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
/**
|
|
56
|
-
* Build a HeritageMap from accumulated ExtractedHeritage records.
|
|
57
|
-
*
|
|
58
|
-
* Resolves class/interface/struct/trait names to nodeIds via
|
|
59
|
-
* `ctx.model.types.lookupClassByName`. When a name resolves to multiple
|
|
60
|
-
* candidates, all are recorded (partial-class / cross-file scenario).
|
|
61
|
-
* Unresolvable names are silently skipped — a missing parent is better
|
|
62
|
-
* than a wrong edge.
|
|
63
|
-
*
|
|
64
|
-
* Also builds the implementor index (interface name → implementing file
|
|
65
|
-
* paths) used by interface-dispatch in call resolution.
|
|
66
|
-
*/
|
|
67
|
-
export const buildHeritageMap = (heritage, ctx, getHeritageStrategy) => {
|
|
68
|
-
// childNodeId → insertion-ordered array of { parentId, kind }.
|
|
69
|
-
// Ordered array (not Set) because Ruby MRO walk depends on declaration
|
|
70
|
-
// order. A parallel `seen` map dedupes `(parentId, kind)` pairs without
|
|
71
|
-
// losing order.
|
|
72
|
-
const directParents = new Map();
|
|
73
|
-
const seenParents = new Map();
|
|
74
|
-
// interfaceName → Set<filePath> (implementor lookup for interface dispatch)
|
|
75
|
-
const implementorFiles = new Map();
|
|
76
|
-
const profileHeritage = isDeferredResolutionProfileEnabled();
|
|
77
|
-
let maxNameCartesian = 0;
|
|
78
|
-
let ambiguousHeritageRecords = 0;
|
|
79
|
-
let unresolvedChildLookups = 0;
|
|
80
|
-
let unresolvedParentLookups = 0;
|
|
81
|
-
for (const h of heritage) {
|
|
82
|
-
// ── Parent lookup (nodeId-based) ────────────────────────────────
|
|
83
|
-
const childDefs = ctx.model.types.lookupClassByName(h.className);
|
|
84
|
-
const parentDefs = ctx.model.types.lookupClassByName(h.parentName);
|
|
85
|
-
// Unresolved-side counters live in a separate guard so they observe
|
|
86
|
-
// records the ambiguity block below skips. On JVM monorepos the
|
|
87
|
-
// pathological fan-out case is precisely "many same-named children
|
|
88
|
-
// with an unresolved external supertype" (or the inverse) — both
|
|
89
|
-
// sides non-empty is the case `ambiguousHeritageRecords` already
|
|
90
|
-
// covers; the unresolved cases were silently dropped from the
|
|
91
|
-
// metric before this counter.
|
|
92
|
-
if (profileHeritage) {
|
|
93
|
-
if (childDefs.length === 0)
|
|
94
|
-
unresolvedChildLookups++;
|
|
95
|
-
if (parentDefs.length === 0)
|
|
96
|
-
unresolvedParentLookups++;
|
|
97
|
-
}
|
|
98
|
-
if (profileHeritage && childDefs.length > 0 && parentDefs.length > 0) {
|
|
99
|
-
const product = childDefs.length * parentDefs.length;
|
|
100
|
-
if (product > 1)
|
|
101
|
-
ambiguousHeritageRecords++;
|
|
102
|
-
if (product > maxNameCartesian)
|
|
103
|
-
maxNameCartesian = product;
|
|
104
|
-
}
|
|
105
|
-
if (childDefs.length > 0 && parentDefs.length > 0) {
|
|
106
|
-
for (const child of childDefs) {
|
|
107
|
-
for (const parent of parentDefs) {
|
|
108
|
-
// Skip self-references
|
|
109
|
-
if (child.nodeId === parent.nodeId)
|
|
110
|
-
continue;
|
|
111
|
-
let parents = directParents.get(child.nodeId);
|
|
112
|
-
if (!parents) {
|
|
113
|
-
parents = [];
|
|
114
|
-
directParents.set(child.nodeId, parents);
|
|
115
|
-
}
|
|
116
|
-
let seen = seenParents.get(child.nodeId);
|
|
117
|
-
if (!seen) {
|
|
118
|
-
seen = new Set();
|
|
119
|
-
seenParents.set(child.nodeId, seen);
|
|
120
|
-
}
|
|
121
|
-
// Dedup by `parentId + kind` so the same parent under two different
|
|
122
|
-
// kinds (e.g. a module that is both included and prepended — legal
|
|
123
|
-
// Ruby though unusual) is recorded twice; the consumer needs both
|
|
124
|
-
// kinds in the walk. A single (parent, kind) pair is deduped.
|
|
125
|
-
const key = `${parent.nodeId}|${h.kind}`;
|
|
126
|
-
if (!seen.has(key)) {
|
|
127
|
-
seen.add(key);
|
|
128
|
-
parents.push({ parentId: parent.nodeId, kind: h.kind });
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// ── Implementor index (name-based) ──────────────────────────────
|
|
134
|
-
//
|
|
135
|
-
// Known limitation: Rust `kind: 'trait-impl'` entries are intentionally NOT
|
|
136
|
-
// added to the implementor index. Interface dispatch resolution currently
|
|
137
|
-
// does not traverse Rust trait objects, so recording them here would
|
|
138
|
-
// inflate the index without a consumer. Revisit if/when trait-object
|
|
139
|
-
// dispatch is added.
|
|
140
|
-
//
|
|
141
|
-
// Known limitation: `getImplementorFiles` is keyed by interface **name**
|
|
142
|
-
// (string), so two interfaces with the same unqualified name in different
|
|
143
|
-
// packages (e.g. `pkgA.IRepository` vs `pkgB.IRepository`) collide.
|
|
144
|
-
let isImpl = false;
|
|
145
|
-
if (h.kind === 'implements') {
|
|
146
|
-
isImpl = true;
|
|
147
|
-
}
|
|
148
|
-
else if (h.kind === 'extends') {
|
|
149
|
-
const lang = getLanguageFromFilename(h.filePath);
|
|
150
|
-
if (lang) {
|
|
151
|
-
const strategy = getHeritageStrategy?.(lang) ?? DEFAULT_HERITAGE_STRATEGY;
|
|
152
|
-
const { type } = resolveExtendsType(h.parentName, h.filePath, ctx, strategy);
|
|
153
|
-
isImpl = type === 'IMPLEMENTS';
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (isImpl) {
|
|
157
|
-
let files = implementorFiles.get(h.parentName);
|
|
158
|
-
if (!files) {
|
|
159
|
-
files = new Set();
|
|
160
|
-
implementorFiles.set(h.parentName, files);
|
|
161
|
-
}
|
|
162
|
-
files.add(h.filePath);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// --- Public API ---------------------------------------------------
|
|
166
|
-
/** Internal helper: return the entries array (may be undefined). */
|
|
167
|
-
const entriesFor = (nodeId) => directParents.get(nodeId);
|
|
168
|
-
const getParentEntries = (childNodeId) => {
|
|
169
|
-
const entries = entriesFor(childNodeId);
|
|
170
|
-
return entries ?? [];
|
|
171
|
-
};
|
|
172
|
-
const getParents = (childNodeId) => {
|
|
173
|
-
const entries = entriesFor(childNodeId);
|
|
174
|
-
if (!entries)
|
|
175
|
-
return [];
|
|
176
|
-
// Deduplicate parent ids across kinds so the flat-string contract
|
|
177
|
-
// (used by non-Ruby MRO strategies and by the C3 linearizer) stays
|
|
178
|
-
// identical to its pre-kind-awareness behavior.
|
|
179
|
-
const out = [];
|
|
180
|
-
const seen = new Set();
|
|
181
|
-
for (const e of entries) {
|
|
182
|
-
if (!seen.has(e.parentId)) {
|
|
183
|
-
seen.add(e.parentId);
|
|
184
|
-
out.push(e.parentId);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return out;
|
|
188
|
-
};
|
|
189
|
-
const getAncestors = (childNodeId) => {
|
|
190
|
-
const result = [];
|
|
191
|
-
const visited = new Set();
|
|
192
|
-
visited.add(childNodeId); // prevent cycles through the start node
|
|
193
|
-
// BFS with bounded depth
|
|
194
|
-
let frontier = getParents(childNodeId);
|
|
195
|
-
let depth = 0;
|
|
196
|
-
while (frontier.length > 0 && depth < MAX_ANCESTOR_DEPTH) {
|
|
197
|
-
const nextFrontier = [];
|
|
198
|
-
for (const parentId of frontier) {
|
|
199
|
-
if (visited.has(parentId))
|
|
200
|
-
continue;
|
|
201
|
-
visited.add(parentId);
|
|
202
|
-
result.push(parentId);
|
|
203
|
-
// Expand parent's own parents for next level
|
|
204
|
-
const grandparents = entriesFor(parentId);
|
|
205
|
-
if (grandparents) {
|
|
206
|
-
const gpSeen = new Set();
|
|
207
|
-
for (const gp of grandparents) {
|
|
208
|
-
if (gpSeen.has(gp.parentId))
|
|
209
|
-
continue;
|
|
210
|
-
gpSeen.add(gp.parentId);
|
|
211
|
-
if (!visited.has(gp.parentId))
|
|
212
|
-
nextFrontier.push(gp.parentId);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
frontier = nextFrontier;
|
|
217
|
-
depth++;
|
|
218
|
-
}
|
|
219
|
-
return result;
|
|
220
|
-
};
|
|
221
|
-
/**
|
|
222
|
-
* Lazy-computed per-owner split of direct parents into instance-dispatch
|
|
223
|
-
* (non-`extend`) and singleton-dispatch (`extend`-only) views. Memoized on
|
|
224
|
-
* first request so the `.filter()` pass happens at most once per owner per
|
|
225
|
-
* HeritageMap lifetime, not per call-site dispatch.
|
|
226
|
-
*
|
|
227
|
-
* Shared empty-array sentinels for owners with no entries in a given view
|
|
228
|
-
* avoid per-call allocation when the split is asymmetric (common Ruby case:
|
|
229
|
-
* a class has `include` but no `extend`, so its singleton view is empty).
|
|
230
|
-
*/
|
|
231
|
-
const EMPTY_PARENT_ENTRIES = [];
|
|
232
|
-
const splitCache = new Map();
|
|
233
|
-
const splitForOwner = (childNodeId) => {
|
|
234
|
-
let cached = splitCache.get(childNodeId);
|
|
235
|
-
if (cached)
|
|
236
|
-
return cached;
|
|
237
|
-
const entries = entriesFor(childNodeId);
|
|
238
|
-
if (!entries || entries.length === 0) {
|
|
239
|
-
cached = { instance: EMPTY_PARENT_ENTRIES, singleton: EMPTY_PARENT_ENTRIES };
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
const instance = [];
|
|
243
|
-
const singleton = [];
|
|
244
|
-
for (const e of entries) {
|
|
245
|
-
if (e.kind === 'extend')
|
|
246
|
-
singleton.push(e);
|
|
247
|
-
else
|
|
248
|
-
instance.push(e);
|
|
249
|
-
}
|
|
250
|
-
cached = {
|
|
251
|
-
instance: instance.length === 0 ? EMPTY_PARENT_ENTRIES : instance,
|
|
252
|
-
singleton: singleton.length === 0 ? EMPTY_PARENT_ENTRIES : singleton,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
splitCache.set(childNodeId, cached);
|
|
256
|
-
return cached;
|
|
257
|
-
};
|
|
258
|
-
/**
|
|
259
|
-
* Instance-dispatch ancestry walk. Excludes `extend` (singleton-only).
|
|
260
|
-
* For kind-aware consumers (Ruby MRO): walks parents in source-insertion
|
|
261
|
-
* order. The consumer is responsible for interleaving self / reversing
|
|
262
|
-
* prepend order / etc. This method preserves raw declaration order.
|
|
263
|
-
*
|
|
264
|
-
* Result is cached per owner; repeat calls return the same array.
|
|
265
|
-
*/
|
|
266
|
-
const getInstanceAncestry = (childNodeId) => splitForOwner(childNodeId).instance;
|
|
267
|
-
/**
|
|
268
|
-
* Singleton-dispatch ancestry walk. Only `extend` parents. For non-Ruby
|
|
269
|
-
* languages this is always empty (no language currently produces `extend`
|
|
270
|
-
* heritage records outside Ruby).
|
|
271
|
-
*
|
|
272
|
-
* Result is cached per owner; repeat calls return the same array.
|
|
273
|
-
*/
|
|
274
|
-
const getSingletonAncestry = (childNodeId) => splitForOwner(childNodeId).singleton;
|
|
275
|
-
const getImplementorFiles = (interfaceName) => {
|
|
276
|
-
return implementorFiles.get(interfaceName) ?? EMPTY_SET;
|
|
277
|
-
};
|
|
278
|
-
if (profileHeritage) {
|
|
279
|
-
logDeferredProfile(`buildHeritageMap: ${heritage.length} heritage records, ` +
|
|
280
|
-
`${ambiguousHeritageRecords} with child×parent lookup product >1, ` +
|
|
281
|
-
`max product ${maxNameCartesian}, ` +
|
|
282
|
-
`${unresolvedChildLookups} unresolved child lookups, ` +
|
|
283
|
-
`${unresolvedParentLookups} unresolved parent lookups, ` +
|
|
284
|
-
`${implementorFiles.size} interface implementor keys`);
|
|
285
|
-
}
|
|
286
|
-
return {
|
|
287
|
-
getParents,
|
|
288
|
-
getAncestors,
|
|
289
|
-
getParentEntries,
|
|
290
|
-
getInstanceAncestry,
|
|
291
|
-
getSingletonAncestry,
|
|
292
|
-
getImplementorFiles,
|
|
293
|
-
};
|
|
294
|
-
};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolution Context
|
|
3
|
-
*
|
|
4
|
-
* Single implementation of tiered name resolution.
|
|
5
|
-
*
|
|
6
|
-
* Resolution tiers (highest confidence first):
|
|
7
|
-
* 1. Same file (lookupExactAll — authoritative)
|
|
8
|
-
* 2a-named. Named binding chain (walkBindingChain via NamedImportMap)
|
|
9
|
-
* 2a. Import-scoped (iterate importedFiles with lookupExactAll per file)
|
|
10
|
-
* 2b. Package-scoped (iterate indexed files matching package dir with lookupExactAll)
|
|
11
|
-
* 3. Global (lookupClassByName + lookupImplByName + lookupCallableByName — consumers must check count)
|
|
12
|
-
*
|
|
13
|
-
* Each tier queries the minimum necessary scope directly:
|
|
14
|
-
* - Tier 2a iterates the caller's import set (O(imports) × O(1) lookupExactAll).
|
|
15
|
-
* - Tier 2b iterates all indexed files filtered by package dir
|
|
16
|
-
* (O(files) × O(1) lookupExactAll — avoids a global name scan).
|
|
17
|
-
* - Tier 3 combines lookupClassByName + lookupImplByName + lookupCallableByName
|
|
18
|
-
* (three O(1) index lookups with a narrow, type-specific result set).
|
|
19
|
-
*/
|
|
20
|
-
import type { SymbolDefinition } from '../../../_shared/index.js';
|
|
21
|
-
import type { MutableSemanticModel } from './semantic-model.js';
|
|
22
|
-
/**
|
|
23
|
-
* A single named binding in a source file (e.g. `import { User as U }`).
|
|
24
|
-
* Stores both the resolved source path and the original exported name so
|
|
25
|
-
* that aliased imports can resolve U → User in the source file.
|
|
26
|
-
*/
|
|
27
|
-
export interface NamedImportBinding {
|
|
28
|
-
sourcePath: string;
|
|
29
|
-
exportedName: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Map<ImportingFilePath, Map<LocalName, NamedImportBinding>>.
|
|
33
|
-
*
|
|
34
|
-
* Tracks which specific names a file imports from which sources (TS / Python
|
|
35
|
-
* / Rust / Java-static / ...). Used to tighten Tier 2a resolution:
|
|
36
|
-
* `import { User } from './models'` means only `User` (not `Repo`) is
|
|
37
|
-
* visible from models.ts via this import.
|
|
38
|
-
*/
|
|
39
|
-
export type NamedImportMap = Map<string, Map<string, NamedImportBinding>>;
|
|
40
|
-
/**
|
|
41
|
-
* Check if a file path is directly inside a package directory identified by
|
|
42
|
-
* its suffix. Used by Tier 2b package-scoped resolution (Go / C#).
|
|
43
|
-
*/
|
|
44
|
-
export declare function isFileInPackageDir(filePath: string, dirSuffix: string): boolean;
|
|
45
|
-
/** Resolution tier for tracking, logging, and test assertions. */
|
|
46
|
-
export type ResolutionTier = 'same-file' | 'import-scoped' | 'global';
|
|
47
|
-
/** Tier-selected candidates with metadata. */
|
|
48
|
-
export interface TieredCandidates {
|
|
49
|
-
readonly candidates: readonly SymbolDefinition[];
|
|
50
|
-
readonly tier: ResolutionTier;
|
|
51
|
-
}
|
|
52
|
-
/** Confidence scores per resolution tier. */
|
|
53
|
-
export declare const TIER_CONFIDENCE: Record<ResolutionTier, number>;
|
|
54
|
-
export type ImportMap = Map<string, Set<string>>;
|
|
55
|
-
export type PackageMap = Map<string, Set<string>>;
|
|
56
|
-
/** Maps callerFile → (moduleAlias → sourceFilePath) for Python namespace imports.
|
|
57
|
-
* e.g. `import models` in app.py → moduleAliasMap.get('app.py')?.get('models') === 'models.py' */
|
|
58
|
-
export type ModuleAliasMap = Map<string, Map<string, string>>;
|
|
59
|
-
export interface ResolutionContext {
|
|
60
|
-
/**
|
|
61
|
-
* The only resolution API. Returns all candidates at the winning tier.
|
|
62
|
-
*
|
|
63
|
-
* Tier 3 ('global') returns ALL candidates regardless of count —
|
|
64
|
-
* consumers must check candidates.length and refuse ambiguous matches.
|
|
65
|
-
*/
|
|
66
|
-
resolve(name: string, fromFile: string): TieredCandidates | null;
|
|
67
|
-
/** Semantic model — the top-level container for types, methods, fields,
|
|
68
|
-
* and the nested file/callable SymbolTable. Typed as
|
|
69
|
-
* {@link MutableSemanticModel} because `ResolutionContext` is the
|
|
70
|
-
* lifecycle owner — the pipeline registers symbols through it during
|
|
71
|
-
* the fan-out phase. Resolvers that only query should annotate their
|
|
72
|
-
* own fields as {@link SemanticModel} to drop write access. */
|
|
73
|
-
readonly model: MutableSemanticModel;
|
|
74
|
-
/** Raw maps — used by import-processor to populate import data. */
|
|
75
|
-
readonly importMap: ImportMap;
|
|
76
|
-
readonly packageMap: PackageMap;
|
|
77
|
-
readonly namedImportMap: NamedImportMap;
|
|
78
|
-
/** Module-alias map for Python namespace imports: callerFile → (alias → sourceFile). */
|
|
79
|
-
readonly moduleAliasMap: ModuleAliasMap;
|
|
80
|
-
enableCache(filePath: string): void;
|
|
81
|
-
clearCache(): void;
|
|
82
|
-
getStats(): {
|
|
83
|
-
fileCount: number;
|
|
84
|
-
cacheHits: number;
|
|
85
|
-
cacheMisses: number;
|
|
86
|
-
tierSameFile: number;
|
|
87
|
-
tierImportScoped: number;
|
|
88
|
-
tierGlobal: number;
|
|
89
|
-
tierMiss: number;
|
|
90
|
-
};
|
|
91
|
-
clear(): void;
|
|
92
|
-
}
|
|
93
|
-
export declare const createResolutionContext: () => ResolutionContext;
|