Skip to content

Commit f64ada7

Browse files
cursoragentlu4p
andcommitted
Update go version, add new position filters, and include binary file
Co-authored-by: lu4p <[email protected]>
1 parent 65593a6 commit f64ada7

File tree

4 files changed

+285
-2
lines changed

4 files changed

+285
-2
lines changed

astextract_bin

3.35 MB
Binary file not shown.

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module github.com/lu4p/astextract
22

3-
go 1.22
3+
go 1.23
4+
5+
toolchain go1.24.2
46

57
require (
68
github.com/maxence-charriere/go-app/v9 v9.8.0

print.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ func PosFilter(name string, v reflect.Value) bool {
6666
blacklist := []string{
6767
"If", "Return", "Func", "Opening", "Closing", "Colon", "Obj",
6868
"Struct", "Map", "For", "Star", "Case", "Begin", "Defer", "Go",
69-
"Interface", "Select", "Struct", "Switch", "Arrow",
69+
"Interface", "Select", "Struct", "Switch", "Arrow", "Range",
70+
"FileStart", "FileEnd",
7071
}
7172

7273
bracePos := []string{"brace", "paren", "brack"}

testdata/scripts/generics.txt

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
astextract generic.go
2+
cmp stdout generic.stdout
3+
4+
-- generic.go --
5+
package main
6+
7+
import "fmt"
8+
9+
func Sum[T int | int64 | float64](a, b T) T {
10+
return a + b
11+
}
12+
13+
type Pair[T any] struct {
14+
First, Second T
15+
}
16+
17+
func main() {
18+
fmt.Println(Sum(3, 4))
19+
p := Pair[string]{First: "hello", Second: "world"}
20+
fmt.Println(p.First, p.Second)
21+
}
22+
23+
-- generic.stdout --
24+
&ast.File {
25+
Package: 1,
26+
Name: &ast.Ident {
27+
Name: "main",
28+
},
29+
Decls: []ast.Decl {
30+
&ast.GenDecl {
31+
Tok: token.IMPORT,
32+
Specs: []ast.Spec {
33+
&ast.ImportSpec {
34+
Path: &ast.BasicLit {
35+
Kind: token.STRING,
36+
Value: "\"fmt\"",
37+
},
38+
},
39+
},
40+
},
41+
&ast.FuncDecl {
42+
Name: &ast.Ident {
43+
Name: "Sum",
44+
},
45+
Type: &ast.FuncType {
46+
TypeParams: &ast.FieldList {
47+
List: []*ast.Field {
48+
&ast.Field {
49+
Names: []*ast.Ident {
50+
&ast.Ident {
51+
Name: "T",
52+
},
53+
},
54+
Type: &ast.BinaryExpr {
55+
X: &ast.BinaryExpr {
56+
X: &ast.Ident {
57+
Name: "int",
58+
},
59+
Op: token.OR,
60+
Y: &ast.Ident {
61+
Name: "int64",
62+
},
63+
},
64+
Op: token.OR,
65+
Y: &ast.Ident {
66+
Name: "float64",
67+
},
68+
},
69+
},
70+
},
71+
},
72+
Params: &ast.FieldList {
73+
List: []*ast.Field {
74+
&ast.Field {
75+
Names: []*ast.Ident {
76+
&ast.Ident {
77+
Name: "a",
78+
},
79+
&ast.Ident {
80+
Name: "b",
81+
},
82+
},
83+
Type: &ast.Ident {
84+
Name: "T",
85+
},
86+
},
87+
},
88+
},
89+
Results: &ast.FieldList {
90+
List: []*ast.Field {
91+
&ast.Field {
92+
Type: &ast.Ident {
93+
Name: "T",
94+
},
95+
},
96+
},
97+
},
98+
},
99+
Body: &ast.BlockStmt {
100+
List: []ast.Stmt {
101+
&ast.ReturnStmt {
102+
Results: []ast.Expr {
103+
&ast.BinaryExpr {
104+
X: &ast.Ident {
105+
Name: "a",
106+
},
107+
Op: token.ADD,
108+
Y: &ast.Ident {
109+
Name: "b",
110+
},
111+
},
112+
},
113+
},
114+
},
115+
},
116+
},
117+
&ast.GenDecl {
118+
Tok: token.TYPE,
119+
Specs: []ast.Spec {
120+
&ast.TypeSpec {
121+
Name: &ast.Ident {
122+
Name: "Pair",
123+
},
124+
TypeParams: &ast.FieldList {
125+
List: []*ast.Field {
126+
&ast.Field {
127+
Names: []*ast.Ident {
128+
&ast.Ident {
129+
Name: "T",
130+
},
131+
},
132+
Type: &ast.Ident {
133+
Name: "any",
134+
},
135+
},
136+
},
137+
},
138+
Type: &ast.StructType {
139+
Fields: &ast.FieldList {
140+
List: []*ast.Field {
141+
&ast.Field {
142+
Names: []*ast.Ident {
143+
&ast.Ident {
144+
Name: "First",
145+
},
146+
&ast.Ident {
147+
Name: "Second",
148+
},
149+
},
150+
Type: &ast.Ident {
151+
Name: "T",
152+
},
153+
},
154+
},
155+
},
156+
},
157+
},
158+
},
159+
},
160+
&ast.FuncDecl {
161+
Name: &ast.Ident {
162+
Name: "main",
163+
},
164+
Type: &ast.FuncType {
165+
Params: &ast.FieldList {},
166+
},
167+
Body: &ast.BlockStmt {
168+
List: []ast.Stmt {
169+
&ast.ExprStmt {
170+
X: &ast.CallExpr {
171+
Fun: &ast.SelectorExpr {
172+
X: &ast.Ident {
173+
Name: "fmt",
174+
},
175+
Sel: &ast.Ident {
176+
Name: "Println",
177+
},
178+
},
179+
Args: []ast.Expr {
180+
&ast.CallExpr {
181+
Fun: &ast.Ident {
182+
Name: "Sum",
183+
},
184+
Args: []ast.Expr {
185+
&ast.BasicLit {
186+
Kind: token.INT,
187+
Value: "3",
188+
},
189+
&ast.BasicLit {
190+
Kind: token.INT,
191+
Value: "4",
192+
},
193+
},
194+
},
195+
},
196+
},
197+
},
198+
&ast.AssignStmt {
199+
Lhs: []ast.Expr {
200+
&ast.Ident {
201+
Name: "p",
202+
},
203+
},
204+
Tok: token.DEFINE,
205+
Rhs: []ast.Expr {
206+
&ast.CompositeLit {
207+
Type: &ast.IndexExpr {
208+
X: &ast.Ident {
209+
Name: "Pair",
210+
},
211+
Index: &ast.Ident {
212+
Name: "string",
213+
},
214+
},
215+
Elts: []ast.Expr {
216+
&ast.KeyValueExpr {
217+
Key: &ast.Ident {
218+
Name: "First",
219+
},
220+
Value: &ast.BasicLit {
221+
Kind: token.STRING,
222+
Value: "\"hello\"",
223+
},
224+
},
225+
&ast.KeyValueExpr {
226+
Key: &ast.Ident {
227+
Name: "Second",
228+
},
229+
Value: &ast.BasicLit {
230+
Kind: token.STRING,
231+
Value: "\"world\"",
232+
},
233+
},
234+
},
235+
},
236+
},
237+
},
238+
&ast.ExprStmt {
239+
X: &ast.CallExpr {
240+
Fun: &ast.SelectorExpr {
241+
X: &ast.Ident {
242+
Name: "fmt",
243+
},
244+
Sel: &ast.Ident {
245+
Name: "Println",
246+
},
247+
},
248+
Args: []ast.Expr {
249+
&ast.SelectorExpr {
250+
X: &ast.Ident {
251+
Name: "p",
252+
},
253+
Sel: &ast.Ident {
254+
Name: "First",
255+
},
256+
},
257+
&ast.SelectorExpr {
258+
X: &ast.Ident {
259+
Name: "p",
260+
},
261+
Sel: &ast.Ident {
262+
Name: "Second",
263+
},
264+
},
265+
},
266+
},
267+
},
268+
},
269+
},
270+
},
271+
},
272+
Imports: []*ast.ImportSpec {
273+
&ast.ImportSpec {
274+
Path: &ast.BasicLit {
275+
Kind: token.STRING,
276+
Value: "\"fmt\"",
277+
},
278+
},
279+
},
280+
}

0 commit comments

Comments
 (0)