@liendev/core 0.30.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.
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/indexer/ast/chunker.d.ts.map +1 -1
- package/dist/indexer/ast/chunker.js +4 -2
- package/dist/indexer/ast/chunker.js.map +1 -1
- package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -1
- package/dist/indexer/ast/complexity/cognitive.js +54 -23
- package/dist/indexer/ast/complexity/cognitive.js.map +1 -1
- package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -1
- package/dist/indexer/ast/complexity/cyclomatic.js +18 -25
- package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -1
- package/dist/indexer/ast/complexity/halstead.d.ts +3 -2
- package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -1
- package/dist/indexer/ast/complexity/halstead.js +9 -103
- package/dist/indexer/ast/complexity/halstead.js.map +1 -1
- package/dist/indexer/ast/extractors/index.d.ts +3 -9
- package/dist/indexer/ast/extractors/index.d.ts.map +1 -1
- package/dist/indexer/ast/extractors/index.js +5 -33
- package/dist/indexer/ast/extractors/index.js.map +1 -1
- package/dist/indexer/ast/extractors/rust.d.ts +41 -0
- package/dist/indexer/ast/extractors/rust.d.ts.map +1 -0
- package/dist/indexer/ast/extractors/rust.js +98 -0
- package/dist/indexer/ast/extractors/rust.js.map +1 -0
- package/dist/indexer/ast/languages/javascript.d.ts +3 -0
- package/dist/indexer/ast/languages/javascript.d.ts.map +1 -0
- package/dist/indexer/ast/languages/javascript.js +52 -0
- package/dist/indexer/ast/languages/javascript.js.map +1 -0
- package/dist/indexer/ast/languages/php.d.ts +3 -0
- package/dist/indexer/ast/languages/php.d.ts.map +1 -0
- package/dist/indexer/ast/languages/php.js +54 -0
- package/dist/indexer/ast/languages/php.js.map +1 -0
- package/dist/indexer/ast/languages/python.d.ts +3 -0
- package/dist/indexer/ast/languages/python.d.ts.map +1 -0
- package/dist/indexer/ast/languages/python.js +51 -0
- package/dist/indexer/ast/languages/python.js.map +1 -0
- package/dist/indexer/ast/languages/registry.d.ts +28 -0
- package/dist/indexer/ast/languages/registry.d.ts.map +1 -0
- package/dist/indexer/ast/languages/registry.js +68 -0
- package/dist/indexer/ast/languages/registry.js.map +1 -0
- package/dist/indexer/ast/languages/rust.d.ts +3 -0
- package/dist/indexer/ast/languages/rust.d.ts.map +1 -0
- package/dist/indexer/ast/languages/rust.js +51 -0
- package/dist/indexer/ast/languages/rust.js.map +1 -0
- package/dist/indexer/ast/languages/types.d.ts +48 -0
- package/dist/indexer/ast/languages/types.d.ts.map +1 -0
- package/dist/indexer/ast/languages/types.js +2 -0
- package/dist/indexer/ast/languages/types.js.map +1 -0
- package/dist/indexer/ast/languages/typescript.d.ts +3 -0
- package/dist/indexer/ast/languages/typescript.d.ts.map +1 -0
- package/dist/indexer/ast/languages/typescript.js +52 -0
- package/dist/indexer/ast/languages/typescript.js.map +1 -0
- package/dist/indexer/ast/parser.d.ts +6 -4
- package/dist/indexer/ast/parser.d.ts.map +1 -1
- package/dist/indexer/ast/parser.js +5 -41
- package/dist/indexer/ast/parser.js.map +1 -1
- package/dist/indexer/ast/symbols.d.ts +1 -1
- package/dist/indexer/ast/symbols.d.ts.map +1 -1
- package/dist/indexer/ast/symbols.js +50 -25
- package/dist/indexer/ast/symbols.js.map +1 -1
- package/dist/indexer/ast/traversers/index.d.ts +3 -3
- package/dist/indexer/ast/traversers/index.d.ts.map +1 -1
- package/dist/indexer/ast/traversers/index.js +5 -26
- package/dist/indexer/ast/traversers/index.js.map +1 -1
- package/dist/indexer/ast/traversers/rust.d.ts +24 -0
- package/dist/indexer/ast/traversers/rust.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/rust.js +63 -0
- package/dist/indexer/ast/traversers/rust.js.map +1 -0
- package/dist/indexer/ast/types.d.ts +3 -9
- package/dist/indexer/ast/types.d.ts.map +1 -1
- package/dist/indexer/chunker.js +4 -4
- package/dist/indexer/chunker.js.map +1 -1
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +9 -6
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/scanner.d.ts +10 -1
- package/dist/indexer/scanner.d.ts.map +1 -1
- package/dist/indexer/scanner.js +10 -1
- package/dist/indexer/scanner.js.map +1 -1
- package/dist/vectordb/lancedb.d.ts +2 -0
- package/dist/vectordb/lancedb.d.ts.map +1 -1
- package/dist/vectordb/lancedb.js.map +1 -1
- package/dist/vectordb/qdrant.d.ts +2 -0
- package/dist/vectordb/qdrant.d.ts.map +1 -1
- package/dist/vectordb/qdrant.js +34 -8
- package/dist/vectordb/qdrant.js.map +1 -1
- package/dist/vectordb/query.d.ts +2 -4
- package/dist/vectordb/query.d.ts.map +1 -1
- package/dist/vectordb/query.js +103 -28
- package/dist/vectordb/query.js.map +1 -1
- package/dist/vectordb/types.d.ts +2 -0
- package/dist/vectordb/types.d.ts.map +1 -1
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"halstead.js","sourceRoot":"","sources":["../../../../src/indexer/ast/complexity/halstead.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"halstead.js","sourceRoot":"","sources":["../../../../src/indexer/ast/complexity/halstead.ts"],"names":[],"mappings":"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"}
|
|
@@ -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:
|
|
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;
|
|
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 {
|
|
2
|
-
import { PHPExportExtractor } from './php.js';
|
|
3
|
-
import { PythonExportExtractor } from './python.js';
|
|
1
|
+
import { getLanguage, languageExists } from '../languages/registry.js';
|
|
4
2
|
/**
|
|
5
|
-
*
|
|
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
|
-
|
|
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
|
|
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,
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|