gitnexus 1.4.8 → 1.4.9

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 (211) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/index-repo.d.ts +15 -0
  3. package/dist/cli/index-repo.js +115 -0
  4. package/dist/cli/index.js +11 -2
  5. package/dist/cli/setup.js +12 -9
  6. package/dist/cli/wiki.d.ts +4 -0
  7. package/dist/cli/wiki.js +174 -53
  8. package/dist/config/supported-languages.d.ts +7 -5
  9. package/dist/config/supported-languages.js +6 -4
  10. package/dist/core/graph/graph.js +9 -1
  11. package/dist/core/graph/types.d.ts +10 -2
  12. package/dist/core/ingestion/call-processor.d.ts +18 -1
  13. package/dist/core/ingestion/call-processor.js +297 -38
  14. package/dist/core/ingestion/call-routing.d.ts +3 -18
  15. package/dist/core/ingestion/call-routing.js +0 -19
  16. package/dist/core/ingestion/cobol/cobol-copy-expander.d.ts +57 -0
  17. package/dist/core/ingestion/cobol/cobol-copy-expander.js +385 -0
  18. package/dist/core/ingestion/cobol/cobol-preprocessor.d.ts +210 -0
  19. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1509 -0
  20. package/dist/core/ingestion/cobol/jcl-parser.d.ts +68 -0
  21. package/dist/core/ingestion/cobol/jcl-parser.js +217 -0
  22. package/dist/core/ingestion/cobol/jcl-processor.d.ts +33 -0
  23. package/dist/core/ingestion/cobol/jcl-processor.js +229 -0
  24. package/dist/core/ingestion/cobol-processor.d.ts +54 -0
  25. package/dist/core/ingestion/cobol-processor.js +1186 -0
  26. package/dist/core/ingestion/entry-point-scoring.d.ts +17 -0
  27. package/dist/core/ingestion/entry-point-scoring.js +18 -4
  28. package/dist/core/ingestion/export-detection.d.ts +47 -8
  29. package/dist/core/ingestion/export-detection.js +29 -50
  30. package/dist/core/ingestion/field-extractor.d.ts +29 -0
  31. package/dist/core/ingestion/field-extractor.js +25 -0
  32. package/dist/core/ingestion/field-extractors/configs/c-cpp.d.ts +3 -0
  33. package/dist/core/ingestion/field-extractors/configs/c-cpp.js +108 -0
  34. package/dist/core/ingestion/field-extractors/configs/csharp.d.ts +8 -0
  35. package/dist/core/ingestion/field-extractors/configs/csharp.js +73 -0
  36. package/dist/core/ingestion/field-extractors/configs/dart.d.ts +8 -0
  37. package/dist/core/ingestion/field-extractors/configs/dart.js +76 -0
  38. package/dist/core/ingestion/field-extractors/configs/go.d.ts +11 -0
  39. package/dist/core/ingestion/field-extractors/configs/go.js +64 -0
  40. package/dist/core/ingestion/field-extractors/configs/helpers.d.ts +44 -0
  41. package/dist/core/ingestion/field-extractors/configs/helpers.js +134 -0
  42. package/dist/core/ingestion/field-extractors/configs/jvm.d.ts +3 -0
  43. package/dist/core/ingestion/field-extractors/configs/jvm.js +118 -0
  44. package/dist/core/ingestion/field-extractors/configs/php.d.ts +8 -0
  45. package/dist/core/ingestion/field-extractors/configs/php.js +67 -0
  46. package/dist/core/ingestion/field-extractors/configs/python.d.ts +12 -0
  47. package/dist/core/ingestion/field-extractors/configs/python.js +91 -0
  48. package/dist/core/ingestion/field-extractors/configs/ruby.d.ts +16 -0
  49. package/dist/core/ingestion/field-extractors/configs/ruby.js +75 -0
  50. package/dist/core/ingestion/field-extractors/configs/rust.d.ts +9 -0
  51. package/dist/core/ingestion/field-extractors/configs/rust.js +55 -0
  52. package/dist/core/ingestion/field-extractors/configs/swift.d.ts +8 -0
  53. package/dist/core/ingestion/field-extractors/configs/swift.js +63 -0
  54. package/dist/core/ingestion/field-extractors/configs/typescript-javascript.d.ts +3 -0
  55. package/dist/core/ingestion/field-extractors/configs/typescript-javascript.js +60 -0
  56. package/dist/core/ingestion/field-extractors/generic.d.ts +46 -0
  57. package/dist/core/ingestion/field-extractors/generic.js +111 -0
  58. package/dist/core/ingestion/field-extractors/typescript.d.ts +77 -0
  59. package/dist/core/ingestion/field-extractors/typescript.js +291 -0
  60. package/dist/core/ingestion/field-types.d.ts +59 -0
  61. package/dist/core/ingestion/field-types.js +2 -0
  62. package/dist/core/ingestion/framework-detection.d.ts +87 -0
  63. package/dist/core/ingestion/framework-detection.js +65 -2
  64. package/dist/core/ingestion/heritage-processor.js +15 -17
  65. package/dist/core/ingestion/import-processor.d.ts +9 -10
  66. package/dist/core/ingestion/import-processor.js +59 -14
  67. package/dist/core/ingestion/{resolvers → import-resolvers}/csharp.d.ts +6 -9
  68. package/dist/core/ingestion/{resolvers → import-resolvers}/csharp.js +20 -2
  69. package/dist/core/ingestion/import-resolvers/dart.d.ts +7 -0
  70. package/dist/core/ingestion/import-resolvers/dart.js +44 -0
  71. package/dist/core/ingestion/{resolvers → import-resolvers}/go.d.ts +4 -5
  72. package/dist/core/ingestion/{resolvers → import-resolvers}/go.js +17 -0
  73. package/dist/core/ingestion/{resolvers → import-resolvers}/jvm.d.ts +9 -1
  74. package/dist/core/ingestion/{resolvers → import-resolvers}/jvm.js +56 -0
  75. package/dist/core/ingestion/{resolvers → import-resolvers}/php.d.ts +6 -10
  76. package/dist/core/ingestion/{resolvers → import-resolvers}/php.js +7 -2
  77. package/dist/core/ingestion/{resolvers → import-resolvers}/python.d.ts +9 -3
  78. package/dist/core/ingestion/{resolvers → import-resolvers}/python.js +35 -3
  79. package/dist/core/ingestion/{resolvers → import-resolvers}/ruby.d.ts +5 -2
  80. package/dist/core/ingestion/{resolvers → import-resolvers}/ruby.js +7 -2
  81. package/dist/core/ingestion/{resolvers → import-resolvers}/rust.d.ts +5 -2
  82. package/dist/core/ingestion/{resolvers → import-resolvers}/rust.js +41 -2
  83. package/dist/core/ingestion/{resolvers → import-resolvers}/standard.d.ts +15 -7
  84. package/dist/core/ingestion/{resolvers → import-resolvers}/standard.js +22 -3
  85. package/dist/core/ingestion/import-resolvers/swift.d.ts +7 -0
  86. package/dist/core/ingestion/import-resolvers/swift.js +23 -0
  87. package/dist/core/ingestion/import-resolvers/types.d.ts +44 -0
  88. package/dist/core/ingestion/import-resolvers/types.js +6 -0
  89. package/dist/core/ingestion/{resolvers → import-resolvers}/utils.d.ts +0 -3
  90. package/dist/core/ingestion/{resolvers → import-resolvers}/utils.js +0 -9
  91. package/dist/core/ingestion/language-config.d.ts +4 -1
  92. package/dist/core/ingestion/language-provider.d.ts +121 -0
  93. package/dist/core/ingestion/language-provider.js +24 -0
  94. package/dist/core/ingestion/languages/c-cpp.d.ts +12 -0
  95. package/dist/core/ingestion/languages/c-cpp.js +71 -0
  96. package/dist/core/ingestion/languages/cobol.d.ts +1 -0
  97. package/dist/core/ingestion/languages/cobol.js +26 -0
  98. package/dist/core/ingestion/languages/csharp.d.ts +8 -0
  99. package/dist/core/ingestion/languages/csharp.js +49 -0
  100. package/dist/core/ingestion/languages/dart.d.ts +12 -0
  101. package/dist/core/ingestion/languages/dart.js +58 -0
  102. package/dist/core/ingestion/languages/go.d.ts +11 -0
  103. package/dist/core/ingestion/languages/go.js +28 -0
  104. package/dist/core/ingestion/languages/index.d.ts +38 -0
  105. package/dist/core/ingestion/languages/index.js +63 -0
  106. package/dist/core/ingestion/languages/java.d.ts +9 -0
  107. package/dist/core/ingestion/languages/java.js +29 -0
  108. package/dist/core/ingestion/languages/kotlin.d.ts +9 -0
  109. package/dist/core/ingestion/languages/kotlin.js +53 -0
  110. package/dist/core/ingestion/languages/php.d.ts +8 -0
  111. package/dist/core/ingestion/languages/php.js +145 -0
  112. package/dist/core/ingestion/languages/python.d.ts +12 -0
  113. package/dist/core/ingestion/languages/python.js +39 -0
  114. package/dist/core/ingestion/languages/ruby.d.ts +9 -0
  115. package/dist/core/ingestion/languages/ruby.js +44 -0
  116. package/dist/core/ingestion/languages/rust.d.ts +12 -0
  117. package/dist/core/ingestion/languages/rust.js +44 -0
  118. package/dist/core/ingestion/languages/swift.d.ts +12 -0
  119. package/dist/core/ingestion/languages/swift.js +133 -0
  120. package/dist/core/ingestion/languages/typescript.d.ts +10 -0
  121. package/dist/core/ingestion/languages/typescript.js +60 -0
  122. package/dist/core/ingestion/mro-processor.js +14 -15
  123. package/dist/core/ingestion/{named-binding-extraction.d.ts → named-binding-processor.d.ts} +0 -9
  124. package/dist/core/ingestion/named-binding-processor.js +42 -0
  125. package/dist/core/ingestion/named-bindings/csharp.d.ts +3 -0
  126. package/dist/core/ingestion/named-bindings/csharp.js +37 -0
  127. package/dist/core/ingestion/named-bindings/java.d.ts +3 -0
  128. package/dist/core/ingestion/named-bindings/java.js +29 -0
  129. package/dist/core/ingestion/named-bindings/kotlin.d.ts +3 -0
  130. package/dist/core/ingestion/named-bindings/kotlin.js +36 -0
  131. package/dist/core/ingestion/named-bindings/php.d.ts +3 -0
  132. package/dist/core/ingestion/named-bindings/php.js +61 -0
  133. package/dist/core/ingestion/named-bindings/python.d.ts +3 -0
  134. package/dist/core/ingestion/named-bindings/python.js +49 -0
  135. package/dist/core/ingestion/named-bindings/rust.d.ts +3 -0
  136. package/dist/core/ingestion/named-bindings/rust.js +64 -0
  137. package/dist/core/ingestion/named-bindings/types.d.ts +16 -0
  138. package/dist/core/ingestion/named-bindings/types.js +6 -0
  139. package/dist/core/ingestion/named-bindings/typescript.d.ts +3 -0
  140. package/dist/core/ingestion/named-bindings/typescript.js +58 -0
  141. package/dist/core/ingestion/parsing-processor.d.ts +5 -1
  142. package/dist/core/ingestion/parsing-processor.js +115 -16
  143. package/dist/core/ingestion/pipeline.js +925 -424
  144. package/dist/core/ingestion/resolution-context.js +1 -1
  145. package/dist/core/ingestion/route-extractors/expo.d.ts +1 -0
  146. package/dist/core/ingestion/route-extractors/expo.js +36 -0
  147. package/dist/core/ingestion/route-extractors/middleware.d.ts +47 -0
  148. package/dist/core/ingestion/route-extractors/middleware.js +143 -0
  149. package/dist/core/ingestion/route-extractors/nextjs.d.ts +3 -0
  150. package/dist/core/ingestion/route-extractors/nextjs.js +76 -0
  151. package/dist/core/ingestion/route-extractors/php.d.ts +7 -0
  152. package/dist/core/ingestion/route-extractors/php.js +21 -0
  153. package/dist/core/ingestion/route-extractors/response-shapes.d.ts +20 -0
  154. package/dist/core/ingestion/route-extractors/response-shapes.js +290 -0
  155. package/dist/core/ingestion/tree-sitter-queries.d.ts +8 -7
  156. package/dist/core/ingestion/tree-sitter-queries.js +231 -9
  157. package/dist/core/ingestion/type-env.d.ts +14 -17
  158. package/dist/core/ingestion/type-env.js +66 -14
  159. package/dist/core/ingestion/type-extractors/c-cpp.d.ts +1 -1
  160. package/dist/core/ingestion/type-extractors/csharp.js +1 -1
  161. package/dist/core/ingestion/type-extractors/dart.d.ts +15 -0
  162. package/dist/core/ingestion/type-extractors/dart.js +371 -0
  163. package/dist/core/ingestion/type-extractors/jvm.js +1 -1
  164. package/dist/core/ingestion/type-extractors/shared.d.ts +1 -13
  165. package/dist/core/ingestion/type-extractors/shared.js +9 -102
  166. package/dist/core/ingestion/type-extractors/swift.js +334 -4
  167. package/dist/core/ingestion/type-extractors/types.d.ts +3 -1
  168. package/dist/core/ingestion/{ast-helpers.d.ts → utils/ast-helpers.d.ts} +16 -13
  169. package/dist/core/ingestion/{ast-helpers.js → utils/ast-helpers.js} +111 -32
  170. package/dist/core/ingestion/{call-analysis.js → utils/call-analysis.js} +37 -0
  171. package/dist/core/ingestion/utils/event-loop.d.ts +5 -0
  172. package/dist/core/ingestion/utils/event-loop.js +5 -0
  173. package/dist/core/ingestion/utils/language-detection.d.ts +9 -0
  174. package/dist/core/ingestion/utils/language-detection.js +70 -0
  175. package/dist/core/ingestion/utils/verbose.d.ts +1 -0
  176. package/dist/core/ingestion/utils/verbose.js +7 -0
  177. package/dist/core/ingestion/workers/parse-worker.d.ts +43 -2
  178. package/dist/core/ingestion/workers/parse-worker.js +361 -150
  179. package/dist/core/lbug/csv-generator.js +34 -1
  180. package/dist/core/lbug/lbug-adapter.js +6 -0
  181. package/dist/core/lbug/schema.d.ts +5 -3
  182. package/dist/core/lbug/schema.js +39 -2
  183. package/dist/core/tree-sitter/parser-loader.js +7 -1
  184. package/dist/core/wiki/cursor-client.d.ts +31 -0
  185. package/dist/core/wiki/cursor-client.js +127 -0
  186. package/dist/core/wiki/generator.d.ts +28 -9
  187. package/dist/core/wiki/generator.js +115 -18
  188. package/dist/core/wiki/graph-queries.d.ts +4 -0
  189. package/dist/core/wiki/graph-queries.js +7 -1
  190. package/dist/core/wiki/llm-client.d.ts +2 -0
  191. package/dist/core/wiki/llm-client.js +8 -4
  192. package/dist/core/wiki/prompts.d.ts +3 -3
  193. package/dist/core/wiki/prompts.js +6 -0
  194. package/dist/mcp/core/lbug-adapter.d.ts +5 -0
  195. package/dist/mcp/core/lbug-adapter.js +11 -1
  196. package/dist/mcp/local/local-backend.d.ts +16 -5
  197. package/dist/mcp/local/local-backend.js +711 -74
  198. package/dist/mcp/tools.js +71 -2
  199. package/dist/storage/repo-manager.d.ts +3 -0
  200. package/package.json +17 -16
  201. package/dist/core/ingestion/import-resolution.d.ts +0 -101
  202. package/dist/core/ingestion/import-resolution.js +0 -251
  203. package/dist/core/ingestion/named-binding-extraction.js +0 -373
  204. package/dist/core/ingestion/resolvers/index.d.ts +0 -18
  205. package/dist/core/ingestion/resolvers/index.js +0 -13
  206. package/dist/core/ingestion/type-extractors/index.d.ts +0 -22
  207. package/dist/core/ingestion/type-extractors/index.js +0 -31
  208. package/dist/core/ingestion/utils.d.ts +0 -20
  209. package/dist/core/ingestion/utils.js +0 -242
  210. package/scripts/patch-tree-sitter-swift.cjs +0 -74
  211. /package/dist/core/ingestion/{call-analysis.d.ts → utils/call-analysis.d.ts} +0 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Dart Language Provider
