@liendev/core 0.32.0 → 0.34.0

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 (95) hide show
  1. package/dist/constants.d.ts +1 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +4 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/index.d.ts +4 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/indexer/ast/chunker.d.ts.map +1 -1
  10. package/dist/indexer/ast/chunker.js +2 -1
  11. package/dist/indexer/ast/chunker.js.map +1 -1
  12. package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -1
  13. package/dist/indexer/ast/complexity/cognitive.js +54 -23
  14. package/dist/indexer/ast/complexity/cognitive.js.map +1 -1
  15. package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -1
  16. package/dist/indexer/ast/complexity/cyclomatic.js +18 -25
  17. package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -1
  18. package/dist/indexer/ast/complexity/halstead.d.ts +3 -2
  19. package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -1
  20. package/dist/indexer/ast/complexity/halstead.js +9 -103
  21. package/dist/indexer/ast/complexity/halstead.js.map +1 -1
  22. package/dist/indexer/ast/extractors/index.d.ts +3 -9
  23. package/dist/indexer/ast/extractors/index.d.ts.map +1 -1
  24. package/dist/indexer/ast/extractors/index.js +5 -33
  25. package/dist/indexer/ast/extractors/index.js.map +1 -1
  26. package/dist/indexer/ast/extractors/rust.d.ts +41 -0
  27. package/dist/indexer/ast/extractors/rust.d.ts.map +1 -0
  28. package/dist/indexer/ast/extractors/rust.js +98 -0
  29. package/dist/indexer/ast/extractors/rust.js.map +1 -0
  30. package/dist/indexer/ast/languages/javascript.d.ts +3 -0
  31. package/dist/indexer/ast/languages/javascript.d.ts.map +1 -0
  32. package/dist/indexer/ast/languages/javascript.js +52 -0
  33. package/dist/indexer/ast/languages/javascript.js.map +1 -0
  34. package/dist/indexer/ast/languages/php.d.ts +3 -0
  35. package/dist/indexer/ast/languages/php.d.ts.map +1 -0
  36. package/dist/indexer/ast/languages/php.js +54 -0
  37. package/dist/indexer/ast/languages/php.js.map +1 -0
  38. package/dist/indexer/ast/languages/python.d.ts +3 -0
  39. package/dist/indexer/ast/languages/python.d.ts.map +1 -0
  40. package/dist/indexer/ast/languages/python.js +51 -0
  41. package/dist/indexer/ast/languages/python.js.map +1 -0
  42. package/dist/indexer/ast/languages/registry.d.ts +28 -0
  43. package/dist/indexer/ast/languages/registry.d.ts.map +1 -0
  44. package/dist/indexer/ast/languages/registry.js +68 -0
  45. package/dist/indexer/ast/languages/registry.js.map +1 -0
  46. package/dist/indexer/ast/languages/rust.d.ts +3 -0
  47. package/dist/indexer/ast/languages/rust.d.ts.map +1 -0
  48. package/dist/indexer/ast/languages/rust.js +51 -0
  49. package/dist/indexer/ast/languages/rust.js.map +1 -0
  50. package/dist/indexer/ast/languages/types.d.ts +48 -0
  51. package/dist/indexer/ast/languages/types.d.ts.map +1 -0
  52. package/dist/indexer/ast/languages/types.js +2 -0
  53. package/dist/indexer/ast/languages/types.js.map +1 -0
  54. package/dist/indexer/ast/languages/typescript.d.ts +3 -0
  55. package/dist/indexer/ast/languages/typescript.d.ts.map +1 -0
  56. package/dist/indexer/ast/languages/typescript.js +52 -0
  57. package/dist/indexer/ast/languages/typescript.js.map +1 -0
  58. package/dist/indexer/ast/parser.d.ts +6 -4
  59. package/dist/indexer/ast/parser.d.ts.map +1 -1
  60. package/dist/indexer/ast/parser.js +5 -41
  61. package/dist/indexer/ast/parser.js.map +1 -1
  62. package/dist/indexer/ast/symbols.d.ts +1 -1
  63. package/dist/indexer/ast/symbols.d.ts.map +1 -1
  64. package/dist/indexer/ast/symbols.js +50 -25
  65. package/dist/indexer/ast/symbols.js.map +1 -1
  66. package/dist/indexer/ast/traversers/index.d.ts +3 -3
  67. package/dist/indexer/ast/traversers/index.d.ts.map +1 -1
  68. package/dist/indexer/ast/traversers/index.js +5 -26
  69. package/dist/indexer/ast/traversers/index.js.map +1 -1
  70. package/dist/indexer/ast/traversers/rust.d.ts +24 -0
  71. package/dist/indexer/ast/traversers/rust.d.ts.map +1 -0
  72. package/dist/indexer/ast/traversers/rust.js +63 -0
  73. package/dist/indexer/ast/traversers/rust.js.map +1 -0
  74. package/dist/indexer/ast/types.d.ts +3 -9
  75. package/dist/indexer/ast/types.d.ts.map +1 -1
  76. package/dist/indexer/chunker.js +4 -4
  77. package/dist/indexer/chunker.js.map +1 -1
  78. package/dist/indexer/scanner.d.ts +10 -1
  79. package/dist/indexer/scanner.d.ts.map +1 -1
  80. package/dist/indexer/scanner.js +10 -1
  81. package/dist/indexer/scanner.js.map +1 -1
  82. package/dist/vectordb/lancedb.d.ts +1 -0
  83. package/dist/vectordb/lancedb.d.ts.map +1 -1
  84. package/dist/vectordb/lancedb.js.map +1 -1
  85. package/dist/vectordb/qdrant.d.ts +1 -0
  86. package/dist/vectordb/qdrant.d.ts.map +1 -1
  87. package/dist/vectordb/qdrant.js +33 -8
  88. package/dist/vectordb/qdrant.js.map +1 -1
  89. package/dist/vectordb/query.d.ts +1 -4
  90. package/dist/vectordb/query.d.ts.map +1 -1
  91. package/dist/vectordb/query.js +60 -14
  92. package/dist/vectordb/query.js.map +1 -1
  93. package/dist/vectordb/types.d.ts +1 -0
  94. package/dist/vectordb/types.d.ts.map +1 -1
  95. package/package.json +3 -2
