edhindex 1.0.2 → 1.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.
Files changed (136) hide show
  1. package/README.md +43 -9
  2. package/dist/cli/commands/index_cmd.d.ts.map +1 -1
  3. package/dist/cli/commands/index_cmd.js +2 -0
  4. package/dist/cli/commands/index_cmd.js.map +1 -1
  5. package/dist/cli/commands/start.d.ts.map +1 -1
  6. package/dist/cli/commands/start.js +3 -1
  7. package/dist/cli/commands/start.js.map +1 -1
  8. package/dist/config/index.js +1 -1
  9. package/dist/config/index.js.map +1 -1
  10. package/dist/graph/builder.d.ts.map +1 -1
  11. package/dist/graph/builder.js +5 -0
  12. package/dist/graph/builder.js.map +1 -1
  13. package/dist/indexer/chunker.d.ts +2 -2
  14. package/dist/indexer/chunker.d.ts.map +1 -1
  15. package/dist/indexer/chunker.js +7 -5
  16. package/dist/indexer/chunker.js.map +1 -1
  17. package/dist/indexer/file-utils.d.ts +2 -3
  18. package/dist/indexer/file-utils.d.ts.map +1 -1
  19. package/dist/indexer/file-utils.js +4 -33
  20. package/dist/indexer/file-utils.js.map +1 -1
  21. package/dist/indexer/fixture.test.d.ts +2 -0
  22. package/dist/indexer/fixture.test.d.ts.map +1 -0
  23. package/dist/indexer/fixture.test.js +104 -0
  24. package/dist/indexer/fixture.test.js.map +1 -0
  25. package/dist/indexer/indexer.d.ts +3 -1
  26. package/dist/indexer/indexer.d.ts.map +1 -1
  27. package/dist/indexer/indexer.js +8 -32
  28. package/dist/indexer/indexer.js.map +1 -1
  29. package/dist/indexer/parser.d.ts.map +1 -1
  30. package/dist/indexer/parser.js +196 -14
  31. package/dist/indexer/parser.js.map +1 -1
  32. package/dist/indexer/parser.test.d.ts +2 -0
  33. package/dist/indexer/parser.test.d.ts.map +1 -0
  34. package/dist/indexer/parser.test.js +120 -0
  35. package/dist/indexer/parser.test.js.map +1 -0
  36. package/dist/language/adapters/c.d.ts +7 -0
  37. package/dist/language/adapters/c.d.ts.map +1 -0
  38. package/dist/language/adapters/c.js +25 -0
  39. package/dist/language/adapters/c.js.map +1 -0
  40. package/dist/language/adapters/cpp.d.ts +7 -0
  41. package/dist/language/adapters/cpp.d.ts.map +1 -0
  42. package/dist/language/adapters/cpp.js +29 -0
  43. package/dist/language/adapters/cpp.js.map +1 -0
  44. package/dist/language/adapters/csharp.d.ts +7 -0
  45. package/dist/language/adapters/csharp.d.ts.map +1 -0
  46. package/dist/language/adapters/csharp.js +32 -0
  47. package/dist/language/adapters/csharp.js.map +1 -0
  48. package/dist/language/adapters/css.d.ts +10 -0
  49. package/dist/language/adapters/css.d.ts.map +1 -0
  50. package/dist/language/adapters/css.js +54 -0
  51. package/dist/language/adapters/css.js.map +1 -0
  52. package/dist/language/adapters/go.d.ts +7 -0
  53. package/dist/language/adapters/go.d.ts.map +1 -0
  54. package/dist/language/adapters/go.js +26 -0
  55. package/dist/language/adapters/go.js.map +1 -0
  56. package/dist/language/adapters/html.d.ts +11 -0
  57. package/dist/language/adapters/html.d.ts.map +1 -0
  58. package/dist/language/adapters/html.js +67 -0
  59. package/dist/language/adapters/html.js.map +1 -0
  60. package/dist/language/adapters/java.d.ts +7 -0
  61. package/dist/language/adapters/java.d.ts.map +1 -0
  62. package/dist/language/adapters/java.js +30 -0
  63. package/dist/language/adapters/java.js.map +1 -0
  64. package/dist/language/adapters/javascript.d.ts +7 -0
  65. package/dist/language/adapters/javascript.d.ts.map +1 -0
  66. package/dist/language/adapters/javascript.js +31 -0
  67. package/dist/language/adapters/javascript.js.map +1 -0
  68. package/dist/language/adapters/json.d.ts +11 -0
  69. package/dist/language/adapters/json.d.ts.map +1 -0
  70. package/dist/language/adapters/json.js +57 -0
  71. package/dist/language/adapters/json.js.map +1 -0
  72. package/dist/language/adapters/php.d.ts +7 -0
  73. package/dist/language/adapters/php.d.ts.map +1 -0
  74. package/dist/language/adapters/php.js +29 -0
  75. package/dist/language/adapters/php.js.map +1 -0
  76. package/dist/language/adapters/python.d.ts +7 -0
  77. package/dist/language/adapters/python.d.ts.map +1 -0
  78. package/dist/language/adapters/python.js +27 -0
  79. package/dist/language/adapters/python.js.map +1 -0
  80. package/dist/language/adapters/ruby.d.ts +7 -0
  81. package/dist/language/adapters/ruby.d.ts.map +1 -0
  82. package/dist/language/adapters/ruby.js +29 -0
  83. package/dist/language/adapters/ruby.js.map +1 -0
  84. package/dist/language/adapters/rust.d.ts +7 -0
  85. package/dist/language/adapters/rust.d.ts.map +1 -0
  86. package/dist/language/adapters/rust.js +31 -0
  87. package/dist/language/adapters/rust.js.map +1 -0
  88. package/dist/language/adapters/typescript.d.ts +7 -0
  89. package/dist/language/adapters/typescript.d.ts.map +1 -0
  90. package/dist/language/adapters/typescript.js +35 -0
  91. package/dist/language/adapters/typescript.js.map +1 -0
  92. package/dist/language/base.d.ts +34 -0
  93. package/dist/language/base.d.ts.map +1 -0
  94. package/dist/language/base.js +144 -0
  95. package/dist/language/base.js.map +1 -0
  96. package/dist/language/generic.d.ts +11 -0
  97. package/dist/language/generic.d.ts.map +1 -0
  98. package/dist/language/generic.js +51 -0
  99. package/dist/language/generic.js.map +1 -0
  100. package/dist/language/registry.d.ts +29 -0
  101. package/dist/language/registry.d.ts.map +1 -0
  102. package/dist/language/registry.js +111 -0
  103. package/dist/language/registry.js.map +1 -0
  104. package/dist/language/types.d.ts +55 -0
  105. package/dist/language/types.d.ts.map +1 -0
  106. package/dist/language/types.js +23 -0
  107. package/dist/language/types.js.map +1 -0
  108. package/package.json +19 -3
  109. package/src/cli/commands/index_cmd.ts +2 -0
  110. package/src/cli/commands/start.ts +3 -1
  111. package/src/config/index.ts +1 -1
  112. package/src/graph/builder.ts +5 -0
  113. package/src/indexer/chunker.ts +9 -7
  114. package/src/indexer/file-utils.ts +6 -38
  115. package/src/indexer/fixture.test.ts +121 -0
  116. package/src/indexer/indexer.ts +17 -41
  117. package/src/indexer/parser.test.ts +127 -0
  118. package/src/indexer/parser.ts +194 -13
  119. package/src/language/adapters/c.ts +27 -0
  120. package/src/language/adapters/cpp.ts +31 -0
  121. package/src/language/adapters/csharp.ts +34 -0
  122. package/src/language/adapters/css.ts +57 -0
  123. package/src/language/adapters/go.ts +28 -0
  124. package/src/language/adapters/html.ts +68 -0
  125. package/src/language/adapters/java.ts +32 -0
  126. package/src/language/adapters/javascript.ts +33 -0
  127. package/src/language/adapters/json.ts +60 -0
  128. package/src/language/adapters/php.ts +31 -0
  129. package/src/language/adapters/python.ts +29 -0
  130. package/src/language/adapters/ruby.ts +31 -0
  131. package/src/language/adapters/rust.ts +33 -0
  132. package/src/language/adapters/typescript.ts +37 -0
  133. package/src/language/base.ts +167 -0
  134. package/src/language/generic.ts +58 -0
  135. package/src/language/registry.ts +126 -0
  136. package/src/language/types.ts +58 -0
