gitnexus 1.6.2-rc.13 → 1.6.2-rc.15

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 (69) hide show
  1. package/dist/core/ingestion/call-extractors/configs/c-cpp.d.ts +3 -0
  2. package/dist/core/ingestion/call-extractors/configs/c-cpp.js +8 -0
  3. package/dist/core/ingestion/call-extractors/configs/csharp.d.ts +2 -0
  4. package/dist/core/ingestion/call-extractors/configs/csharp.js +6 -0
  5. package/dist/core/ingestion/call-extractors/configs/dart.d.ts +2 -0
  6. package/dist/core/ingestion/call-extractors/configs/dart.js +5 -0
  7. package/dist/core/ingestion/call-extractors/configs/go.d.ts +2 -0
  8. package/dist/core/ingestion/call-extractors/configs/go.js +5 -0
  9. package/dist/core/ingestion/call-extractors/configs/jvm.d.ts +3 -0
  10. package/dist/core/ingestion/call-extractors/configs/jvm.js +51 -0
  11. package/dist/core/ingestion/call-extractors/configs/php.d.ts +2 -0
  12. package/dist/core/ingestion/call-extractors/configs/php.js +5 -0
  13. package/dist/core/ingestion/call-extractors/configs/python.d.ts +2 -0
  14. package/dist/core/ingestion/call-extractors/configs/python.js +5 -0
  15. package/dist/core/ingestion/call-extractors/configs/ruby.d.ts +2 -0
  16. package/dist/core/ingestion/call-extractors/configs/ruby.js +5 -0
  17. package/dist/core/ingestion/call-extractors/configs/rust.d.ts +2 -0
  18. package/dist/core/ingestion/call-extractors/configs/rust.js +5 -0
  19. package/dist/core/ingestion/call-extractors/configs/swift.d.ts +2 -0
  20. package/dist/core/ingestion/call-extractors/configs/swift.js +5 -0
  21. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.d.ts +3 -0
  22. package/dist/core/ingestion/call-extractors/configs/typescript-javascript.js +8 -0
  23. package/dist/core/ingestion/call-extractors/generic.d.ts +5 -0
  24. package/dist/core/ingestion/call-extractors/generic.js +59 -0
  25. package/dist/core/ingestion/call-processor.js +48 -45
  26. package/dist/core/ingestion/call-types.d.ts +60 -0
  27. package/dist/core/ingestion/call-types.js +2 -0
  28. package/dist/core/ingestion/class-extractors/configs/c-cpp.d.ts +3 -0
  29. package/dist/core/ingestion/class-extractors/configs/c-cpp.js +11 -0
  30. package/dist/core/ingestion/class-extractors/configs/csharp.d.ts +2 -0
  31. package/dist/core/ingestion/class-extractors/configs/csharp.js +21 -0
  32. package/dist/core/ingestion/class-extractors/configs/dart.d.ts +2 -0
  33. package/dist/core/ingestion/class-extractors/configs/dart.js +7 -0
  34. package/dist/core/ingestion/class-extractors/configs/go.d.ts +2 -0
  35. package/dist/core/ingestion/class-extractors/configs/go.js +20 -0
  36. package/dist/core/ingestion/class-extractors/configs/jvm.d.ts +3 -0
  37. package/dist/core/ingestion/class-extractors/configs/jvm.js +35 -0
  38. package/dist/core/ingestion/class-extractors/configs/php.d.ts +2 -0
  39. package/dist/core/ingestion/class-extractors/configs/php.js +7 -0
  40. package/dist/core/ingestion/class-extractors/configs/python.d.ts +2 -0
  41. package/dist/core/ingestion/class-extractors/configs/python.js +7 -0
  42. package/dist/core/ingestion/class-extractors/configs/ruby.d.ts +2 -0
  43. package/dist/core/ingestion/class-extractors/configs/ruby.js +7 -0
  44. package/dist/core/ingestion/class-extractors/configs/rust.d.ts +2 -0
  45. package/dist/core/ingestion/class-extractors/configs/rust.js +7 -0
  46. package/dist/core/ingestion/class-extractors/configs/swift.d.ts +2 -0
  47. package/dist/core/ingestion/class-extractors/configs/swift.js +18 -0
  48. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.d.ts +4 -0
  49. package/dist/core/ingestion/class-extractors/configs/typescript-javascript.js +28 -0
  50. package/dist/core/ingestion/language-provider.d.ts +7 -0
  51. package/dist/core/ingestion/languages/c-cpp.js +7 -9
  52. package/dist/core/ingestion/languages/csharp.js +5 -19
  53. package/dist/core/ingestion/languages/dart.js +5 -5
  54. package/dist/core/ingestion/languages/go.js +5 -18
  55. package/dist/core/ingestion/languages/java.js +5 -16
  56. package/dist/core/ingestion/languages/kotlin.js +5 -11
  57. package/dist/core/ingestion/languages/php.js +5 -5
  58. package/dist/core/ingestion/languages/python.js +5 -5
  59. package/dist/core/ingestion/languages/ruby.js +5 -5
  60. package/dist/core/ingestion/languages/rust.js +5 -5
  61. package/dist/core/ingestion/languages/swift.js +5 -16
  62. package/dist/core/ingestion/languages/typescript.js +7 -20
  63. package/dist/core/ingestion/languages/vue.js +5 -15
  64. package/dist/core/ingestion/workers/parse-worker.js +162 -166
  65. package/package.json +1 -1
  66. package/dist/core/ingestion/call-sites/extract-language-call-site.d.ts +0 -10
  67. package/dist/core/ingestion/call-sites/extract-language-call-site.js +0 -22
  68. package/dist/core/ingestion/call-sites/java.d.ts +0 -9
  69. package/dist/core/ingestion/call-sites/java.js +0 -30
