这是测试文件
func demo() {
name:=xxx()
fmt.Println(name)
}
还有我的 ast 遍历代码
ast.Inspect(f, func(node ast.Node) bool {
assign, ok := node.(*ast.AssignStmt) // find -> name:=xxx()
if !ok {
return true
}
if assign == nil {
return true
}
var expr = assign.Lhs[0]
fmt.Println(expr) // find -> name
fmt.Println(nodeString(assign,pass.Fset))
return true
})
我发现我必须像这样从上到下旅行。找到AssignStmt,然后得到AssignStmt->Lhs
但是在某些情况下,我需要先找到 ast.Ident(name) ,然后再查找其父项是否为 AssignStmt。
我不确定我是否可以从下到上。