@jafreck/lore 0.1.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/LICENSE +21 -0
- package/README.md +405 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +345 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/call-graph.d.ts +39 -0
- package/dist/indexer/call-graph.d.ts.map +1 -0
- package/dist/indexer/call-graph.js +193 -0
- package/dist/indexer/call-graph.js.map +1 -0
- package/dist/indexer/complexity.d.ts +9 -0
- package/dist/indexer/complexity.d.ts.map +1 -0
- package/dist/indexer/complexity.js +66 -0
- package/dist/indexer/complexity.js.map +1 -0
- package/dist/indexer/config-parser.d.ts +16 -0
- package/dist/indexer/config-parser.d.ts.map +1 -0
- package/dist/indexer/config-parser.js +261 -0
- package/dist/indexer/config-parser.js.map +1 -0
- package/dist/indexer/coverage.d.ts +13 -0
- package/dist/indexer/coverage.d.ts.map +1 -0
- package/dist/indexer/coverage.js +84 -0
- package/dist/indexer/coverage.js.map +1 -0
- package/dist/indexer/db.d.ts +38 -0
- package/dist/indexer/db.d.ts.map +1 -0
- package/dist/indexer/db.js +275 -0
- package/dist/indexer/db.js.map +1 -0
- package/dist/indexer/embedder.d.ts +70 -0
- package/dist/indexer/embedder.d.ts.map +1 -0
- package/dist/indexer/embedder.js +186 -0
- package/dist/indexer/embedder.js.map +1 -0
- package/dist/indexer/ensure-python-deps.d.ts +22 -0
- package/dist/indexer/ensure-python-deps.d.ts.map +1 -0
- package/dist/indexer/ensure-python-deps.js +47 -0
- package/dist/indexer/ensure-python-deps.js.map +1 -0
- package/dist/indexer/extractors/bash.d.ts +12 -0
- package/dist/indexer/extractors/bash.d.ts.map +1 -0
- package/dist/indexer/extractors/bash.js +57 -0
- package/dist/indexer/extractors/bash.js.map +1 -0
- package/dist/indexer/extractors/c.d.ts +12 -0
- package/dist/indexer/extractors/c.d.ts.map +1 -0
- package/dist/indexer/extractors/c.js +106 -0
- package/dist/indexer/extractors/c.js.map +1 -0
- package/dist/indexer/extractors/cpp.d.ts +12 -0
- package/dist/indexer/extractors/cpp.d.ts.map +1 -0
- package/dist/indexer/extractors/cpp.js +84 -0
- package/dist/indexer/extractors/cpp.js.map +1 -0
- package/dist/indexer/extractors/csharp.d.ts +12 -0
- package/dist/indexer/extractors/csharp.d.ts.map +1 -0
- package/dist/indexer/extractors/csharp.js +79 -0
- package/dist/indexer/extractors/csharp.js.map +1 -0
- package/dist/indexer/extractors/dart.d.ts +12 -0
- package/dist/indexer/extractors/dart.d.ts.map +1 -0
- package/dist/indexer/extractors/dart.js +80 -0
- package/dist/indexer/extractors/dart.js.map +1 -0
- package/dist/indexer/extractors/elixir.d.ts +12 -0
- package/dist/indexer/extractors/elixir.d.ts.map +1 -0
- package/dist/indexer/extractors/elixir.js +87 -0
- package/dist/indexer/extractors/elixir.js.map +1 -0
- package/dist/indexer/extractors/elm.d.ts +12 -0
- package/dist/indexer/extractors/elm.d.ts.map +1 -0
- package/dist/indexer/extractors/elm.js +87 -0
- package/dist/indexer/extractors/elm.js.map +1 -0
- package/dist/indexer/extractors/go.d.ts +12 -0
- package/dist/indexer/extractors/go.d.ts.map +1 -0
- package/dist/indexer/extractors/go.js +158 -0
- package/dist/indexer/extractors/go.js.map +1 -0
- package/dist/indexer/extractors/haskell.d.ts +12 -0
- package/dist/indexer/extractors/haskell.d.ts.map +1 -0
- package/dist/indexer/extractors/haskell.js +104 -0
- package/dist/indexer/extractors/haskell.js.map +1 -0
- package/dist/indexer/extractors/java.d.ts +12 -0
- package/dist/indexer/extractors/java.d.ts.map +1 -0
- package/dist/indexer/extractors/java.js +68 -0
- package/dist/indexer/extractors/java.js.map +1 -0
- package/dist/indexer/extractors/javascript.d.ts +13 -0
- package/dist/indexer/extractors/javascript.d.ts.map +1 -0
- package/dist/indexer/extractors/javascript.js +180 -0
- package/dist/indexer/extractors/javascript.js.map +1 -0
- package/dist/indexer/extractors/julia.d.ts +12 -0
- package/dist/indexer/extractors/julia.d.ts.map +1 -0
- package/dist/indexer/extractors/julia.js +94 -0
- package/dist/indexer/extractors/julia.js.map +1 -0
- package/dist/indexer/extractors/kotlin.d.ts +12 -0
- package/dist/indexer/extractors/kotlin.d.ts.map +1 -0
- package/dist/indexer/extractors/kotlin.js +71 -0
- package/dist/indexer/extractors/kotlin.js.map +1 -0
- package/dist/indexer/extractors/lua.d.ts +12 -0
- package/dist/indexer/extractors/lua.d.ts.map +1 -0
- package/dist/indexer/extractors/lua.js +68 -0
- package/dist/indexer/extractors/lua.js.map +1 -0
- package/dist/indexer/extractors/objc.d.ts +12 -0
- package/dist/indexer/extractors/objc.d.ts.map +1 -0
- package/dist/indexer/extractors/objc.js +129 -0
- package/dist/indexer/extractors/objc.js.map +1 -0
- package/dist/indexer/extractors/ocaml.d.ts +12 -0
- package/dist/indexer/extractors/ocaml.d.ts.map +1 -0
- package/dist/indexer/extractors/ocaml.js +92 -0
- package/dist/indexer/extractors/ocaml.js.map +1 -0
- package/dist/indexer/extractors/php.d.ts +12 -0
- package/dist/indexer/extractors/php.d.ts.map +1 -0
- package/dist/indexer/extractors/php.js +99 -0
- package/dist/indexer/extractors/php.js.map +1 -0
- package/dist/indexer/extractors/python.d.ts +12 -0
- package/dist/indexer/extractors/python.d.ts.map +1 -0
- package/dist/indexer/extractors/python.js +129 -0
- package/dist/indexer/extractors/python.js.map +1 -0
- package/dist/indexer/extractors/ruby.d.ts +12 -0
- package/dist/indexer/extractors/ruby.d.ts.map +1 -0
- package/dist/indexer/extractors/ruby.js +100 -0
- package/dist/indexer/extractors/ruby.js.map +1 -0
- package/dist/indexer/extractors/rust.d.ts +12 -0
- package/dist/indexer/extractors/rust.d.ts.map +1 -0
- package/dist/indexer/extractors/rust.js +82 -0
- package/dist/indexer/extractors/rust.js.map +1 -0
- package/dist/indexer/extractors/scala.d.ts +12 -0
- package/dist/indexer/extractors/scala.d.ts.map +1 -0
- package/dist/indexer/extractors/scala.js +91 -0
- package/dist/indexer/extractors/scala.js.map +1 -0
- package/dist/indexer/extractors/swift.d.ts +12 -0
- package/dist/indexer/extractors/swift.d.ts.map +1 -0
- package/dist/indexer/extractors/swift.js +90 -0
- package/dist/indexer/extractors/swift.js.map +1 -0
- package/dist/indexer/extractors/types.d.ts +118 -0
- package/dist/indexer/extractors/types.d.ts.map +1 -0
- package/dist/indexer/extractors/types.js +43 -0
- package/dist/indexer/extractors/types.js.map +1 -0
- package/dist/indexer/extractors/typescript.d.ts +14 -0
- package/dist/indexer/extractors/typescript.d.ts.map +1 -0
- package/dist/indexer/extractors/typescript.js +172 -0
- package/dist/indexer/extractors/typescript.js.map +1 -0
- package/dist/indexer/extractors/zig.d.ts +12 -0
- package/dist/indexer/extractors/zig.d.ts.map +1 -0
- package/dist/indexer/extractors/zig.js +95 -0
- package/dist/indexer/extractors/zig.js.map +1 -0
- package/dist/indexer/git-history.d.ts +23 -0
- package/dist/indexer/git-history.d.ts.map +1 -0
- package/dist/indexer/git-history.js +144 -0
- package/dist/indexer/git-history.js.map +1 -0
- package/dist/indexer/git-hooks.d.ts +19 -0
- package/dist/indexer/git-hooks.d.ts.map +1 -0
- package/dist/indexer/git-hooks.js +74 -0
- package/dist/indexer/git-hooks.js.map +1 -0
- package/dist/indexer/index.d.ts +83 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +431 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/parser.d.ts +30 -0
- package/dist/indexer/parser.d.ts.map +1 -0
- package/dist/indexer/parser.js +114 -0
- package/dist/indexer/parser.js.map +1 -0
- package/dist/indexer/poller.d.ts +50 -0
- package/dist/indexer/poller.d.ts.map +1 -0
- package/dist/indexer/poller.js +140 -0
- package/dist/indexer/poller.js.map +1 -0
- package/dist/indexer/resolver.d.ts +52 -0
- package/dist/indexer/resolver.d.ts.map +1 -0
- package/dist/indexer/resolver.js +271 -0
- package/dist/indexer/resolver.js.map +1 -0
- package/dist/indexer/test-mapper.d.ts +6 -0
- package/dist/indexer/test-mapper.d.ts.map +1 -0
- package/dist/indexer/test-mapper.js +48 -0
- package/dist/indexer/test-mapper.js.map +1 -0
- package/dist/indexer/walker.d.ts +51 -0
- package/dist/indexer/walker.d.ts.map +1 -0
- package/dist/indexer/walker.js +100 -0
- package/dist/indexer/walker.js.map +1 -0
- package/dist/indexer/watcher.d.ts +51 -0
- package/dist/indexer/watcher.d.ts.map +1 -0
- package/dist/indexer/watcher.js +107 -0
- package/dist/indexer/watcher.js.map +1 -0
- package/dist/kb-server/db.d.ts +241 -0
- package/dist/kb-server/db.d.ts.map +1 -0
- package/dist/kb-server/db.js +659 -0
- package/dist/kb-server/db.js.map +1 -0
- package/dist/kb-server/server.d.ts +35 -0
- package/dist/kb-server/server.d.ts.map +1 -0
- package/dist/kb-server/server.js +240 -0
- package/dist/kb-server/server.js.map +1 -0
- package/dist/kb-server/tools/annotations.d.ts +40 -0
- package/dist/kb-server/tools/annotations.d.ts.map +1 -0
- package/dist/kb-server/tools/annotations.js +35 -0
- package/dist/kb-server/tools/annotations.js.map +1 -0
- package/dist/kb-server/tools/architecture.d.ts +60 -0
- package/dist/kb-server/tools/architecture.d.ts.map +1 -0
- package/dist/kb-server/tools/architecture.js +174 -0
- package/dist/kb-server/tools/architecture.js.map +1 -0
- package/dist/kb-server/tools/blame.d.ts +67 -0
- package/dist/kb-server/tools/blame.d.ts.map +1 -0
- package/dist/kb-server/tools/blame.js +162 -0
- package/dist/kb-server/tools/blame.js.map +1 -0
- package/dist/kb-server/tools/coverage.d.ts +67 -0
- package/dist/kb-server/tools/coverage.d.ts.map +1 -0
- package/dist/kb-server/tools/coverage.js +74 -0
- package/dist/kb-server/tools/coverage.js.map +1 -0
- package/dist/kb-server/tools/graph.d.ts +56 -0
- package/dist/kb-server/tools/graph.d.ts.map +1 -0
- package/dist/kb-server/tools/graph.js +188 -0
- package/dist/kb-server/tools/graph.js.map +1 -0
- package/dist/kb-server/tools/history.d.ts +47 -0
- package/dist/kb-server/tools/history.d.ts.map +1 -0
- package/dist/kb-server/tools/history.js +91 -0
- package/dist/kb-server/tools/history.js.map +1 -0
- package/dist/kb-server/tools/lookup.d.ts +36 -0
- package/dist/kb-server/tools/lookup.d.ts.map +1 -0
- package/dist/kb-server/tools/lookup.js +45 -0
- package/dist/kb-server/tools/lookup.js.map +1 -0
- package/dist/kb-server/tools/metrics.d.ts +73 -0
- package/dist/kb-server/tools/metrics.d.ts.map +1 -0
- package/dist/kb-server/tools/metrics.js +79 -0
- package/dist/kb-server/tools/metrics.js.map +1 -0
- package/dist/kb-server/tools/notes.d.ts +165 -0
- package/dist/kb-server/tools/notes.d.ts.map +1 -0
- package/dist/kb-server/tools/notes.js +175 -0
- package/dist/kb-server/tools/notes.js.map +1 -0
- package/dist/kb-server/tools/routes.d.ts +38 -0
- package/dist/kb-server/tools/routes.d.ts.map +1 -0
- package/dist/kb-server/tools/routes.js +38 -0
- package/dist/kb-server/tools/routes.js.map +1 -0
- package/dist/kb-server/tools/search.d.ts +60 -0
- package/dist/kb-server/tools/search.d.ts.map +1 -0
- package/dist/kb-server/tools/search.js +170 -0
- package/dist/kb-server/tools/search.js.map +1 -0
- package/dist/kb-server/tools/snippet.d.ts +44 -0
- package/dist/kb-server/tools/snippet.d.ts.map +1 -0
- package/dist/kb-server/tools/snippet.js +49 -0
- package/dist/kb-server/tools/snippet.js.map +1 -0
- package/dist/kb-server/tools/test-map.d.ts +38 -0
- package/dist/kb-server/tools/test-map.d.ts.map +1 -0
- package/dist/kb-server/tools/test-map.js +32 -0
- package/dist/kb-server/tools/test-map.js.map +1 -0
- package/dist/kb-server/tools/writeback.d.ts +49 -0
- package/dist/kb-server/tools/writeback.d.ts.map +1 -0
- package/dist/kb-server/tools/writeback.js +68 -0
- package/dist/kb-server/tools/writeback.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/scala
|
|
3
|
+
*
|
|
4
|
+
* Scala language extractor. Extracts function definitions, class/trait/object
|
|
5
|
+
* declarations, and import declarations.
|
|
6
|
+
*/
|
|
7
|
+
import { emptyResult, nodeSignature, walk, } from './types.js';
|
|
8
|
+
// ─── ScalaExtractor ───────────────────────────────────────────────────────────
|
|
9
|
+
export class ScalaExtractor {
|
|
10
|
+
extract(tree, _source, _filePath) {
|
|
11
|
+
const result = emptyResult();
|
|
12
|
+
for (const node of walk(tree.rootNode)) {
|
|
13
|
+
switch (node.type) {
|
|
14
|
+
case 'function_definition':
|
|
15
|
+
result.symbols.push(extractFunction(node));
|
|
16
|
+
break;
|
|
17
|
+
case 'val_definition':
|
|
18
|
+
case 'var_definition':
|
|
19
|
+
result.symbols.push(extractVal(node));
|
|
20
|
+
break;
|
|
21
|
+
case 'class_definition':
|
|
22
|
+
result.symbols.push(extractNamedNode(node, 'class'));
|
|
23
|
+
break;
|
|
24
|
+
case 'trait_definition':
|
|
25
|
+
result.symbols.push(extractNamedNode(node, 'trait'));
|
|
26
|
+
break;
|
|
27
|
+
case 'object_definition':
|
|
28
|
+
result.symbols.push(extractNamedNode(node, 'class'));
|
|
29
|
+
break;
|
|
30
|
+
case 'import_declaration':
|
|
31
|
+
result.imports.push(extractImport(node));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
39
|
+
function extractFunction(node) {
|
|
40
|
+
const nameNode = node.childForFieldName('name');
|
|
41
|
+
return {
|
|
42
|
+
name: nameNode?.text ?? '',
|
|
43
|
+
kind: 'function',
|
|
44
|
+
startLine: node.startPosition.row,
|
|
45
|
+
endLine: node.endPosition.row,
|
|
46
|
+
signature: nodeSignature(node),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function extractVal(node) {
|
|
50
|
+
const patternNode = node.childForFieldName('pattern');
|
|
51
|
+
return {
|
|
52
|
+
name: patternNode?.text ?? '',
|
|
53
|
+
kind: node.type === 'val_definition' ? 'val' : 'var',
|
|
54
|
+
startLine: node.startPosition.row,
|
|
55
|
+
endLine: node.endPosition.row,
|
|
56
|
+
signature: nodeSignature(node),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function extractNamedNode(node, kind) {
|
|
60
|
+
const nameNode = node.childForFieldName('name');
|
|
61
|
+
return {
|
|
62
|
+
name: nameNode?.text ?? '',
|
|
63
|
+
kind,
|
|
64
|
+
startLine: node.startPosition.row,
|
|
65
|
+
endLine: node.endPosition.row,
|
|
66
|
+
signature: nodeSignature(node),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function extractImport(node) {
|
|
70
|
+
// `import scala.collection.mutable.ArrayBuffer`
|
|
71
|
+
// or `import scala.collection.mutable.{ArrayBuffer, ListBuffer}`
|
|
72
|
+
const text = node.text
|
|
73
|
+
.replace(/^import\s+/, '')
|
|
74
|
+
.trim();
|
|
75
|
+
const parts = text.split('.');
|
|
76
|
+
const last = parts[parts.length - 1] ?? '';
|
|
77
|
+
let importedNames;
|
|
78
|
+
if (last.startsWith('{') && last.endsWith('}')) {
|
|
79
|
+
// Grouped imports: `{A, B, C}`
|
|
80
|
+
importedNames = last.slice(1, -1).split(',').map(s => s.trim()).filter(Boolean);
|
|
81
|
+
}
|
|
82
|
+
else if (last === '_') {
|
|
83
|
+
// Wildcard import
|
|
84
|
+
importedNames = [];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
importedNames = [last];
|
|
88
|
+
}
|
|
89
|
+
return { source: text, importedNames };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=scala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scala.js","sourceRoot":"","sources":["../../../src/indexer/extractors/scala.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/swift
|
|
3
|
+
*
|
|
4
|
+
* Swift language extractor. Extracts function declarations, class/struct/enum/
|
|
5
|
+
* protocol declarations, and import declarations.
|
|
6
|
+
*/
|
|
7
|
+
import type Parser from 'tree-sitter';
|
|
8
|
+
import { type ExtractionResult, type SymbolExtractor } from './types.js';
|
|
9
|
+
export declare class SwiftExtractor implements SymbolExtractor {
|
|
10
|
+
extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=swift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/swift.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA+BjF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/swift
|
|
3
|
+
*
|
|
4
|
+
* Swift language extractor. Extracts function declarations, class/struct/enum/
|
|
5
|
+
* protocol declarations, and import declarations.
|
|
6
|
+
*/
|
|
7
|
+
import { emptyResult, nodeSignature, walk, } from './types.js';
|
|
8
|
+
// ─── SwiftExtractor ───────────────────────────────────────────────────────────
|
|
9
|
+
export class SwiftExtractor {
|
|
10
|
+
extract(tree, _source, _filePath) {
|
|
11
|
+
const result = emptyResult();
|
|
12
|
+
for (const node of walk(tree.rootNode)) {
|
|
13
|
+
switch (node.type) {
|
|
14
|
+
case 'function_declaration':
|
|
15
|
+
result.symbols.push(extractFunction(node));
|
|
16
|
+
break;
|
|
17
|
+
case 'class_declaration':
|
|
18
|
+
result.symbols.push(extractNamedNode(node, 'class'));
|
|
19
|
+
break;
|
|
20
|
+
case 'struct_declaration':
|
|
21
|
+
result.symbols.push(extractNamedNode(node, 'struct'));
|
|
22
|
+
break;
|
|
23
|
+
case 'enum_declaration':
|
|
24
|
+
result.symbols.push(extractNamedNode(node, 'enum'));
|
|
25
|
+
break;
|
|
26
|
+
case 'protocol_declaration':
|
|
27
|
+
result.symbols.push(extractNamedNode(node, 'interface'));
|
|
28
|
+
break;
|
|
29
|
+
case 'extension_declaration':
|
|
30
|
+
result.symbols.push(extractExtension(node));
|
|
31
|
+
break;
|
|
32
|
+
case 'import_declaration':
|
|
33
|
+
result.imports.push(extractImport(node));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
41
|
+
function extractFunction(node) {
|
|
42
|
+
const nameNode = node.childForFieldName('name');
|
|
43
|
+
return {
|
|
44
|
+
name: nameNode?.text ?? '',
|
|
45
|
+
kind: 'function',
|
|
46
|
+
startLine: node.startPosition.row,
|
|
47
|
+
endLine: node.endPosition.row,
|
|
48
|
+
signature: nodeSignature(node),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function extractNamedNode(node, kind) {
|
|
52
|
+
const nameNode = node.childForFieldName('name');
|
|
53
|
+
return {
|
|
54
|
+
name: nameNode?.text ?? '',
|
|
55
|
+
kind,
|
|
56
|
+
startLine: node.startPosition.row,
|
|
57
|
+
endLine: node.endPosition.row,
|
|
58
|
+
signature: nodeSignature(node),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function extractExtension(node) {
|
|
62
|
+
// extension TypeName { ... }
|
|
63
|
+
const nameNode = node.childForFieldName('name') ?? node.namedChildren[0];
|
|
64
|
+
return {
|
|
65
|
+
name: nameNode?.text ?? '',
|
|
66
|
+
kind: 'extension',
|
|
67
|
+
startLine: node.startPosition.row,
|
|
68
|
+
endLine: node.endPosition.row,
|
|
69
|
+
signature: nodeSignature(node),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function extractImport(node) {
|
|
73
|
+
// `import Foundation` or `import class UIKit.UIViewController`
|
|
74
|
+
const text = node.text
|
|
75
|
+
.replace(/^import\s+/, '')
|
|
76
|
+
.trim();
|
|
77
|
+
// Strip optional kind qualifier (class/struct/enum/protocol/func etc.)
|
|
78
|
+
const qualifiers = ['class', 'struct', 'enum', 'protocol', 'func', 'var', 'let', 'typealias'];
|
|
79
|
+
let source = text;
|
|
80
|
+
for (const q of qualifiers) {
|
|
81
|
+
if (source.startsWith(q + ' ')) {
|
|
82
|
+
source = source.slice(q.length + 1).trim();
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const parts = source.split('.');
|
|
87
|
+
const importedNames = parts.length > 1 ? [parts[parts.length - 1] ?? ''] : [];
|
|
88
|
+
return { source, importedNames };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=swift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../../src/indexer/extractors/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/types
|
|
3
|
+
*
|
|
4
|
+
* Shared types and the `SymbolExtractor` interface implemented by every
|
|
5
|
+
* language-specific extractor.
|
|
6
|
+
*/
|
|
7
|
+
import type Parser from 'tree-sitter';
|
|
8
|
+
/** A symbol (function, class, struct, etc.) extracted from a source file. */
|
|
9
|
+
export interface RawSymbol {
|
|
10
|
+
/** Simple name of the symbol (e.g. `myFunc`, `MyStruct`). */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Kind of symbol (e.g. `'function'`, `'class'`, `'struct'`, `'enum'`, `'trait'`, `'impl'`, `'interface'`, `'type'`). */
|
|
13
|
+
kind: string;
|
|
14
|
+
/** 0-indexed start line in the source file. */
|
|
15
|
+
startLine: number;
|
|
16
|
+
/** 0-indexed end line in the source file. */
|
|
17
|
+
endLine: number;
|
|
18
|
+
/** Textual signature of the symbol (declaration without body). */
|
|
19
|
+
signature: string;
|
|
20
|
+
/** Documentation comment immediately preceding the symbol, if extracted by the language extractor. */
|
|
21
|
+
docComment?: string;
|
|
22
|
+
/** Original AST node for the symbol declaration/expression, when available. */
|
|
23
|
+
astNode?: Parser.SyntaxNode;
|
|
24
|
+
}
|
|
25
|
+
/** An import or include directive extracted from a source file. */
|
|
26
|
+
export interface RawImport {
|
|
27
|
+
/** The raw import source string (module path, header name, etc.). */
|
|
28
|
+
source: string;
|
|
29
|
+
/** Resolved absolute or relative file path, if determinable at extraction time. */
|
|
30
|
+
resolvedPath?: string;
|
|
31
|
+
/** Named symbols imported from the source (empty for wildcard / side-effect imports). */
|
|
32
|
+
importedNames: string[];
|
|
33
|
+
}
|
|
34
|
+
/** A call-site reference found in a source file. */
|
|
35
|
+
export interface RawCallRef {
|
|
36
|
+
/** Name of the enclosing symbol that contains the call (empty string if top-level). */
|
|
37
|
+
callerSymbol: string;
|
|
38
|
+
/** Raw callee expression text as it appears in source. */
|
|
39
|
+
calleeRaw: string;
|
|
40
|
+
/** 0-indexed line of the call expression. */
|
|
41
|
+
line: number;
|
|
42
|
+
}
|
|
43
|
+
/** An environment-variable reference found in a source file. */
|
|
44
|
+
export interface RawEnvRef {
|
|
45
|
+
/** Environment-variable key (e.g. `DATABASE_URL`). */
|
|
46
|
+
key: string;
|
|
47
|
+
/** 0-indexed line of the reference. */
|
|
48
|
+
line: number;
|
|
49
|
+
}
|
|
50
|
+
/** A semantic relationship between two symbols found in a source file. */
|
|
51
|
+
export interface RawRelationship {
|
|
52
|
+
/** Relationship category (e.g. `extends`, `implements`). */
|
|
53
|
+
kind: string;
|
|
54
|
+
/** Name of the source symbol in the relationship. */
|
|
55
|
+
fromSymbol: string;
|
|
56
|
+
/** Name of the target symbol in the relationship. */
|
|
57
|
+
toSymbol: string;
|
|
58
|
+
/** 0-indexed line where the relationship is declared. */
|
|
59
|
+
line: number;
|
|
60
|
+
}
|
|
61
|
+
/** A framework route/endpoint extracted from source. */
|
|
62
|
+
export interface RawRoute {
|
|
63
|
+
/** HTTP method for the route (e.g. `GET`, `POST`). */
|
|
64
|
+
method: string;
|
|
65
|
+
/** Route path template (e.g. `/users/:id`). */
|
|
66
|
+
path: string;
|
|
67
|
+
/** Raw handler reference as seen in source. */
|
|
68
|
+
handler: string;
|
|
69
|
+
/** Framework inferred by the extractor (e.g. `express`, `fastapi`, `gin`). */
|
|
70
|
+
framework: string;
|
|
71
|
+
/** 0-indexed line where the route is declared. */
|
|
72
|
+
line: number;
|
|
73
|
+
/** Optional middleware references in declaration order. */
|
|
74
|
+
middleware?: string[];
|
|
75
|
+
}
|
|
76
|
+
/** The full extraction result returned by a `SymbolExtractor`. */
|
|
77
|
+
export interface ExtractionResult {
|
|
78
|
+
symbols: RawSymbol[];
|
|
79
|
+
imports: RawImport[];
|
|
80
|
+
callRefs: RawCallRef[];
|
|
81
|
+
envRefs: RawEnvRef[];
|
|
82
|
+
relationships: RawRelationship[];
|
|
83
|
+
routes: RawRoute[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Implemented by each language extractor to pull symbols, imports, and call
|
|
87
|
+
* references out of a parsed tree-sitter AST.
|
|
88
|
+
*/
|
|
89
|
+
export interface SymbolExtractor {
|
|
90
|
+
/**
|
|
91
|
+
* @param tree Parsed tree-sitter syntax tree for the file.
|
|
92
|
+
* @param source Raw source text of the file.
|
|
93
|
+
* @param filePath Absolute path to the file (for context / error messages).
|
|
94
|
+
*/
|
|
95
|
+
extract(tree: Parser.Tree, source: string, filePath: string): ExtractionResult;
|
|
96
|
+
}
|
|
97
|
+
export interface ComplexityNodeTypes {
|
|
98
|
+
parameterListTypes: readonly string[];
|
|
99
|
+
parameterTypes: readonly string[];
|
|
100
|
+
decisionTypes: readonly string[];
|
|
101
|
+
nestingTypes: readonly string[];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Iterates every node in the subtree rooted at `node` in depth-first order.
|
|
105
|
+
*/
|
|
106
|
+
export declare function walk(node: Parser.SyntaxNode): Generator<Parser.SyntaxNode>;
|
|
107
|
+
/**
|
|
108
|
+
* Returns the first descendant with the given `type`, or `null`.
|
|
109
|
+
*/
|
|
110
|
+
export declare function findFirst(node: Parser.SyntaxNode, type: string): Parser.SyntaxNode | null;
|
|
111
|
+
/**
|
|
112
|
+
* Extracts a signature from a node by returning everything before the first
|
|
113
|
+
* opening brace `{` (or the first line if there is no brace).
|
|
114
|
+
*/
|
|
115
|
+
export declare function nodeSignature(node: Parser.SyntaxNode): string;
|
|
116
|
+
/** Returns an empty `ExtractionResult`. */
|
|
117
|
+
export declare function emptyResult(): ExtractionResult;
|
|
118
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/types
|
|
3
|
+
*
|
|
4
|
+
* Shared types and the `SymbolExtractor` interface implemented by every
|
|
5
|
+
* language-specific extractor.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Shared utilities ─────────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Iterates every node in the subtree rooted at `node` in depth-first order.
|
|
10
|
+
*/
|
|
11
|
+
export function* walk(node) {
|
|
12
|
+
yield node;
|
|
13
|
+
for (const child of node.children) {
|
|
14
|
+
yield* walk(child);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the first descendant with the given `type`, or `null`.
|
|
19
|
+
*/
|
|
20
|
+
export function findFirst(node, type) {
|
|
21
|
+
for (const n of walk(node)) {
|
|
22
|
+
if (n.type === type)
|
|
23
|
+
return n;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extracts a signature from a node by returning everything before the first
|
|
29
|
+
* opening brace `{` (or the first line if there is no brace).
|
|
30
|
+
*/
|
|
31
|
+
export function nodeSignature(node) {
|
|
32
|
+
const text = node.text;
|
|
33
|
+
const braceIdx = text.indexOf('{');
|
|
34
|
+
if (braceIdx !== -1) {
|
|
35
|
+
return text.slice(0, braceIdx).trim();
|
|
36
|
+
}
|
|
37
|
+
return (text.split('\n')[0] ?? text).trim();
|
|
38
|
+
}
|
|
39
|
+
/** Returns an empty `ExtractionResult`. */
|
|
40
|
+
export function emptyResult() {
|
|
41
|
+
return { symbols: [], imports: [], callRefs: [], envRefs: [], relationships: [], routes: [] };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/indexer/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgHH,iFAAiF;AAEjF;;GAEG;AACH,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,IAAuB;IAC3C,MAAM,IAAI,CAAC;IACX,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,IAAuB,EACvB,IAAY;IAEZ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/typescript
|
|
3
|
+
*
|
|
4
|
+
* P1 TypeScript language extractor. Extracts function declarations, class
|
|
5
|
+
* declarations, interface declarations, type alias declarations, arrow
|
|
6
|
+
* functions assigned to const variables, and import statements.
|
|
7
|
+
*/
|
|
8
|
+
import type Parser from 'tree-sitter';
|
|
9
|
+
import { type ComplexityNodeTypes, type ExtractionResult, type SymbolExtractor } from './types.js';
|
|
10
|
+
export declare const TYPESCRIPT_COMPLEXITY_NODE_TYPES: ComplexityNodeTypes;
|
|
11
|
+
export declare class TypeScriptExtractor implements SymbolExtractor {
|
|
12
|
+
extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAIrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,gCAAgC,EAAE,mBAyB9C,CAAC;AAIF,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CAkCjF"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/typescript
|
|
3
|
+
*
|
|
4
|
+
* P1 TypeScript language extractor. Extracts function declarations, class
|
|
5
|
+
* declarations, interface declarations, type alias declarations, arrow
|
|
6
|
+
* functions assigned to const variables, and import statements.
|
|
7
|
+
*/
|
|
8
|
+
import { emptyResult, nodeSignature, walk, } from './types.js';
|
|
9
|
+
export const TYPESCRIPT_COMPLEXITY_NODE_TYPES = {
|
|
10
|
+
parameterListTypes: ['formal_parameters'],
|
|
11
|
+
parameterTypes: ['required_parameter', 'optional_parameter', 'rest_parameter'],
|
|
12
|
+
decisionTypes: [
|
|
13
|
+
'if_statement',
|
|
14
|
+
'for_statement',
|
|
15
|
+
'for_in_statement',
|
|
16
|
+
'for_of_statement',
|
|
17
|
+
'while_statement',
|
|
18
|
+
'do_statement',
|
|
19
|
+
'catch_clause',
|
|
20
|
+
'switch_case',
|
|
21
|
+
'conditional_expression',
|
|
22
|
+
],
|
|
23
|
+
nestingTypes: [
|
|
24
|
+
'if_statement',
|
|
25
|
+
'for_statement',
|
|
26
|
+
'for_in_statement',
|
|
27
|
+
'for_of_statement',
|
|
28
|
+
'while_statement',
|
|
29
|
+
'do_statement',
|
|
30
|
+
'switch_statement',
|
|
31
|
+
'catch_clause',
|
|
32
|
+
'conditional_expression',
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
// ─── TypeScriptExtractor ──────────────────────────────────────────────────────
|
|
36
|
+
export class TypeScriptExtractor {
|
|
37
|
+
extract(tree, _source, _filePath) {
|
|
38
|
+
const result = emptyResult();
|
|
39
|
+
for (const node of walk(tree.rootNode)) {
|
|
40
|
+
switch (node.type) {
|
|
41
|
+
case 'function_declaration':
|
|
42
|
+
case 'generator_function_declaration':
|
|
43
|
+
result.symbols.push(extractNamedDecl(node, 'function'));
|
|
44
|
+
break;
|
|
45
|
+
case 'class_declaration':
|
|
46
|
+
result.symbols.push(extractNamedDecl(node, 'class'));
|
|
47
|
+
result.relationships.push(...extractClassInheritance(node));
|
|
48
|
+
break;
|
|
49
|
+
case 'interface_declaration':
|
|
50
|
+
result.symbols.push(extractNamedDecl(node, 'interface'));
|
|
51
|
+
break;
|
|
52
|
+
case 'type_alias_declaration':
|
|
53
|
+
result.symbols.push(extractNamedDecl(node, 'type'));
|
|
54
|
+
break;
|
|
55
|
+
case 'lexical_declaration':
|
|
56
|
+
case 'variable_declaration': {
|
|
57
|
+
// Handle: const foo = () => {} or const foo = function() {}
|
|
58
|
+
const sym = maybeExtractArrowOrFunctionExpr(node);
|
|
59
|
+
if (sym)
|
|
60
|
+
result.symbols.push(sym);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 'import_statement':
|
|
64
|
+
result.imports.push(extractImport(node));
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
72
|
+
function extractClassInheritance(node) {
|
|
73
|
+
const nameNode = node.childForFieldName('name');
|
|
74
|
+
const heritageNode = node.namedChildren.find((child) => child.type === 'class_heritage');
|
|
75
|
+
if (!nameNode || !heritageNode)
|
|
76
|
+
return [];
|
|
77
|
+
const extendsClause = heritageNode.namedChildren.find((child) => child.type === 'extends_clause');
|
|
78
|
+
if (!extendsClause)
|
|
79
|
+
return [];
|
|
80
|
+
const target = extendsClause.namedChildren[0];
|
|
81
|
+
if (!target)
|
|
82
|
+
return [];
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
kind: 'extends',
|
|
86
|
+
fromSymbol: nameNode.text,
|
|
87
|
+
toSymbol: target.text,
|
|
88
|
+
line: extendsClause.startPosition.row,
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
function extractNamedDecl(node, kind) {
|
|
93
|
+
const nameNode = node.childForFieldName('name');
|
|
94
|
+
return {
|
|
95
|
+
name: nameNode?.text ?? '',
|
|
96
|
+
kind,
|
|
97
|
+
startLine: node.startPosition.row,
|
|
98
|
+
endLine: node.endPosition.row,
|
|
99
|
+
signature: nodeSignature(node),
|
|
100
|
+
astNode: node,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function maybeExtractArrowOrFunctionExpr(node) {
|
|
104
|
+
// Look for: const/let/var <name> = <arrow_function | function_expression>
|
|
105
|
+
for (const declarator of node.namedChildren) {
|
|
106
|
+
if (declarator.type !== 'variable_declarator')
|
|
107
|
+
continue;
|
|
108
|
+
const nameNode = declarator.childForFieldName('name');
|
|
109
|
+
const valueNode = declarator.childForFieldName('value');
|
|
110
|
+
if (!nameNode || !valueNode)
|
|
111
|
+
continue;
|
|
112
|
+
if (valueNode.type === 'arrow_function' ||
|
|
113
|
+
valueNode.type === 'function_expression' ||
|
|
114
|
+
valueNode.type === 'generator_function') {
|
|
115
|
+
return {
|
|
116
|
+
name: nameNode.text,
|
|
117
|
+
kind: 'function',
|
|
118
|
+
startLine: node.startPosition.row,
|
|
119
|
+
endLine: node.endPosition.row,
|
|
120
|
+
signature: nodeSignature(node),
|
|
121
|
+
astNode: valueNode,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
function extractImport(node) {
|
|
128
|
+
// import { a, b } from 'module'
|
|
129
|
+
// import defaultExport from 'module'
|
|
130
|
+
// import * as ns from 'module'
|
|
131
|
+
const sourceNode = node.childForFieldName('source');
|
|
132
|
+
const source = stripQuotes(sourceNode?.text ?? '');
|
|
133
|
+
const importedNames = [];
|
|
134
|
+
const clauseNode = node.childForFieldName('import_clause') ?? null;
|
|
135
|
+
if (clauseNode) {
|
|
136
|
+
collectImportNames(clauseNode, importedNames);
|
|
137
|
+
}
|
|
138
|
+
return { source, importedNames };
|
|
139
|
+
}
|
|
140
|
+
function collectImportNames(node, out) {
|
|
141
|
+
switch (node.type) {
|
|
142
|
+
case 'identifier':
|
|
143
|
+
// default import
|
|
144
|
+
out.push(node.text);
|
|
145
|
+
break;
|
|
146
|
+
case 'namespace_import': {
|
|
147
|
+
// import * as ns
|
|
148
|
+
const alias = node.namedChildren[0];
|
|
149
|
+
if (alias)
|
|
150
|
+
out.push(`* as ${alias.text}`);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case 'named_imports':
|
|
154
|
+
// { a, b as c }
|
|
155
|
+
for (const spec of node.namedChildren) {
|
|
156
|
+
if (spec.type === 'import_specifier') {
|
|
157
|
+
const name = spec.childForFieldName('name');
|
|
158
|
+
if (name)
|
|
159
|
+
out.push(name.text);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
default:
|
|
164
|
+
for (const child of node.namedChildren) {
|
|
165
|
+
collectImportNames(child, out);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function stripQuotes(s) {
|
|
170
|
+
return s.replace(/^['"`]|['"`]$/g, '');
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/indexer/extractors/typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module indexer/extractors/zig
|
|
3
|
+
*
|
|
4
|
+
* Zig language extractor. Extracts function declarations (fn), struct/enum/union
|
|
5
|
+
* declarations, and @import() calls.
|
|
6
|
+
*/
|
|
7
|
+
import type Parser from 'tree-sitter';
|
|
8
|
+
import { type ExtractionResult, type SymbolExtractor } from './types.js';
|
|
9
|
+
export declare class ZigExtractor implements SymbolExtractor {
|
|
10
|
+
extract(tree: Parser.Tree, _source: string, _filePath: string): ExtractionResult;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=zig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zig.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/zig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,YAAa,YAAW,eAAe;IAClD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA+BjF"}
|