@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 +74 -0
- package/dist/ast/languages/go.d.ts +99 -0
- package/dist/ast/languages/go.d.ts.map +1 -0
- package/dist/ast/languages/go.js +546 -0
- package/dist/ast/languages/go.js.map +1 -0
- package/dist/ast/languages/registry.d.ts +1 -1
- package/dist/ast/languages/registry.d.ts.map +1 -1
- package/dist/ast/languages/registry.js +3 -1
- package/dist/ast/languages/registry.js.map +1 -1
- package/package.json +2 -1
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;
|
|
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":"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;
|
|
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.
|
|
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",
|