@liendev/parser 0.39.0 → 0.41.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/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # @liendev/parser
2
+
3
+ AST parsing, complexity analysis, and semantic chunking for [Lien](https://lien.dev).
4
+
5
+ This package provides the core parsing and analysis capabilities used by Lien's semantic code search. It is extracted from `@liendev/core` to enable lightweight consumers (like `@liendev/review`) that need parsing without embeddings or vector DB dependencies.
6
+
7
+ ## Features
8
+
9
+ - **AST Parsing** — Tree-sitter-based parsing for TypeScript, JavaScript, Python, PHP, Rust, and Go
10
+ - **Semantic Chunking** — Split code into meaningful chunks respecting function/class boundaries
11
+ - **Complexity Analysis** — Cyclomatic, cognitive, and Halstead complexity metrics
12
+ - **Dependency Analysis** — Import/export tracking with transitive dependent resolution
13
+ - **Symbol Extraction** — Extract functions, classes, interfaces, and call sites from AST
14
+ - **Test Association Detection** — Convention-based and import-based test file detection
15
+ - **Codebase Scanning** — File discovery with gitignore support and ecosystem presets
16
+
17
+ ## Supported Languages
18
+
19
+ | Language | AST Parsing | Complexity Metrics | Import/Export Tracking |
20
+ |----------|:-----------:|:------------------:|:---------------------:|
21
+ | TypeScript | Yes | Yes | Yes |
22
+ | JavaScript | Yes | Yes | Yes |
23
+ | Python | Yes | Yes | Yes |
24
+ | PHP | Yes | Yes | Yes |
25
+ | Rust | Yes | Yes | Yes |
26
+ | Go | Yes | Yes | Yes |
27
+
28
+ Line-based chunking and symbol extraction are available for additional languages including Java, C#, Ruby, and Vue.
29
+
30
+ ## Usage
31
+
32
+ ```typescript
33
+ import {
34
+ parseAST,
35
+ chunkByAST,
36
+ detectLanguage,
37
+ analyzeComplexityFromChunks,
38
+ scanCodebase,
39
+ chunkFile,
40
+ } from '@liendev/parser';
41
+
42
+ // Parse a file into an AST
43
+ const language = detectLanguage('example.ts');
44
+ const result = parseAST(sourceCode, language);
45
+
46
+ // Chunk a file using AST-aware boundaries
47
+ const chunks = await chunkByAST('src/auth.ts', sourceCode, {
48
+ chunkSize: 75,
49
+ chunkOverlap: 10,
50
+ });
51
+
52
+ // Analyze complexity from chunks
53
+ const report = analyzeComplexityFromChunks(chunks, files, {
54
+ cyclomatic: 15,
55
+ cognitive: 15,
56
+ halstead_effort: 60,
57
+ halstead_bugs: 1.5,
58
+ });
59
+ ```
60
+
61
+ ## Architecture
62
+
63
+ This package is part of the [Lien](https://github.com/getlien/lien) monorepo:
64
+
65
+ ```
66
+ @liendev/parser ← AST, complexity, chunking, scanning (this package)
67
+ @liendev/core ← embeddings, vector DB, search (depends on parser)
68
+ @liendev/lien ← CLI and MCP server (depends on both)
69
+ @liendev/review ← PR review (depends on parser only)
70
+ ```
71
+
72
+ ## License
73
+
74
+ AGPL-3.0 — see [LICENSE](https://github.com/getlien/lien/blob/main/LICENSE) for details.
@@ -0,0 +1,99 @@
1
+ import type Parser from 'tree-sitter';
2
+ import type { SymbolInfo } from '../types.js';
3
+ import type { LanguageDefinition } from './types.js';
4
+ import type { LanguageTraverser, DeclarationFunctionInfo } from '../traversers/types.js';
5
+ import type { LanguageExportExtractor, LanguageImportExtractor, LanguageSymbolExtractor } from '../extractors/types.js';
6
+ /**
7
+ * Go AST traverser
8
+ *
9
+ * Go has a flat structure — methods are top-level declarations with receiver
10
+ * parameters, not nested inside struct/interface blocks. There are no container
11
+ * types (unlike Rust's `impl` blocks or Python's classes).
12
+ *
13
+ * Anonymous functions can appear in var declarations:
14
+ * var handler = func(w http.ResponseWriter, r *http.Request) { ... }
15
+ */
16
+ export declare class GoTraverser implements LanguageTraverser {
17
+ targetNodeTypes: string[];
18
+ containerTypes: string[];
19
+ declarationTypes: string[];
20
+ functionTypes: string[];
21
+ shouldExtractChildren(_node: Parser.SyntaxNode): boolean;
22
+ isDeclarationWithFunction(node: Parser.SyntaxNode): boolean;
23
+ getContainerBody(_node: Parser.SyntaxNode): Parser.SyntaxNode | null;
24
+ shouldTraverseChildren(node: Parser.SyntaxNode): boolean;
25
+ findParentContainerName(_node: Parser.SyntaxNode): string | undefined;
26
+ findFunctionInDeclaration(node: Parser.SyntaxNode): DeclarationFunctionInfo;
27
+ private hasFuncLiteral;
28
+ }
29
+ /**
30
+ * Go export extractor
31
+ *
32
+ * Go uses capitalization for exports — identifiers starting with an uppercase
33
+ * letter are exported from the package.
34
+ *
35
+ * Exportable items:
36
+ * - func NewUser() {} (uppercase function)
37
+ * - func (u *User) GetName() {} (uppercase method)
38
+ * - type User struct {} (uppercase type)
39
+ * - type Validator interface {} (uppercase interface)
40
+ * - const MaxSize = 100 (uppercase constant)
41
+ * - var GlobalVar = "hello" (uppercase variable)
42
+ *
43
+ * Grouped declarations are also supported:
44
+ * - const ( StatusActive = 1; StatusInactive = 2 )
45
+ * - var ( Version = "1.0"; Build = "123" )
46
+ * - type ( Request struct{}; Response struct{} )
47
+ */
48
+ export declare class GoExportExtractor implements LanguageExportExtractor {
49
+ extractExports(rootNode: Parser.SyntaxNode): string[];
50
+ private extractTypeExports;
51
+ private extractSpecExports;
52
+ }
53
+ /**
54
+ * Go import extractor
55
+ *
56
+ * Handles all Go import patterns:
57
+ * - import "fmt" (single import)
58
+ * - import ( "fmt"; "net/http" ) (grouped imports)
59
+ * - import f "fmt" (aliased import)
60
+ * - import . "strings" (dot import — imports into current scope)
61
+ * - import _ "database/sql" (blank import — side effects only)
62
+ *
63
+ * Standard library imports are filtered out (no dots in first path component).
64
+ */
65
+ export declare class GoImportExtractor implements LanguageImportExtractor {
66
+ readonly importNodeTypes: string[];
67
+ extractImportPath(node: Parser.SyntaxNode): string | null;
68
+ processImportSymbols(node: Parser.SyntaxNode): {
69
+ importPath: string;
70
+ symbols: string[];
71
+ } | null;
72
+ private collectImportSpecs;
73
+ private extractSpecPath;
74
+ private getSpecRawPath;
75
+ private getSpecAlias;
76
+ }
77
+ /**
78
+ * Go symbol extractor
79
+ *
80
+ * Handles:
81
+ * - function_declaration (func foo() {})
82
+ * - method_declaration (func (u *User) GetName() {}) — receiver type as parentClass
83
+ * - type_declaration containing struct_type → class, interface_type → interface
84
+ *
85
+ * Call sites: call_expression (direct calls and selector/method calls)
86
+ */
87
+ export declare class GoSymbolExtractor implements LanguageSymbolExtractor {
88
+ readonly symbolNodeTypes: string[];
89
+ extractSymbol(node: Parser.SyntaxNode, content: string, parentClass?: string): SymbolInfo | null;
90
+ extractCallSite(node: Parser.SyntaxNode): {
91
+ symbol: string;
92
+ line: number;
93
+ key: string;
94
+ } | null;
95
+ private buildFuncSymbolInfo;
96
+ private extractTypeInfo;
97
+ }
98
+ export declare const goDefinition: LanguageDefinition;
99
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/go.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAQhC;;;;;;;;;GASG;AACH,qBAAa,WAAY,YAAW,iBAAiB;IACnD,eAAe,WAAsE;IAErF,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,gBAAgB,WAAgD;IAEhE,aAAa,WAAoB;IAEjC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAIxD,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAU3D,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;IAIpE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAIxD,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS;IAIrE,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,uBAAuB;IAkB3E,OAAO,CAAC,cAAc;CAGvB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE;IAuCrD,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;CAO3B;AAgBD;;;;;;;;;;;GAWG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,QAAQ,CAAC,eAAe,WAA0B;IAElD,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI;IAQzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAqB/F,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;CAOrB;AAMD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,QAAQ,CAAC,eAAe,WAAsE;IAE9F,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAahG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuB9F,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,eAAe;CA+BxB;AAmHD,eAAO,MAAM,YAAY,EAAE,kBA+G1B,CAAC"}
@@ -0,0 +1,546 @@
1
+ import Go from 'tree-sitter-go';
2
+ import { extractSignature, extractParameters } from '../extractors/symbol-helpers.js';
3
+ import { calculateComplexity } from '../complexity/index.js';
4
+ // =============================================================================
5
+ // TRAVERSER
6
+ // =============================================================================
7
+ /**
8
+ * Go AST traverser
9
+ *
10
+ * Go has a flat structure — methods are top-level declarations with receiver
11
+ * parameters, not nested inside struct/interface blocks. There are no container
12
+ * types (unlike Rust's `impl` blocks or Python's classes).
13
+ *
14
+ * Anonymous functions can appear in var declarations:
15
+ * var handler = func(w http.ResponseWriter, r *http.Request) { ... }
16
+ */
17
+ export class GoTraverser {
18
+ targetNodeTypes = ['function_declaration', 'method_declaration', 'type_declaration'];
19
+ containerTypes = [];
20
+ declarationTypes = ['var_declaration', 'short_var_declaration'];
21
+ functionTypes = ['func_literal'];
22
+ shouldExtractChildren(_node) {
23
+ return false;
24
+ }
25
+ isDeclarationWithFunction(node) {
26
+ if (node.type === 'var_declaration') {
27
+ return this.hasFuncLiteral(node);
28
+ }
29
+ if (node.type === 'short_var_declaration') {
30
+ return this.hasFuncLiteral(node);
31
+ }
32
+ return false;
33
+ }
34
+ getContainerBody(_node) {
35
+ return null;
36
+ }
37
+ shouldTraverseChildren(node) {
38
+ return node.type === 'source_file';
39
+ }
40
+ findParentContainerName(_node) {
41
+ return undefined;
42
+ }
43
+ findFunctionInDeclaration(node) {
44
+ const noFunction = { hasFunction: false, functionNode: null };
45
+ // var handler = func(...) { ... }
46
+ if (node.type === 'var_declaration') {
47
+ return findFuncLiteralInVarDecl(node) ?? noFunction;
48
+ }
49
+ // handler := func(...) { ... }
50
+ if (node.type === 'short_var_declaration') {
51
+ const right = node.childForFieldName('right');
52
+ const funcLiteral = right ? findChildOfType(right, 'func_literal') : null;
53
+ return funcLiteral ? { hasFunction: true, functionNode: funcLiteral } : noFunction;
54
+ }
55
+ return noFunction;
56
+ }
57
+ hasFuncLiteral(node) {
58
+ return this.findFunctionInDeclaration(node).hasFunction;
59
+ }
60
+ }
61
+ // =============================================================================
62
+ // EXPORT EXTRACTOR
63
+ // =============================================================================
64
+ /**
65
+ * Go export extractor
66
+ *
67
+ * Go uses capitalization for exports — identifiers starting with an uppercase
68
+ * letter are exported from the package.
69
+ *
70
+ * Exportable items:
71
+ * - func NewUser() {} (uppercase function)
72
+ * - func (u *User) GetName() {} (uppercase method)
73
+ * - type User struct {} (uppercase type)
74
+ * - type Validator interface {} (uppercase interface)
75
+ * - const MaxSize = 100 (uppercase constant)
76
+ * - var GlobalVar = "hello" (uppercase variable)
77
+ *
78
+ * Grouped declarations are also supported:
79
+ * - const ( StatusActive = 1; StatusInactive = 2 )
80
+ * - var ( Version = "1.0"; Build = "123" )
81
+ * - type ( Request struct{}; Response struct{} )
82
+ */
83
+ export class GoExportExtractor {
84
+ extractExports(rootNode) {
85
+ const exports = [];
86
+ const seen = new Set();
87
+ const addExport = (name) => {
88
+ if (name && isExported(name) && !seen.has(name)) {
89
+ seen.add(name);
90
+ exports.push(name);
91
+ }
92
+ };
93
+ for (let i = 0; i < rootNode.namedChildCount; i++) {
94
+ const child = rootNode.namedChild(i);
95
+ if (!child)
96
+ continue;
97
+ switch (child.type) {
98
+ case 'function_declaration': {
99
+ const name = child.childForFieldName('name');
100
+ if (name)
101
+ addExport(name.text);
102
+ break;
103
+ }
104
+ case 'method_declaration': {
105
+ const name = child.childForFieldName('name');
106
+ if (name)
107
+ addExport(name.text);
108
+ break;
109
+ }
110
+ case 'type_declaration':
111
+ this.extractTypeExports(child, addExport);
112
+ break;
113
+ case 'const_declaration':
114
+ case 'var_declaration':
115
+ this.extractSpecExports(child, addExport);
116
+ break;
117
+ }
118
+ }
119
+ return exports;
120
+ }
121
+ extractTypeExports(node, addExport) {
122
+ for (let i = 0; i < node.namedChildCount; i++) {
123
+ const spec = node.namedChild(i);
124
+ if (spec?.type === 'type_spec') {
125
+ const nameNode = spec.childForFieldName('name');
126
+ if (nameNode)
127
+ addExport(nameNode.text);
128
+ }
129
+ }
130
+ }
131
+ extractSpecExports(node, addExport) {
132
+ const specs = collectSpecs(node);
133
+ for (const spec of specs) {
134
+ const nameNode = spec.childForFieldName('name');
135
+ if (nameNode)
136
+ addExport(nameNode.text);
137
+ }
138
+ }
139
+ }
140
+ // =============================================================================
141
+ // IMPORT EXTRACTOR
142
+ // =============================================================================
143
+ /**
144
+ * Check if a Go import path is a standard library package.
145
+ * Stdlib packages have no dots in their first path component.
146
+ * Examples: "fmt", "net/http" = stdlib; "github.com/..." = external
147
+ */
148
+ function isStdLibImport(importPath) {
149
+ const firstComponent = importPath.split('/')[0];
150
+ return !firstComponent.includes('.');
151
+ }
152
+ /**
153
+ * Go import extractor
154
+ *
155
+ * Handles all Go import patterns:
156
+ * - import "fmt" (single import)
157
+ * - import ( "fmt"; "net/http" ) (grouped imports)
158
+ * - import f "fmt" (aliased import)
159
+ * - import . "strings" (dot import — imports into current scope)
160
+ * - import _ "database/sql" (blank import — side effects only)
161
+ *
162
+ * Standard library imports are filtered out (no dots in first path component).
163
+ */
164
+ export class GoImportExtractor {
165
+ importNodeTypes = ['import_declaration'];
166
+ extractImportPath(node) {
167
+ for (const spec of this.collectImportSpecs(node)) {
168
+ const path = this.extractSpecPath(spec);
169
+ if (path)
170
+ return path;
171
+ }
172
+ return null;
173
+ }
174
+ processImportSymbols(node) {
175
+ // Collect all import specs from the declaration
176
+ const specs = this.collectImportSpecs(node);
177
+ // Process each spec, filtering out stdlib imports
178
+ for (const spec of specs) {
179
+ const path = this.getSpecRawPath(spec);
180
+ if (!path || isStdLibImport(path))
181
+ continue;
182
+ const alias = this.getSpecAlias(spec);
183
+ // Use the last path component as the default symbol name
184
+ const parts = path.split('/');
185
+ const defaultSymbol = parts[parts.length - 1];
186
+ const symbol = alias || defaultSymbol;
187
+ return { importPath: path, symbols: [symbol] };
188
+ }
189
+ return null;
190
+ }
191
+ collectImportSpecs(node) {
192
+ const specs = [];
193
+ // Single import
194
+ const spec = findChildOfType(node, 'import_spec');
195
+ if (spec && !findChildOfType(node, 'import_spec_list')) {
196
+ specs.push(spec);
197
+ return specs;
198
+ }
199
+ // Grouped import
200
+ const specList = findChildOfType(node, 'import_spec_list');
201
+ if (specList) {
202
+ for (let i = 0; i < specList.namedChildCount; i++) {
203
+ const child = specList.namedChild(i);
204
+ if (child?.type === 'import_spec') {
205
+ specs.push(child);
206
+ }
207
+ }
208
+ }
209
+ return specs;
210
+ }
211
+ extractSpecPath(spec) {
212
+ const rawPath = this.getSpecRawPath(spec);
213
+ if (!rawPath || isStdLibImport(rawPath))
214
+ return null;
215
+ return rawPath;
216
+ }
217
+ getSpecRawPath(spec) {
218
+ const pathNode = spec.childForFieldName('path');
219
+ if (!pathNode)
220
+ return null;
221
+ // Remove surrounding quotes from the interpreted_string_literal
222
+ return pathNode.text.replace(/^"|"$/g, '');
223
+ }
224
+ getSpecAlias(spec) {
225
+ const nameNode = spec.childForFieldName('name');
226
+ if (!nameNode)
227
+ return null;
228
+ // Dot import (.) and blank import (_) are special
229
+ if (nameNode.type === 'dot' || nameNode.type === 'blank_identifier')
230
+ return null;
231
+ return nameNode.text;
232
+ }
233
+ }
234
+ // =============================================================================
235
+ // SYMBOL EXTRACTOR
236
+ // =============================================================================
237
+ /**
238
+ * Go symbol extractor
239
+ *
240
+ * Handles:
241
+ * - function_declaration (func foo() {})
242
+ * - method_declaration (func (u *User) GetName() {}) — receiver type as parentClass
243
+ * - type_declaration containing struct_type → class, interface_type → interface
244
+ *
245
+ * Call sites: call_expression (direct calls and selector/method calls)
246
+ */
247
+ export class GoSymbolExtractor {
248
+ symbolNodeTypes = ['function_declaration', 'method_declaration', 'type_declaration'];
249
+ extractSymbol(node, content, parentClass) {
250
+ switch (node.type) {
251
+ case 'function_declaration':
252
+ return this.buildFuncSymbolInfo(node, content, parentClass);
253
+ case 'method_declaration':
254
+ return this.buildFuncSymbolInfo(node, content, extractReceiverType(node));
255
+ case 'type_declaration':
256
+ return this.extractTypeInfo(node);
257
+ default:
258
+ return null;
259
+ }
260
+ }
261
+ extractCallSite(node) {
262
+ if (node.type !== 'call_expression')
263
+ return null;
264
+ const line = node.startPosition.row + 1;
265
+ const funcNode = node.childForFieldName('function');
266
+ if (!funcNode)
267
+ return null;
268
+ // Direct call: doSomething()
269
+ if (funcNode.type === 'identifier') {
270
+ return { symbol: funcNode.text, line, key: `${funcNode.text}:${line}` };
271
+ }
272
+ // Method/package call: user.GetName() or fmt.Println()
273
+ if (funcNode.type === 'selector_expression') {
274
+ const fieldNode = funcNode.childForFieldName('field');
275
+ if (fieldNode?.type === 'field_identifier') {
276
+ return { symbol: fieldNode.text, line, key: `${fieldNode.text}:${line}` };
277
+ }
278
+ }
279
+ return null;
280
+ }
281
+ buildFuncSymbolInfo(node, content, parentClass) {
282
+ const nameNode = node.childForFieldName('name');
283
+ if (!nameNode)
284
+ return null;
285
+ return {
286
+ name: nameNode.text,
287
+ type: parentClass ? 'method' : 'function',
288
+ startLine: node.startPosition.row + 1,
289
+ endLine: node.endPosition.row + 1,
290
+ parentClass,
291
+ signature: extractSignature(node, content),
292
+ parameters: extractParameters(node, content),
293
+ returnType: extractGoReturnType(node),
294
+ complexity: calculateComplexity(node),
295
+ };
296
+ }
297
+ extractTypeInfo(node) {
298
+ // type_declaration contains type_spec children
299
+ const typeSpec = findChildOfType(node, 'type_spec');
300
+ if (!typeSpec)
301
+ return null;
302
+ const nameNode = typeSpec.childForFieldName('name');
303
+ const typeNode = typeSpec.childForFieldName('type');
304
+ if (!nameNode)
305
+ return null;
306
+ const symbolType = typeNode?.type === 'interface_type' ? 'interface' : 'class';
307
+ // Use concise keyword for struct/interface, actual type text for aliases/maps/etc.
308
+ let signature;
309
+ if (typeNode?.type === 'struct_type') {
310
+ signature = `type ${nameNode.text} struct`;
311
+ }
312
+ else if (typeNode?.type === 'interface_type') {
313
+ signature = `type ${nameNode.text} interface`;
314
+ }
315
+ else if (typeNode) {
316
+ signature = `type ${nameNode.text} ${typeNode.text}`;
317
+ }
318
+ else {
319
+ signature = `type ${nameNode.text}`;
320
+ }
321
+ return {
322
+ name: nameNode.text,
323
+ type: symbolType,
324
+ startLine: node.startPosition.row + 1,
325
+ endLine: node.endPosition.row + 1,
326
+ signature,
327
+ };
328
+ }
329
+ }
330
+ // =============================================================================
331
+ // HELPERS
332
+ // =============================================================================
333
+ /**
334
+ * Check if a Go identifier is exported (starts with uppercase).
335
+ */
336
+ function isExported(name) {
337
+ const first = name[0];
338
+ return first === first.toUpperCase() && first !== first.toLowerCase();
339
+ }
340
+ /**
341
+ * Extract the receiver type from a method_declaration.
342
+ * Handles both value receivers (u User) and pointer receivers (u *User).
343
+ */
344
+ function extractReceiverType(node) {
345
+ const receiver = node.childForFieldName('receiver');
346
+ if (!receiver)
347
+ return undefined;
348
+ // receiver is a parameter_list with one parameter_declaration
349
+ const param = findChildOfType(receiver, 'parameter_declaration');
350
+ if (!param)
351
+ return undefined;
352
+ const typeNode = param.childForFieldName('type');
353
+ if (!typeNode)
354
+ return undefined;
355
+ // Pointer receiver: *User -> strip the pointer
356
+ if (typeNode.type === 'pointer_type') {
357
+ for (let i = 0; i < typeNode.namedChildCount; i++) {
358
+ const child = typeNode.namedChild(i);
359
+ if (child?.type === 'type_identifier')
360
+ return child.text;
361
+ }
362
+ }
363
+ // Value receiver: User
364
+ if (typeNode.type === 'type_identifier') {
365
+ return typeNode.text;
366
+ }
367
+ return undefined;
368
+ }
369
+ /**
370
+ * Extract return type from a Go function/method.
371
+ * Go uses a `result` field instead of `return_type`.
372
+ */
373
+ function extractGoReturnType(node) {
374
+ const resultNode = node.childForFieldName('result');
375
+ if (!resultNode)
376
+ return undefined;
377
+ return resultNode.text;
378
+ }
379
+ /**
380
+ * Find a func_literal inside a var_declaration's var_spec children.
381
+ */
382
+ function findFuncLiteralInVarDecl(node) {
383
+ for (let i = 0; i < node.namedChildCount; i++) {
384
+ const spec = node.namedChild(i);
385
+ if (spec?.type !== 'var_spec')
386
+ continue;
387
+ const valueList = spec.childForFieldName('value');
388
+ if (!valueList)
389
+ continue;
390
+ const funcLiteral = findChildOfType(valueList, 'func_literal');
391
+ if (funcLiteral)
392
+ return { hasFunction: true, functionNode: funcLiteral };
393
+ }
394
+ return null;
395
+ }
396
+ /**
397
+ * Collect all named children of specific types from a node.
398
+ */
399
+ function collectChildrenOfType(node, types) {
400
+ const result = [];
401
+ for (let i = 0; i < node.namedChildCount; i++) {
402
+ const child = node.namedChild(i);
403
+ if (child && types.has(child.type))
404
+ result.push(child);
405
+ }
406
+ return result;
407
+ }
408
+ const SPEC_TYPES = new Set(['const_spec', 'var_spec']);
409
+ /**
410
+ * Collect all const_spec or var_spec nodes from a declaration,
411
+ * handling the var_spec_list wrapper for grouped var blocks.
412
+ */
413
+ function collectSpecs(node) {
414
+ // Direct spec children (single declarations and grouped const)
415
+ const direct = collectChildrenOfType(node, SPEC_TYPES);
416
+ if (direct.length > 0)
417
+ return direct;
418
+ // Grouped var uses var_spec_list as intermediate wrapper
419
+ const specList = findChildOfType(node, 'var_spec_list');
420
+ return specList ? collectChildrenOfType(specList, SPEC_TYPES) : [];
421
+ }
422
+ /**
423
+ * Find the first child of a specific type.
424
+ */
425
+ function findChildOfType(node, type) {
426
+ for (let i = 0; i < node.namedChildCount; i++) {
427
+ const child = node.namedChild(i);
428
+ if (child?.type === type)
429
+ return child;
430
+ }
431
+ return null;
432
+ }
433
+ // =============================================================================
434
+ // LANGUAGE DEFINITION
435
+ // =============================================================================
436
+ export const goDefinition = {
437
+ id: 'go',
438
+ extensions: ['go'],
439
+ grammar: Go,
440
+ traverser: new GoTraverser(),
441
+ exportExtractor: new GoExportExtractor(),
442
+ importExtractor: new GoImportExtractor(),
443
+ symbolExtractor: new GoSymbolExtractor(),
444
+ complexity: {
445
+ decisionPoints: [
446
+ 'if_statement',
447
+ 'for_statement',
448
+ 'switch_statement',
449
+ 'type_switch_statement',
450
+ 'select_statement',
451
+ 'expression_case',
452
+ 'communication_case',
453
+ 'binary_expression',
454
+ ],
455
+ nestingTypes: [
456
+ 'if_statement',
457
+ 'for_statement',
458
+ 'switch_statement',
459
+ 'type_switch_statement',
460
+ 'select_statement',
461
+ ],
462
+ nonNestingTypes: ['expression_case', 'communication_case', 'default_case'],
463
+ lambdaTypes: ['func_literal'],
464
+ operatorSymbols: new Set([
465
+ '+',
466
+ '-',
467
+ '*',
468
+ '/',
469
+ '%',
470
+ '==',
471
+ '!=',
472
+ '<',
473
+ '>',
474
+ '<=',
475
+ '>=',
476
+ '=',
477
+ ':=',
478
+ '+=',
479
+ '-=',
480
+ '*=',
481
+ '/=',
482
+ '%=',
483
+ '&=',
484
+ '|=',
485
+ '^=',
486
+ '<<=',
487
+ '>>=',
488
+ '&^=',
489
+ '&',
490
+ '|',
491
+ '^',
492
+ '!',
493
+ '<<',
494
+ '>>',
495
+ '&^',
496
+ '<-',
497
+ '.',
498
+ '...',
499
+ '(',
500
+ ')',
501
+ '[',
502
+ ']',
503
+ '{',
504
+ '}',
505
+ ]),
506
+ operatorKeywords: new Set([
507
+ 'if',
508
+ 'else',
509
+ 'for',
510
+ 'range',
511
+ 'switch',
512
+ 'case',
513
+ 'default',
514
+ 'select',
515
+ 'return',
516
+ 'break',
517
+ 'continue',
518
+ 'goto',
519
+ 'fallthrough',
520
+ 'func',
521
+ 'var',
522
+ 'const',
523
+ 'type',
524
+ 'struct',
525
+ 'interface',
526
+ 'map',
527
+ 'chan',
528
+ 'go',
529
+ 'defer',
530
+ 'package',
531
+ 'import',
532
+ 'make',
533
+ 'new',
534
+ 'len',
535
+ 'cap',
536
+ 'append',
537
+ 'copy',
538
+ 'delete',
539
+ 'close',
540
+ ]),
541
+ },
542
+ symbols: {
543
+ callExpressionTypes: ['call_expression'],
544
+ },
545
+ };
546
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/ast/languages/go.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { LanguageDefinition } from './types.js';
4
4
  * SupportedLanguage type is derived from this array.
5
5
  * To add a new language: add its ID here, then add its definition to `definitions` below.
6
6
  */
7
- export declare const LANGUAGE_IDS: readonly ["typescript", "javascript", "php", "python", "rust"];
7
+ export declare const LANGUAGE_IDS: readonly ["typescript", "javascript", "php", "python", "rust", "go"];
8
8
  export type SupportedLanguage = (typeof LANGUAGE_IDS)[number];
9
9
  /**
10
10
  * Get the full language definition for a supported language.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmBrD;;;;GAIG;AACH,eAAO,MAAM,YAAY,gEAAiE,CAAC;AAC3F,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAmC9D;;;;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;AAQD,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAKjD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAqBrD;;;;GAIG;AACH,eAAO,MAAM,YAAY,sEAAuE,CAAC;AACjG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAmC9D;;;;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;AAQD,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAKjD"}
@@ -4,6 +4,7 @@ import { javascriptDefinition } from './javascript.js';
4
4
  import { phpDefinition } from './php.js';
5
5
  import { pythonDefinition } from './python.js';
6
6
  import { rustDefinition } from './rust.js';
7
+ import { goDefinition } from './go.js';
7
8
  /**
8
9
  * All registered language definitions.
9
10
  * To add a new language, create a definition file and add it here.
@@ -14,13 +15,14 @@ const definitions = [
14
15
  phpDefinition,
15
16
  pythonDefinition,
16
17
  rustDefinition,
18
+ goDefinition,
17
19
  ];
18
20
  /**
19
21
  * Canonical list of supported language IDs.
20
22
  * SupportedLanguage type is derived from this array.
21
23
  * To add a new language: add its ID here, then add its definition to `definitions` below.
22
24
  */
23
- export const LANGUAGE_IDS = ['typescript', 'javascript', 'php', 'python', 'rust'];
25
+ export const LANGUAGE_IDS = ['typescript', 'javascript', 'php', 'python', 'rust', 'go'];
24
26
  /**
25
27
  * Registry keyed by language id.
26
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liendev/parser",
3
- "version": "0.39.0",
3
+ "version": "0.41.0",
4
4
  "description": "AST parsing, complexity analysis, and semantic chunking for Lien",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,6 +23,7 @@
23
23
  "ignore": "5.3.0",
24
24
  "p-limit": "5.0.0",
25
25
  "tree-sitter": "^0.25.0",
26
+ "tree-sitter-go": "^0.23.4",
26
27
  "tree-sitter-javascript": "0.23.1",
27
28
  "tree-sitter-php": "^0.24.2",
28
29
  "tree-sitter-python": "^0.25.0",