@@ -0,0 +1,4 @@
1
+ import type { ClassExtractionConfig } from '../../class-types.js';
2
+ export declare const typescriptClassConfig: ClassExtractionConfig;
3
+ export declare const javascriptClassConfig: ClassExtractionConfig;
4
+ export declare const vueClassConfig: ClassExtractionConfig;
@@ -0,0 +1,28 @@
1
+ // gitnexus/src/core/ingestion/class-extractors/configs/typescript-javascript.ts
2
+ import { SupportedLanguages } from '../../../../_shared/index.js';
3
+ const shared = {
4
+ typeDeclarationNodes: [
5
+ 'class_declaration',
6
+ 'abstract_class_declaration',
7
+ 'interface_declaration',
8
+ 'enum_declaration',
9
+ ],
10
+ ancestorScopeNodeTypes: [
11
+ 'class_declaration',
12
+ 'abstract_class_declaration',
13
+ 'interface_declaration',
14
+ 'enum_declaration',
15
+ ],
16
+ };
17
+ export const typescriptClassConfig = {
18
+ ...shared,
19
+ language: SupportedLanguages.TypeScript,
20
+ };
21
+ export const javascriptClassConfig = {
22
+ ...shared,
23
+ language: SupportedLanguages.JavaScript,
24
+ };
25
+ export const vueClassConfig = {
26
+ ...shared,
27
+ language: SupportedLanguages.Vue,
28
+ };
@@ -11,6 +11,7 @@
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 } 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';
@@ -119,6 +120,12 @@ interface LanguageProviderConfig {
119
120
  /** MRO strategy for multiple inheritance resolution.
120
121
  * Default: 'first-wins'. */
121
122
  readonly mroStrategy?: MroStrategy;
123
+ /** Call extractor for extracting call site information (calledName, callForm,
124
+ * receiverName, argCount, mixed chains) from @call / @call.name captures.
125
+ * Produced by createCallExtractor() with a per-language CallExtractionConfig.
126
+ * Default: undefined — if unset, no calls are extracted for this language.
127
+ * All tree-sitter providers MUST supply this. */
128
+ readonly callExtractor?: CallExtractor;
122
129
  /** Field extractor for extracting field/property definitions from class/struct
123
130
  * declarations. Produces FieldInfo[] with name, type, visibility, static,
124
131
  * readonly metadata. Default: undefined (no field extraction). */
@@ -9,6 +9,7 @@
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';
@@ -29,6 +30,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
29
30
  import { cConfig as cFieldConfig, cppConfig as cppFieldConfig, } from '../field-extractors/configs/c-cpp.js';
30
31
  import { createMethodExtractor } from '../method-extractors/generic.js';
31
32
  import { cMethodConfig, cppMethodConfig } from '../method-extractors/configs/c-cpp.js';
33
+ import { createCallExtractor } from '../call-extractors/generic.js';
34
+ import { cCallConfig, cppCallConfig } from '../call-extractors/configs/c-cpp.js';
32
35
  const C_BUILT_INS = new Set([
33
36
  'printf',
34
37
  'fprintf',
@@ -135,15 +138,8 @@ const C_BUILT_INS = new Set([
135
138
  'get',
136
139
  'put',
137
140
  ]);
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
- });
141
+ const cClassExtractor = createClassExtractor(cClassConfig);
142
+ const cppClassExtractor = createClassExtractor(cppClassConfig);
147
143
  /**
148
144
  * C/C++ function name extraction — unwraps pointer_declarator / reference_declarator /
149
145
  * function_declarator / qualified_identifier chains to find the actual function name.
@@ -294,6 +290,7 @@ export const cProvider = defineLanguage({
294
290
  exportChecker: cCppExportChecker,
295
291
  importResolver: resolveCImport,
296
292
  importSemantics: 'wildcard-transitive',
293
+ callExtractor: createCallExtractor(cCallConfig),
297
294
  fieldExtractor: createFieldExtractor(cFieldConfig),
298
295
  methodExtractor: createMethodExtractor({
299
296
  ...cMethodConfig,
@@ -312,6 +309,7 @@ export const cppProvider = defineLanguage({
312
309
  importResolver: resolveCppImport,
313
310
  importSemantics: 'wildcard-transitive',
314
311
  mroStrategy: 'leftmost-base',
312
+ callExtractor: createCallExtractor(cppCallConfig),
315
313
  fieldExtractor: createFieldExtractor(cppFieldConfig),
316
314
  methodExtractor: createMethodExtractor({
317
315
  ...cppMethodConfig,
@@ -7,12 +7,15 @@
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
14
  import { resolveCSharpImport } from '../import-resolvers/csharp.js';
14
15
  import { extractCSharpNamedBindings } from '../named-bindings/csharp.js';
15
16
  import { CSHARP_QUERIES } from '../tree-sitter-queries.js';
17
+ import { createCallExtractor } from '../call-extractors/generic.js';
18
+ import { csharpCallConfig } from '../call-extractors/configs/csharp.js';
16
19
  import { createFieldExtractor } from '../field-extractors/generic.js';
17
20
  import { csharpConfig as csharpFieldConfig } from '../field-extractors/configs/csharp.js';
18
21
  import { createMethodExtractor } from '../method-extractors/generic.js';
@@ -121,26 +124,9 @@ export const csharpProvider = defineLanguage({
121
124
  namedBindingExtractor: extractCSharpNamedBindings,
122
125
  interfaceNamePattern: /^I[A-Z]/,
123
126
  mroStrategy: 'implements-split',
127
+ callExtractor: createCallExtractor(csharpCallConfig),
124
128
  fieldExtractor: createFieldExtractor(csharpFieldConfig),
125
129
  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
- }),
130
+ classExtractor: createClassExtractor(csharpClassConfig),
145
131
  builtInNames: BUILT_INS,
146
132
  });
@@ -12,6 +12,7 @@
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';
@@ -21,6 +22,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
21
22
  import { dartConfig as dartFieldConfig } from '../field-extractors/configs/dart.js';
22
23
  import { createMethodExtractor } from '../method-extractors/generic.js';
23
24
  import { dartMethodConfig } from '../method-extractors/configs/dart.js';
25
+ import { createCallExtractor } from '../call-extractors/generic.js';
26
+ import { dartCallConfig } from '../call-extractors/configs/dart.js';
24
27
  /**
25
28
  * Resolve the enclosing function from a `function_body` node by looking at its
26
29
  * previous sibling. In Dart's tree-sitter grammar, function_signature and
@@ -84,13 +87,10 @@ export const dartProvider = defineLanguage({
84
87
  exportChecker: dartExportChecker,
85
88
  importResolver: resolveDartImport,
86
89
  importSemantics: 'wildcard-leaf',
90
+ callExtractor: createCallExtractor(dartCallConfig),
87
91
  fieldExtractor: createFieldExtractor(dartFieldConfig),
88
92
  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
- }),
93
+ classExtractor: createClassExtractor(dartClassConfig),
94
94
  enclosingFunctionFinder: dartEnclosingFunctionFinder,
95
95
  builtInNames: BUILT_INS,
96
96
  });
@@ -10,6 +10,7 @@
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';
@@ -19,6 +20,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
19
20
  import { goConfig as goFieldConfig } from '../field-extractors/configs/go.js';
20
21
  import { createMethodExtractor } from '../method-extractors/generic.js';
21
22
  import { goMethodConfig } from '../method-extractors/configs/go.js';
23
+ import { createCallExtractor } from '../call-extractors/generic.js';
24
+ import { goCallConfig } from '../call-extractors/configs/go.js';
22
25
  export const goProvider = defineLanguage({
23
26
  id: SupportedLanguages.Go,
24
27
  extensions: ['.go'],
@@ -27,24 +30,8 @@ export const goProvider = defineLanguage({
27
30
  exportChecker: goExportChecker,
28
31
  importResolver: resolveGoImport,
29
32
  importSemantics: 'wildcard-leaf',
33
+ callExtractor: createCallExtractor(goCallConfig),
30
34
  fieldExtractor: createFieldExtractor(goFieldConfig),
31
35
  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
- }),
36
+ classExtractor: createClassExtractor(goClassConfig),
50
37
  });
@@ -8,12 +8,15 @@
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
15
  import { resolveJavaImport } from '../import-resolvers/jvm.js';
15
16
  import { extractJavaNamedBindings } from '../named-bindings/java.js';
16
17
  import { JAVA_QUERIES } from '../tree-sitter-queries.js';
18
+ import { createCallExtractor } from '../call-extractors/generic.js';
19
+ import { javaCallConfig } from '../call-extractors/configs/jvm.js';
17
20
  import { createFieldExtractor } from '../field-extractors/generic.js';
18
21
  import { javaConfig } from '../field-extractors/configs/jvm.js';
19
22
  import { createMethodExtractor } from '../method-extractors/generic.js';
@@ -28,22 +31,8 @@ export const javaProvider = defineLanguage({
28
31
  namedBindingExtractor: extractJavaNamedBindings,
29
32
  interfaceNamePattern: /^I[A-Z]/,
30
33
  mroStrategy: 'implements-split',
34
+ callExtractor: createCallExtractor(javaCallConfig),
31
35
  fieldExtractor: createFieldExtractor(javaConfig),
32
36
  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
- }),
37
+ classExtractor: createClassExtractor(javaClassConfig),
49
38
  });
@@ -8,6 +8,7 @@
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';
@@ -15,6 +16,8 @@ import { resolveKotlinImport } from '../import-resolvers/jvm.js';
15
16
  import { extractKotlinNamedBindings } from '../named-bindings/kotlin.js';
16
17
  import { appendKotlinWildcard } from '../import-resolvers/jvm.js';
17
18
  import { KOTLIN_QUERIES } from '../tree-sitter-queries.js';
19
+ import { createCallExtractor } from '../call-extractors/generic.js';
20
+ import { kotlinCallConfig } from '../call-extractors/configs/jvm.js';
18
21
  import { createFieldExtractor } from '../field-extractors/generic.js';
19
22
  import { kotlinConfig } from '../field-extractors/configs/jvm.js';
20
23
  import { createMethodExtractor } from '../method-extractors/generic.js';
@@ -99,19 +102,10 @@ export const kotlinProvider = defineLanguage({
99
102
  namedBindingExtractor: extractKotlinNamedBindings,
100
103
  importPathPreprocessor: appendKotlinWildcard,
101
104
  mroStrategy: 'implements-split',
105
+ callExtractor: createCallExtractor(kotlinCallConfig),
102
106
  fieldExtractor: createFieldExtractor(kotlinConfig),
103
107
  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
- }),
108
+ classExtractor: createClassExtractor(kotlinClassConfig),
115
109
  builtInNames: BUILT_INS,
116
110
  labelOverride: (functionNode, defaultLabel) => {
117
111
  if (defaultLabel !== 'Function')
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { SupportedLanguages } from '../../../_shared/index.js';
9
9
  import { createClassExtractor } from '../class-extractors/generic.js';
10
+ import { phpClassConfig } from '../class-extractors/configs/php.js';
10
11
  import { defineLanguage } from '../language-provider.js';
11
12
  import { typeConfig as phpConfig } from '../type-extractors/php.js';
12
13
  import { phpExportChecker } from '../export-detection.js';
@@ -18,6 +19,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
18
19
  import { phpConfig as phpFieldConfig } from '../field-extractors/configs/php.js';
19
20
  import { createMethodExtractor } from '../method-extractors/generic.js';
20
21
  import { phpMethodConfig } from '../method-extractors/configs/php.js';
22
+ import { createCallExtractor } from '../call-extractors/generic.js';
23
+ import { phpCallConfig } from '../call-extractors/configs/php.js';
21
24
  const BUILT_INS = new Set([
22
25
  'echo',
23
26
  'isset',
@@ -221,13 +224,10 @@ export const phpProvider = defineLanguage({
221
224
  exportChecker: phpExportChecker,
222
225
  importResolver: resolvePhpImport,
223
226
  namedBindingExtractor: extractPhpNamedBindings,
227
+ callExtractor: createCallExtractor(phpCallConfig),
224
228
  fieldExtractor: createFieldExtractor(phpFieldConfig),
225
229
  methodExtractor: createMethodExtractor(phpMethodConfig),
226
- classExtractor: createClassExtractor({
227
- language: SupportedLanguages.PHP,
228
- typeDeclarationNodes: ['class_declaration', 'interface_declaration', 'enum_declaration'],
229
- ancestorScopeNodeTypes: ['namespace_definition'],
230
- }),
230
+ classExtractor: createClassExtractor(phpClassConfig),
231
231
  descriptionExtractor: phpDescriptionExtractor,
232
232
  isRouteFile: isPhpRouteFile,
233
233
  builtInNames: BUILT_INS,
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { SupportedLanguages } from '../../../_shared/index.js';
13
13
  import { createClassExtractor } from '../class-extractors/generic.js';
14
+ import { pythonClassConfig } from '../class-extractors/configs/python.js';
14
15
  import { defineLanguage } from '../language-provider.js';
15
16
  import { typeConfig as pythonConfig } from '../type-extractors/python.js';
16
17
  import { pythonExportChecker } from '../export-detection.js';
@@ -21,6 +22,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
21
22
  import { pythonConfig as pythonFieldConfig } from '../field-extractors/configs/python.js';
22
23
  import { createMethodExtractor } from '../method-extractors/generic.js';
23
24
  import { pythonMethodConfig } from '../method-extractors/configs/python.js';
25
+ import { createCallExtractor } from '../call-extractors/generic.js';
26
+ import { pythonCallConfig } from '../call-extractors/configs/python.js';
24
27
  const BUILT_INS = new Set([
25
28
  'print',
26
29
  'len',
@@ -60,12 +63,9 @@ export const pythonProvider = defineLanguage({
60
63
  namedBindingExtractor: extractPythonNamedBindings,
61
64
  importSemantics: 'namespace',
62
65
  mroStrategy: 'c3',
66
+ callExtractor: createCallExtractor(pythonCallConfig),
63
67
  fieldExtractor: createFieldExtractor(pythonFieldConfig),
64
68
  methodExtractor: createMethodExtractor(pythonMethodConfig),
65
- classExtractor: createClassExtractor({
66
- language: SupportedLanguages.Python,
67
- typeDeclarationNodes: ['class_definition'],
68
- ancestorScopeNodeTypes: ['class_definition'],
69
- }),
69
+ classExtractor: createClassExtractor(pythonClassConfig),
70
70
  builtInNames: BUILT_INS,
71
71
  });
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { SupportedLanguages } from '../../../_shared/index.js';
10
10
  import { createClassExtractor } from '../class-extractors/generic.js';
11
+ import { rubyClassConfig } from '../class-extractors/configs/ruby.js';
11
12
  import { defineLanguage } from '../language-provider.js';
12
13
  import { typeConfig as rubyConfig } from '../type-extractors/ruby.js';
13
14
  import { routeRubyCall } from '../call-routing.js';
@@ -18,6 +19,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
18
19
  import { rubyConfig as rubyFieldConfig } from '../field-extractors/configs/ruby.js';
19
20
  import { createMethodExtractor } from '../method-extractors/generic.js';
20
21
  import { rubyMethodConfig } from '../method-extractors/configs/ruby.js';
22
+ import { createCallExtractor } from '../call-extractors/generic.js';
23
+ import { rubyCallConfig } from '../call-extractors/configs/ruby.js';
21
24
  /** Ruby method/singleton_method: extract name from 'name' field, label as Method. */
22
25
  const rubyExtractFunctionName = (node) => {
23
26
  if (node.type !== 'method' && node.type !== 'singleton_method')
@@ -100,6 +103,7 @@ export const rubyProvider = defineLanguage({
100
103
  importResolver: resolveRubyImport,
101
104
  callRouter: routeRubyCall,
102
105
  importSemantics: 'wildcard-leaf',
106
+ callExtractor: createCallExtractor(rubyCallConfig),
103
107
  resolveEnclosingOwner(node) {
104
108
  // Ruby singleton_class (class << self) should resolve to the enclosing
105
109
  // class or module for owner/container resolution (HAS_METHOD edges, class IDs).
@@ -120,10 +124,6 @@ export const rubyProvider = defineLanguage({
120
124
  ...rubyMethodConfig,
121
125
  extractFunctionName: rubyExtractFunctionName,
122
126
  }),
123
- classExtractor: createClassExtractor({
124
- language: SupportedLanguages.Ruby,
125
- typeDeclarationNodes: ['class'],
126
- ancestorScopeNodeTypes: ['module', 'class'],
127
- }),
127
+ classExtractor: createClassExtractor(rubyClassConfig),
128
128
  builtInNames: BUILT_INS,
129
129
  });
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { SupportedLanguages } from '../../../_shared/index.js';
13
13
  import { createClassExtractor } from '../class-extractors/generic.js';
14
+ import { rustClassConfig } from '../class-extractors/configs/rust.js';
14
15
  import { defineLanguage } from '../language-provider.js';
15
16
  import { typeConfig as rustConfig } from '../type-extractors/rust.js';
16
17
  import { rustExportChecker } from '../export-detection.js';
@@ -21,6 +22,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
21
22
  import { rustConfig as rustFieldConfig } from '../field-extractors/configs/rust.js';
22
23
  import { createMethodExtractor } from '../method-extractors/generic.js';
23
24
  import { rustMethodConfig } from '../method-extractors/configs/rust.js';
25
+ import { createCallExtractor } from '../call-extractors/generic.js';
26
+ import { rustCallConfig } from '../call-extractors/configs/rust.js';
24
27
  /** Rust impl_item: find the function_item child and extract its name as a Method. */
25
28
  const rustExtractFunctionName = (node) => {
26
29
  if (node.type !== 'impl_item')
@@ -112,15 +115,12 @@ export const rustProvider = defineLanguage({
112
115
  importResolver: resolveRustImport,
113
116
  namedBindingExtractor: extractRustNamedBindings,
114
117
  mroStrategy: 'qualified-syntax',
118
+ callExtractor: createCallExtractor(rustCallConfig),
115
119
  fieldExtractor: createFieldExtractor(rustFieldConfig),
116
120
  methodExtractor: createMethodExtractor({
117
121
  ...rustMethodConfig,
118
122
  extractFunctionName: rustExtractFunctionName,
119
123
  }),
120
- classExtractor: createClassExtractor({
121
- language: SupportedLanguages.Rust,
122
- typeDeclarationNodes: ['struct_item', 'enum_item'],
123
- ancestorScopeNodeTypes: ['mod_item', 'struct_item', 'enum_item'],
124
- }),
124
+ classExtractor: createClassExtractor(rustClassConfig),
125
125
  builtInNames: BUILT_INS,
126
126
  });
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { SupportedLanguages } from '../../../_shared/index.js';
13
13
  import { createClassExtractor } from '../class-extractors/generic.js';
14
+ import { swiftClassConfig } from '../class-extractors/configs/swift.js';
14
15
  import { defineLanguage } from '../language-provider.js';
15
16
  import { typeConfig as swiftConfig } from '../type-extractors/swift.js';
16
17
  import { swiftExportChecker } from '../export-detection.js';
@@ -20,6 +21,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
20
21
  import { swiftConfig as swiftFieldConfig } from '../field-extractors/configs/swift.js';
21
22
  import { createMethodExtractor } from '../method-extractors/generic.js';
22
23
  import { swiftMethodConfig } from '../method-extractors/configs/swift.js';
24
+ import { createCallExtractor } from '../call-extractors/generic.js';
25
+ import { swiftCallConfig } from '../call-extractors/configs/swift.js';
23
26
  /**
24
27
  * Group Swift files by SPM target for implicit module visibility.
25
28
  * If SwiftPackageConfig is available, use target -> directory mappings.
@@ -223,27 +226,13 @@ export const swiftProvider = defineLanguage({
223
226
  importResolver: resolveSwiftImport,
224
227
  importSemantics: 'wildcard-leaf',
225
228
  heritageDefaultEdge: 'IMPLEMENTS',
229
+ callExtractor: createCallExtractor(swiftCallConfig),
226
230
  fieldExtractor: createFieldExtractor(swiftFieldConfig),
227
231
  methodExtractor: createMethodExtractor({
228
232
  ...swiftMethodConfig,
229
233
  extractFunctionName: swiftExtractFunctionName,
230
234
  }),
231
- classExtractor: createClassExtractor({
232
- language: SupportedLanguages.Swift,
233
- typeDeclarationNodes: ['class_declaration', 'protocol_declaration'],
234
- ancestorScopeNodeTypes: ['class_declaration', 'protocol_declaration'],
235
- extractType(node) {
236
- if (node.type === 'protocol_declaration')
237
- return 'Interface';
238
- if (node.type !== 'class_declaration')
239
- return undefined;
240
- if (node.children.some((child) => child?.text === 'struct'))
241
- return 'Struct';
242
- if (node.children.some((child) => child?.text === 'enum'))
243
- return 'Enum';
244
- return 'Class';
245
- },
246
- }),
235
+ classExtractor: createClassExtractor(swiftClassConfig),
247
236
  implicitImportWirer: wireSwiftImplicitImports,
248
237
  builtInNames: BUILT_INS,
249
238
  });
@@ -9,6 +9,7 @@
9
9
  import { SupportedLanguages } from '../../../_shared/index.js';
10
10
  import { defineLanguage } from '../language-provider.js';
11
11
  import { createClassExtractor } from '../class-extractors/generic.js';
12
+ import { typescriptClassConfig, javascriptClassConfig, } from '../class-extractors/configs/typescript-javascript.js';
12
13
  import { typeConfig as typescriptConfig } from '../type-extractors/typescript.js';
13
14
  import { tsExportChecker } from '../export-detection.js';
14
15
  import { resolveTypescriptImport, resolveJavascriptImport } from '../import-resolvers/standard.js';
@@ -19,6 +20,8 @@ import { createFieldExtractor } from '../field-extractors/generic.js';
19
20
  import { javascriptConfig } from '../field-extractors/configs/typescript-javascript.js';
20
21
  import { createMethodExtractor } from '../method-extractors/generic.js';
21
22
  import { typescriptMethodConfig, javascriptMethodConfig, } from '../method-extractors/configs/typescript-javascript.js';
23
+ import { createCallExtractor } from '../call-extractors/generic.js';
24
+ import { typescriptCallConfig, javascriptCallConfig, } from '../call-extractors/configs/typescript-javascript.js';
22
25
  /**
23
26
  * TypeScript/JavaScript: arrow_function and function_expression get their name
24
27
  * from the parent variable_declarator (e.g. `const foo = () => {}`).
@@ -137,21 +140,6 @@ export const BUILT_INS = new Set([
137
140
  'toString',
138
141
  'valueOf',
139
142
  ]);
140
- const tsJsClassConfig = {
141
- language: SupportedLanguages.TypeScript,
142
- typeDeclarationNodes: [
143
- 'class_declaration',
144
- 'abstract_class_declaration',
145
- 'interface_declaration',
146
- 'enum_declaration',
147
- ],
148
- ancestorScopeNodeTypes: [
149
- 'class_declaration',
150
- 'abstract_class_declaration',
151
- 'interface_declaration',
152
- 'enum_declaration',
153
- ],
154
- };
155
143
  export const typescriptProvider = defineLanguage({
156
144
  id: SupportedLanguages.TypeScript,
157
145
  extensions: ['.ts', '.tsx'],
@@ -160,12 +148,13 @@ export const typescriptProvider = defineLanguage({
160
148
  exportChecker: tsExportChecker,
161
149
  importResolver: resolveTypescriptImport,
162
150
  namedBindingExtractor: extractTsNamedBindings,
151
+ callExtractor: createCallExtractor(typescriptCallConfig),
163
152
  fieldExtractor: typescriptFieldExtractor,
164
153
  methodExtractor: createMethodExtractor({
165
154
  ...typescriptMethodConfig,
166
155
  extractFunctionName: tsExtractFunctionName,
167
156
  }),
168
- classExtractor: createClassExtractor(tsJsClassConfig),
157
+ classExtractor: createClassExtractor(typescriptClassConfig),
169
158
  builtInNames: BUILT_INS,
170
159
  });
171
160
  export const javascriptProvider = defineLanguage({
@@ -176,14 +165,12 @@ export const javascriptProvider = defineLanguage({
176
165
  exportChecker: tsExportChecker,
177
166
  importResolver: resolveJavascriptImport,
178
167
  namedBindingExtractor: extractTsNamedBindings,
168
+ callExtractor: createCallExtractor(javascriptCallConfig),
179
169
  fieldExtractor: createFieldExtractor(javascriptConfig),
180
170
  methodExtractor: createMethodExtractor({
181
171
  ...javascriptMethodConfig,
182
172
  extractFunctionName: tsExtractFunctionName,
183
173
  }),
184
- classExtractor: createClassExtractor({
185
- ...tsJsClassConfig,
186
- language: SupportedLanguages.JavaScript,
187
- }),
174
+ classExtractor: createClassExtractor(javascriptClassConfig),
188
175
  builtInNames: BUILT_INS,
189
176
  });
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import { SupportedLanguages } from '../../../_shared/index.js';
14
14
  import { createClassExtractor } from '../class-extractors/generic.js';
15
+ import { vueClassConfig } from '../class-extractors/configs/typescript-javascript.js';
15
16
  import { defineLanguage } from '../language-provider.js';
16
17
  import { typeConfig as typescriptConfig } from '../type-extractors/typescript.js';
17
18
  import { tsExportChecker } from '../export-detection.js';
@@ -20,6 +21,8 @@ import { extractTsNamedBindings } from '../named-bindings/typescript.js';
20
21
  import { TYPESCRIPT_QUERIES } from '../tree-sitter-queries.js';
21
22
  import { typescriptFieldExtractor } from '../field-extractors/typescript.js';
22
23
  import { BUILT_INS as TS_BUILT_INS } from './typescript.js';
24
+ import { createCallExtractor } from '../call-extractors/generic.js';
25
+ import { typescriptCallConfig } from '../call-extractors/configs/typescript-javascript.js';
23
26
  const VUE_SPECIFIC_BUILT_INS = [
24
27
  'ref',
25
28
  'reactive',
@@ -52,21 +55,7 @@ const VUE_SPECIFIC_BUILT_INS = [
52
55
  'useAttrs',
53
56
  ];
54
57
  const VUE_BUILT_INS = new Set([...TS_BUILT_INS, ...VUE_SPECIFIC_BUILT_INS]);
55
- const vueClassExtractor = createClassExtractor({
56
- language: SupportedLanguages.Vue,
57
- typeDeclarationNodes: [
58
- 'class_declaration',
59
- 'abstract_class_declaration',
60
- 'interface_declaration',
61
- 'enum_declaration',
62
- ],
63
- ancestorScopeNodeTypes: [
64
- 'class_declaration',
65
- 'abstract_class_declaration',
66
- 'interface_declaration',
67
- 'enum_declaration',
68
- ],
69
- });
58
+ const vueClassExtractor = createClassExtractor(vueClassConfig);
70
59
  export const vueProvider = defineLanguage({
71
60
  id: SupportedLanguages.Vue,
72
61
  extensions: ['.vue'],
@@ -75,6 +64,7 @@ export const vueProvider = defineLanguage({
75
64
  exportChecker: tsExportChecker,
76
65
  importResolver: resolveVueImport,
77
66
  namedBindingExtractor: extractTsNamedBindings,
67
+ callExtractor: createCallExtractor(typescriptCallConfig),
78
68
  fieldExtractor: typescriptFieldExtractor,
79
69
  classExtractor: vueClassExtractor,
80
70
  builtInNames: VUE_BUILT_INS,