3
+ *
4
+ * Dart traits:
5
+ * - importSemantics: 'wildcard' (Dart imports bring everything public into scope)
6
+ * - exportChecker: public if no leading underscore
7
+ * - Dart SDK imports (dart:*) and external packages are skipped
8
+ * - enclosingFunctionFinder: Dart's tree-sitter grammar places function_body
9
+ * as a sibling of function_signature/method_signature (not as a child).
10
+ * The hook resolves the enclosing function by inspecting the previous sibling.
11
+ */
12
+ import { FUNCTION_NODE_TYPES, extractFunctionName } from '../utils/ast-helpers.js';
13
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
14
+ import { defineLanguage } from '../language-provider.js';
15
+ import { typeConfig as dartConfig } from '../type-extractors/dart.js';
16
+ import { dartExportChecker } from '../export-detection.js';
17
+ import { resolveDartImport } from '../import-resolvers/dart.js';
18
+ import { DART_QUERIES } from '../tree-sitter-queries.js';
19
+ import { createFieldExtractor } from '../field-extractors/generic.js';
20
+ import { dartConfig as dartFieldConfig } from '../field-extractors/configs/dart.js';
21
+ /**
22
+ * Resolve the enclosing function from a `function_body` node by looking at its
23
+ * previous sibling. In Dart's tree-sitter grammar, function_signature and
24
+ * function_body are siblings under program or class_body, unlike most languages
25
+ * where the function declaration wraps both.
26
+ *
27
+ * Delegates name extraction to the shared `extractFunctionName` which already
28
+ * handles Dart's function_signature and method_signature node types.
29
+ */
30
+ const dartEnclosingFunctionFinder = (node) => {
31
+ if (node.type !== 'function_body')
32
+ return null;
33
+ const prev = node.previousSibling;
34
+ if (!prev || !FUNCTION_NODE_TYPES.has(prev.type))
35
+ return null;
36
+ const { funcName, label } = extractFunctionName(prev);
37
+ return funcName ? { funcName, label } : null;
38
+ };
39
+ const BUILT_INS = new Set([
40
+ 'setState', 'mounted', 'debugPrint',
41
+ 'runApp', 'showDialog', 'showModalBottomSheet',
42
+ 'Navigator', 'push', 'pushNamed', 'pushReplacement', 'pop', 'maybePop',
43
+ 'ScaffoldMessenger', 'showSnackBar',
44
+ 'deactivate', 'reassemble', 'debugDumpApp', 'debugDumpRenderTree',
45
+ 'then', 'catchError', 'whenComplete', 'listen',
46
+ ]);
47
+ export const dartProvider = defineLanguage({
48
+ id: SupportedLanguages.Dart,
49
+ extensions: ['.dart'],
50
+ treeSitterQueries: DART_QUERIES,
51
+ typeConfig: dartConfig,
52
+ exportChecker: dartExportChecker,
53
+ importResolver: resolveDartImport,
54
+ importSemantics: 'wildcard',
55
+ fieldExtractor: createFieldExtractor(dartFieldConfig),
56
+ enclosingFunctionFinder: dartEnclosingFunctionFinder,
57
+ builtInNames: BUILT_INS,
58
+ });
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Go Language Provider
3
+ *
4
+ * Assembles all Go-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Go traits:
8
+ * - importSemantics: 'wildcard' (Go imports entire packages)
9
+ * - callRouter: present (Go method calls may need routing)
10
+ */
11
+ export declare const goProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Go Language Provider
3
+ *
4
+ * Assembles all Go-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Go traits:
8
+ * - importSemantics: 'wildcard' (Go imports entire packages)
9
+ * - callRouter: present (Go method calls may need routing)
10
+ */
11
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
12
+ import { defineLanguage } from '../language-provider.js';
13
+ import { typeConfig as goConfig } from '../type-extractors/go.js';
14
+ import { goExportChecker } from '../export-detection.js';
15
+ import { resolveGoImport } from '../import-resolvers/go.js';
16
+ import { GO_QUERIES } from '../tree-sitter-queries.js';
17
+ import { createFieldExtractor } from '../field-extractors/generic.js';
18
+ import { goConfig as goFieldConfig } from '../field-extractors/configs/go.js';
19
+ export const goProvider = defineLanguage({
20
+ id: SupportedLanguages.Go,
21
+ extensions: ['.go'],
22
+ treeSitterQueries: GO_QUERIES,
23
+ typeConfig: goConfig,
24
+ exportChecker: goExportChecker,
25
+ importResolver: resolveGoImport,
26
+ importSemantics: 'wildcard',
27
+ fieldExtractor: createFieldExtractor(goFieldConfig),
28
+ });
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Language Provider Registry — compile-time exhaustive provider table.
3
+ *
4
+ * To add a new language:
5
+ * 1. Add enum member to SupportedLanguages
6
+ * 2. Create `languages/<lang>.ts` exporting a LanguageProvider
7
+ * 3. Add one line to the `providers` table below
8
+ * 4. Run `tsc --noEmit` to verify
9
+ */
10
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
11
+ import type { LanguageProvider } from '../language-provider.js';
12
+ export declare const providers: {
13
+ javascript: LanguageProvider;
14
+ typescript: LanguageProvider;
15
+ python: LanguageProvider;
16
+ java: LanguageProvider;
17
+ kotlin: LanguageProvider;
18
+ go: LanguageProvider;
19
+ rust: LanguageProvider;
20
+ csharp: LanguageProvider;
21
+ c: LanguageProvider;
22
+ cpp: LanguageProvider;
23
+ php: LanguageProvider;
24
+ ruby: LanguageProvider;
25
+ swift: LanguageProvider;
26
+ dart: LanguageProvider;
27
+ cobol: LanguageProvider;
28
+ };
29
+ /** Get provider by language enum (always succeeds for SupportedLanguages). */
30
+ export declare function getProvider(language: SupportedLanguages): LanguageProvider;
31
+ /** Look up a language provider from a file path by extension.
32
+ * Returns null if the file extension is not recognized. */
33
+ export declare function getProviderForFile(filePath: string): LanguageProvider | null;
34
+ /** Pre-computed list of providers that have implicit import wiring (e.g., Swift).
35
+ * Built once at module load — avoids iterating all 13 providers per call. */
36
+ export declare const providersWithImplicitWiring: (LanguageProvider & {
37
+ implicitImportWirer: NonNullable<LanguageProvider["implicitImportWirer"]>;
38
+ })[];
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Language Provider Registry — compile-time exhaustive provider table.
3
+ *
4
+ * To add a new language:
5
+ * 1. Add enum member to SupportedLanguages
6
+ * 2. Create `languages/<lang>.ts` exporting a LanguageProvider
7
+ * 3. Add one line to the `providers` table below
8
+ * 4. Run `tsc --noEmit` to verify
9
+ */
10
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
11
+ import { typescriptProvider, javascriptProvider } from './typescript.js';
12
+ import { pythonProvider } from './python.js';
13
+ import { javaProvider } from './java.js';
14
+ import { kotlinProvider } from './kotlin.js';
15
+ import { goProvider } from './go.js';
16
+ import { rustProvider } from './rust.js';
17
+ import { csharpProvider } from './csharp.js';
18
+ import { cProvider, cppProvider } from './c-cpp.js';
19
+ import { phpProvider } from './php.js';
20
+ import { rubyProvider } from './ruby.js';
21
+ import { swiftProvider } from './swift.js';
22
+ import { dartProvider } from './dart.js';
23
+ import { cobolProvider } from './cobol.js';
24
+ export const providers = {
25
+ [SupportedLanguages.JavaScript]: javascriptProvider,
26
+ [SupportedLanguages.TypeScript]: typescriptProvider,
27
+ [SupportedLanguages.Python]: pythonProvider,
28
+ [SupportedLanguages.Java]: javaProvider,
29
+ [SupportedLanguages.Kotlin]: kotlinProvider,
30
+ [SupportedLanguages.Go]: goProvider,
31
+ [SupportedLanguages.Rust]: rustProvider,
32
+ [SupportedLanguages.CSharp]: csharpProvider,
33
+ [SupportedLanguages.C]: cProvider,
34
+ [SupportedLanguages.CPlusPlus]: cppProvider,
35
+ [SupportedLanguages.PHP]: phpProvider,
36
+ [SupportedLanguages.Ruby]: rubyProvider,
37
+ [SupportedLanguages.Swift]: swiftProvider,
38
+ [SupportedLanguages.Dart]: dartProvider,
39
+ [SupportedLanguages.Cobol]: cobolProvider,
40
+ };
41
+ /** Get provider by language enum (always succeeds for SupportedLanguages). */
42
+ export function getProvider(language) {
43
+ return providers[language];
44
+ }
45
+ /** Pre-built extension → provider lookup (built once at module load). */
46
+ const extensionMap = new Map();
47
+ for (const provider of Object.values(providers)) {
48
+ for (const ext of provider.extensions) {
49
+ extensionMap.set(ext, provider);
50
+ }
51
+ }
52
+ /** Look up a language provider from a file path by extension.
53
+ * Returns null if the file extension is not recognized. */
54
+ export function getProviderForFile(filePath) {
55
+ const lastDot = filePath.lastIndexOf('.');
56
+ const ext = lastDot >= 0 ? filePath.slice(lastDot).toLowerCase() : '';
57
+ const basename = filePath.slice(filePath.lastIndexOf('/') + 1);
58
+ return extensionMap.get(ext) ?? extensionMap.get(basename) ?? null;
59
+ }
60
+ /** Pre-computed list of providers that have implicit import wiring (e.g., Swift).
61
+ * Built once at module load — avoids iterating all 13 providers per call. */
62
+ export const providersWithImplicitWiring = Object.values(providers)
63
+ .filter((p) => p.implicitImportWirer != null);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Java language provider.
3
+ *
4
+ * Java uses named imports, JVM wildcard/member import resolution,
5
+ * and a 'public' modifier-based export checker. Heritage uses
6
+ * EXTENDS by default with implements-split MRO for multiple
7
+ * interface implementation.
8
+ */
9
+ export declare const javaProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Java language provider.
3
+ *
4
+ * Java uses named imports, JVM wildcard/member import resolution,
5
+ * and a 'public' modifier-based export checker. Heritage uses
6
+ * EXTENDS by default with implements-split MRO for multiple
7
+ * interface implementation.
8
+ */
9
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
10
+ import { defineLanguage } from '../language-provider.js';
11
+ import { javaTypeConfig } from '../type-extractors/jvm.js';
12
+ import { javaExportChecker } from '../export-detection.js';
13
+ import { resolveJavaImport } from '../import-resolvers/jvm.js';
14
+ import { extractJavaNamedBindings } from '../named-bindings/java.js';
15
+ import { JAVA_QUERIES } from '../tree-sitter-queries.js';
16
+ import { createFieldExtractor } from '../field-extractors/generic.js';
17
+ import { javaConfig } from '../field-extractors/configs/jvm.js';
18
+ export const javaProvider = defineLanguage({
19
+ id: SupportedLanguages.Java,
20
+ extensions: ['.java'],
21
+ treeSitterQueries: JAVA_QUERIES,
22
+ typeConfig: javaTypeConfig,
23
+ exportChecker: javaExportChecker,
24
+ importResolver: resolveJavaImport,
25
+ namedBindingExtractor: extractJavaNamedBindings,
26
+ interfaceNamePattern: /^I[A-Z]/,
27
+ mroStrategy: 'implements-split',
28
+ fieldExtractor: createFieldExtractor(javaConfig),
29
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Kotlin language provider.
3
+ *
4
+ * Kotlin uses named imports with JVM wildcard/member resolution and
5
+ * Java-interop fallback. Default visibility is public (no modifier needed).
6
+ * Heritage uses EXTENDS by default with implements-split MRO for
7
+ * multiple interface implementation.
8
+ */
9
+ export declare const kotlinProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Kotlin language provider.
3
+ *
4
+ * Kotlin uses named imports with JVM wildcard/member resolution and
5
+ * Java-interop fallback. Default visibility is public (no modifier needed).
6
+ * Heritage uses EXTENDS by default with implements-split MRO for
7
+ * multiple interface implementation.
8
+ */
9
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
10
+ import { defineLanguage } from '../language-provider.js';
11
+ import { kotlinTypeConfig } from '../type-extractors/jvm.js';
12
+ import { kotlinExportChecker } from '../export-detection.js';
13
+ import { resolveKotlinImport } from '../import-resolvers/jvm.js';
14
+ import { extractKotlinNamedBindings } from '../named-bindings/kotlin.js';
15
+ import { appendKotlinWildcard } from '../import-resolvers/jvm.js';
16
+ import { KOTLIN_QUERIES } from '../tree-sitter-queries.js';
17
+ import { isKotlinClassMethod } from '../utils/ast-helpers.js';
18
+ import { createFieldExtractor } from '../field-extractors/generic.js';
19
+ import { kotlinConfig } from '../field-extractors/configs/jvm.js';
20
+ const BUILT_INS = new Set([
21
+ 'println', 'print', 'readLine', 'require', 'requireNotNull', 'check', 'assert', 'lazy', 'error',
22
+ 'listOf', 'mapOf', 'setOf', 'mutableListOf', 'mutableMapOf', 'mutableSetOf',
23
+ 'arrayOf', 'sequenceOf', 'also', 'apply', 'run', 'with', 'takeIf', 'takeUnless',
24
+ 'TODO', 'buildString', 'buildList', 'buildMap', 'buildSet',
25
+ 'repeat', 'synchronized',
26
+ 'launch', 'async', 'runBlocking', 'withContext', 'coroutineScope',
27
+ 'supervisorScope', 'delay',
28
+ 'flow', 'flowOf', 'collect', 'emit', 'onEach', 'catch',
29
+ 'buffer', 'conflate', 'distinctUntilChanged',
30
+ 'flatMapLatest', 'flatMapMerge', 'combine',
31
+ 'stateIn', 'shareIn', 'launchIn',
32
+ 'to', 'until', 'downTo', 'step',
33
+ ]);
34
+ export const kotlinProvider = defineLanguage({
35
+ id: SupportedLanguages.Kotlin,
36
+ extensions: ['.kt', '.kts'],
37
+ treeSitterQueries: KOTLIN_QUERIES,
38
+ typeConfig: kotlinTypeConfig,
39
+ exportChecker: kotlinExportChecker,
40
+ importResolver: resolveKotlinImport,
41
+ namedBindingExtractor: extractKotlinNamedBindings,
42
+ importPathPreprocessor: appendKotlinWildcard,
43
+ mroStrategy: 'implements-split',
44
+ fieldExtractor: createFieldExtractor(kotlinConfig),
45
+ builtInNames: BUILT_INS,
46
+ labelOverride: (functionNode, defaultLabel) => {
47
+ if (defaultLabel !== 'Function')
48
+ return defaultLabel;
49
+ if (isKotlinClassMethod(functionNode))
50
+ return 'Method';
51
+ return defaultLabel;
52
+ },
53
+ });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * PHP language provider.
3
+ *
4
+ * PHP uses named imports (use statements for classes/functions/constants),
5
+ * and standard export/import resolution. PHP files can use a variety of
6
+ * extensions from legacy versions through modern PHP 8.
7
+ */
8
+ export declare const phpProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * PHP language provider.
3
+ *
4
+ * PHP uses named imports (use statements for classes/functions/constants),
5
+ * and standard export/import resolution. PHP files can use a variety of
6
+ * extensions from legacy versions through modern PHP 8.
7
+ */
8
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
9
+ import { defineLanguage } from '../language-provider.js';
10
+ import { typeConfig as phpConfig } from '../type-extractors/php.js';
11
+ import { phpExportChecker } from '../export-detection.js';
12
+ import { resolvePhpImport } from '../import-resolvers/php.js';
13
+ import { extractPhpNamedBindings } from '../named-bindings/php.js';
14
+ import { PHP_QUERIES } from '../tree-sitter-queries.js';
15
+ import { findDescendant, extractStringContent } from '../utils/ast-helpers.js';
16
+ import { createFieldExtractor } from '../field-extractors/generic.js';
17
+ import { phpConfig as phpFieldConfig } from '../field-extractors/configs/php.js';
18
+ const BUILT_INS = new Set([
19
+ 'echo', 'isset', 'empty', 'unset', 'list', 'array', 'compact', 'extract',
20
+ 'count', 'strlen', 'strpos', 'strrpos', 'substr', 'strtolower', 'strtoupper', 'trim',
21
+ 'ltrim', 'rtrim', 'str_replace', 'str_contains', 'str_starts_with', 'str_ends_with',
22
+ 'sprintf', 'vsprintf', 'printf', 'number_format',
23
+ 'array_map', 'array_filter', 'array_reduce', 'array_push', 'array_pop', 'array_shift',
24
+ 'array_unshift', 'array_slice', 'array_splice', 'array_merge', 'array_keys', 'array_values',
25
+ 'array_key_exists', 'in_array', 'array_search', 'array_unique', 'usort', 'rsort',
26
+ 'json_encode', 'json_decode', 'serialize', 'unserialize',
27
+ 'intval', 'floatval', 'strval', 'boolval', 'is_null', 'is_string', 'is_int', 'is_array',
28
+ 'is_object', 'is_numeric', 'is_bool', 'is_float',
29
+ 'var_dump', 'print_r', 'var_export',
30
+ 'date', 'time', 'strtotime', 'mktime', 'microtime',
31
+ 'file_exists', 'file_get_contents', 'file_put_contents', 'is_file', 'is_dir',
32
+ 'preg_match', 'preg_match_all', 'preg_replace', 'preg_split',
33
+ 'header', 'session_start', 'session_destroy', 'ob_start', 'ob_end_clean', 'ob_get_clean',
34
+ 'dd', 'dump',
35
+ ]);
36
+ /** Eloquent model properties whose array values are worth indexing. */
37
+ const ELOQUENT_ARRAY_PROPS = new Set(['fillable', 'casts', 'hidden', 'guarded', 'with', 'appends']);
38
+ /** Eloquent relationship method names. */
39
+ const ELOQUENT_RELATIONS = new Set([
40
+ 'hasMany', 'hasOne', 'belongsTo', 'belongsToMany',
41
+ 'morphTo', 'morphMany', 'morphOne', 'morphToMany', 'morphedByMany',
42
+ 'hasManyThrough', 'hasOneThrough',
43
+ ]);
44
+ /**
45
+ * For a PHP property_declaration node, extract array values as a description string.
46
+ * Returns null if not an Eloquent model property or no array values found.
47
+ */
48
+ function extractPhpPropertyDescription(propName, propDeclNode) {
49
+ if (!ELOQUENT_ARRAY_PROPS.has(propName))
50
+ return null;
51
+ const arrayNode = findDescendant(propDeclNode, 'array_creation_expression');
52
+ if (!arrayNode)
53
+ return null;
54
+ const items = [];
55
+ for (const child of (arrayNode.children ?? [])) {
56
+ if (child.type !== 'array_element_initializer')
57
+ continue;
58
+ const children = child.children ?? [];
59
+ const arrowIdx = children.findIndex((c) => c.type === '=>');
60
+ if (arrowIdx !== -1) {
61
+ const key = extractStringContent(children[arrowIdx - 1]);
62
+ const val = extractStringContent(children[arrowIdx + 1]);
63
+ if (key && val)
64
+ items.push(`${key}:${val}`);
65
+ }
66
+ else {
67
+ const val = extractStringContent(children[0]);
68
+ if (val)
69
+ items.push(val);
70
+ }
71
+ }
72
+ return items.length > 0 ? items.join(', ') : null;
73
+ }
74
+ /**
75
+ * For a PHP method_declaration node, detect if it defines an Eloquent relationship.
76
+ * Returns description like "hasMany(Post)" or null.
77
+ */
78
+ function extractEloquentRelationDescription(methodNode) {
79
+ function findRelationCall(node) {
80
+ if (node.type === 'member_call_expression') {
81
+ const children = node.children ?? [];
82
+ const objectNode = children.find((c) => c.type === 'variable_name' && c.text === '$this');
83
+ const nameNode = children.find((c) => c.type === 'name');
84
+ if (objectNode && nameNode && ELOQUENT_RELATIONS.has(nameNode.text))
85
+ return node;
86
+ }
87
+ for (const child of (node.children ?? [])) {
88
+ const found = findRelationCall(child);
89
+ if (found)
90
+ return found;
91
+ }
92
+ return null;
93
+ }
94
+ const callNode = findRelationCall(methodNode);
95
+ if (!callNode)
96
+ return null;
97
+ const relType = callNode.children?.find((c) => c.type === 'name')?.text;
98
+ const argsNode = callNode.children?.find((c) => c.type === 'arguments');
99
+ let targetModel = null;
100
+ if (argsNode) {
101
+ const firstArg = argsNode.children?.find((c) => c.type === 'argument');
102
+ if (firstArg) {
103
+ const classConstant = firstArg.children?.find((c) => c.type === 'class_constant_access_expression');
104
+ if (classConstant) {
105
+ targetModel = classConstant.children?.find((c) => c.type === 'name')?.text ?? null;
106
+ }
107
+ }
108
+ }
109
+ if (relType && targetModel)
110
+ return `${relType}(${targetModel})`;
111
+ if (relType)
112
+ return relType;
113
+ return null;
114
+ }
115
+ /**
116
+ * LanguageProvider.descriptionExtractor implementation for PHP.
117
+ * Extracts Eloquent model property metadata and relationship descriptions.
118
+ */
119
+ function phpDescriptionExtractor(nodeLabel, nodeName, captureMap) {
120
+ if (nodeLabel === 'Property' && captureMap['definition.property']) {
121
+ return extractPhpPropertyDescription(nodeName, captureMap['definition.property']) ?? undefined;
122
+ }
123
+ if (nodeLabel === 'Method' && captureMap['definition.method']) {
124
+ return extractEloquentRelationDescription(captureMap['definition.method']) ?? undefined;
125
+ }
126
+ return undefined;
127
+ }
128
+ /** Detect Laravel route files by path convention. */
129
+ function isPhpRouteFile(filePath) {
130
+ return filePath.endsWith('.php') &&
131
+ (filePath.includes('/routes/') || filePath.startsWith('routes/'));
132
+ }
133
+ export const phpProvider = defineLanguage({
134
+ id: SupportedLanguages.PHP,
135
+ extensions: ['.php', '.phtml', '.php3', '.php4', '.php5', '.php8'],
136
+ treeSitterQueries: PHP_QUERIES,
137
+ typeConfig: phpConfig,
138
+ exportChecker: phpExportChecker,
139
+ importResolver: resolvePhpImport,
140
+ namedBindingExtractor: extractPhpNamedBindings,
141
+ fieldExtractor: createFieldExtractor(phpFieldConfig),
142
+ descriptionExtractor: phpDescriptionExtractor,
143
+ isRouteFile: isPhpRouteFile,
144
+ builtInNames: BUILT_INS,
145
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Python Language Provider
3
+ *
4
+ * Assembles all Python-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Python traits:
8
+ * - importSemantics: 'namespace' (Python uses namespace imports, not wildcard)
9
+ * - mroStrategy: 'c3' (Python C3 linearization for multiple inheritance)
10
+ * - namedBindingExtractor: present (from X import Y)
11
+ */
12
+ export declare const pythonProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Python Language Provider
3
+ *
4
+ * Assembles all Python-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Python traits:
8
+ * - importSemantics: 'namespace' (Python uses namespace imports, not wildcard)
9
+ * - mroStrategy: 'c3' (Python C3 linearization for multiple inheritance)
10
+ * - namedBindingExtractor: present (from X import Y)
11
+ */
12
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
13
+ import { defineLanguage } from '../language-provider.js';
14
+ import { typeConfig as pythonConfig } from '../type-extractors/python.js';
15
+ import { pythonExportChecker } from '../export-detection.js';
16
+ import { resolvePythonImport } from '../import-resolvers/python.js';
17
+ import { extractPythonNamedBindings } from '../named-bindings/python.js';
18
+ import { PYTHON_QUERIES } from '../tree-sitter-queries.js';
19
+ import { createFieldExtractor } from '../field-extractors/generic.js';
20
+ import { pythonConfig as pythonFieldConfig } from '../field-extractors/configs/python.js';
21
+ const BUILT_INS = new Set([
22
+ 'print', 'len', 'range', 'str', 'int', 'float', 'list', 'dict', 'set', 'tuple',
23
+ 'append', 'extend', 'update',
24
+ 'type', 'isinstance', 'issubclass', 'getattr', 'setattr', 'hasattr',
25
+ 'enumerate', 'zip', 'sorted', 'reversed', 'min', 'max', 'sum', 'abs',
26
+ ]);
27
+ export const pythonProvider = defineLanguage({
28
+ id: SupportedLanguages.Python,
29
+ extensions: ['.py'],
30
+ treeSitterQueries: PYTHON_QUERIES,
31
+ typeConfig: pythonConfig,
32
+ exportChecker: pythonExportChecker,
33
+ importResolver: resolvePythonImport,
34
+ namedBindingExtractor: extractPythonNamedBindings,
35
+ importSemantics: 'namespace',
36
+ mroStrategy: 'c3',
37
+ fieldExtractor: createFieldExtractor(pythonFieldConfig),
38
+ builtInNames: BUILT_INS,
39
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Ruby language provider.
3
+ *
4
+ * Ruby uses wildcard import semantics (require/require_relative bring
5
+ * everything into scope). Ruby has SPECIAL call routing via routeRubyCall
6
+ * to handle require, include/extend (heritage), and attr_accessor/
7
+ * attr_reader/attr_writer (property definitions) as call expressions.
8
+ */
9
+ export declare const rubyProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Ruby language provider.
3
+ *
4
+ * Ruby uses wildcard import semantics (require/require_relative bring
5
+ * everything into scope). Ruby has SPECIAL call routing via routeRubyCall
6
+ * to handle require, include/extend (heritage), and attr_accessor/
7
+ * attr_reader/attr_writer (property definitions) as call expressions.
8
+ */
9
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
10
+ import { defineLanguage } from '../language-provider.js';
11
+ import { typeConfig as rubyConfig } from '../type-extractors/ruby.js';
12
+ import { routeRubyCall } from '../call-routing.js';
13
+ import { rubyExportChecker } from '../export-detection.js';
14
+ import { resolveRubyImport } from '../import-resolvers/ruby.js';
15
+ import { RUBY_QUERIES } from '../tree-sitter-queries.js';
16
+ import { createFieldExtractor } from '../field-extractors/generic.js';
17
+ import { rubyConfig as rubyFieldConfig } from '../field-extractors/configs/ruby.js';
18
+ const BUILT_INS = new Set([
19
+ 'puts', 'p', 'pp', 'raise', 'fail',
20
+ 'require', 'require_relative', 'load', 'autoload',
21
+ 'include', 'extend', 'prepend',
22
+ 'attr_accessor', 'attr_reader', 'attr_writer',
23
+ 'public', 'private', 'protected', 'module_function',
24
+ 'lambda', 'proc', 'block_given?',
25
+ 'nil?', 'is_a?', 'kind_of?', 'instance_of?', 'respond_to?',
26
+ 'freeze', 'frozen?', 'dup', 'tap', 'yield_self',
27
+ 'each', 'select', 'reject', 'detect', 'collect',
28
+ 'inject', 'flat_map', 'each_with_object', 'each_with_index',
29
+ 'any?', 'all?', 'none?', 'count', 'first', 'last',
30
+ 'sort_by', 'min_by', 'max_by',
31
+ 'group_by', 'partition', 'compact', 'flatten', 'uniq',
32
+ ]);
33
+ export const rubyProvider = defineLanguage({
34
+ id: SupportedLanguages.Ruby,
35
+ extensions: ['.rb', '.rake', '.gemspec'],
36
+ treeSitterQueries: RUBY_QUERIES,
37
+ typeConfig: rubyConfig,
38
+ exportChecker: rubyExportChecker,
39
+ importResolver: resolveRubyImport,
40
+ callRouter: routeRubyCall,
41
+ importSemantics: 'wildcard',
42
+ fieldExtractor: createFieldExtractor(rubyFieldConfig),
43
+ builtInNames: BUILT_INS,
44
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Rust Language Provider
3
+ *
4
+ * Assembles all Rust-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Rust traits:
8
+ * - importSemantics: 'named' (Rust has use X::{a, b})
9
+ * - mroStrategy: 'qualified-syntax' (Rust uses trait qualification, not MRO)
10
+ * - namedBindingExtractor: present (use X::{a, b} extracts named bindings)
11
+ */
12
+ export declare const rustProvider: import("../language-provider.js").LanguageProvider;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Rust Language Provider
3
+ *
4
+ * Assembles all Rust-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Rust traits:
8
+ * - importSemantics: 'named' (Rust has use X::{a, b})
9
+ * - mroStrategy: 'qualified-syntax' (Rust uses trait qualification, not MRO)
10
+ * - namedBindingExtractor: present (use X::{a, b} extracts named bindings)
11
+ */
12
+ import { SupportedLanguages } from '../../../config/supported-languages.js';
13
+ import { defineLanguage } from '../language-provider.js';
14
+ import { typeConfig as rustConfig } from '../type-extractors/rust.js';
15
+ import { rustExportChecker } from '../export-detection.js';
16
+ import { resolveRustImport } from '../import-resolvers/rust.js';
17
+ import { extractRustNamedBindings } from '../named-bindings/rust.js';
18
+ import { RUST_QUERIES } from '../tree-sitter-queries.js';
19
+ import { createFieldExtractor } from '../field-extractors/generic.js';
20
+ import { rustConfig as rustFieldConfig } from '../field-extractors/configs/rust.js';
21
+ const BUILT_INS = new Set([
22
+ 'unwrap', 'expect', 'unwrap_or', 'unwrap_or_else', 'unwrap_or_default',
23
+ 'ok', 'err', 'is_ok', 'is_err', 'map', 'map_err', 'and_then', 'or_else',
24
+ 'clone', 'to_string', 'to_owned', 'into', 'from', 'as_ref', 'as_mut',
25
+ 'iter', 'into_iter', 'collect', 'filter', 'fold', 'for_each',
26
+ 'len', 'is_empty', 'push', 'pop', 'insert', 'remove', 'contains',
27
+ 'format', 'write', 'writeln', 'panic', 'unreachable', 'todo', 'unimplemented',
28
+ 'vec', 'println', 'eprintln', 'dbg',
29
+ 'lock', 'read', 'try_lock',
30
+ 'spawn', 'join', 'sleep',
31
+ 'Some', 'None', 'Ok', 'Err',
32
+ ]);
33
+ export const rustProvider = defineLanguage({
34
+ id: SupportedLanguages.Rust,
35
+ extensions: ['.rs'],
36
+ treeSitterQueries: RUST_QUERIES,
37
+ typeConfig: rustConfig,
38
+ exportChecker: rustExportChecker,
39
+ importResolver: resolveRustImport,
40
+ namedBindingExtractor: extractRustNamedBindings,
41
+ mroStrategy: 'qualified-syntax',
42
+ fieldExtractor: createFieldExtractor(rustFieldConfig),
43
+ builtInNames: BUILT_INS,
44
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Swift Language Provider
3
+ *
4
+ * Assembles all Swift-specific ingestion capabilities into a single
5
+ * LanguageProvider, following the Strategy pattern used by the pipeline.
6
+ *
7
+ * Key Swift traits:
8
+ * - importSemantics: 'wildcard' (Swift imports entire modules)
9
+ * - heritageDefaultEdge: 'IMPLEMENTS' (protocols are more common than class inheritance)
10
+ * - implicitImportWirer: all files in the same SPM target see each other
11
+ */
12
+ export declare const swiftProvider: import("../language-provider.js").LanguageProvider;