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
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vue `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
|
|
3
|
+
* the generic `runScopeResolution` orchestrator (RFC #909 Ring 3, issue #940).
|
|
4
|
+
*
|
|
5
|
+
* ## Design rationale
|
|
6
|
+
*
|
|
7
|
+
* Vue SFCs compile down to TypeScript/JavaScript — the `<script>` /
|
|
8
|
+
* `<script setup>` block is pure TS/JS, parsed with the TypeScript
|
|
9
|
+
* grammar and captured by `emitVueScopeCaptures` (which delegates
|
|
10
|
+
* to `emitTsScopeCaptures`). Because of this, nearly all hooks are
|
|
11
|
+
* identical to the TypeScript resolver:
|
|
12
|
+
*
|
|
13
|
+
* - `mergeBindings` — TypeScript LEGB semantics apply in script blocks.
|
|
14
|
+
* - `arityCompatibility` — same positional + rest rules.
|
|
15
|
+
* - `buildMro` / `populateOwners` — shared with TypeScript.
|
|
16
|
+
* - `isSuperReceiver` — `super(...)` / `super.foo` / `super[x]` pattern.
|
|
17
|
+
* - `resolveImportTarget` — TypeScript resolver with `.vue` explicit-
|
|
18
|
+
* extension support; tsconfig paths loaded via
|
|
19
|
+
* `loadResolutionConfig`.
|
|
20
|
+
*
|
|
21
|
+
* ## Key differences from TypeScript
|
|
22
|
+
*
|
|
23
|
+
* - `language: SupportedLanguages.Vue` — routes the resolver to Vue
|
|
24
|
+
* files only; TypeScript files use the TypeScript resolver.
|
|
25
|
+
* - `languageProvider: vueProvider` — the Vue-specific language
|
|
26
|
+
* provider supplies the right built-ins and export checker for
|
|
27
|
+
* `<script setup>` (all top-level bindings implicitly exported).
|
|
28
|
+
* - `importEdgeReason: 'vue-scope: import'` — distinct tag for
|
|
29
|
+
* debugging / edge provenance.
|
|
30
|
+
* - `allowGlobalFreeCallFallback: false` — Vue uses explicit imports;
|
|
31
|
+
* workspace-wide unique-name fallback is unnecessary and would
|
|
32
|
+
* produce spurious edges for Vue built-ins (ref, reactive, …).
|
|
33
|
+
*
|
|
34
|
+
* ## Options API / this-binding
|
|
35
|
+
*
|
|
36
|
+
* Options API (`defineComponent({ methods: { … } })`) stores methods
|
|
37
|
+
* on the component instance, which tree-sitter sees as object property
|
|
38
|
+
* values. `this.X()` inside a method resolves via the existing
|
|
39
|
+
* `tsReceiverBinding` hook (inherited from TypeScript), which walks to
|
|
40
|
+
* the enclosing Class scope. For Options API the enclosing "class" is
|
|
41
|
+
* the `defineComponent({…})` object — not a true class — so `this`
|
|
42
|
+
* calls may not resolve through the type-binding layer. `fieldFallbackOnMethodLookup`
|
|
43
|
+
* is therefore set to `true` so the field-name fallback catches common
|
|
44
|
+
* patterns even without an explicit type annotation.
|
|
45
|
+
*
|
|
46
|
+
* ## `<script setup>` macro calls
|
|
47
|
+
*
|
|
48
|
+
* `defineProps`, `defineEmits`, `defineExpose`, `withDefaults`, etc.
|
|
49
|
+
* are compiler macros available as globals inside `<script setup>`.
|
|
50
|
+
* They are listed in `vueProvider.builtInNames` and therefore treated
|
|
51
|
+
* as resolved without requiring an import edge.
|
|
52
|
+
*/
|
|
53
|
+
import { SupportedLanguages, getLanguageFromFilename } from '../../../../_shared/index.js';
|
|
54
|
+
import { generateId } from '../../../../lib/utils.js';
|
|
55
|
+
import { buildMro, defaultLinearize } from '../../scope-resolution/passes/mro.js';
|
|
56
|
+
import { populateClassOwnedMembers } from '../../scope-resolution/scope/walkers.js';
|
|
57
|
+
import { simpleKey } from '../../scope-resolution/graph-bridge/node-lookup.js';
|
|
58
|
+
import { vueProvider } from '../vue.js';
|
|
59
|
+
import { loadTsconfigPaths } from '../../language-config.js';
|
|
60
|
+
import { typescriptArityCompatibility, typescriptMergeBindings } from '../typescript/index.js';
|
|
61
|
+
import { makeVueResolveImportTarget } from './import-target.js';
|
|
62
|
+
import { extractVueTemplateEdgeData } from '../../vue-sfc-extractor.js';
|
|
63
|
+
import { extractParsedFile } from '../../scope-extractor-bridge.js';
|
|
64
|
+
// Languages whose files may be pulled into the Vue scope-resolution pass
|
|
65
|
+
// as import-closure context (`.vue` → `.ts` / `.js` cross-file resolution).
|
|
66
|
+
const VUE_SCOPE_CONTEXT_LANGUAGES = new Set([
|
|
67
|
+
SupportedLanguages.Vue,
|
|
68
|
+
SupportedLanguages.TypeScript,
|
|
69
|
+
SupportedLanguages.JavaScript,
|
|
70
|
+
]);
|
|
71
|
+
function isVueScopeContextLanguage(lang) {
|
|
72
|
+
return lang !== null && VUE_SCOPE_CONTEXT_LANGUAGES.has(lang);
|
|
73
|
+
}
|
|
74
|
+
const vueScopeResolver = {
|
|
75
|
+
language: SupportedLanguages.Vue,
|
|
76
|
+
languageProvider: vueProvider,
|
|
77
|
+
importEdgeReason: 'vue-scope: import',
|
|
78
|
+
resolveImportTarget: makeVueResolveImportTarget(),
|
|
79
|
+
// Vue projects universally use TypeScript — load tsconfig so path
|
|
80
|
+
// aliases (`@/`, `~/`, `#/`) resolve through the standard branch.
|
|
81
|
+
loadResolutionConfig: async (repoPath) => ({
|
|
82
|
+
tsconfigPaths: await loadTsconfigPaths(repoPath),
|
|
83
|
+
}),
|
|
84
|
+
// TypeScript LEGB semantics apply inside `<script>` / `<script setup>`.
|
|
85
|
+
mergeBindings: (existing, incoming) => [...typescriptMergeBindings([...existing, ...incoming])],
|
|
86
|
+
// Adapter: typescriptArityCompatibility uses (def, callsite); contract is (callsite, def).
|
|
87
|
+
arityCompatibility: (callsite, def) => typescriptArityCompatibility(def, callsite),
|
|
88
|
+
buildMro: (graph, parsedFiles, nodeLookup) => buildMro(graph, parsedFiles, nodeLookup, defaultLinearize),
|
|
89
|
+
populateOwners: (parsed) => populateClassOwnedMembers(parsed),
|
|
90
|
+
isSuperReceiver: (text) => /^super(\s*\(|\s*\.|\s*\[|\s*$)/.test(text.trim()),
|
|
91
|
+
// Options API `this.X()` calls may not resolve through the type-binding
|
|
92
|
+
// layer (no formal class declaration), so enable the field-fallback
|
|
93
|
+
// heuristic to catch them via declared field names.
|
|
94
|
+
fieldFallbackOnMethodLookup: true,
|
|
95
|
+
// Return-type propagation mirrors TypeScript.
|
|
96
|
+
propagatesReturnTypesAcrossImports: true,
|
|
97
|
+
hoistTypeBindingsToModule: true,
|
|
98
|
+
// Vue uses explicit imports for all external symbols; no global free-
|
|
99
|
+
// call fallback needed (would produce spurious edges for built-ins).
|
|
100
|
+
allowGlobalFreeCallFallback: false,
|
|
101
|
+
/**
|
|
102
|
+
* Expand the scope-resolution file universe for Vue by performing a
|
|
103
|
+
* transitive closure over imports starting from the primary `.vue` files.
|
|
104
|
+
*
|
|
105
|
+
* Vue SFCs import TypeScript/JavaScript modules (`import { fn } from './api'`),
|
|
106
|
+
* and those modules must be included in the Vue resolution pass for cross-file
|
|
107
|
+
* IMPORTS/CALLS edges to resolve correctly. Without this expansion, only
|
|
108
|
+
* `.vue` files would be processed and all TS/JS imports would remain
|
|
109
|
+
* unresolved.
|
|
110
|
+
*
|
|
111
|
+
* Keeping this logic here (rather than hard-coding it in `phase.ts`) ensures
|
|
112
|
+
* that shared pipeline code remains language-agnostic.
|
|
113
|
+
*/
|
|
114
|
+
collectScopeContextPaths({ primaryFilePaths, preExtractedByPath, entryFileContents, allScannedPaths, resolutionConfig, }) {
|
|
115
|
+
const resolveTargets = (targetRaw, fromFile) => {
|
|
116
|
+
const resolved = vueScopeResolver.resolveImportTarget(targetRaw, fromFile, allScannedPaths, resolutionConfig);
|
|
117
|
+
if (resolved === null)
|
|
118
|
+
return [];
|
|
119
|
+
if (typeof resolved === 'string')
|
|
120
|
+
return [resolved];
|
|
121
|
+
return resolved;
|
|
122
|
+
};
|
|
123
|
+
const visited = new Set(primaryFilePaths);
|
|
124
|
+
const queue = [...primaryFilePaths];
|
|
125
|
+
const fallbackParsed = new Map();
|
|
126
|
+
while (queue.length > 0) {
|
|
127
|
+
const current = queue.shift();
|
|
128
|
+
if (current === undefined)
|
|
129
|
+
break;
|
|
130
|
+
let parsed = preExtractedByPath.get(current) ?? fallbackParsed.get(current) ?? undefined;
|
|
131
|
+
if (parsed === undefined) {
|
|
132
|
+
const source = entryFileContents.get(current);
|
|
133
|
+
if (source !== undefined) {
|
|
134
|
+
parsed = extractParsedFile(vueProvider, source, current);
|
|
135
|
+
if (parsed !== undefined)
|
|
136
|
+
fallbackParsed.set(current, parsed);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (parsed === undefined)
|
|
140
|
+
continue;
|
|
141
|
+
for (const parsedImport of parsed.parsedImports) {
|
|
142
|
+
if (parsedImport.targetRaw.trim().length === 0)
|
|
143
|
+
continue;
|
|
144
|
+
for (const targetPath of resolveTargets(parsedImport.targetRaw, current)) {
|
|
145
|
+
if (!allScannedPaths.has(targetPath))
|
|
146
|
+
continue;
|
|
147
|
+
if (!isVueScopeContextLanguage(getLanguageFromFilename(targetPath)))
|
|
148
|
+
continue;
|
|
149
|
+
if (visited.has(targetPath))
|
|
150
|
+
continue;
|
|
151
|
+
visited.add(targetPath);
|
|
152
|
+
queue.push(targetPath);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return visited;
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* Emit template-derived edges after standard scope-resolution passes.
|
|
160
|
+
*
|
|
161
|
+
* Six edge categories (all scoped to `.vue` files only):
|
|
162
|
+
*
|
|
163
|
+
* 1. **CALLS** (`vue-template-component`)
|
|
164
|
+
* PascalCase component elements → the imported component's File node.
|
|
165
|
+
* Source = the parent file (File node).
|
|
166
|
+
*
|
|
167
|
+
* 2. **CALLS** (`vue-template-callback`) — reserved for future use
|
|
168
|
+
* (see category 3 below).
|
|
169
|
+
*
|
|
170
|
+
* 3. **CALLS** (`vue-template-callback`)
|
|
171
|
+
* `@event="handler"` on a **native** HTML element (`<button>`, `<input>`).
|
|
172
|
+
* Source = the parent file (File node). Target = handler Function/Method.
|
|
173
|
+
*
|
|
174
|
+
* 4. **BINDS_EVENT_HANDLER** (`vue-event: @<eventName>`)
|
|
175
|
+
* `@event="handler"` on a **component** element.
|
|
176
|
+
* Source = the handler Function/Method node in the parent file.
|
|
177
|
+
* Target = the child component's File node.
|
|
178
|
+
*
|
|
179
|
+
* 5. **EMITS_EVENT** (`vue-emit: <eventName>`)
|
|
180
|
+
* `emit('eventName', …)` / `this.$emit('eventName', …)` in script block.
|
|
181
|
+
* Source = the file's own File node (self-referential annotation).
|
|
182
|
+
* Target = the same File node.
|
|
183
|
+
* These "hanging" edges join with BINDS_EVENT_HANDLER via Cypher query
|
|
184
|
+
* on the shared component File node to reveal handler/emitter pairs.
|
|
185
|
+
*
|
|
186
|
+
* 6. **ACCESSES** (`vue-template-attribute`)
|
|
187
|
+
* `:prop="varName"` bound-attribute references.
|
|
188
|
+
* Source = the file's File node. Target = resolved variable node.
|
|
189
|
+
*/
|
|
190
|
+
emitPostResolutionEdges(graph, parsedFiles, nodeLookup, indexes, ctx) {
|
|
191
|
+
for (const parsedFile of parsedFiles) {
|
|
192
|
+
if (!parsedFile.filePath.endsWith('.vue'))
|
|
193
|
+
continue;
|
|
194
|
+
const content = ctx.fileContents.get(parsedFile.filePath);
|
|
195
|
+
if (!content)
|
|
196
|
+
continue;
|
|
197
|
+
const fileId = generateId('File', parsedFile.filePath);
|
|
198
|
+
// Build localName → resolved targetFile from finalized import edges.
|
|
199
|
+
const importTargetByName = new Map();
|
|
200
|
+
for (const [scopeId, edges] of indexes.imports) {
|
|
201
|
+
const scope = indexes.scopeTree.getScope(scopeId);
|
|
202
|
+
if (scope?.filePath !== parsedFile.filePath)
|
|
203
|
+
continue;
|
|
204
|
+
for (const edge of edges) {
|
|
205
|
+
if (edge.targetFile !== null && edge.localName) {
|
|
206
|
+
importTargetByName.set(edge.localName, edge.targetFile);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Extract all template/script edge data in a single pass — avoids
|
|
211
|
+
// re-running TEMPLATE_RE for each individual extractor call.
|
|
212
|
+
const { templateComponents, nativeEventHandlers, componentEventBindings, scriptEmitCalls, templateAttributeBindings, } = extractVueTemplateEdgeData(content, { sourceKind: 'full-sfc' });
|
|
213
|
+
// 1 — Component-reference CALLS
|
|
214
|
+
for (const componentName of templateComponents) {
|
|
215
|
+
const targetFile = importTargetByName.get(componentName);
|
|
216
|
+
if (!targetFile)
|
|
217
|
+
continue;
|
|
218
|
+
const targetFileId = generateId('File', targetFile);
|
|
219
|
+
if (!graph.getNode(targetFileId))
|
|
220
|
+
continue;
|
|
221
|
+
graph.addRelationship({
|
|
222
|
+
id: generateId('CALLS', `${fileId}:${componentName}->${targetFileId}`),
|
|
223
|
+
sourceId: fileId,
|
|
224
|
+
targetId: targetFileId,
|
|
225
|
+
type: 'CALLS',
|
|
226
|
+
confidence: 0.9,
|
|
227
|
+
reason: 'vue-template-component',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// 3 — Native-element event-handler CALLS (@click="method" on <button> etc.)
|
|
231
|
+
for (const handlerName of nativeEventHandlers) {
|
|
232
|
+
const handlerNodeId = nodeLookup.get(simpleKey(parsedFile.filePath, handlerName));
|
|
233
|
+
if (!handlerNodeId)
|
|
234
|
+
continue;
|
|
235
|
+
graph.addRelationship({
|
|
236
|
+
id: generateId('CALLS', `${fileId}:@native:${handlerName}->${handlerNodeId}`),
|
|
237
|
+
sourceId: fileId,
|
|
238
|
+
targetId: handlerNodeId,
|
|
239
|
+
type: 'CALLS',
|
|
240
|
+
confidence: 0.9,
|
|
241
|
+
reason: 'vue-template-callback',
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// 4 — BINDS_EVENT_HANDLER: component event bindings (@event="handler" on component elements)
|
|
245
|
+
for (const { componentName, eventName, handlerName } of componentEventBindings) {
|
|
246
|
+
const targetFile = importTargetByName.get(componentName);
|
|
247
|
+
if (!targetFile)
|
|
248
|
+
continue;
|
|
249
|
+
const targetFileId = generateId('File', targetFile);
|
|
250
|
+
if (!graph.getNode(targetFileId))
|
|
251
|
+
continue;
|
|
252
|
+
const handlerNodeId = nodeLookup.get(simpleKey(parsedFile.filePath, handlerName));
|
|
253
|
+
if (!handlerNodeId)
|
|
254
|
+
continue;
|
|
255
|
+
graph.addRelationship({
|
|
256
|
+
id: generateId('BINDS_EVENT_HANDLER', `${handlerNodeId}:@${eventName}->${targetFileId}`),
|
|
257
|
+
sourceId: handlerNodeId,
|
|
258
|
+
targetId: targetFileId,
|
|
259
|
+
type: 'BINDS_EVENT_HANDLER',
|
|
260
|
+
confidence: 0.9,
|
|
261
|
+
reason: `vue-event: @${eventName}`,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// 5 — EMITS_EVENT: emit() / this.$emit() calls (self-referential annotation)
|
|
265
|
+
for (const { eventName } of scriptEmitCalls) {
|
|
266
|
+
graph.addRelationship({
|
|
267
|
+
id: generateId('EMITS_EVENT', `${fileId}:emit:${eventName}`),
|
|
268
|
+
sourceId: fileId,
|
|
269
|
+
targetId: fileId,
|
|
270
|
+
type: 'EMITS_EVENT',
|
|
271
|
+
confidence: 0.9,
|
|
272
|
+
reason: `vue-emit: ${eventName}`,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
// 6 — ACCESSES: bound-attribute references (:prop="varName")
|
|
276
|
+
for (const varName of templateAttributeBindings) {
|
|
277
|
+
const varNodeId = nodeLookup.get(simpleKey(parsedFile.filePath, varName));
|
|
278
|
+
if (!varNodeId)
|
|
279
|
+
continue;
|
|
280
|
+
graph.addRelationship({
|
|
281
|
+
id: generateId('ACCESSES', `${fileId}:bind:${varName}->${varNodeId}`),
|
|
282
|
+
sourceId: fileId,
|
|
283
|
+
targetId: varNodeId,
|
|
284
|
+
type: 'ACCESSES',
|
|
285
|
+
confidence: 0.8,
|
|
286
|
+
reason: 'vue-template-attribute',
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
export { vueScopeResolver };
|
|
@@ -18,7 +18,6 @@ import { typeConfig as typescriptConfig } from '../type-extractors/typescript.js
|
|
|
18
18
|
import { tsExportChecker } from '../export-detection.js';
|
|
19
19
|
import { createImportResolver } from '../import-resolvers/resolver-factory.js';
|
|
20
20
|
import { vueImportConfig } from '../import-resolvers/configs/typescript-javascript.js';
|
|
21
|
-
import { extractTsNamedBindings } from '../named-bindings/typescript.js';
|
|
22
21
|
import { TYPESCRIPT_QUERIES } from '../tree-sitter-queries.js';
|
|
23
22
|
import { typescriptFieldExtractor } from '../field-extractors/typescript.js';
|
|
24
23
|
import { BUILT_INS as TS_BUILT_INS } from './typescript.js';
|
|
@@ -26,7 +25,8 @@ import { createVariableExtractor } from '../variable-extractors/generic.js';
|
|
|
26
25
|
import { typescriptVariableConfig } from '../variable-extractors/configs/typescript-javascript.js';
|
|
27
26
|
import { createCallExtractor } from '../call-extractors/generic.js';
|
|
28
27
|
import { typescriptCallConfig } from '../call-extractors/configs/typescript-javascript.js';
|
|
29
|
-
import {
|
|
28
|
+
import { interpretTsImport, interpretTsTypeBinding, tsBindingScopeFor, tsImportOwningScope, tsReceiverBinding, typescriptMergeBindings, typescriptArityCompatibility, resolveTsImportTarget, } from './typescript/index.js';
|
|
29
|
+
import { emitVueScopeCaptures } from './vue/captures.js';
|
|
30
30
|
const VUE_SPECIFIC_BUILT_INS = [
|
|
31
31
|
'ref',
|
|
32
32
|
'reactive',
|
|
@@ -69,11 +69,19 @@ export const vueProvider = defineLanguage({
|
|
|
69
69
|
typeConfig: typescriptConfig,
|
|
70
70
|
exportChecker: tsExportChecker,
|
|
71
71
|
importResolver: createImportResolver(vueImportConfig),
|
|
72
|
-
namedBindingExtractor: extractTsNamedBindings,
|
|
73
72
|
callExtractor: createCallExtractor(typescriptCallConfig),
|
|
74
73
|
fieldExtractor: typescriptFieldExtractor,
|
|
75
74
|
variableExtractor: createVariableExtractor(typescriptVariableConfig),
|
|
76
75
|
classExtractor: vueClassExtractor,
|
|
77
|
-
heritageExtractor: createHeritageExtractor(SupportedLanguages.TypeScript),
|
|
78
76
|
builtInNames: VUE_BUILT_INS,
|
|
77
|
+
// Scope-resolution pipeline hooks (RFC #909 Ring 3)
|
|
78
|
+
emitScopeCaptures: emitVueScopeCaptures,
|
|
79
|
+
interpretImport: interpretTsImport,
|
|
80
|
+
interpretTypeBinding: interpretTsTypeBinding,
|
|
81
|
+
bindingScopeFor: tsBindingScopeFor,
|
|
82
|
+
importOwningScope: tsImportOwningScope,
|
|
83
|
+
receiverBinding: tsReceiverBinding,
|
|
84
|
+
mergeBindings: (_scope, bindings) => typescriptMergeBindings(bindings),
|
|
85
|
+
arityCompatibility: typescriptArityCompatibility,
|
|
86
|
+
resolveImportTarget: resolveTsImportTarget,
|
|
79
87
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { KnowledgeGraph } from '../graph/types.js';
|
|
2
|
+
export interface LocalSymbolPruneStats {
|
|
3
|
+
candidateNodes: number;
|
|
4
|
+
prunedNodes: number;
|
|
5
|
+
keptWithSemanticEdges: number;
|
|
6
|
+
skippedByEnv: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const shouldKeepLocalValueSymbols: () => boolean;
|
|
9
|
+
export declare const pruneLocalValueSymbols: (graph: KnowledgeGraph, options?: {
|
|
10
|
+
keepLocalValueSymbols?: boolean;
|
|
11
|
+
}) => LocalSymbolPruneStats;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { parseTruthyEnv } from './utils/env.js';
|
|
2
|
+
const LOCAL_VALUE_LABELS = new Set(['Const', 'Variable', 'Static']);
|
|
3
|
+
const KEEP_LOCAL_VALUE_SYMBOLS_ENV = 'GITNEXUS_KEEP_LOCAL_VALUE_SYMBOLS';
|
|
4
|
+
export const shouldKeepLocalValueSymbols = () => parseTruthyEnv(process.env[KEEP_LOCAL_VALUE_SYMBOLS_ENV]);
|
|
5
|
+
const emptyStats = (skippedByEnv) => ({
|
|
6
|
+
candidateNodes: 0,
|
|
7
|
+
prunedNodes: 0,
|
|
8
|
+
keptWithSemanticEdges: 0,
|
|
9
|
+
skippedByEnv,
|
|
10
|
+
});
|
|
11
|
+
const isLocalValueCandidate = (node) => {
|
|
12
|
+
if (!LOCAL_VALUE_LABELS.has(node.label))
|
|
13
|
+
return false;
|
|
14
|
+
return node.properties.scope === 'block';
|
|
15
|
+
};
|
|
16
|
+
// True when `rel` is the structural `File -> DEFINES -> candidate` edge. Callers
|
|
17
|
+
// guard on the candidate already being the edge target, so only the source label
|
|
18
|
+
// needs checking here.
|
|
19
|
+
const isFileDefinesEdge = (graph, rel) => {
|
|
20
|
+
if (rel.type !== 'DEFINES')
|
|
21
|
+
return false;
|
|
22
|
+
return graph.getNode(rel.sourceId)?.label === 'File';
|
|
23
|
+
};
|
|
24
|
+
export const pruneLocalValueSymbols = (graph, options = {}) => {
|
|
25
|
+
if (options.keepLocalValueSymbols ?? shouldKeepLocalValueSymbols()) {
|
|
26
|
+
return emptyStats(true);
|
|
27
|
+
}
|
|
28
|
+
const candidateIds = new Set();
|
|
29
|
+
for (const node of graph.iterNodes()) {
|
|
30
|
+
if (isLocalValueCandidate(node))
|
|
31
|
+
candidateIds.add(node.id);
|
|
32
|
+
}
|
|
33
|
+
if (candidateIds.size === 0)
|
|
34
|
+
return emptyStats(false);
|
|
35
|
+
const candidatesWithSemanticEdges = new Set();
|
|
36
|
+
for (const rel of graph.iterRelationships()) {
|
|
37
|
+
// Any outgoing edge from a candidate is a semantic edge: the only structural
|
|
38
|
+
// edge a block-local value symbol carries is the incoming File -> DEFINES, on
|
|
39
|
+
// which the candidate is the target, never the source.
|
|
40
|
+
if (candidateIds.has(rel.sourceId)) {
|
|
41
|
+
candidatesWithSemanticEdges.add(rel.sourceId);
|
|
42
|
+
}
|
|
43
|
+
// An incoming edge is semantic unless it is the structural File -> DEFINES.
|
|
44
|
+
if (candidateIds.has(rel.targetId)) {
|
|
45
|
+
if (!isFileDefinesEdge(graph, rel)) {
|
|
46
|
+
candidatesWithSemanticEdges.add(rel.targetId);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let prunedNodes = 0;
|
|
51
|
+
for (const candidateId of candidateIds) {
|
|
52
|
+
if (candidatesWithSemanticEdges.has(candidateId))
|
|
53
|
+
continue;
|
|
54
|
+
if (graph.removeNode(candidateId))
|
|
55
|
+
prunedNodes++;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
candidateNodes: candidateIds.size,
|
|
59
|
+
prunedNodes,
|
|
60
|
+
keptWithSemanticEdges: candidatesWithSemanticEdges.size,
|
|
61
|
+
skippedByEnv: false,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
@@ -8,7 +8,6 @@ import { extractSimpleTypeName } from '../../type-extractors/shared.js';
|
|
|
8
8
|
/** Type node types that represent a return type in function/getter/setter signatures. */
|
|
9
9
|
const TYPE_NODE_TYPES = new Set([
|
|
10
10
|
'type_identifier',
|
|
11
|
-
'generic_type',
|
|
12
11
|
'function_type',
|
|
13
12
|
'nullable_type',
|
|
14
13
|
'void_type',
|
|
@@ -23,6 +22,20 @@ const TYPE_NODE_TYPES = new Set([
|
|
|
23
22
|
* method_signature itself.
|
|
24
23
|
*/
|
|
25
24
|
function getInnerSignature(node) {
|
|
25
|
+
// A bare signature node IS its own inner signature. The scope-resolution
|
|
26
|
+
// path passes top-level `function_signature` (and constructor/getter/setter
|
|
27
|
+
// signatures) directly, unlike the legacy method extractor which always
|
|
28
|
+
// hands in a `method_signature`/`declaration` wrapper — so the descent loop
|
|
29
|
+
// below never sees a bare signature on the legacy path and this early return
|
|
30
|
+
// leaves legacy behavior byte-identical.
|
|
31
|
+
if (node.type === 'function_signature' ||
|
|
32
|
+
node.type === 'constructor_signature' ||
|
|
33
|
+
node.type === 'getter_signature' ||
|
|
34
|
+
node.type === 'setter_signature' ||
|
|
35
|
+
node.type === 'operator_signature' ||
|
|
36
|
+
node.type === 'factory_constructor_signature') {
|
|
37
|
+
return node;
|
|
38
|
+
}
|
|
26
39
|
for (let i = 0; i < node.namedChildCount; i++) {
|
|
27
40
|
const child = node.namedChild(i);
|
|
28
41
|
if (child &&
|
|
@@ -155,9 +155,42 @@ export const javaMethodConfig = {
|
|
|
155
155
|
// Kotlin
|
|
156
156
|
// ---------------------------------------------------------------------------
|
|
157
157
|
const KOTLIN_VIS = new Set(['public', 'private', 'protected', 'internal']);
|
|
158
|
+
function kotlinParameterHasDefaultValue(param) {
|
|
159
|
+
// tree-sitter-kotlin inlines `_function_value_parameter`, so `=` and its
|
|
160
|
+
// expression are siblings of `parameter`, not children of the parameter.
|
|
161
|
+
for (let sibling = param.nextSibling; sibling !== null; sibling = sibling.nextSibling) {
|
|
162
|
+
if (sibling.type === ',' || sibling.type === ')')
|
|
163
|
+
return false;
|
|
164
|
+
if (sibling.type === '=')
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Member name for a Kotlin method node. A `secondary_constructor`
|
|
171
|
+
* (`constructor(...) { }`) has no name child — its only identity token is
|
|
172
|
+
* the anonymous `constructor` keyword — so it is named "constructor" (F48,
|
|
173
|
+
* issue #1919), matching the @name the KOTLIN_QUERIES structure rule captures
|
|
174
|
+
* off that keyword so method-extractor enrichment keys (`name:line`) align.
|
|
175
|
+
* Multiple secondary constructors collide on this name but are disambiguated
|
|
176
|
+
* downstream by the `#<arity>` ID suffix the worker appends to Constructors.
|
|
177
|
+
*/
|
|
178
|
+
function extractKotlinMethodName(node) {
|
|
179
|
+
if (node.type === 'secondary_constructor')
|
|
180
|
+
return 'constructor';
|
|
181
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
182
|
+
const child = node.namedChild(i);
|
|
183
|
+
if (child?.type === 'simple_identifier')
|
|
184
|
+
return child.text;
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
158
188
|
function extractKotlinParameters(node) {
|
|
159
189
|
const params = [];
|
|
160
|
-
// Kotlin: function_declaration
|
|
190
|
+
// Kotlin: function_declaration / secondary_constructor >
|
|
191
|
+
// function_value_parameters > parameter. Both node types nest the
|
|
192
|
+
// parameter list the same way, so the same walk extracts a secondary
|
|
193
|
+
// constructor's parameters (F48).
|
|
161
194
|
for (let i = 0; i < node.namedChildCount; i++) {
|
|
162
195
|
const child = node.namedChild(i);
|
|
163
196
|
if (child && child.type === 'function_value_parameters') {
|
|
@@ -180,7 +213,6 @@ function extractKotlinParameters(node) {
|
|
|
180
213
|
let paramName;
|
|
181
214
|
let paramType = null;
|
|
182
215
|
let paramRawType = null;
|
|
183
|
-
let hasDefault = false;
|
|
184
216
|
const isVariadic = nextIsVariadic;
|
|
185
217
|
nextIsVariadic = false;
|
|
186
218
|
for (let k = 0; k < param.namedChildCount; k++) {
|
|
@@ -197,20 +229,12 @@ function extractKotlinParameters(node) {
|
|
|
197
229
|
paramType = extractSimpleTypeName(part) ?? paramRawType;
|
|
198
230
|
}
|
|
199
231
|
}
|
|
200
|
-
// Check for default value: `= expr`
|
|
201
|
-
for (let k = 0; k < param.childCount; k++) {
|
|
202
|
-
const c = param.child(k);
|
|
203
|
-
if (c && c.text === '=') {
|
|
204
|
-
hasDefault = true;
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
232
|
if (paramName) {
|
|
209
233
|
params.push({
|
|
210
234
|
name: paramName,
|
|
211
235
|
type: paramType,
|
|
212
236
|
rawType: paramRawType,
|
|
213
|
-
isOptional:
|
|
237
|
+
isOptional: kotlinParameterHasDefaultValue(param),
|
|
214
238
|
isVariadic: isVariadic,
|
|
215
239
|
});
|
|
216
240
|
}
|
|
@@ -246,17 +270,10 @@ function extractKotlinReturnType(node) {
|
|
|
246
270
|
export const kotlinMethodConfig = {
|
|
247
271
|
language: SupportedLanguages.Kotlin,
|
|
248
272
|
typeDeclarationNodes: ['class_declaration', 'object_declaration', 'companion_object'],
|
|
249
|
-
methodNodeTypes: ['function_declaration'],
|
|
273
|
+
methodNodeTypes: ['function_declaration', 'secondary_constructor'],
|
|
250
274
|
bodyNodeTypes: ['class_body'],
|
|
251
275
|
staticOwnerTypes: new Set(['companion_object', 'object_declaration']),
|
|
252
|
-
extractName
|
|
253
|
-
for (let i = 0; i < node.namedChildCount; i++) {
|
|
254
|
-
const child = node.namedChild(i);
|
|
255
|
-
if (child?.type === 'simple_identifier')
|
|
256
|
-
return child.text;
|
|
257
|
-
}
|
|
258
|
-
return undefined;
|
|
259
|
-
},
|
|
276
|
+
extractName: extractKotlinMethodName,
|
|
260
277
|
extractReturnType: extractKotlinReturnType,
|
|
261
278
|
extractParameters: extractKotlinParameters,
|
|
262
279
|
extractVisibility(node) {
|
|
@@ -242,14 +242,21 @@ function extractSwiftAnnotations(node) {
|
|
|
242
242
|
// ---------------------------------------------------------------------------
|
|
243
243
|
export const swiftMethodConfig = {
|
|
244
244
|
language: SupportedLanguages.Swift,
|
|
245
|
-
//
|
|
246
|
-
//
|
|
247
|
-
//
|
|
245
|
+
// tree-sitter-swift collapses class / struct / enum / extension / actor into a
|
|
246
|
+
// single `class_declaration` node (distinguished by the `declaration_kind`
|
|
247
|
+
// field) — verified by real parse. There is NO separate `enum_declaration`
|
|
248
|
+
// node type, so it must NOT be listed here (it would fail the grammar-drift
|
|
249
|
+
// gate). The enum's owner node is therefore already covered by
|
|
250
|
+
// `class_declaration`; F79 only needed the enum BODY node added below.
|
|
248
251
|
// protocol_declaration is a separate, confirmed node type.
|
|
249
252
|
typeDeclarationNodes: ['class_declaration', 'protocol_declaration'],
|
|
250
253
|
// function_declaration for class/struct methods, protocol_function_declaration for protocol methods
|
|
251
254
|
methodNodeTypes: ['function_declaration', 'protocol_function_declaration'],
|
|
252
|
-
|
|
255
|
+
// class_body for class/struct/extension/actor, protocol_body for protocols,
|
|
256
|
+
// enum_class_body for enums (F79). Without enum_class_body the factory only
|
|
257
|
+
// reached enum methods via the generic findBodies fallback, which logs a
|
|
258
|
+
// dev-mode "body field type not in bodyNodeTypes" warning.
|
|
259
|
+
bodyNodeTypes: ['class_body', 'protocol_body', 'enum_class_body'],
|
|
253
260
|
extractName: extractSwiftName,
|
|
254
261
|
extractReturnType: extractSwiftReturnType,
|
|
255
262
|
extractParameters: extractSwiftParameters,
|
|
@@ -50,7 +50,7 @@ export interface MethodExtractor {
|
|
|
50
50
|
* unwrapping, Swift init/deinit, Rust impl_item) provide this hook
|
|
51
51
|
* to replace the generic name-field lookup.
|
|
52
52
|
* Return null to fall through to the generic extractor. */
|
|
53
|
-
extractFunctionName?(node: SyntaxNode): {
|
|
53
|
+
extractFunctionName?(node: SyntaxNode, filePath?: string): {
|
|
54
54
|
funcName: string | null;
|
|
55
55
|
label: import('../../_shared/index.js').NodeLabel;
|
|
56
56
|
} | null;
|
|
@@ -84,7 +84,7 @@ export interface MethodExtractionConfig {
|
|
|
84
84
|
extractPrimaryConstructor?: (ownerNode: SyntaxNode, context: MethodExtractorContext) => MethodInfo | null;
|
|
85
85
|
/** Extract function name + label from an AST node during parent-walk.
|
|
86
86
|
* Passed through to the MethodExtractor by createMethodExtractor. */
|
|
87
|
-
extractFunctionName?: (node: SyntaxNode) => {
|
|
87
|
+
extractFunctionName?: (node: SyntaxNode, filePath?: string) => {
|
|
88
88
|
funcName: string | null;
|
|
89
89
|
label: import('../../_shared/index.js').NodeLabel;
|
|
90
90
|
} | null;
|
|
@@ -14,7 +14,4 @@ export { type SymbolTableReader, type SymbolTableWriter, createSymbolTable, type
|
|
|
14
14
|
export { type TypeRegistry, type MutableTypeRegistry, createTypeRegistry, } from './type-registry.js';
|
|
15
15
|
export { type MethodRegistry, type MutableMethodRegistry, createMethodRegistry, } from './method-registry.js';
|
|
16
16
|
export { type FieldRegistry, type MutableFieldRegistry, createFieldRegistry, } from './field-registry.js';
|
|
17
|
-
export { lookupMethodByOwnerWithMRO } from './resolve.js';
|
|
18
|
-
export { type NamedImportBinding, type NamedImportMap, isFileInPackageDir, } from './resolution-context.js';
|
|
19
|
-
export { type ExtractedHeritage, type HeritageMap, type HeritageResolutionStrategy, type HeritageStrategyLookup, } from './heritage-map.js';
|
|
20
17
|
export { CALLABLE_ONLY_LABELS, INERT_LABELS, DISPATCH_LABELS, ALL_NODE_LABELS, type LabelBehavior, } from './registration-table.js';
|
|
@@ -25,14 +25,6 @@ export { createTypeRegistry, } from './type-registry.js';
|
|
|
25
25
|
export { createMethodRegistry, } from './method-registry.js';
|
|
26
26
|
// Field registry (owner-scoped fields/properties)
|
|
27
27
|
export { createFieldRegistry, } from './field-registry.js';
|
|
28
|
-
// MRO-aware method resolution (C3, first-wins, leftmost-base, implements-split,
|
|
29
|
-
// qualified-syntax). Pure function that depends only on the model + HeritageMap.
|
|
30
|
-
// `MroStrategy` itself lives in `gitnexus-shared`; re-exported here for
|
|
31
|
-
// consumers that reach model behavior through the barrel.
|
|
32
|
-
export { lookupMethodByOwnerWithMRO } from './resolve.js';
|
|
33
|
-
// Named-import types and package-dir helper. Re-exported so barrel
|
|
34
|
-
// consumers don't need to reach into a specific model file.
|
|
35
|
-
export { isFileInPackageDir, } from './resolution-context.js';
|
|
36
28
|
// Behavior-grouped dispatch table for SymbolTable.add() routing.
|
|
37
29
|
// See registration-table.ts module JSDoc for the behavior group taxonomy
|
|
38
30
|
// and "how to add a new NodeLabel" checklist.
|