@@ -2,17 +2,11 @@ import type { SupportedLanguage } from '../types.js';
2
2
  import type { LanguageExportExtractor } from './types.js';
3
3
  export type { LanguageExportExtractor } from './types.js';
4
4
  /**
5
- * Get the export extractor for a specific language
5
+ * Get the export extractor for a specific language.
6
+ * Delegates to the language registry.
6
7
  *
7
8
  * @param language - Programming language
8
9
  * @returns Language-specific export extractor
9
- * @throws Error if language is not supported (defensive check for runtime safety)
10
- *
11
- * Note: While TypeScript's type system guarantees all SupportedLanguage values
12
- * have corresponding extractors, this runtime check provides defense against:
13
- * - Type system bypasses (e.g., `as any` casting elsewhere)
14
- * - JavaScript consumers without type checking
15
- * - Future refactoring errors during registry modifications
16
10
  */
17
11
  export declare function getExtractor(language: SupportedLanguage): LanguageExportExtractor;
18
12
  /**
@@ -21,5 +15,5 @@ export declare function getExtractor(language: SupportedLanguage): LanguageExpor
21
15
  * @param language - Programming language
22
16
  * @returns True if extractor exists
23
17
  */
24
- export declare function hasExtractor(language: SupportedLanguage): boolean;
18
+ export declare function hasExtractor(language: string): boolean;
25
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAK1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAkB1D;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,uBAAuB,CASjF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAEjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,uBAAuB,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -1,41 +1,13 @@
1
- import { JavaScriptExportExtractor, TypeScriptExportExtractor } from './javascript.js';
2
- import { PHPExportExtractor } from './php.js';
3
- import { PythonExportExtractor } from './python.js';
1
+ import { getLanguage, languageExists } from '../languages/registry.js';
4
2
  /**
5
- * Registry of language export extractors
6
- *
7
- * Maps each supported language to its export extractor implementation.
8
- * When adding a new language:
9
- * 1. Create a new extractor class implementing LanguageExportExtractor
10
- * 2. Add it to this registry
11
- * 3. Update SupportedLanguage type in ../types.ts
12
- */
13
- const extractorRegistry = {
14
- typescript: new TypeScriptExportExtractor(),
15
- javascript: new JavaScriptExportExtractor(),
16
- php: new PHPExportExtractor(),
17
- python: new PythonExportExtractor(),
18
- };
19
- /**
20
- * Get the export extractor for a specific language
3
+ * Get the export extractor for a specific language.
4
+ * Delegates to the language registry.
21
5
  *
22
6
  * @param language - Programming language
23
7
  * @returns Language-specific export extractor
24
- * @throws Error if language is not supported (defensive check for runtime safety)
25
- *
26
- * Note: While TypeScript's type system guarantees all SupportedLanguage values
27
- * have corresponding extractors, this runtime check provides defense against:
28
- * - Type system bypasses (e.g., `as any` casting elsewhere)
29
- * - JavaScript consumers without type checking
30
- * - Future refactoring errors during registry modifications
31
8
  */
