gitnexus 1.6.2-rc.9 → 1.6.2

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.
Files changed (220) hide show
  1. package/dist/_shared/lbug/schema-constants.d.ts +1 -1
  2. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  3. package/dist/_shared/lbug/schema-constants.js +1 -0
  4. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  5. package/dist/_shared/mro-strategy.d.ts +38 -16
  6. package/dist/_shared/mro-strategy.d.ts.map +1 -1
  7. package/dist/cli/ai-context.js +0 -58
  8. package/dist/cli/analyze.js +3 -0
  9. package/dist/core/embeddings/ast-utils.d.ts +22 -0
  10. package/dist/core/embeddings/ast-utils.js +105 -0
  11. package/dist/core/embeddings/character-chunk.d.ts +12 -0
  12. package/dist/core/embeddings/character-chunk.js +43 -0
  13. package/dist/core/embeddings/chunker.d.ts +14 -0
  14. package/dist/core/embeddings/chunker.js +234 -0
  15. package/dist/core/embeddings/embedding-pipeline.d.ts +20 -24
  16. package/dist/core/embeddings/embedding-pipeline.js +176 -107
  17. package/dist/core/embeddings/line-index.d.ts +7 -0
  18. package/dist/core/embeddings/line-index.js +42 -0
  19. package/dist/core/embeddings/server-mapping.d.ts +15 -0
  20. package/dist/core/embeddings/server-mapping.js +33 -0
  21. package/dist/core/embeddings/structural-extractor.d.ts +15 -0
  22. package/dist/core/embeddings/structural-extractor.js +58 -0
  23. package/dist/core/embeddings/text-generator.d.ts +20 -13
  24. package/dist/core/embeddings/text-generator.js +151 -119
  25. package/dist/core/embeddings/types.d.ts +81 -3
  26. package/dist/core/embeddings/types.js +105 -3
  27. package/dist/core/group/extractors/http-patterns/node.js +130 -0
  28. package/dist/core/ingestion/call-extractors/configs/c-cpp.d.ts +3 -0
  29. package/dist/core/ingestion/call-extractors/configs/c-cpp.js +8 -0
  30. package/dist/core/ingestion/call-extractors/configs/csharp.d.ts +2 -0
  31. package/dist/core/ingestion/call-extractors/configs/csharp.js +6 -0
  32. package/dist/core/ingestion/call-extractors/configs/dart.d.ts +2 -0
  33. package/dist/core/ingestion/call-extractors/configs/dart.js +5 -0
  34. package/dist/core/ingestion/call-extractors/configs/go.d.ts +2 -0
  35. package/dist/core/ingestion/call-extractors/configs/go.js +5 -0
  36. package/dist/core/ingestion/call-extractors/configs/jvm.d.ts +3 -0
  37. package/dist/core/ingestion/call-extractors/configs/jvm.js +51 -0
  38. package/dist/core/ingestion/call-extractors/configs/php.d.ts +2 -0
  39. package/dist/core/ingestion/call-extractors/configs/php.js +5 -0
  40. package/dist/core/ingestion/call-extractors/configs/python.d.ts +2 -0
  41. package/dist/core/ingestion/call-extractors/configs/python.js +5 -0
  42. package/dist/core/ingestion/call-extractors/configs/ruby.d.ts +2 -0
  43. package/dist/core/ingestion/call-extractors/configs/ruby.js +5 -0
  44. package/dist/core/ingestion/call-extractors/configs/rust.d.ts +2 -0
  45. package/dist/core/ingestion/call-extractors/configs/rust.js +5 -0
  46. package/dist/core/ingestion/call-extractors/configs/swift.d.ts +2 -0
  47. package/dist/core/ingestion/call-extractors/configs/swift.js +5 -0
  48. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.d.ts +3 -0
  49. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.js +8 -0
  50. package/dist/core/ingestion/call-extractors/generic.d.ts +5 -0
  51. package/dist/core/ingestion/call-extractors/generic.js +59 -0
  52. package/dist/core/ingestion/call-processor.d.ts +2 -4
  53. package/dist/core/ingestion/call-processor.js +221 -89
  54. package/dist/core/ingestion/call-routing.d.ts +8 -12
  55. package/dist/core/ingestion/call-routing.js +13 -34
  56. package/dist/core/ingestion/call-types.d.ts +135 -0
  57. package/dist/core/ingestion/call-types.js +2 -0
  58. package/dist/core/ingestion/class-extractors/configs/c-cpp.d.ts +3 -0
  59. package/dist/core/ingestion/class-extractors/configs/c-cpp.js +11 -0
  60. package/dist/core/ingestion/class-extractors/configs/csharp.d.ts +2 -0
  61. package/dist/core/ingestion/class-extractors/configs/csharp.js +21 -0
  62. package/dist/core/ingestion/class-extractors/configs/dart.d.ts +2 -0
  63. package/dist/core/ingestion/class-extractors/configs/dart.js +7 -0
  64. package/dist/core/ingestion/class-extractors/configs/go.d.ts +2 -0
  65. package/dist/core/ingestion/class-extractors/configs/go.js +20 -0
  66. package/dist/core/ingestion/class-extractors/configs/jvm.d.ts +3 -0
  67. package/dist/core/ingestion/class-extractors/configs/jvm.js +35 -0
  68. package/dist/core/ingestion/class-extractors/configs/php.d.ts +2 -0
  69. package/dist/core/ingestion/class-extractors/configs/php.js +7 -0
  70. package/dist/core/ingestion/class-extractors/configs/python.d.ts +2 -0
  71. package/dist/core/ingestion/class-extractors/configs/python.js +7 -0
  72. package/dist/core/ingestion/class-extractors/configs/ruby.d.ts +2 -0
  73. package/dist/core/ingestion/class-extractors/configs/ruby.js +7 -0
  74. package/dist/core/ingestion/class-extractors/configs/rust.d.ts +2 -0
  75. package/dist/core/ingestion/class-extractors/configs/rust.js +7 -0
  76. package/dist/core/ingestion/class-extractors/configs/swift.d.ts +2 -0
  77. package/dist/core/ingestion/class-extractors/configs/swift.js +18 -0
  78. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.d.ts +4 -0
  79. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.js +28 -0
  80. package/dist/core/ingestion/field-types.d.ts +1 -1
  81. package/dist/core/ingestion/heritage-extractors/configs/go.d.ts +13 -0
  82. package/dist/core/ingestion/heritage-extractors/configs/go.js +20 -0
  83. package/dist/core/ingestion/heritage-extractors/configs/ruby.d.ts +18 -0
  84. package/dist/core/ingestion/heritage-extractors/configs/ruby.js +65 -0
  85. package/dist/core/ingestion/heritage-extractors/generic.d.ts +23 -0
  86. package/dist/core/ingestion/heritage-extractors/generic.js +47 -0
  87. package/dist/core/ingestion/heritage-processor.d.ts +9 -0
  88. package/dist/core/ingestion/heritage-processor.js +120 -85
  89. package/dist/core/ingestion/heritage-types.d.ts +73 -0
  90. package/dist/core/ingestion/heritage-types.js +2 -0
  91. package/dist/core/ingestion/import-resolvers/configs/c-cpp.d.ts +7 -0
  92. package/dist/core/ingestion/import-resolvers/configs/c-cpp.js +14 -0
  93. package/dist/core/ingestion/import-resolvers/configs/csharp.d.ts +8 -0
  94. package/dist/core/ingestion/import-resolvers/configs/csharp.js +27 -0
  95. package/dist/core/ingestion/import-resolvers/configs/dart.d.ts +17 -0
  96. package/dist/core/ingestion/import-resolvers/{dart.js → configs/dart.js} +26 -16
  97. package/dist/core/ingestion/import-resolvers/configs/go.d.ts +8 -0
  98. package/dist/core/ingestion/import-resolvers/configs/go.js +26 -0
  99. package/dist/core/ingestion/import-resolvers/configs/jvm.d.ts +13 -0
  100. package/dist/core/ingestion/import-resolvers/configs/jvm.js +68 -0
  101. package/dist/core/ingestion/import-resolvers/configs/php.d.ts +8 -0
  102. package/dist/core/ingestion/import-resolvers/configs/php.js +15 -0
  103. package/dist/core/ingestion/import-resolvers/configs/python.d.ts +12 -0
  104. package/dist/core/ingestion/import-resolvers/configs/python.js +41 -0
  105. package/dist/core/ingestion/import-resolvers/configs/ruby.d.ts +8 -0
  106. package/dist/core/ingestion/import-resolvers/configs/ruby.js +16 -0
  107. package/dist/core/ingestion/import-resolvers/configs/rust.d.ts +8 -0
  108. package/dist/core/ingestion/import-resolvers/configs/rust.js +54 -0
  109. package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +8 -0
  110. package/dist/core/ingestion/import-resolvers/{swift.js → configs/swift.js} +10 -5
  111. package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.d.ts +9 -0
  112. package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.js +23 -0
  113. package/dist/core/ingestion/import-resolvers/csharp.d.ts +4 -5
  114. package/dist/core/ingestion/import-resolvers/csharp.js +4 -20
  115. package/dist/core/ingestion/import-resolvers/go.d.ts +4 -5
  116. package/dist/core/ingestion/import-resolvers/go.js +4 -19
  117. package/dist/core/ingestion/import-resolvers/jvm.d.ts +5 -10
  118. package/dist/core/ingestion/import-resolvers/jvm.js +5 -58
  119. package/dist/core/ingestion/import-resolvers/php.d.ts +4 -5
  120. package/dist/core/ingestion/import-resolvers/php.js +4 -7
  121. package/dist/core/ingestion/import-resolvers/python.d.ts +3 -6
  122. package/dist/core/ingestion/import-resolvers/python.js +3 -18
  123. package/dist/core/ingestion/import-resolvers/resolver-factory.d.ts +24 -0
  124. package/dist/core/ingestion/import-resolvers/resolver-factory.js +33 -0
  125. package/dist/core/ingestion/import-resolvers/ruby.d.ts +4 -5
  126. package/dist/core/ingestion/import-resolvers/ruby.js +4 -7
  127. package/dist/core/ingestion/import-resolvers/rust.d.ts +4 -5
  128. package/dist/core/ingestion/import-resolvers/rust.js +4 -47
  129. package/dist/core/ingestion/import-resolvers/standard.d.ts +3 -9
  130. package/dist/core/ingestion/import-resolvers/standard.js +7 -8
  131. package/dist/core/ingestion/import-resolvers/types.d.ts +24 -0
  132. package/dist/core/ingestion/language-provider.d.ts +80 -0
  133. package/dist/core/ingestion/languages/c-cpp.js +18 -12
  134. package/dist/core/ingestion/languages/csharp.js +13 -21
  135. package/dist/core/ingestion/languages/dart.js +13 -7
  136. package/dist/core/ingestion/languages/go.js +14 -20
  137. package/dist/core/ingestion/languages/java.js +13 -18
  138. package/dist/core/ingestion/languages/kotlin.js +13 -13
  139. package/dist/core/ingestion/languages/php.js +13 -7
  140. package/dist/core/ingestion/languages/python.js +13 -7
  141. package/dist/core/ingestion/languages/ruby.js +103 -22
  142. package/dist/core/ingestion/languages/rust.js +13 -7
  143. package/dist/core/ingestion/languages/swift.js +13 -18
  144. package/dist/core/ingestion/languages/typescript.js +18 -23
  145. package/dist/core/ingestion/languages/vue.js +13 -17
  146. package/dist/core/ingestion/model/heritage-map.d.ts +35 -0
  147. package/dist/core/ingestion/model/heritage-map.js +110 -9
  148. package/dist/core/ingestion/model/index.d.ts +2 -2
  149. package/dist/core/ingestion/model/index.js +1 -1
  150. package/dist/core/ingestion/model/resolve.d.ts +33 -28
  151. package/dist/core/ingestion/model/resolve.js +111 -27
  152. package/dist/core/ingestion/parsing-processor.d.ts +1 -2
  153. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +1 -0
  154. package/dist/core/ingestion/pipeline-phases/parse-impl.js +9 -3
  155. package/dist/core/ingestion/pipeline-phases/parse.d.ts +7 -0
  156. package/dist/core/ingestion/pipeline.d.ts +11 -0
  157. package/dist/core/ingestion/pipeline.js +9 -2
  158. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  159. package/dist/core/ingestion/tree-sitter-queries.js +81 -0
  160. package/dist/core/ingestion/type-env.d.ts +1 -1
  161. package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -1
  162. package/dist/core/ingestion/utils/ast-helpers.js +22 -2
  163. package/dist/core/ingestion/utils/ruby-self-call.d.ts +52 -0
  164. package/dist/core/ingestion/utils/ruby-self-call.js +59 -0
  165. package/dist/core/ingestion/variable-extractors/configs/c-cpp.d.ts +3 -0
  166. package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +81 -0
  167. package/dist/core/ingestion/variable-extractors/configs/csharp.d.ts +9 -0
  168. package/dist/core/ingestion/variable-extractors/configs/csharp.js +63 -0
  169. package/dist/core/ingestion/variable-extractors/configs/dart.d.ts +2 -0
  170. package/dist/core/ingestion/variable-extractors/configs/dart.js +94 -0
  171. package/dist/core/ingestion/variable-extractors/configs/go.d.ts +2 -0
  172. package/dist/core/ingestion/variable-extractors/configs/go.js +83 -0
  173. package/dist/core/ingestion/variable-extractors/configs/jvm.d.ts +18 -0
  174. package/dist/core/ingestion/variable-extractors/configs/jvm.js +115 -0
  175. package/dist/core/ingestion/variable-extractors/configs/php.d.ts +14 -0
  176. package/dist/core/ingestion/variable-extractors/configs/php.js +58 -0
  177. package/dist/core/ingestion/variable-extractors/configs/python.d.ts +2 -0
  178. package/dist/core/ingestion/variable-extractors/configs/python.js +101 -0
  179. package/dist/core/ingestion/variable-extractors/configs/ruby.d.ts +11 -0
  180. package/dist/core/ingestion/variable-extractors/configs/ruby.js +52 -0
  181. package/dist/core/ingestion/variable-extractors/configs/rust.d.ts +2 -0
  182. package/dist/core/ingestion/variable-extractors/configs/rust.js +76 -0
  183. package/dist/core/ingestion/variable-extractors/configs/swift.d.ts +2 -0
  184. package/dist/core/ingestion/variable-extractors/configs/swift.js +88 -0
  185. package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.d.ts +3 -0
  186. package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.js +83 -0
  187. package/dist/core/ingestion/variable-extractors/generic.d.ts +5 -0
  188. package/dist/core/ingestion/variable-extractors/generic.js +80 -0
  189. package/dist/core/ingestion/variable-types.d.ts +82 -0
  190. package/dist/core/ingestion/variable-types.js +2 -0
  191. package/dist/core/ingestion/workers/parse-worker.js +244 -217
  192. package/dist/core/ingestion/workers/worker-pool.js +3 -0
  193. package/dist/core/lbug/csv-generator.js +1 -0
  194. package/dist/core/lbug/lbug-adapter.d.ts +4 -5
  195. package/dist/core/lbug/lbug-adapter.js +38 -14
  196. package/dist/core/lbug/schema.d.ts +2 -1
  197. package/dist/core/lbug/schema.js +10 -1
  198. package/dist/core/run-analyze.js +6 -7
  199. package/dist/core/tree-sitter/parser-loader.d.ts +3 -0
  200. package/dist/core/tree-sitter/parser-loader.js +17 -8
  201. package/dist/mcp/local/local-backend.js +29 -19
  202. package/dist/server/api.js +2 -0
  203. package/dist/types/pipeline.d.ts +6 -0
  204. package/package.json +8 -7
  205. package/scripts/build-tree-sitter-proto.cjs +82 -0
  206. package/vendor/node_modules/node-addon-api/node_addon_api.Makefile +6 -0
  207. package/vendor/node_modules/node-addon-api/node_addon_api.target.mk +104 -0
  208. package/vendor/node_modules/node-addon-api/node_addon_api_except.target.mk +108 -0
  209. package/vendor/node_modules/node-addon-api/node_addon_api_except_all.target.mk +104 -0
  210. package/vendor/node_modules/node-addon-api/node_addon_api_maybe.target.mk +104 -0
  211. package/vendor/tree-sitter-proto/package.json +1 -7
  212. package/dist/core/ingestion/call-sites/extract-language-call-site.d.ts +0 -10
  213. package/dist/core/ingestion/call-sites/extract-language-call-site.js +0 -22
  214. package/dist/core/ingestion/call-sites/java.d.ts +0 -9
  215. package/dist/core/ingestion/call-sites/java.js +0 -30
  216. package/dist/core/ingestion/import-resolvers/dart.d.ts +0 -7
  217. package/dist/core/ingestion/import-resolvers/swift.d.ts +0 -7
  218. package/dist/core/ingestion/import-resolvers/vue.d.ts +0 -8
  219. package/dist/core/ingestion/import-resolvers/vue.js +0 -9
  220. package/scripts/preinstall-cleanup.cjs +0 -34
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Rust module import resolution.
3
- * Handles crate::, super::, self:: prefix paths and :: separators.
2
+ * Rust module import resolution — internal helpers.
3
+ *
4
+ * Strategy lives in configs/rust.ts.
5
+ * This file contains shared helpers used by the strategy and standard.ts.
4
6
  */