@@ -0,0 +1,126 @@
1
+ import { LanguageAdapter, AdapterInfo } from './types.js';
2
+ import { TypeScriptAdapter } from './adapters/typescript.js';
3
+ import { JavaScriptAdapter } from './adapters/javascript.js';
4
+ import { PythonAdapter } from './adapters/python.js';
5
+ import { GoAdapter } from './adapters/go.js';
6
+ import { RustAdapter } from './adapters/rust.js';
7
+ import { JavaAdapter } from './adapters/java.js';
8
+ import { RubyAdapter } from './adapters/ruby.js';
9
+ import { CAdapter } from './adapters/c.js';
10
+ import { CppAdapter } from './adapters/cpp.js';
11
+ import { CSharpAdapter } from './adapters/csharp.js';
12
+ import { PhpAdapter } from './adapters/php.js';
13
+ import { HtmlAdapter } from './adapters/html.js';
14
+ import { CssAdapter } from './adapters/css.js';
15
+ import { JsonAdapter } from './adapters/json.js';
16
+ import { GenericAdapter } from './generic.js';
17
+
18
+ export type AdapterEntry = {
19
+ key: string;
20
+ adapter: LanguageAdapter;
21
+ tier: 1 | 2 | 3;
22
+ };
23
+
24
+ export class LanguageRegistry {
25
+ private adapters: AdapterEntry[] = [];
26
+ private extMap: Map<string, AdapterEntry> = new Map();
27
+ private nameMap: Map<string, AdapterEntry> = new Map();
28
+ private generic: GenericAdapter;
29
+
30
+ constructor() {
31
+ this.generic = new GenericAdapter();
32
+ this.registerDefaults();
33
+ }
34
+
35
+ private registerDefaults() {
36
+ this.register('ts', new TypeScriptAdapter(), 1);
37
+ this.register('js', new JavaScriptAdapter(), 1);
38
+ this.register('py', new PythonAdapter(), 1);
39
+ this.register('go', new GoAdapter(), 1);
40
+ this.register('rs', new RustAdapter(), 1);
41
+ this.register('java', new JavaAdapter(), 1);
42
+ this.register('rb', new RubyAdapter(), 1);
43
+ this.register('c', new CAdapter(), 1);
44
+ this.register('cpp', new CppAdapter(), 1);
45
+ this.register('csharp', new CSharpAdapter(), 1);
46
+ this.register('php', new PhpAdapter(), 1);
47
+ this.register('html', new HtmlAdapter(), 2);
48
+ this.register('css', new CssAdapter(), 2);
49
+ this.register('json', new JsonAdapter(), 2);
50
+ }
51
+
52
+ register(key: string, adapter: LanguageAdapter, tier: 1 | 2 | 3) {
53
+ const entry: AdapterEntry = { key, adapter, tier };
54
+ this.adapters.push(entry);
55
+ for (const ext of adapter.fileExtensions()) {
56
+ const lower = ext.toLowerCase();
57
+ if (!this.extMap.has(lower)) {
58
+ this.extMap.set(lower, entry);
59
+ }
60
+ }
61
+ for (const name of adapter.fileNames()) {
62
+ const lower = name.toLowerCase();
63
+ if (!this.nameMap.has(lower)) {
64
+ this.nameMap.set(lower, entry);
65
+ }
66
+ }
67
+ }
68
+
69
+ getAdapter(filePath: string): { adapter: LanguageAdapter; key: string } {
70
+ const lower = filePath.toLowerCase();
71
+ const fileName = lower.split('/').pop() || lower;
72
+
73
+ const nameEntry = this.nameMap.get(fileName);
74
+ if (nameEntry) return { adapter: nameEntry.adapter, key: nameEntry.key };
75
+
76
+ for (const [ext, entry] of this.extMap) {
77
+ if (lower.endsWith(ext)) return { adapter: entry.adapter, key: entry.key };
78
+ }
79
+
80
+ return { adapter: this.generic, key: 'generic' };
81
+ }
82
+
83
+ getAdapterByKey(key: string): { adapter: LanguageAdapter; key: string } | null {
84
+ const entry = this.adapters.find(a => a.key === key);
85
+ if (!entry) return null;
86
+ return { adapter: entry.adapter, key: entry.key };
87
+ }
88
+
89
+ getAllAdapters(): AdapterEntry[] {
90
+ return [...this.adapters];
91
+ }
92
+
93
+ getInfoList(): AdapterInfo[] {
94
+ return this.adapters.map(a => ({
95
+ key: a.key,
96
+ name: a.adapter.languageName(),
97
+ extensions: a.adapter.fileExtensions(),
98
+ tier: a.tier,
99
+ supportsSymbols: a.adapter.supportsSymbols(),
100
+ }));
101
+ }
102
+
103
+ getExtensionsForKeys(keys: string[]): string[] {
104
+ const exts: string[] = [];
105
+ for (const key of keys) {
106
+ const entry = this.adapters.find(a => a.key === key);
107
+ if (entry) exts.push(...entry.adapter.fileExtensions());
108
+ }
109
+ return exts;
110
+ }
111
+
112
+ async initialize(keys: string[]): Promise<void> {
113
+ for (const key of keys) {
114
+ const entry = this.adapters.find(a => a.key === key);
115
+ if (entry && entry.adapter instanceof (await import('./base.js')).BaseTreeSitterAdapter) {
116
+ try {
117
+ await (entry.adapter as any).loadGrammar();
118
+ } catch (e) {
119
+ // grammar load failure is non-fatal
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ export const defaultRegistry = new LanguageRegistry();
@@ -0,0 +1,58 @@
1
+ export enum SymbolType {
2
+ Workspace = 'workspace',
3
+ Folder = 'folder',
4
+ File = 'file',
5
+ Module = 'module',
6
+ Namespace = 'namespace',
7
+ Class = 'class',
8
+ Interface = 'interface',
9
+ Enum = 'enum',
10
+ Struct = 'struct',
11
+ Trait = 'trait',
12
+ Function = 'function',
13
+ Method = 'method',
14
+ Variable = 'variable',
15
+ Constant = 'constant',
16
+ Property = 'property',
17
+ Import = 'import',
18
+ Export = 'export',
19
+ Comment = 'comment',
20
+ Unknown = 'unknown',
21
+ }
22
+
23
+ export interface CodeSymbol {
24
+ id: string;
25
+ name: string;
26
+ type: SymbolType;
27
+ language: string;
28
+ file: string;
29
+ startLine: number;
30
+ endLine: number;
31
+ parent: string | null;
32
+ children: CodeSymbol[];
33
+ metadata: Record<string, unknown>;
34
+ }
35
+
36
+ export interface ParseResult {
37
+ symbols: CodeSymbol[];
38
+ imports: string[];
39
+ exports: string[];
40
+ comments: string[];
41
+ }
42
+
43
+ export interface LanguageAdapter {
44
+ languageName(): string;
45
+ fileExtensions(): string[];
46
+ fileNames(): string[];
47
+ canParse(filePath: string): boolean;
48
+ parse(content: string, filePath: string): Promise<ParseResult>;
49
+ supportsSymbols(): boolean;
50
+ }
51
+
52
+ export interface AdapterInfo {
53
+ key: string;
54
+ name: string;
55
+ extensions: string[];
56
+ tier: 1 | 2 | 3;
57
+ supportsSymbols: boolean;
58
+ }