32
9
  export function getExtractor(language) {
33
- const extractor = extractorRegistry[language];
34
- // Defensive runtime check - see function documentation
35
- if (!extractor) {
36
- throw new Error(`No export extractor available for language: ${language}`);
37
- }
38
- return extractor;
10
+ return getLanguage(language).exportExtractor;
39
11
  }
40
12
  /**
41
13
  * Check if a language has an export extractor implementation
@@ -44,6 +16,6 @@ export function getExtractor(language) {
44
16
  * @returns True if extractor exists
45
17
  */
46
18
  export function hasExtractor(language) {
47
- return language in extractorRegistry;
19
+ return languageExists(language);
48
20
  }
49
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAuD;IAC5E,UAAU,EAAE,IAAI,yBAAyB,EAAE;IAC3C,UAAU,EAAE,IAAI,yBAAyB,EAAE;IAC3C,GAAG,EAAE,IAAI,kBAAkB,EAAE;IAC7B,MAAM,EAAE,IAAI,qBAAqB,EAAE;CACpC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,QAA2B;IACtD,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE9C,uDAAuD;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAA2B;IACtD,OAAO,QAAQ,IAAI,iBAAiB,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAIvE;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAA2B;IACtD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type Parser from 'tree-sitter';
2
+ import type { LanguageExportExtractor } from './types.js';
3
+ /**
4
+ * Rust export extractor
5
+ *
6
+ * Rust uses `pub` visibility to mark items as exported. Items with a
7
+ * `visibility_modifier` child (e.g., `pub`, `pub(crate)`) are considered exports.
8
+ *
9
+ * Exportable items:
10
+ * - pub fn helper() {}
11
+ * - pub struct User {}
12
+ * - pub enum Status {}
13
+ * - pub trait Serialize {}
14
+ * - pub type Alias = ...
15
+ * - pub const VALUE: ... = ...
16
+ * - pub static GLOBAL: ... = ...
17
+ * - pub mod submodule;
18
+ * - pub use other::Thing; (re-exports)
19
+ */
20
+ export declare class RustExportExtractor implements LanguageExportExtractor {
21
+ /**
22
+ * Node types that represent exportable Rust declarations
23
+ */
24
+ private readonly exportableTypes;
25
+ extractExports(rootNode: Parser.SyntaxNode): string[];
26
+ /**
27
+ * Extract the export name from a pub-visible node.
28
+ * Handles use declarations (re-exports) and standard exportable items.
29
+ */
30
+ private extractExportName;
31
+ /**
32
+ * Check if a node has a visibility modifier (pub, pub(crate), etc.)
33
+ */
34
+ private hasVisibilityModifier;
35
+ /**
36
+ * Extract the name from a use declaration's argument
37
+ * e.g., `foo::Bar` -> "Bar", `foo::*` -> null, `foo::{A, B}` -> null
38
+ */
39
+ private extractUseExportName;
40
+ }
41
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;IACjE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAS7B;IAEH,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE;IAsBrD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Rust export extractor
3
+ *
4
+ * Rust uses `pub` visibility to mark items as exported. Items with a
5
+ * `visibility_modifier` child (e.g., `pub`, `pub(crate)`) are considered exports.
6
+ *
7
+ * Exportable items:
8
+ * - pub fn helper() {}
9
+ * - pub struct User {}
10
+ * - pub enum Status {}
11
+ * - pub trait Serialize {}
12
+ * - pub type Alias = ...
13
+ * - pub const VALUE: ... = ...
14
+ * - pub static GLOBAL: ... = ...
15
+ * - pub mod submodule;
16
+ * - pub use other::Thing; (re-exports)
17
+ */
18
+ export class RustExportExtractor {
19
+ /**
20
+ * Node types that represent exportable Rust declarations
21
+ */
22
+ exportableTypes = new Set([
23
+ 'function_item',
24
+ 'struct_item',
25
+ 'enum_item',
26
+ 'trait_item',
27
+ 'type_item',
28
+ 'const_item',
29
+ 'static_item',
30
+ 'mod_item',
31
+ ]);
32
+ extractExports(rootNode) {
33
+ const exports = [];
34
+ const seen = new Set();
35
+ const addExport = (name) => {
36
+ if (name && !seen.has(name)) {
37
+ seen.add(name);
38
+ exports.push(name);
39
+ }
40
+ };
41
+ for (let i = 0; i < rootNode.namedChildCount; i++) {
42
+ const child = rootNode.namedChild(i);
43
+ if (!child)
44
+ continue;
45
+ if (!this.hasVisibilityModifier(child))
46
+ continue;
47
+ this.extractExportName(child, addExport);
48
+ }
49
+ return exports;
50
+ }
51
+ /**
52
+ * Extract the export name from a pub-visible node.
53
+ * Handles use declarations (re-exports) and standard exportable items.
54
+ */
55
+ extractExportName(node, addExport) {
56
+ if (node.type === 'use_declaration') {
57
+ const argument = node.childForFieldName('argument');
58
+ const name = argument ? this.extractUseExportName(argument) : null;
59
+ if (name)
60
+ addExport(name);
61
+ return;
62
+ }
63
+ if (this.exportableTypes.has(node.type)) {
64
+ const nameNode = node.childForFieldName('name');
65
+ if (nameNode)
66
+ addExport(nameNode.text);
67
+ }
68
+ }
69
+ /**
70
+ * Check if a node has a visibility modifier (pub, pub(crate), etc.)
71
+ */
72
+ hasVisibilityModifier(node) {
73
+ for (let i = 0; i < node.childCount; i++) {
74
+ const child = node.child(i);
75
+ if (child?.type === 'visibility_modifier')
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ /**
81
+ * Extract the name from a use declaration's argument
82
+ * e.g., `foo::Bar` -> "Bar", `foo::*` -> null, `foo::{A, B}` -> null
83
+ */
84
+ extractUseExportName(node) {
85
+ // Simple path: `use foo::Bar;` -> extract last segment
86
+ if (node.type === 'scoped_identifier') {
87
+ const nameNode = node.childForFieldName('name');
88
+ return nameNode?.text ?? null;
89
+ }
90
+ // Direct identifier: `use Bar;`
91
+ if (node.type === 'identifier') {
92
+ return node.text;
93
+ }
94
+ // Glob or use list: `use foo::*` or `use foo::{A, B}` — skip
95
+ return null;
96
+ }
97
+ }
98
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../../src/indexer/ast/extractors/rust.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;OAEG;IACc,eAAe,GAAG,IAAI,GAAG,CAAC;QACzC,eAAe;QACf,aAAa;QACb,WAAW;QACX,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,aAAa;QACb,UAAU;KACX,CAAC,CAAC;IAEH,cAAc,CAAC,QAA2B;QACxC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;YACjC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,iBAAiB,CACvB,IAAuB,EACvB,SAAiC;QAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,IAAI,IAAI;gBAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,QAAQ;gBAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAuB;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,EAAE,IAAI,KAAK,qBAAqB;gBAAE,OAAO,IAAI,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACK,oBAAoB,CAAC,IAAuB;QAClD,uDAAuD;QACvD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;QAChC,CAAC;QACD,gCAAgC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,6DAA6D;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageDefinition } from './types.js';
2
+ export declare const javascriptDefinition: LanguageDefinition;
3
+ //# sourceMappingURL=javascript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/javascript.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,oBAAoB,EAAE,kBAiDlC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import JavaScript from 'tree-sitter-javascript';
2
+ import { JavaScriptTraverser } from '../traversers/typescript.js';
3
+ import { JavaScriptExportExtractor } from '../extractors/javascript.js';
4
+ export const javascriptDefinition = {
5
+ id: 'javascript',
6
+ extensions: ['js', 'jsx', 'mjs', 'cjs'],
7
+ grammar: JavaScript,
8
+ traverser: new JavaScriptTraverser(),
9
+ exportExtractor: new JavaScriptExportExtractor(),
10
+ complexity: {
11
+ decisionPoints: [
12
+ 'if_statement', 'while_statement', 'for_statement', 'switch_case',
13
+ 'catch_clause', 'ternary_expression', 'binary_expression',
14
+ 'do_statement', 'for_in_statement', 'for_of_statement',
15
+ ],
16
+ nestingTypes: [
17
+ 'if_statement', 'for_statement', 'while_statement', 'switch_statement',
18
+ 'catch_clause', 'do_statement', 'for_in_statement', 'for_of_statement',
19
+ ],
20
+ nonNestingTypes: [
21
+ 'else_clause', 'ternary_expression',
22
+ ],
23
+ lambdaTypes: [
24
+ 'arrow_function', 'function_expression',
25
+ ],
26
+ operatorSymbols: new Set([
27
+ '+', '-', '*', '/', '%', '**',
28
+ '==', '===', '!=', '!==', '<', '>', '<=', '>=',
29
+ '&&', '||', '!', '??',
30
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '&&=', '||=', '??=',
31
+ '&', '|', '^', '~', '<<', '>>', '>>>',
32
+ '&=', '|=', '^=', '<<=', '>>=', '>>>=',
33
+ '?', ':', '.', '?.', '++', '--', '...', '=>',
34
+ '(', ')', '[', ']', '{', '}',
35
+ ]),
36
+ operatorKeywords: new Set([
37
+ 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'default',
38
+ 'return', 'throw', 'try', 'catch', 'finally',
39
+ 'new', 'delete', 'typeof', 'instanceof', 'in', 'of',
40
+ 'await', 'yield', 'break', 'continue',
41
+ 'const', 'let', 'var', 'function', 'class', 'extends', 'implements',
42
+ 'import', 'export', 'from', 'as',
43
+ ]),
44
+ },
45
+ symbols: {
46
+ callExpressionTypes: [
47
+ 'call_expression',
48
+ 'new_expression',
49
+ ],
50
+ },
51
+ };
52
+ //# sourceMappingURL=javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/javascript.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,EAAE,EAAE,YAAY;IAChB,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACvC,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,IAAI,mBAAmB,EAAE;IACpC,eAAe,EAAE,IAAI,yBAAyB,EAAE;IAEhD,UAAU,EAAE;QACV,cAAc,EAAE;YACd,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa;YACjE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB;YACzD,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;SACvD;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB;YACtE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;SACvE;QACD,eAAe,EAAE;YACf,aAAa,EAAE,oBAAoB;SACpC;QACD,WAAW,EAAE;YACX,gBAAgB,EAAE,qBAAqB;SACxC;QACD,eAAe,EAAE,IAAI,GAAG,CAAC;YACvB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7B,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAC9C,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;YACrB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YAC7D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;YACrC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;YACtC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;YAC5C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;QACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;YACxB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS;YAC/D,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS;YAC5C,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI;YACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU;YACrC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY;YACnE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI;SACjC,CAAC;KACH;IAED,OAAO,EAAE;QACP,mBAAmB,EAAE;YACnB,iBAAiB;YACjB,gBAAgB;SACjB;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageDefinition } from './types.js';
2
+ export declare const phpDefinition: LanguageDefinition;
3
+ //# sourceMappingURL=php.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/php.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,aAAa,EAAE,kBAmD3B,CAAC"}
@@ -0,0 +1,54 @@
1
+ import PHPParser from 'tree-sitter-php';
2
+ import { PHPTraverser } from '../traversers/php.js';
3
+ import { PHPExportExtractor } from '../extractors/php.js';
4
+ export const phpDefinition = {
5
+ id: 'php',
6
+ extensions: ['php'],
7
+ grammar: PHPParser.php,
8
+ traverser: new PHPTraverser(),
9
+ exportExtractor: new PHPExportExtractor(),
10
+ complexity: {
11
+ decisionPoints: [
12
+ 'if_statement', 'while_statement', 'for_statement', 'switch_case',
13
+ 'catch_clause', 'ternary_expression', 'binary_expression',
14
+ 'foreach_statement',
15
+ ],
16
+ nestingTypes: [
17
+ 'if_statement', 'for_statement', 'while_statement', 'switch_statement',
18
+ 'catch_clause', 'do_statement', 'foreach_statement', 'match_statement',
19
+ ],
20
+ nonNestingTypes: [
21
+ 'else_clause', 'ternary_expression',
22
+ ],
23
+ lambdaTypes: [],
24
+ operatorSymbols: new Set([
25
+ '+', '-', '*', '/', '%', '**',
26
+ '==', '===', '!=', '!==', '<>', '<', '>', '<=', '>=', '<=>',
27
+ '&&', '||', '!', 'and', 'or', 'xor',
28
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '.=',
29
+ '&=', '|=', '^=', '<<=', '>>=', '??=',
30
+ '&', '|', '^', '~', '<<', '>>',
31
+ '.',
32
+ '?', ':', '::', '->', '=>', '??', '@',
33
+ '(', ')', '[', ']', '{', '}',
34
+ ]),
35
+ operatorKeywords: new Set([
36
+ 'if', 'elseif', 'else', 'for', 'foreach', 'while', 'do', 'switch', 'case', 'default', 'match',
37
+ 'return', 'throw', 'try', 'catch', 'finally',
38
+ 'new', 'clone', 'instanceof',
39
+ 'yield', 'break', 'continue',
40
+ 'function', 'class', 'extends', 'implements', 'trait', 'interface',
41
+ 'use', 'namespace', 'as',
42
+ 'echo', 'print', 'include', 'require', 'include_once', 'require_once',
43
+ 'global', 'static', 'const', 'public', 'private', 'protected', 'readonly',
44
+ ]),
45
+ },
46
+ symbols: {
47
+ callExpressionTypes: [
48
+ 'function_call_expression',
49
+ 'member_call_expression',
50
+ 'scoped_call_expression',
51
+ ],
52
+ },
53
+ };
54
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/php.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C,EAAE,EAAE,KAAK;IACT,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC,GAAG;IACtB,SAAS,EAAE,IAAI,YAAY,EAAE;IAC7B,eAAe,EAAE,IAAI,kBAAkB,EAAE;IAEzC,UAAU,EAAE;QACV,cAAc,EAAE;YACd,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa;YACjE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB;YACzD,mBAAmB;SACpB;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB;YACtE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB;SACvE;QACD,eAAe,EAAE;YACf,aAAa,EAAE,oBAAoB;SACpC;QACD,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,IAAI,GAAG,CAAC;YACvB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;YAC7B,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;YAC3D,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;YACnC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;YAC9C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;YACrC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAC9B,GAAG;YACH,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;YACrC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;QACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;YACxB,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;YAC7F,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS;YAC5C,KAAK,EAAE,OAAO,EAAE,YAAY;YAC5B,OAAO,EAAE,OAAO,EAAE,UAAU;YAC5B,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW;YAClE,KAAK,EAAE,WAAW,EAAE,IAAI;YACxB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc;YACrE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU;SAC1E,CAAC;KACH;IAED,OAAO,EAAE;QACP,mBAAmB,EAAE;YACnB,0BAA0B;YAC1B,wBAAwB;YACxB,wBAAwB;SACzB;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageDefinition } from './types.js';
2
+ export declare const pythonDefinition: LanguageDefinition;
3
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/python.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,gBAAgB,EAAE,kBAgD9B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import Python from 'tree-sitter-python';
2
+ import { PythonTraverser } from '../traversers/python.js';
3
+ import { PythonExportExtractor } from '../extractors/python.js';
4
+ export const pythonDefinition = {
5
+ id: 'python',
6
+ extensions: ['py'],
7
+ grammar: Python,
8
+ traverser: new PythonTraverser(),
9
+ exportExtractor: new PythonExportExtractor(),
10
+ complexity: {
11
+ decisionPoints: [
12
+ 'if_statement', 'while_statement', 'for_statement', 'switch_case',
13
+ 'catch_clause', 'ternary_expression', 'binary_expression',
14
+ 'elif_clause', 'except_clause', 'conditional_expression',
15
+ ],
16
+ nestingTypes: [
17
+ 'if_statement', 'for_statement', 'while_statement',
18
+ 'except_clause',
19
+ ],
20
+ nonNestingTypes: [
21
+ 'elif_clause', 'conditional_expression',
22
+ ],
23
+ lambdaTypes: [
24
+ 'lambda',
25
+ ],
26
+ operatorSymbols: new Set([
27
+ '+', '-', '*', '/', '%', '**', '//',
28
+ '==', '!=', '<', '>', '<=', '>=',
29
+ '=', '+=', '-=', '*=', '/=', '%=', '**=', '//=',
30
+ '&=', '|=', '^=', '<<=', '>>=',
31
+ '&', '|', '^', '~', '<<', '>>',
32
+ '.', ':', '->', '@',
33
+ '(', ')', '[', ']', '{', '}',
34
+ ]),
35
+ operatorKeywords: new Set([
36
+ 'if', 'elif', 'else', 'for', 'while', 'match', 'case',
37
+ 'return', 'raise', 'try', 'except', 'finally',
38
+ 'and', 'or', 'not', 'is', 'in',
39
+ 'await', 'yield', 'break', 'continue', 'pass',
40
+ 'def', 'class', 'lambda', 'async',
41
+ 'import', 'from', 'as', 'with',
42
+ 'global', 'nonlocal', 'del', 'assert',
43
+ ]),
44
+ },
45
+ symbols: {
46
+ callExpressionTypes: [
47
+ 'call',
48
+ ],
49
+ },
50
+ };
51
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/python.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,CAAC,MAAM,gBAAgB,GAAuB;IAClD,EAAE,EAAE,QAAQ;IACZ,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,IAAI,eAAe,EAAE;IAChC,eAAe,EAAE,IAAI,qBAAqB,EAAE;IAE5C,UAAU,EAAE;QACV,cAAc,EAAE;YACd,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa;YACjE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB;YACzD,aAAa,EAAE,eAAe,EAAE,wBAAwB;SACzD;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,eAAe,EAAE,iBAAiB;YAClD,eAAe;SAChB;QACD,eAAe,EAAE;YACf,aAAa,EAAE,wBAAwB;SACxC;QACD,WAAW,EAAE;YACX,QAAQ;SACT;QACD,eAAe,EAAE,IAAI,GAAG,CAAC;YACvB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YACnC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAChC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;YAC/C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;YAC9B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAC9B,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;YACnB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;QACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;YACxB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;YACrD,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS;YAC7C,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;YAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;YAC7C,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;YACjC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;YAC9B,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;SACtC,CAAC;KACH;IAED,OAAO,EAAE;QACP,mBAAmB,EAAE;YACnB,MAAM;SACP;KACF;CACF,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { LanguageDefinition } from './types.js';
2
+ /**
3
+ * Supported languages for AST parsing.
4
+ *
5
+ * NOTE: This list is manually maintained and must be kept in sync with `definitions`.
6
+ */
7
+ export type SupportedLanguage = 'typescript' | 'javascript' | 'php' | 'python' | 'rust';
8
+ /**
9
+ * Get the full language definition for a supported language.
10
+ *
11
+ * @throws Error if language is not registered
12
+ */
13
+ export declare function getLanguage(language: SupportedLanguage): LanguageDefinition;
14
+ /**
15
+ * Detect which AST-supported language a file belongs to, based on extension.
16
+ *
17
+ * @returns SupportedLanguage or null if not AST-supported
18
+ */
19
+ export declare function detectLanguage(filePath: string): SupportedLanguage | null;
20
+ /**
21
+ * Check if a language is registered (non-throwing).
22
+ */
23
+ export declare function languageExists(language: string): boolean;
24
+ /**
25
+ * Get all registered language definitions.
26
+ */
27
+ export declare function getAllLanguages(): readonly LanguageDefinition[];
28
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmBrD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAsBxF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,CAM3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,kBAAkB,EAAE,CAE/D"}
@@ -0,0 +1,68 @@
1
+ import { extname } from 'path';
2
+ import { typescriptDefinition } from './typescript.js';
3
+ import { javascriptDefinition } from './javascript.js';
4
+ import { phpDefinition } from './php.js';
5
+ import { pythonDefinition } from './python.js';
6
+ import { rustDefinition } from './rust.js';
7
+ /**
8
+ * All registered language definitions.
9
+ * To add a new language, create a definition file and add it here.
10
+ */
11
+ const definitions = [
12
+ typescriptDefinition,
13
+ javascriptDefinition,
14
+ phpDefinition,
15
+ pythonDefinition,
16
+ rustDefinition,
17
+ ];
18
+ /**
19
+ * Registry keyed by language id.
20
+ */
21
+ const languageRegistry = new Map();
22
+ const extensionMap = new Map();
23
+ for (const def of definitions) {
24
+ if (languageRegistry.has(def.id)) {
25
+ throw new Error(`Duplicate language ID in registry: ${def.id}`);
26
+ }
27
+ languageRegistry.set(def.id, def);
28
+ for (const ext of def.extensions) {
29
+ if (extensionMap.has(ext)) {
30
+ throw new Error(`Duplicate extension "${ext}" registered by "${def.id}" (already claimed by "${extensionMap.get(ext)}")`);
31
+ }
32
+ extensionMap.set(ext, def.id);
33
+ }
34
+ }
35
+ /**
36
+ * Get the full language definition for a supported language.
37
+ *
38
+ * @throws Error if language is not registered
39
+ */
40
+ export function getLanguage(language) {
41
+ const def = languageRegistry.get(language);
42
+ if (!def) {
43
+ throw new Error(`No language definition registered for: ${language}`);
44
+ }
45
+ return def;
46
+ }
47
+ /**
48
+ * Detect which AST-supported language a file belongs to, based on extension.
49
+ *
50
+ * @returns SupportedLanguage or null if not AST-supported
51
+ */
52
+ export function detectLanguage(filePath) {
53
+ const ext = extname(filePath).slice(1).toLowerCase();
54
+ return extensionMap.get(ext) ?? null;
55
+ }
56
+ /**
57
+ * Check if a language is registered (non-throwing).
58
+ */
59
+ export function languageExists(language) {
60
+ return languageRegistry.has(language);
61
+ }
62
+ /**
63
+ * Get all registered language definitions.
64
+ */
65
+ export function getAllLanguages() {
66
+ return definitions.slice();
67
+ }
68
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,GAAyB;IACxC,oBAAoB;IACpB,oBAAoB;IACpB,aAAa;IACb,gBAAgB;IAChB,cAAc;CACf,CAAC;AASF;;GAEG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAC/D,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,oBAAoB,GAAG,CAAC,EAAE,0BAA0B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5H,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAA2B;IACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageDefinition } from './types.js';
2
+ export declare const rustDefinition: LanguageDefinition;
3
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/rust.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,eAAO,MAAM,cAAc,EAAE,kBAgD5B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import Rust from 'tree-sitter-rust';
2
+ import { RustTraverser } from '../traversers/rust.js';
3
+ import { RustExportExtractor } from '../extractors/rust.js';
4
+ export const rustDefinition = {
5
+ id: 'rust',
6
+ extensions: ['rs'],
7
+ grammar: Rust,
8
+ traverser: new RustTraverser(),
9
+ exportExtractor: new RustExportExtractor(),
10
+ complexity: {
11
+ decisionPoints: [
12
+ 'if_expression', 'match_expression', 'while_expression',
13
+ 'for_expression', 'loop_expression', 'match_arm',
14
+ 'binary_expression',
15
+ ],
16
+ nestingTypes: [
17
+ 'if_expression', 'for_expression', 'while_expression',
18
+ 'loop_expression', 'match_expression',
19
+ ],
20
+ nonNestingTypes: [
21
+ 'else_clause', 'match_arm',
22
+ ],
23
+ lambdaTypes: [
24
+ 'closure_expression',
25
+ ],
26
+ operatorSymbols: new Set([
27
+ '+', '-', '*', '/', '%',
28
+ '==', '!=', '<', '>', '<=', '>=',
29
+ '=', '+=', '-=', '*=', '/=', '%=',
30
+ '&=', '|=', '^=', '<<=', '>>=',
31
+ '&', '|', '^', '!', '<<', '>>',
32
+ '.', '::', '..', '..=', '=>', '->', '?',
33
+ '(', ')', '[', ']', '{', '}',
34
+ ]),
35
+ operatorKeywords: new Set([
36
+ 'if', 'else', 'match', 'for', 'while', 'loop',
37
+ 'return', 'break', 'continue',
38
+ 'let', 'mut', 'fn', 'struct', 'enum', 'impl', 'trait',
39
+ 'pub', 'mod', 'use', 'as',
40
+ 'async', 'await', 'unsafe', 'where', 'move',
41
+ 'ref', 'self', 'super', 'crate', 'dyn', 'type',
42
+ ]),
43
+ },
44
+ symbols: {
45
+ callExpressionTypes: [
46
+ 'call_expression',
47
+ 'macro_invocation',
48
+ ],
49
+ },
50
+ };
51
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../../src/indexer/ast/languages/rust.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,EAAE,EAAE,MAAM;IACV,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI,aAAa,EAAE;IAC9B,eAAe,EAAE,IAAI,mBAAmB,EAAE;IAE1C,UAAU,EAAE;QACV,cAAc,EAAE;YACd,eAAe,EAAE,kBAAkB,EAAE,kBAAkB;YACvD,gBAAgB,EAAE,iBAAiB,EAAE,WAAW;YAChD,mBAAmB;SACpB;QACD,YAAY,EAAE;YACZ,eAAe,EAAE,gBAAgB,EAAE,kBAAkB;YACrD,iBAAiB,EAAE,kBAAkB;SACtC;QACD,eAAe,EAAE;YACf,aAAa,EAAE,WAAW;SAC3B;QACD,WAAW,EAAE;YACX,oBAAoB;SACrB;QACD,eAAe,EAAE,IAAI,GAAG,CAAC;YACvB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YACvB,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAChC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACjC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;YAC9B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;YAC9B,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;YACvC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC7B,CAAC;QACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;YACxB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;YAC7C,QAAQ,EAAE,OAAO,EAAE,UAAU;YAC7B,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;YACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;YACzB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;YAC3C,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;SAC/C,CAAC;KACH;IAED,OAAO,EAAE;QACP,mBAAmB,EAAE;YACnB,iBAAiB;YACjB,kBAAkB;SACnB;KACF;CACF,CAAC"}