5
- import { SupportedLanguages } from '../../../_shared/index.js';
6
- import { resolveStandard } from './standard.js';
7
7
  /**
8
8
  * Resolve Rust use-path to a file (low-level helper).
9
9
  * Handles crate::, super::, self:: prefixes and :: path separators.
@@ -73,46 +73,3 @@ export function tryRustModulePath(modulePath, allFiles) {
73
73
  }
74
74
  return null;
75
75
  }
76
- /** Rust: expand grouped imports: use {crate::a, crate::b} and use crate::models::{User, Repo}. */
77
- export function resolveRustImport(rawImportPath, filePath, ctx) {
78
- // Top-level grouped: use {crate::a, crate::b}
79
- if (rawImportPath.startsWith('{') && rawImportPath.endsWith('}')) {
80
- const inner = rawImportPath.slice(1, -1);
81
- const parts = inner
82
- .split(',')
83
- .map((p) => p.trim())
84
- .filter(Boolean);
85
- const resolved = [];
86
- for (const part of parts) {
87
- const r = resolveRustImportInternal(filePath, part, ctx.allFilePaths);
88
- if (r)
89
- resolved.push(r);
90
- }
91
- return resolved.length > 0 ? { kind: 'files', files: resolved } : null;
92
- }
93
- // Scoped grouped: use crate::models::{User, Repo}
94
- const braceIdx = rawImportPath.indexOf('::{');
95
- if (braceIdx !== -1 && rawImportPath.endsWith('}')) {
96
- const pathPrefix = rawImportPath.substring(0, braceIdx);
97
- const braceContent = rawImportPath.substring(braceIdx + 3, rawImportPath.length - 1);
98
- const items = braceContent
99
- .split(',')
100
- .map((s) => s.trim())
101
- .filter(Boolean);
102
- const resolved = [];
103
- for (const item of items) {
104
- // Handle `use crate::models::{User, Repo as R}` — strip alias for resolution
105
- const itemName = item.includes(' as ') ? item.split(' as ')[0].trim() : item;
106
- const r = resolveRustImportInternal(filePath, `${pathPrefix}::${itemName}`, ctx.allFilePaths);
107
- if (r)
108
- resolved.push(r);
109
- }
110
- if (resolved.length > 0)
111
- return { kind: 'files', files: resolved };
112
- // Fallback: resolve the prefix path itself (e.g. crate::models -> models.rs)
113
- const prefixResult = resolveRustImportInternal(filePath, pathPrefix, ctx.allFilePaths);
114
- if (prefixResult)
115
- return { kind: 'files', files: [prefixResult] };
116
- }
117
- return resolveStandard(rawImportPath, filePath, ctx, SupportedLanguages.Rust);
118
- }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import type { SuffixIndex } from './utils.js';
7
7
  import { SupportedLanguages } from '../../../_shared/index.js';
