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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronous heap probes for large-repo OOM investigation (#1983).
|
|
3
|
+
*
|
|
4
|
+
* Writes to stderr (not pino) so lines flush under CI=1 / gdb attach.
|
|
5
|
+
* Enabled with `GITNEXUS_DEBUG_HEAP=1` or `GITNEXUS_PROFILE_DEFERRED=1`.
|
|
6
|
+
*/
|
|
7
|
+
import { appendFileSync } from 'node:fs';
|
|
8
|
+
import { parseTruthyEnv } from './env.js';
|
|
9
|
+
import { isDeferredResolutionProfileEnabled } from './deferred-resolution-profile.js';
|
|
10
|
+
export const isDebugHeapEnabled = () => parseTruthyEnv(process.env.GITNEXUS_DEBUG_HEAP) || isDeferredResolutionProfileEnabled();
|
|
11
|
+
export const heapUsedMb = () => Math.round(process.memoryUsage().heapUsed / 1024 / 1024);
|
|
12
|
+
const rssMb = () => Math.round(process.memoryUsage().rss / 1024 / 1024);
|
|
13
|
+
/**
|
|
14
|
+
* Flush a one-line heap snapshot to stderr.
|
|
15
|
+
*
|
|
16
|
+
* stderr is async on a pipe (Linux), so a probe written just before an
|
|
17
|
+
* OOM-kill is lost in the pipe buffer. For OOM investigation set
|
|
18
|
+
* `GITNEXUS_HEAP_PROBE_FILE=/path` — each probe is then ALSO appended to
|
|
19
|
+
* that file with a synchronous `appendFileSync`, whose `write(2)` syscall
|
|
20
|
+
* completes (data handed to the kernel) before the call returns, so the
|
|
21
|
+
* last line survives SIGKILL. Includes rss alongside heapUsed so the
|
|
22
|
+
* native/off-heap gap is visible.
|
|
23
|
+
*/
|
|
24
|
+
export const logHeapProbe = (label, detail) => {
|
|
25
|
+
if (!isDebugHeapEnabled())
|
|
26
|
+
return;
|
|
27
|
+
const suffix = detail ? ` ${detail}` : '';
|
|
28
|
+
const line = `[gitnexus-heap] ${label} used_mb=${heapUsedMb()} rss_mb=${rssMb()}${suffix}\n`;
|
|
29
|
+
process.stderr.write(line);
|
|
30
|
+
const file = process.env.GITNEXUS_HEAP_PROBE_FILE;
|
|
31
|
+
if (file) {
|
|
32
|
+
try {
|
|
33
|
+
appendFileSync(file, line);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Best-effort diagnostics sink; never let a probe failure abort analyze.
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1994: shared codec for the synthetic `__heritage__:` / `__property__:` import
|
|
3
|
+
* markers used by the Ruby and Dart scope resolvers to carry side-effect facts
|
|
4
|
+
* (mixin includes, attr_accessor properties) through the import channel. Both
|
|
5
|
+
* languages share the exact `':'`-delimited wire format, so a single encode/decode
|
|
6
|
+
* pair removes the per-site hand-rolled string handling that produced the #1981
|
|
7
|
+
* edge-drop. Language-NEUTRAL — keyed only on the literal prefixes; no provider
|
|
8
|
+
* branching belongs here.
|
|
9
|
+
*/
|
|
10
|
+
export type MarkerKind = 'heritage' | 'property';
|
|
11
|
+
export declare const HERITAGE_MARKER_PREFIX: string;
|
|
12
|
+
export declare const PROPERTY_MARKER_PREFIX: string;
|
|
13
|
+
/**
|
|
14
|
+
* Build a marker string `<prefix><field>:<field>:...`. The `':'` delimiter IS the
|
|
15
|
+
* wire format, so a field that itself contains `':'` is structurally invalid and
|
|
16
|
+
* THROWS — callers must pre-normalize colon-bearing values (e.g. a qualified mixin
|
|
17
|
+
* arg `Outer::Mixin` → `Outer.Mixin`). This makes the #1981 silent edge-drop a
|
|
18
|
+
* loud failure instead.
|
|
19
|
+
*/
|
|
20
|
+
export declare function encodeMarker(kind: MarkerKind, fields: readonly string[]): string;
|
|
21
|
+
/**
|
|
22
|
+
* Parse a marker string back into its kind + positional fields, or `null` if `raw`
|
|
23
|
+
* is not a marker. Mirrors the historical `slice(PREFIX.length).split(':')`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function decodeMarker(raw: string): {
|
|
26
|
+
kind: MarkerKind;
|
|
27
|
+
fields: string[];
|
|
28
|
+
} | null;
|
|
29
|
+
/**
|
|
30
|
+
* True if `raw` is a synthetic heritage/property marker — exactly the prior
|
|
31
|
+
* `startsWith('__heritage__:') || startsWith('__property__:')` pair.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isHeritageMarker(raw: string): boolean;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const PREFIX_BY_KIND = {
|
|
2
|
+
heritage: '__heritage__:',
|
|
3
|
+
property: '__property__:',
|
|
4
|
+
};
|
|
5
|
+
export const HERITAGE_MARKER_PREFIX = PREFIX_BY_KIND.heritage;
|
|
6
|
+
export const PROPERTY_MARKER_PREFIX = PREFIX_BY_KIND.property;
|
|
7
|
+
/**
|
|
8
|
+
* Build a marker string `<prefix><field>:<field>:...`. The `':'` delimiter IS the
|
|
9
|
+
* wire format, so a field that itself contains `':'` is structurally invalid and
|
|
10
|
+
* THROWS — callers must pre-normalize colon-bearing values (e.g. a qualified mixin
|
|
11
|
+
* arg `Outer::Mixin` → `Outer.Mixin`). This makes the #1981 silent edge-drop a
|
|
12
|
+
* loud failure instead.
|
|
13
|
+
*/
|
|
14
|
+
export function encodeMarker(kind, fields) {
|
|
15
|
+
for (const field of fields) {
|
|
16
|
+
if (field.includes(':')) {
|
|
17
|
+
throw new Error(`encodeMarker: field "${field}" contains the ':' delimiter; normalize it before encoding`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return PREFIX_BY_KIND[kind] + fields.join(':');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse a marker string back into its kind + positional fields, or `null` if `raw`
|
|
24
|
+
* is not a marker. Mirrors the historical `slice(PREFIX.length).split(':')`.
|
|
25
|
+
*/
|
|
26
|
+
export function decodeMarker(raw) {
|
|
27
|
+
if (raw.startsWith(PREFIX_BY_KIND.heritage)) {
|
|
28
|
+
return { kind: 'heritage', fields: raw.slice(PREFIX_BY_KIND.heritage.length).split(':') };
|
|
29
|
+
}
|
|
30
|
+
if (raw.startsWith(PREFIX_BY_KIND.property)) {
|
|
31
|
+
return { kind: 'property', fields: raw.slice(PREFIX_BY_KIND.property.length).split(':') };
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* True if `raw` is a synthetic heritage/property marker — exactly the prior
|
|
37
|
+
* `startsWith('__heritage__:') || startsWith('__property__:')` pair.
|
|
38
|
+
*/
|
|
39
|
+
export function isHeritageMarker(raw) {
|
|
40
|
+
return raw.startsWith(PREFIX_BY_KIND.heritage) || raw.startsWith(PREFIX_BY_KIND.property);
|
|
41
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared qualified-name normalization.
|
|
3
|
+
*
|
|
4
|
+
* One canonical transform from a raw, language-specific qualified name
|
|
5
|
+
* (`Other::Inner`, `pkg\Sub\Type`, ` A . B `) to the `.`-joined form the
|
|
6
|
+
* graph and the `QualifiedNameIndex` are keyed by (`Other.Inner`, `pkg.Sub.Type`,
|
|
7
|
+
* `A.B`). Extracted from `class-extractors/generic.ts` so the structure-phase
|
|
8
|
+
* `buildQualifiedName`, the scope-resolution inheritance resolver, and the
|
|
9
|
+
* per-language capture emitters all key against ONE normalizer — a raw `::`
|
|
10
|
+
* qualifier must normalize to the exact key the index already holds, or the
|
|
11
|
+
* qualified lookup silently misses (issue #1982).
|
|
12
|
+
*
|
|
13
|
+
* Do NOT confuse with `heritage-extractors/supertype-alternation.ts`'s
|
|
14
|
+
* `simplifyRawName`, which collapses a qualified name to its LAST segment
|
|
15
|
+
* (`Other::Inner` → `Inner`) — that is a tail extractor, not a normalizer, and
|
|
16
|
+
* using it as a lookup key guarantees a miss.
|
|
17
|
+
*
|
|
18
|
+
* Pure string functions; no AST or tree-sitter dependency.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Normalize a raw qualified name to the `.`-joined canonical form:
|
|
22
|
+
* strips whitespace, converts `::` and `\` separators to `.`, collapses
|
|
23
|
+
* repeated dots, and trims leading/trailing dots.
|
|
24
|
+
*/
|
|
25
|
+
export declare const normalizeQualifiedName: (value: string) => string;
|
|
26
|
+
/**
|
|
27
|
+
* Split a raw qualified name into its normalized, non-empty segments
|
|
28
|
+
* (`Other::Inner` → `['Other', 'Inner']`). Returns `[]` for an empty or
|
|
29
|
+
* separator-only input.
|
|
30
|
+
*/
|
|
31
|
+
export declare const splitQualifiedName: (value: string) => string[];
|
|
32
|
+
/**
|
|
33
|
+
* Strip a trailing generic argument list at angle-bracket depth 0
|
|
34
|
+
* (`Models.Box<int>` → `Models.Box`). Constructor and inheritance sites
|
|
35
|
+
* often carry type arguments that are not part of the indexed def key.
|
|
36
|
+
*/
|
|
37
|
+
export declare function stripTrailingTypeArguments(value: string): string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared qualified-name normalization.
|
|
3
|
+
*
|
|
4
|
+
* One canonical transform from a raw, language-specific qualified name
|
|
5
|
+
* (`Other::Inner`, `pkg\Sub\Type`, ` A . B `) to the `.`-joined form the
|
|
6
|
+
* graph and the `QualifiedNameIndex` are keyed by (`Other.Inner`, `pkg.Sub.Type`,
|
|
7
|
+
* `A.B`). Extracted from `class-extractors/generic.ts` so the structure-phase
|
|
8
|
+
* `buildQualifiedName`, the scope-resolution inheritance resolver, and the
|
|
9
|
+
* per-language capture emitters all key against ONE normalizer — a raw `::`
|
|
10
|
+
* qualifier must normalize to the exact key the index already holds, or the
|
|
11
|
+
* qualified lookup silently misses (issue #1982).
|
|
12
|
+
*
|
|
13
|
+
* Do NOT confuse with `heritage-extractors/supertype-alternation.ts`'s
|
|
14
|
+
* `simplifyRawName`, which collapses a qualified name to its LAST segment
|
|
15
|
+
* (`Other::Inner` → `Inner`) — that is a tail extractor, not a normalizer, and
|
|
16
|
+
* using it as a lookup key guarantees a miss.
|
|
17
|
+
*
|
|
18
|
+
* Pure string functions; no AST or tree-sitter dependency.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Normalize a raw qualified name to the `.`-joined canonical form:
|
|
22
|
+
* strips whitespace, converts `::` and `\` separators to `.`, collapses
|
|
23
|
+
* repeated dots, and trims leading/trailing dots.
|
|
24
|
+
*/
|
|
25
|
+
export const normalizeQualifiedName = (value) => value
|
|
26
|
+
.replace(/\s+/g, '')
|
|
27
|
+
.replace(/^::/, '')
|
|
28
|
+
.replace(/::/g, '.')
|
|
29
|
+
.replace(/\\/g, '.')
|
|
30
|
+
.replace(/\.+/g, '.')
|
|
31
|
+
.replace(/^\.+|\.+$/g, '');
|
|
32
|
+
/**
|
|
33
|
+
* Split a raw qualified name into its normalized, non-empty segments
|
|
34
|
+
* (`Other::Inner` → `['Other', 'Inner']`). Returns `[]` for an empty or
|
|
35
|
+
* separator-only input.
|
|
36
|
+
*/
|
|
37
|
+
export const splitQualifiedName = (value) => {
|
|
38
|
+
const normalized = normalizeQualifiedName(value);
|
|
39
|
+
return normalized ? normalized.split('.').filter(Boolean) : [];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Strip a trailing generic argument list at angle-bracket depth 0
|
|
43
|
+
* (`Models.Box<int>` → `Models.Box`). Constructor and inheritance sites
|
|
44
|
+
* often carry type arguments that are not part of the indexed def key.
|
|
45
|
+
*/
|
|
46
|
+
export function stripTrailingTypeArguments(value) {
|
|
47
|
+
let depth = 0;
|
|
48
|
+
let ltAt0 = -1;
|
|
49
|
+
for (let i = 0; i < value.length; i++) {
|
|
50
|
+
const c = value[i];
|
|
51
|
+
if (c === '<') {
|
|
52
|
+
if (depth === 0)
|
|
53
|
+
ltAt0 = i;
|
|
54
|
+
depth++;
|
|
55
|
+
}
|
|
56
|
+
else if (c === '>') {
|
|
57
|
+
depth = Math.max(0, depth - 1);
|
|
58
|
+
if (depth === 0 && ltAt0 >= 0) {
|
|
59
|
+
const after = value.slice(i + 1).trim();
|
|
60
|
+
if (after.length === 0)
|
|
61
|
+
return value.slice(0, ltAt0);
|
|
62
|
+
ltAt0 = -1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
@@ -32,6 +32,54 @@ function extractCVarName(node) {
|
|
|
32
32
|
}
|
|
33
33
|
return undefined;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Locate the `structured_binding_declarator` inside a `declaration` node, if any.
|
|
37
|
+
*
|
|
38
|
+
* C++ structured bindings (`auto [a, b] = pair;`) parse as:
|
|
39
|
+
* declaration → init_declarator → structured_binding_declarator → identifier+
|
|
40
|
+
* The reference form (`auto& [x, y] = tup;`) wraps it one level deeper:
|
|
41
|
+
* declaration → init_declarator → reference_declarator → structured_binding_declarator
|
|
42
|
+
*/
|
|
43
|
+
function findStructuredBindingDeclarator(node) {
|
|
44
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
45
|
+
const child = node.namedChild(i);
|
|
46
|
+
if (child?.type !== 'init_declarator')
|
|
47
|
+
continue;
|
|
48
|
+
const declarator = child.childForFieldName('declarator');
|
|
49
|
+
if (declarator?.type === 'structured_binding_declarator')
|
|
50
|
+
return declarator;
|
|
51
|
+
// `auto& [x, y]` → reference_declarator wraps the structured_binding_declarator.
|
|
52
|
+
if (declarator?.type === 'reference_declarator') {
|
|
53
|
+
const inner = declarator.namedChildren.find((c) => c.type === 'structured_binding_declarator');
|
|
54
|
+
if (inner)
|
|
55
|
+
return inner;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract every bound name from a C/C++ declaration.
|
|
62
|
+
*
|
|
63
|
+
* For a structured binding `auto [a, b] = ...;` this returns each bound
|
|
64
|
+
* identifier (`['a', 'b']`); the binding's `structured_binding_declarator`
|
|
65
|
+
* lists one `identifier` per name. For an ordinary single-name declaration
|
|
66
|
+
* (`int n = 0;`) it falls back to the single name extractor so behaviour is
|
|
67
|
+
* unchanged (issue #1919 F9).
|
|
68
|
+
*/
|
|
69
|
+
function extractCVarNames(node) {
|
|
70
|
+
const binding = findStructuredBindingDeclarator(node);
|
|
71
|
+
if (binding !== undefined) {
|
|
72
|
+
const names = [];
|
|
73
|
+
for (let i = 0; i < binding.namedChildCount; i++) {
|
|
74
|
+
const child = binding.namedChild(i);
|
|
75
|
+
if (child?.type === 'identifier')
|
|
76
|
+
names.push(child.text);
|
|
77
|
+
}
|
|
78
|
+
return names;
|
|
79
|
+
}
|
|
80
|
+
const single = extractCVarName(node);
|
|
81
|
+
return single !== undefined ? [single] : [];
|
|
82
|
+
}
|
|
35
83
|
function extractCVarType(node) {
|
|
36
84
|
const typeNode = node.childForFieldName('type');
|
|
37
85
|
if (typeNode)
|
|
@@ -52,6 +100,7 @@ const shared = {
|
|
|
52
100
|
staticNodeTypes: [],
|
|
53
101
|
variableNodeTypes: ['declaration'],
|
|
54
102
|
extractName: extractCVarName,
|
|
103
|
+
extractNames: extractCVarNames,
|
|
55
104
|
extractType: extractCVarType,
|
|
56
105
|
extractVisibility(node) {
|
|
57
106
|
// C/C++ visibility is file-scoped by default (static = file-private)
|
|
@@ -1,68 +1,79 @@
|
|
|
1
1
|
// gitnexus/src/core/ingestion/variable-extractors/configs/dart.ts
|
|
2
2
|
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
-
import { extractSimpleTypeName } from '../../type-extractors/shared.js';
|
|
4
3
|
/**
|
|
5
4
|
* Dart variable extraction config.
|
|
6
5
|
*
|
|
7
|
-
* Dart
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - `int x = 5;`
|
|
6
|
+
* Top-level Dart variables are NOT wrapped in a `declaration` node (that wrapper
|
|
7
|
+
* only occurs for class-body members). The structure query (`DART_QUERIES`)
|
|
8
|
+
* captures them as `@definition.variable` on the loose container node, which is
|
|
9
|
+
* one of two real shapes:
|
|
12
10
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* - `var name = 'x';` / `int x = 5;`
|
|
12
|
+
* → initialized_identifier_list > initialized_identifier > identifier
|
|
13
|
+
* - `final int count = 3;` / `const a = 1, b = 2;`
|
|
14
|
+
* → static_final_declaration_list > static_final_declaration > identifier
|
|
15
|
+
*
|
|
16
|
+
* The variable extractor is invoked on that captured container node to enrich
|
|
17
|
+
* the Variable symbol with name(s)/type/const/mutable metadata.
|
|
18
|
+
*
|
|
19
|
+
* NOTE: the const/final modifier (`const_builtin` / `final_builtin`) and the
|
|
20
|
+
* type annotation (`type_identifier`) are siblings of the captured container —
|
|
21
|
+
* they live on the parent (program), NOT inside it — so const-ness and the type
|
|
22
|
+
* are read from the captured node's parent. (This is why the previous
|
|
23
|
+
* `type_identifier`-as-direct-child read found nothing.)
|
|
15
24
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (gc?.type === 'identifier')
|
|
28
|
-
return gc.text;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// declaration → initialized_identifier_list → initialized_identifier → identifier
|
|
32
|
-
if (child?.type === 'initialized_identifier_list') {
|
|
33
|
-
for (let j = 0; j < child.namedChildCount; j++) {
|
|
34
|
-
const gc = child.namedChild(j);
|
|
35
|
-
if (gc?.type === 'initialized_identifier') {
|
|
36
|
-
const ident = gc.namedChildren.find((c) => c.type === 'identifier');
|
|
37
|
-
if (ident)
|
|
38
|
-
return ident.text;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
25
|
+
/** The `initialized_identifier` / `static_final_declaration` name children. */
|
|
26
|
+
function nameNodes(container) {
|
|
27
|
+
const out = [];
|
|
28
|
+
for (let i = 0; i < container.namedChildCount; i++) {
|
|
29
|
+
const entry = container.namedChild(i);
|
|
30
|
+
if (!entry)
|
|
31
|
+
continue;
|
|
32
|
+
if (entry.type === 'initialized_identifier' || entry.type === 'static_final_declaration') {
|
|
33
|
+
const ident = entry.firstNamedChild;
|
|
34
|
+
if (ident?.type === 'identifier')
|
|
35
|
+
out.push(ident);
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
|
-
return
|
|
38
|
+
return out;
|
|
44
39
|
}
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
function extractDartVarNames(node) {
|
|
41
|
+
return nameNodes(node).map((n) => n.text);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Scan the container's immediately-preceding siblings (the modifier / type
|
|
45
|
+
* nodes of THIS declaration), stopping at the previous statement's `;` so a
|
|
46
|
+
* neighbouring declaration's modifiers/type never bleed in. Top-level Dart
|
|
47
|
+
* declarations sit as loose siblings under `program` separated by `;`:
|
|
48
|
+
* final int count = 3; var name = 'x'; const a = 1, b = 2;
|
|
49
|
+
* so the leading `type_identifier` / `const_builtin` / `final_builtin` of a
|
|
50
|
+
* declaration are the siblings between the prior `;` and the captured container.
|
|
51
|
+
*/
|
|
52
|
+
function scanLeadingSiblings(node) {
|
|
53
|
+
const out = [];
|
|
54
|
+
let sib = node.previousSibling;
|
|
55
|
+
while (sib !== null && sib.type !== ';') {
|
|
56
|
+
out.push(sib);
|
|
57
|
+
sib = sib.previousSibling;
|
|
53
58
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The declared type annotation, read from the captured container's leading
|
|
63
|
+
* sibling `type_identifier`. Returns undefined for inferred (`var`)
|
|
64
|
+
* declarations, which have an `inferred_type` sibling instead.
|
|
65
|
+
*/
|
|
66
|
+
function extractDartVarType(node) {
|
|
67
|
+
for (const sib of scanLeadingSiblings(node)) {
|
|
68
|
+
if (sib.type === 'type_identifier')
|
|
69
|
+
return sib.text;
|
|
59
70
|
}
|
|
60
71
|
return undefined;
|
|
61
72
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (
|
|
73
|
+
/** Whether a `const_builtin` / `final_builtin` leads this declaration. */
|
|
74
|
+
function hasReadonlyModifier(node) {
|
|
75
|
+
for (const sib of scanLeadingSiblings(node)) {
|
|
76
|
+
if (sib.type === 'const_builtin' || sib.type === 'final_builtin')
|
|
66
77
|
return true;
|
|
67
78
|
}
|
|
68
79
|
return false;
|
|
@@ -71,24 +82,27 @@ export const dartVariableConfig = {
|
|
|
71
82
|
language: SupportedLanguages.Dart,
|
|
72
83
|
constNodeTypes: [],
|
|
73
84
|
staticNodeTypes: [],
|
|
74
|
-
|
|
75
|
-
|
|
85
|
+
// The two real top-level container shapes captured as @definition.variable.
|
|
86
|
+
variableNodeTypes: ['initialized_identifier_list', 'static_final_declaration_list'],
|
|
87
|
+
extractName: (node) => extractDartVarNames(node)[0],
|
|
88
|
+
extractNames: extractDartVarNames,
|
|
76
89
|
extractType: extractDartVarType,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!name)
|
|
80
|
-
return 'public';
|
|
81
|
-
// Dart convention: underscore prefix = library-private
|
|
90
|
+
extractVisibilityForName(_node, name) {
|
|
91
|
+
// Dart convention: underscore prefix = library-private.
|
|
82
92
|
return name.startsWith('_') ? 'private' : 'public';
|
|
83
93
|
},
|
|
84
|
-
|
|
85
|
-
|
|
94
|
+
extractVisibility(node) {
|
|
95
|
+
const first = extractDartVarNames(node)[0];
|
|
96
|
+
if (!first)
|
|
97
|
+
return 'public';
|
|
98
|
+
return first.startsWith('_') ? 'private' : 'public';
|
|
86
99
|
},
|
|
100
|
+
isConst: hasReadonlyModifier,
|
|
87
101
|
isStatic(_node) {
|
|
88
|
-
// Top-level Dart variables are not static
|
|
102
|
+
// Top-level Dart variables are not static.
|
|
89
103
|
return false;
|
|
90
104
|
},
|
|
91
105
|
isMutable(node) {
|
|
92
|
-
return !
|
|
106
|
+
return !hasReadonlyModifier(node);
|
|
93
107
|
},
|
|
94
108
|
};
|
|
@@ -15,7 +15,69 @@ import { extractSimpleTypeName } from '../../type-extractors/shared.js';
|
|
|
15
15
|
*
|
|
16
16
|
* Visibility: uppercase first letter = exported (public), lowercase = unexported (package).
|
|
17
17
|
*/
|
|
18
|
+
function goVisibilityForName(name) {
|
|
19
|
+
const firstChar = name.charAt(0);
|
|
20
|
+
return firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase()
|
|
21
|
+
? 'public'
|
|
22
|
+
: 'package';
|
|
23
|
+
}
|
|
24
|
+
function collectGoSpecNames(spec) {
|
|
25
|
+
const names = [];
|
|
26
|
+
for (let i = 0; i < spec.namedChildCount; i++) {
|
|
27
|
+
const child = spec.namedChild(i);
|
|
28
|
+
if (!child)
|
|
29
|
+
continue;
|
|
30
|
+
if (child.type === 'identifier') {
|
|
31
|
+
names.push(child.text);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
return names;
|
|
37
|
+
}
|
|
38
|
+
function collectGoSpecs(node) {
|
|
39
|
+
const specs = [];
|
|
40
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
41
|
+
const child = node.namedChild(i);
|
|
42
|
+
if (child?.type === 'var_spec' || child?.type === 'const_spec') {
|
|
43
|
+
specs.push(child);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (child?.type === 'var_spec_list') {
|
|
47
|
+
specs.push(...collectGoSpecs(child));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return specs;
|
|
51
|
+
}
|
|
52
|
+
function collectGoDeclarationNames(node) {
|
|
53
|
+
if (node.type === 'short_var_declaration') {
|
|
54
|
+
const left = node.childForFieldName('left');
|
|
55
|
+
if (left?.type !== 'expression_list')
|
|
56
|
+
return [];
|
|
57
|
+
return left.namedChildren
|
|
58
|
+
.filter((child) => child.type === 'identifier')
|
|
59
|
+
.map((child) => child.text);
|
|
60
|
+
}
|
|
61
|
+
const names = [];
|
|
62
|
+
for (const spec of collectGoSpecs(node))
|
|
63
|
+
names.push(...collectGoSpecNames(spec));
|
|
64
|
+
return names;
|
|
65
|
+
}
|
|
66
|
+
function findGoSpecForName(node, name) {
|
|
67
|
+
for (const spec of collectGoSpecs(node)) {
|
|
68
|
+
if (collectGoSpecNames(spec).includes(name))
|
|
69
|
+
return spec;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
function extractGoSpecType(spec) {
|
|
74
|
+
const typeNode = spec.childForFieldName('type');
|
|
75
|
+
return typeNode ? (extractSimpleTypeName(typeNode) ?? typeNode.text?.trim()) : undefined;
|
|
76
|
+
}
|
|
18
77
|
function extractGoVarName(node) {
|
|
78
|
+
const firstName = collectGoDeclarationNames(node)[0];
|
|
79
|
+
if (firstName)
|
|
80
|
+
return firstName;
|
|
19
81
|
// var_declaration/const_declaration → var_spec/const_spec → identifier
|
|
20
82
|
for (let i = 0; i < node.namedChildCount; i++) {
|
|
21
83
|
const child = node.namedChild(i);
|
|
@@ -43,13 +105,10 @@ function extractGoVarName(node) {
|
|
|
43
105
|
return undefined;
|
|
44
106
|
}
|
|
45
107
|
function extractGoVarType(node) {
|
|
46
|
-
for (
|
|
47
|
-
const
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
if (typeNode)
|
|
51
|
-
return extractSimpleTypeName(typeNode) ?? typeNode.text?.trim();
|
|
52
|
-
}
|
|
108
|
+
for (const spec of collectGoSpecs(node)) {
|
|
109
|
+
const typeName = extractGoSpecType(spec);
|
|
110
|
+
if (typeName)
|
|
111
|
+
return typeName;
|
|
53
112
|
}
|
|
54
113
|
return undefined;
|
|
55
114
|
}
|
|
@@ -60,6 +119,10 @@ export const goVariableConfig = {
|
|
|
60
119
|
variableNodeTypes: ['var_declaration', 'short_var_declaration'],
|
|
61
120
|
extractName: extractGoVarName,
|
|
62
121
|
extractType: extractGoVarType,
|
|
122
|
+
extractTypeForName(node, name) {
|
|
123
|
+
const spec = findGoSpecForName(node, name);
|
|
124
|
+
return spec ? extractGoSpecType(spec) : undefined;
|
|
125
|
+
},
|
|
63
126
|
extractVisibility(node) {
|
|
64
127
|
const name = extractGoVarName(node);
|
|
65
128
|
if (!name)
|
|
@@ -70,6 +133,10 @@ export const goVariableConfig = {
|
|
|
70
133
|
? 'public'
|
|
71
134
|
: 'package';
|
|
72
135
|
},
|
|
136
|
+
extractNames: collectGoDeclarationNames,
|
|
137
|
+
extractVisibilityForName(_node, name) {
|
|
138
|
+
return goVisibilityForName(name);
|
|
139
|
+
},
|
|
73
140
|
isConst(node) {
|
|
74
141
|
return node.type === 'const_declaration';
|
|
75
142
|
},
|
|
@@ -46,6 +46,18 @@ export const javaVariableConfig = {
|
|
|
46
46
|
return !hasModifier(node, 'modifiers', 'final');
|
|
47
47
|
},
|
|
48
48
|
};
|
|
49
|
+
/** Single-binding name of a Kotlin property_declaration:
|
|
50
|
+
* property_declaration → variable_declaration → simple_identifier. */
|
|
51
|
+
function kotlinSingleVarName(node) {
|
|
52
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
53
|
+
const child = node.namedChild(i);
|
|
54
|
+
if (child?.type === 'variable_declaration') {
|
|
55
|
+
const ident = child.namedChildren.find((c) => c.type === 'simple_identifier');
|
|
56
|
+
return ident?.text;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
49
61
|
/**
|
|
50
62
|
* Kotlin variable extraction config.
|
|
51
63
|
*
|
|
@@ -57,16 +69,31 @@ export const kotlinVariableConfig = {
|
|
|
57
69
|
constNodeTypes: [],
|
|
58
70
|
staticNodeTypes: [],
|
|
59
71
|
variableNodeTypes: ['property_declaration'],
|
|
60
|
-
extractName
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
extractName: kotlinSingleVarName,
|
|
73
|
+
// F51 (issue #1919): destructuring declarations bind several names at one
|
|
74
|
+
// node. `val (a, b) = pair` parses as
|
|
75
|
+
// property_declaration → multi_variable_declaration
|
|
76
|
+
// → variable_declaration → simple_identifier (one per name)
|
|
77
|
+
// (real-parse-verified). The single-name `extractName` above misses these
|
|
78
|
+
// entirely. When a multi_variable_declaration is present we return EACH
|
|
79
|
+
// bound name; the Kotlin `_` placeholder is a discard and is skipped. A
|
|
80
|
+
// plain single declaration falls through to the existing variable_declaration
|
|
81
|
+
// shape so `val x = 1` still yields exactly one name (no double-count).
|
|
82
|
+
extractNames(node) {
|
|
83
|
+
const multi = node.namedChildren.find((c) => c.type === 'multi_variable_declaration');
|
|
84
|
+
if (multi !== undefined) {
|
|
85
|
+
const names = [];
|
|
86
|
+
for (const decl of multi.namedChildren) {
|
|
87
|
+
if (decl.type !== 'variable_declaration')
|
|
88
|
+
continue;
|
|
89
|
+
const ident = decl.namedChildren.find((c) => c.type === 'simple_identifier');
|
|
90
|
+
if (ident !== undefined && ident.text !== '_')
|
|
91
|
+
names.push(ident.text);
|
|
67
92
|
}
|
|
93
|
+
return names;
|
|
68
94
|
}
|
|
69
|
-
|
|
95
|
+
const single = kotlinSingleVarName(node);
|
|
96
|
+
return single !== undefined ? [single] : [];
|
|
70
97
|
},
|
|
71
98
|
extractType(node) {
|
|
72
99
|
// Look for type annotation in variable_declaration child
|