8
- import type { ImportResult, ImportResolverFn, ResolveCtx } from './types.js';
8
+ import type { ImportResult, ImportResolverStrategy, ResolveCtx } from './types.js';
9
9
  import type { TsconfigPaths } from '../language-config.js';
10
10
  /** Max entries in the resolve cache. Beyond this, entries are evicted.
11
11
  * 100K entries ≈ 15MB — covers the most common import patterns. */
@@ -26,11 +26,5 @@ export declare const resolveImportPath: (currentFile: string, importPath: string
26
26
  * Handles relative imports, tsconfig path aliases, and suffix matching.
27
27
  */
28
28
  export declare function resolveStandard(rawImportPath: string, filePath: string, ctx: ResolveCtx, language: SupportedLanguages): ImportResult;
29
- /** JavaScript: standard single-file resolution. */
30
- export declare const resolveJavascriptImport: ImportResolverFn;
31
- /** TypeScript: standard single-file resolution. */
32
- export declare const resolveTypescriptImport: ImportResolverFn;
33
- /** C: standard single-file resolution for #include directives. */
34
- export declare const resolveCImport: ImportResolverFn;
35
- /** C++: standard single-file resolution for #include directives. */
36
- export declare const resolveCppImport: ImportResolverFn;
29
+ /** Create a reusable standard-resolution strategy for a given language. */
30
+ export declare function createStandardStrategy(language: SupportedLanguages): ImportResolverStrategy;
@@ -133,11 +133,10 @@ export function resolveStandard(rawImportPath, filePath, ctx, language) {
133
133
  const resolvedPath = resolveImportPath(filePath, rawImportPath, ctx.allFilePaths, ctx.allFileList, ctx.normalizedFileList, ctx.resolveCache, language, ctx.configs.tsconfigPaths, ctx.index);
134
134
  return resolvedPath ? { kind: 'files', files: [resolvedPath] } : null;
135
135
  }
136
- /** JavaScript: standard single-file resolution. */
137
- export const resolveJavascriptImport = (raw, fp, ctx) => resolveStandard(raw, fp, ctx, SupportedLanguages.JavaScript);
138
- /** TypeScript: standard single-file resolution. */
139
- export const resolveTypescriptImport = (raw, fp, ctx) => resolveStandard(raw, fp, ctx, SupportedLanguages.TypeScript);
140
- /** C: standard single-file resolution for #include directives. */
141
- export const resolveCImport = (raw, fp, ctx) => resolveStandard(raw, fp, ctx, SupportedLanguages.C);
142
- /** C++: standard single-file resolution for #include directives. */
143
- export const resolveCppImport = (raw, fp, ctx) => resolveStandard(raw, fp, ctx, SupportedLanguages.CPlusPlus);
136
+ // ============================================================================
137
+ // Strategy factory composable hook for ImportResolutionConfig
138
+ // ============================================================================
139
+ /** Create a reusable standard-resolution strategy for a given language. */
140
+ export function createStandardStrategy(language) {
141
+ return (raw, fp, ctx) => resolveStandard(raw, fp, ctx, language);
142
+ }
@@ -6,6 +6,7 @@
6
6
  import type { TsconfigPaths, GoModuleConfig, CSharpProjectConfig, ComposerConfig } from '../language-config.js';
7
7
  import type { SwiftPackageConfig } from '../language-config.js';
8
8
  import type { SuffixIndex } from './utils.js';
9
+ import type { SupportedLanguages } from '../../../_shared/index.js';
9
10
  /**
10
11
  * Result of resolving an import via language-specific dispatch.
11
12
  * - 'files': resolved to one or more files -> add to ImportMap
@@ -42,3 +43,26 @@ export interface ResolveCtx extends ImportResolutionContext {
42
43
  }
43
44
  /** Per-language import resolver -- function alias matching ExportChecker/CallRouter pattern. */
44
45
  export type ImportResolverFn = (rawImportPath: string, filePath: string, resolveCtx: ResolveCtx) => ImportResult;
46
+ /**
47
+ * A single import resolution strategy — one step in a composable chain.
48
+ * Same signature as ImportResolverFn. Returns null to let the next strategy
49
+ * in the chain try; returns a result (even with empty files) to stop the chain.
50
+ */
51
+ export type ImportResolverStrategy = ImportResolverFn;
52
+ /**
53
+ * Declarative config for composable import resolution — mirrors the
54
+ * MethodExtractionConfig / CallExtractionConfig pattern.
55
+ *
56
+ * Each language declares an ordered list of strategies to try.
57
+ * The factory (`createImportResolver`) chains them: first non-null result wins.
58
+ */
59
+ export interface ImportResolutionConfig {
60
+ /**
61
+ * Documentation-only metadata identifying which language this config serves.
62
+ * **Not used by `createImportResolver`** — the factory only iterates `strategies`.
63
+ * Useful for logging, debugging, and compile-time exhaustiveness checks when
64
+ * mapping `SupportedLanguages → ImportResolutionConfig` in language providers.
65
+ */
66
+ readonly language: SupportedLanguages;
67
+ readonly strategies: readonly ImportResolverStrategy[];
68
+ }
@@ -11,10 +11,13 @@
11
11
  import type { SupportedLanguages, MroStrategy } from '../../_shared/index.js';
12
12
  import type { LanguageTypeConfig } from './type-extractors/types.js';
13
13
  import type { CallRouter } from './call-routing.js';
14
+ import type { CallExtractor, DispatchDecision, ImplicitReceiverOverride, ReceiverEnriched } from './call-types.js';
14
15
  import type { ClassExtractor } from './class-types.js';
15
16
  import type { ExportChecker } from './export-detection.js';
16
17
  import type { FieldExtractor } from './field-extractor.js';
18
+ import type { HeritageExtractor } from './heritage-types.js';
17
19
  import type { MethodExtractor } from './method-types.js';
20
+ import type { VariableExtractor } from './variable-types.js';
18
21
  import type { ImportResolverFn } from './import-resolvers/types.js';
19
22
  import type { NamedBindingExtractorFn } from './named-bindings/types.js';
20
23
  import type { SyntaxNode } from './utils/ast-helpers.js';
@@ -119,6 +122,12 @@ interface LanguageProviderConfig {
119
122
  /** MRO strategy for multiple inheritance resolution.
120
123
  * Default: 'first-wins'. */
121
124
  readonly mroStrategy?: MroStrategy;
125
+ /** Call extractor for extracting call site information (calledName, callForm,
126
+ * receiverName, argCount, mixed chains) from @call / @call.name captures.
127
+ * Produced by createCallExtractor() with a per-language CallExtractionConfig.
128
+ * Default: undefined — if unset, no calls are extracted for this language.
129
+ * All tree-sitter providers MUST supply this. */
130
+ readonly callExtractor?: CallExtractor;
122
131
  /** Field extractor for extracting field/property definitions from class/struct
123
132
  * declarations. Produces FieldInfo[] with name, type, visibility, static,
124
133
  * readonly metadata. Default: undefined (no field extraction). */
@@ -127,10 +136,21 @@ interface LanguageProviderConfig {
127
136
  * declarations. Produces MethodInfo[] with name, parameters, visibility, isAbstract,
128
137
  * isFinal, annotations metadata. Default: undefined (no method extraction). */
129
138
  readonly methodExtractor?: MethodExtractor;
139
+ /** Variable extractor for extracting metadata from module/file-scoped variable,
140
+ * constant, and static declarations. Produces VariableInfo with type, visibility,
141
+ * isConst, isStatic, isMutable metadata. Default: undefined (no variable extraction). */
142
+ readonly variableExtractor?: VariableExtractor;
130
143
  /** Class/type extractor for deriving canonical qualified names for class-like symbols.
131
144
  * Uses the same provider-driven strategy pattern as method/field extraction so
132
145
  * namespace/package/module rules stay language-specific. */
133
146
  readonly classExtractor?: ClassExtractor;
147
+ /** Heritage extractor for extracting extends/implements/trait-impl relationships
148
+ * from tree-sitter @heritage.* captures and call-based heritage (e.g., Ruby
149
+ * include/extend/prepend). Produced by createHeritageExtractor() — pass a
150
+ * SupportedLanguages value for default behaviour or a full
151
+ * HeritageExtractionConfig for languages with custom hooks (Go, Ruby).
152
+ * All tree-sitter providers MUST supply this. */
153
+ readonly heritageExtractor?: HeritageExtractor;
134
154
  /** Extract a semantic description for a definition node (e.g., PHP Eloquent
135
155
  * property arrays, relation method descriptions).
136
156
  * Default: undefined (no description extraction). */
@@ -139,6 +159,66 @@ interface LanguageProviderConfig {
139
159
  * When true, the worker extracts routes via the language's route extraction logic.
140
160
  * Default: undefined (no route files). */
141
161
  readonly isRouteFile?: (filePath: string) => boolean;
162
+ /**
163
+ * DAG stage 3 hook: synthesize an implicit receiver when the call site omits one.
164
+ *
165
+ * Runs after shared inference (TypeEnv → constructor-map → class-as-receiver →
166
+ * mixed-chain). Return an `ImplicitReceiverOverride` to overlay all fields onto
167
+ * `ReceiverEnriched`; return null to keep current state and proceed to stage 4.
168
+ *
169
+ * Constraints: MUST return null when an explicit receiver is already set, at
170
+ * top-level scope, or for built-in methods. Do not mutate input params.
171
+ * `hint` is opaque to shared stages; consumed by this language's `selectDispatch`.
172
+ *
173
+ * Ruby example: bare `serialize` in `Account#call_serialize` →
174
+ * `{ callForm: 'member', receiverName: 'self', receiverTypeName: 'Account',
175
+ * receiverSource: 'implicit-self', hint: 'instance' }`
176
+ *
177
+ * @see call-types.ts § ImplicitReceiverOverride
178
+ * @see selectDispatch (stage 4, reads the hint)
179
+ *
180
+ * Default: undefined (no implicit-receiver inference).
181
+ */
182
+ readonly inferImplicitReceiver?: (params: {
183
+ readonly calledName: string;
184
+ readonly callForm: 'free' | 'member' | 'constructor' | undefined;
185
+ readonly receiverName: string | undefined;
186
+ readonly receiverTypeName: string | undefined;
187
+ readonly callNode: SyntaxNode;
188
+ readonly filePath: string;
189
+ }) => ImplicitReceiverOverride | null;
190
+ /**
191
+ * DAG stage 4 hook: decide dispatch strategy (primary path, fallback, MRO view).
192
+ *
193
+ * Runs after stage 3. Return a `DispatchDecision` to override shared defaults;
194
+ * return null to use `defaultDispatchDecision` (constructor→`'constructor'`,
195
+ * member→`'owner-scoped'`, free→`'free'`). Most languages return null.
196
+ *
197
+ * The hook is responsible for its own gating. `ancestryView` only affects
198
+ * `'ruby-mixin'` strategy. Singleton-ancestry miss NEVER falls through to
199
+ * file-scoped fallback in stage 5 (enforced in resolveCallTarget).
200
+ *
201
+ * Ruby examples:
202
+ * - `receiverSource='implicit-self', hint='instance'` →
203
+ * `{primary: 'owner-scoped', fallback: 'free-arity-narrowed', ancestryView: 'instance'}`
204
+ * - `receiverSource='class-as-receiver'` →
205
+ * `{primary: 'owner-scoped', ancestryView: 'singleton'}` (miss null-routes)
206
+ * - `receiverSource='implicit-self', hint='singleton'` →
207
+ * `{primary: 'owner-scoped', fallback: 'free-arity-narrowed', ancestryView: 'singleton'}`
208
+ *
209
+ * @see call-types.ts § DispatchDecision
210
+ * @see call-processor.ts § defaultDispatchDecision, resolveCallTarget
211
+ *
212
+ * Default: undefined (use `defaultDispatchDecision`).
213
+ */
214
+ readonly selectDispatch?: (params: {
215
+ readonly calledName: string;
216
+ readonly callForm: 'free' | 'member' | 'constructor' | undefined;
217
+ readonly receiverName: string | undefined;
218
+ readonly receiverTypeName: string | undefined;
219
+ readonly receiverSource: ReceiverEnriched['receiverSource'];
220
+ readonly hint: string | undefined;
221
+ }) => DispatchDecision | null;
142
222
  /** Built-in/stdlib names that should be filtered from the call graph for this language.
143
223
  * Default: undefined (no language-specific filtering). */
144
224
  readonly builtInNames?: ReadonlySet<string>;
@@ -9,10 +9,12 @@
9
9
  */
10
10
  import { SupportedLanguages } from '../../../_shared/index.js';
11
11
  import { createClassExtractor } from '../class-extractors/generic.js';
12
+ import { cClassConfig, cppClassConfig } from '../class-extractors/configs/c-cpp.js';
12
13
  import { defineLanguage } from '../language-provider.js';
13
14
  import { typeConfig as cCppConfig } from '../type-extractors/c-cpp.js';
14
15
  import { cCppExportChecker } from '../export-detection.js';
15
- import { resolveCImport, resolveCppImport } from '../import-resolvers/standard.js';
16
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
17
+ import { cImportConfig, cppImportConfig } from '../import-resolvers/configs/c-cpp.js';
16
18
  import { C_QUERIES, CPP_QUERIES } from '../tree-sitter-queries.js';
17
19
  /**
18
20
  * Node types for standard function declarations that need C/C++ declarator handling.
@@ -29,6 +31,11 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
29
31
  import { cConfig as cFieldConfig, cppConfig as cppFieldConfig, } from '../field-extractors/configs/c-cpp.js';
30
32
  import { createMethodExtractor } from '../method-extractors/generic.js';
31
33
  import { cMethodConfig, cppMethodConfig } from '../method-extractors/configs/c-cpp.js';
34
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
35
+ import { cVariableConfig, cppVariableConfig } from '../variable-extractors/configs/c-cpp.js';
36
+ import { createCallExtractor } from '../call-extractors/generic.js';
37
+ import { cCallConfig, cppCallConfig } from '../call-extractors/configs/c-cpp.js';
38
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
32
39
  const C_BUILT_INS = new Set([
33
40
  'printf',
34
41
  'fprintf',
@@ -135,15 +142,8 @@ const C_BUILT_INS = new Set([
135
142
  'get',
136
143
  'put',
137
144
  ]);
138
- const cClassExtractor = createClassExtractor({
139
- language: SupportedLanguages.C,
140
- typeDeclarationNodes: ['struct_specifier', 'enum_specifier'],
141
- });
142
- const cppClassExtractor = createClassExtractor({
143
- language: SupportedLanguages.CPlusPlus,
144
- typeDeclarationNodes: ['class_specifier', 'struct_specifier', 'enum_specifier'],
145
- ancestorScopeNodeTypes: ['namespace_definition', 'class_specifier', 'struct_specifier'],
146
- });
145
+ const cClassExtractor = createClassExtractor(cClassConfig);
146
+ const cppClassExtractor = createClassExtractor(cppClassConfig);
147
147
  /**
148
148
  * C/C++ function name extraction — unwraps pointer_declarator / reference_declarator /
149
149
  * function_declarator / qualified_identifier chains to find the actual function name.
@@ -292,14 +292,17 @@ export const cProvider = defineLanguage({
292
292
  treeSitterQueries: C_QUERIES,
293
293
  typeConfig: cCppConfig,
294
294
  exportChecker: cCppExportChecker,
295
- importResolver: resolveCImport,
295
+ importResolver: createImportResolver(cImportConfig),
296
296
  importSemantics: 'wildcard-transitive',
297
+ callExtractor: createCallExtractor(cCallConfig),
297
298
  fieldExtractor: createFieldExtractor(cFieldConfig),
298
299
  methodExtractor: createMethodExtractor({
299
300
  ...cMethodConfig,
300
301
  extractFunctionName: cCppExtractFunctionName,
301
302
  }),
303
+ variableExtractor: createVariableExtractor(cVariableConfig),
302
304
  classExtractor: cClassExtractor,
305
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.C),
303
306
  labelOverride: cppLabelOverride,
304
307
  builtInNames: C_BUILT_INS,
305
308
  });
@@ -309,15 +312,18 @@ export const cppProvider = defineLanguage({
309
312
  treeSitterQueries: CPP_QUERIES,
310
313
  typeConfig: cCppConfig,
311
314
  exportChecker: cCppExportChecker,
312
- importResolver: resolveCppImport,
315
+ importResolver: createImportResolver(cppImportConfig),
313
316
  importSemantics: 'wildcard-transitive',
314
317
  mroStrategy: 'leftmost-base',
318
+ callExtractor: createCallExtractor(cppCallConfig),
315
319
  fieldExtractor: createFieldExtractor(cppFieldConfig),
316
320
  methodExtractor: createMethodExtractor({
317
321
  ...cppMethodConfig,
318
322
  extractFunctionName: cCppExtractFunctionName,
319
323
  }),
324
+ variableExtractor: createVariableExtractor(cppVariableConfig),
320
325
  classExtractor: cppClassExtractor,
326
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.CPlusPlus),
321
327
  labelOverride: cppLabelOverride,
322
328
  builtInNames: C_BUILT_INS,
323
329
  });
@@ -7,16 +7,23 @@
7
7
  */
8
8
  import { SupportedLanguages } from '../../../_shared/index.js';
9
9
  import { createClassExtractor } from '../class-extractors/generic.js';
10
+ import { csharpClassConfig } from '../class-extractors/configs/csharp.js';
10
11
  import { defineLanguage } from '../language-provider.js';
11
12
  import { typeConfig as csharpConfig } from '../type-extractors/csharp.js';
12
13
  import { csharpExportChecker } from '../export-detection.js';
13
- import { resolveCSharpImport } from '../import-resolvers/csharp.js';
14
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
15
+ import { csharpImportConfig } from '../import-resolvers/configs/csharp.js';
14
16
  import { extractCSharpNamedBindings } from '../named-bindings/csharp.js';
15
17
  import { CSHARP_QUERIES } from '../tree-sitter-queries.js';
18
+ import { createCallExtractor } from '../call-extractors/generic.js';
19
+ import { csharpCallConfig } from '../call-extractors/configs/csharp.js';
16
20
  import { createFieldExtractor } from '../field-extractors/generic.js';
17
21
  import { csharpConfig as csharpFieldConfig } from '../field-extractors/configs/csharp.js';
18
22
  import { createMethodExtractor } from '../method-extractors/generic.js';
19
23
  import { csharpMethodConfig } from '../method-extractors/configs/csharp.js';
24
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
25
+ import { csharpVariableConfig } from '../variable-extractors/configs/csharp.js';
26
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
20
27
  const BUILT_INS = new Set([
21
28
  'Console',
22
29
  'WriteLine',
@@ -117,30 +124,15 @@ export const csharpProvider = defineLanguage({
117
124
  treeSitterQueries: CSHARP_QUERIES,
118
125
  typeConfig: csharpConfig,
119
126
  exportChecker: csharpExportChecker,
120
- importResolver: resolveCSharpImport,
127
+ importResolver: createImportResolver(csharpImportConfig),
121
128
  namedBindingExtractor: extractCSharpNamedBindings,
122
129
  interfaceNamePattern: /^I[A-Z]/,
123
130
  mroStrategy: 'implements-split',
131
+ callExtractor: createCallExtractor(csharpCallConfig),
124
132
  fieldExtractor: createFieldExtractor(csharpFieldConfig),
125
133
  methodExtractor: createMethodExtractor(csharpMethodConfig),
126
- classExtractor: createClassExtractor({
127
- language: SupportedLanguages.CSharp,
128
- typeDeclarationNodes: [
129
- 'class_declaration',
130
- 'interface_declaration',
131
- 'struct_declaration',
132
- 'enum_declaration',
133
- 'record_declaration',
134
- ],
135
- fileScopeNodeTypes: ['file_scoped_namespace_declaration'],
136
- ancestorScopeNodeTypes: [
137
- 'namespace_declaration',
138
- 'class_declaration',
139
- 'interface_declaration',
140
- 'struct_declaration',
141
- 'enum_declaration',
142
- 'record_declaration',
143
- ],
144
- }),
134
+ variableExtractor: createVariableExtractor(csharpVariableConfig),
135
+ classExtractor: createClassExtractor(csharpClassConfig),
136
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.CSharp),
145
137
  builtInNames: BUILT_INS,
146
138
  });
@@ -12,15 +12,22 @@
12
12
  import { FUNCTION_NODE_TYPES } from '../utils/ast-helpers.js';
13
13
  import { SupportedLanguages } from '../../../_shared/index.js';
14
14
  import { createClassExtractor } from '../class-extractors/generic.js';
15
+ import { dartClassConfig } from '../class-extractors/configs/dart.js';
15
16
  import { defineLanguage } from '../language-provider.js';
16
17
  import { typeConfig as dartConfig } from '../type-extractors/dart.js';
17
18
  import { dartExportChecker } from '../export-detection.js';
18
- import { resolveDartImport } from '../import-resolvers/dart.js';
19
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
20
+ import { dartImportConfig } from '../import-resolvers/configs/dart.js';
19
21
  import { DART_QUERIES } from '../tree-sitter-queries.js';
20
22
  import { createFieldExtractor } from '../field-extractors/generic.js';
21
23
  import { dartConfig as dartFieldConfig } from '../field-extractors/configs/dart.js';
22
24
  import { createMethodExtractor } from '../method-extractors/generic.js';
23
25
  import { dartMethodConfig } from '../method-extractors/configs/dart.js';
26
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
27
+ import { dartVariableConfig } from '../variable-extractors/configs/dart.js';
28
+ import { createCallExtractor } from '../call-extractors/generic.js';
29
+ import { dartCallConfig } from '../call-extractors/configs/dart.js';
30
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
24
31
  /**
25
32
  * Resolve the enclosing function from a `function_body` node by looking at its
26
33
  * previous sibling. In Dart's tree-sitter grammar, function_signature and
@@ -82,15 +89,14 @@ export const dartProvider = defineLanguage({
82
89
  treeSitterQueries: DART_QUERIES,
83
90
  typeConfig: dartConfig,
84
91
  exportChecker: dartExportChecker,
85
- importResolver: resolveDartImport,
92
+ importResolver: createImportResolver(dartImportConfig),
86
93
  importSemantics: 'wildcard-leaf',
94
+ callExtractor: createCallExtractor(dartCallConfig),
87
95
  fieldExtractor: createFieldExtractor(dartFieldConfig),
88
96
  methodExtractor: createMethodExtractor(dartMethodConfig),
89
- classExtractor: createClassExtractor({
90
- language: SupportedLanguages.Dart,
91
- typeDeclarationNodes: ['class_definition', 'extension_declaration', 'enum_declaration'],
92
- ancestorScopeNodeTypes: ['class_definition', 'extension_declaration', 'enum_declaration'],
93
- }),
97
+ variableExtractor: createVariableExtractor(dartVariableConfig),
98
+ classExtractor: createClassExtractor(dartClassConfig),
99
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.Dart),
94
100
  enclosingFunctionFinder: dartEnclosingFunctionFinder,
95
101
  builtInNames: BUILT_INS,
96
102
  });
@@ -10,41 +10,35 @@
10
10
  */
11
11
  import { SupportedLanguages } from '../../../_shared/index.js';
12
12
  import { createClassExtractor } from '../class-extractors/generic.js';
13
+ import { goClassConfig } from '../class-extractors/configs/go.js';
13
14
  import { defineLanguage } from '../language-provider.js';
14
15
  import { typeConfig as goConfig } from '../type-extractors/go.js';
15
16
  import { goExportChecker } from '../export-detection.js';
16
- import { resolveGoImport } from '../import-resolvers/go.js';
17
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
18
+ import { goImportConfig } from '../import-resolvers/configs/go.js';
17
19
  import { GO_QUERIES } from '../tree-sitter-queries.js';
18
20
  import { createFieldExtractor } from '../field-extractors/generic.js';
19
21
  import { goConfig as goFieldConfig } from '../field-extractors/configs/go.js';
20
22
  import { createMethodExtractor } from '../method-extractors/generic.js';
21
23
  import { goMethodConfig } from '../method-extractors/configs/go.js';
24
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
25
+ import { goVariableConfig } from '../variable-extractors/configs/go.js';
26
+ import { createCallExtractor } from '../call-extractors/generic.js';
27
+ import { goCallConfig } from '../call-extractors/configs/go.js';
28
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
29
+ import { goHeritageConfig } from '../heritage-extractors/configs/go.js';
22
30
  export const goProvider = defineLanguage({
23
31
  id: SupportedLanguages.Go,
24
32
  extensions: ['.go'],
25
33
  treeSitterQueries: GO_QUERIES,
26
34
  typeConfig: goConfig,
27
35
  exportChecker: goExportChecker,
28
- importResolver: resolveGoImport,
36
+ importResolver: createImportResolver(goImportConfig),
29
37
  importSemantics: 'wildcard-leaf',
38
+ callExtractor: createCallExtractor(goCallConfig),
30
39
  fieldExtractor: createFieldExtractor(goFieldConfig),
31
40
  methodExtractor: createMethodExtractor(goMethodConfig),
32
- classExtractor: createClassExtractor({
33
- language: SupportedLanguages.Go,
34
- typeDeclarationNodes: ['type_declaration'],
35
- fileScopeNodeTypes: ['package_clause'],
36
- extractName(node) {
37
- const typeSpec = node.namedChildren.find((child) => child.type === 'type_spec');
38
- return typeSpec?.childForFieldName('name')?.text;
39
- },
40
- extractType(node) {
41
- const typeSpec = node.namedChildren.find((child) => child.type === 'type_spec');
42
- const typeNode = typeSpec?.childForFieldName('type');
43
- if (typeNode?.type === 'struct_type')
44
- return 'Struct';
45
- if (typeNode?.type === 'interface_type')
46
- return 'Interface';
47
- return undefined;
48
- },
49
- }),
41
+ variableExtractor: createVariableExtractor(goVariableConfig),
42
+ classExtractor: createClassExtractor(goClassConfig),
43
+ heritageExtractor: createHeritageExtractor(goHeritageConfig),
50
44
  });
@@ -8,42 +8,37 @@
8
8
  */
9
9
  import { SupportedLanguages } from '../../../_shared/index.js';
10
10
  import { createClassExtractor } from '../class-extractors/generic.js';
11
+ import { javaClassConfig } from '../class-extractors/configs/jvm.js';
11
12
  import { defineLanguage } from '../language-provider.js';
12
13
  import { javaTypeConfig } from '../type-extractors/jvm.js';
13
14
  import { javaExportChecker } from '../export-detection.js';
14
- import { resolveJavaImport } from '../import-resolvers/jvm.js';
15
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
16
+ import { javaImportConfig } from '../import-resolvers/configs/jvm.js';
15
17
  import { extractJavaNamedBindings } from '../named-bindings/java.js';
16
18
  import { JAVA_QUERIES } from '../tree-sitter-queries.js';
19
+ import { createCallExtractor } from '../call-extractors/generic.js';
20
+ import { javaCallConfig } from '../call-extractors/configs/jvm.js';
17
21
  import { createFieldExtractor } from '../field-extractors/generic.js';
18
22
  import { javaConfig } from '../field-extractors/configs/jvm.js';
19
23
  import { createMethodExtractor } from '../method-extractors/generic.js';
20
24
  import { javaMethodConfig } from '../method-extractors/configs/jvm.js';
25
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
26
+ import { javaVariableConfig } from '../variable-extractors/configs/jvm.js';
27
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
21
28
  export const javaProvider = defineLanguage({
22
29
  id: SupportedLanguages.Java,
23
30
  extensions: ['.java'],
24
31
  treeSitterQueries: JAVA_QUERIES,
25
32
  typeConfig: javaTypeConfig,
26
33
  exportChecker: javaExportChecker,
27
- importResolver: resolveJavaImport,
34
+ importResolver: createImportResolver(javaImportConfig),
28
35
  namedBindingExtractor: extractJavaNamedBindings,
29
36
  interfaceNamePattern: /^I[A-Z]/,
30
37
  mroStrategy: 'implements-split',
38
+ callExtractor: createCallExtractor(javaCallConfig),
31
39
  fieldExtractor: createFieldExtractor(javaConfig),
32
40
  methodExtractor: createMethodExtractor(javaMethodConfig),
33
- classExtractor: createClassExtractor({
34
- language: SupportedLanguages.Java,
35
- typeDeclarationNodes: [
36
- 'class_declaration',
37
- 'interface_declaration',
38
- 'enum_declaration',
39
- 'record_declaration',
40
- ],
41
- fileScopeNodeTypes: ['package_declaration'],
42
- ancestorScopeNodeTypes: [
43
- 'class_declaration',
44
- 'interface_declaration',
45
- 'enum_declaration',
46
- 'record_declaration',
47
- ],
48
- }),
41
+ variableExtractor: createVariableExtractor(javaVariableConfig),
42
+ classExtractor: createClassExtractor(javaClassConfig),
43
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.Java),
49
44
  });
@@ -8,17 +8,24 @@
8
8
  */
9
9
  import { SupportedLanguages } from '../../../_shared/index.js';
10
10
  import { createClassExtractor } from '../class-extractors/generic.js';
11
+ import { kotlinClassConfig } from '../class-extractors/configs/jvm.js';
11
12
  import { defineLanguage } from '../language-provider.js';
12
13
  import { kotlinTypeConfig } from '../type-extractors/jvm.js';
13
14
  import { kotlinExportChecker } from '../export-detection.js';
14
- import { resolveKotlinImport } from '../import-resolvers/jvm.js';
15
+ import { createImportResolver } from '../import-resolvers/resolver-factory.js';
16
+ import { kotlinImportConfig } from '../import-resolvers/configs/jvm.js';
15
17
  import { extractKotlinNamedBindings } from '../named-bindings/kotlin.js';
16
18
  import { appendKotlinWildcard } from '../import-resolvers/jvm.js';
17
19
  import { KOTLIN_QUERIES } from '../tree-sitter-queries.js';
20
+ import { createCallExtractor } from '../call-extractors/generic.js';
21
+ import { kotlinCallConfig } from '../call-extractors/configs/jvm.js';
18
22
  import { createFieldExtractor } from '../field-extractors/generic.js';
19
23
  import { kotlinConfig } from '../field-extractors/configs/jvm.js';
20
24
  import { createMethodExtractor } from '../method-extractors/generic.js';
21
25
  import { kotlinMethodConfig } from '../method-extractors/configs/jvm.js';
26
+ import { createVariableExtractor } from '../variable-extractors/generic.js';
27
+ import { kotlinVariableConfig } from '../variable-extractors/configs/jvm.js';
28
+ import { createHeritageExtractor } from '../heritage-extractors/generic.js';
22
29
  /** Check if a Kotlin function_declaration capture is inside a class_body (i.e., a method).
23
30
  * Kotlin grammar uses function_declaration for both top-level functions and class methods.
24
31
  * Returns true when the captured definition node has a class_body ancestor. */
@@ -95,23 +102,16 @@ export const kotlinProvider = defineLanguage({
95
102
  treeSitterQueries: KOTLIN_QUERIES,
96
103
  typeConfig: kotlinTypeConfig,
97
104
  exportChecker: kotlinExportChecker,
98
- importResolver: resolveKotlinImport,
105
+ importResolver: createImportResolver(kotlinImportConfig),
99
106
  namedBindingExtractor: extractKotlinNamedBindings,
100
107
  importPathPreprocessor: appendKotlinWildcard,
101
108
  mroStrategy: 'implements-split',
109
+ callExtractor: createCallExtractor(kotlinCallConfig),
102
110
  fieldExtractor: createFieldExtractor(kotlinConfig),
103
111
  methodExtractor: createMethodExtractor(kotlinMethodConfig),
104
- classExtractor: createClassExtractor({
105
- language: SupportedLanguages.Kotlin,
106
- typeDeclarationNodes: ['class_declaration', 'object_declaration', 'companion_object'],
107
- fileScopeNodeTypes: ['package_header'],
108
- ancestorScopeNodeTypes: ['class_declaration', 'object_declaration', 'companion_object'],
109
- extractType(node) {
110
- if (node.type !== 'class_declaration')
111
- return undefined;
112
- return node.children.some((child) => child?.text === 'interface') ? 'Interface' : 'Class';
113
- },
114
- }),
112
+ variableExtractor: createVariableExtractor(kotlinVariableConfig),
113
+ classExtractor: createClassExtractor(kotlinClassConfig),
114
+ heritageExtractor: createHeritageExtractor(SupportedLanguages.Kotlin),
115
115
  builtInNames: BUILT_INS,
116
116
  labelOverride: (functionNode, defaultLabel) => {
117
117
  if (defaultLabel !== 'Function')