【发布时间】:2015-05-12 16:10:37
【问题描述】:
我正在使用templates 包生成一些源代码(有更好的方法吗?),部分测试我需要检查输出是否与预期的源代码匹配。
- 我尝试了字符串比较,但由于模板包生成的额外空格/新行而失败。我也尝试过format.Source,但没有成功。 (失败)
-
我尝试解析两个来源的 ast(见下文),但即使代码除了新行/空格之外基本相同,ast 也不匹配。 (失败)
主包
import ( "fmt" "go/parser" "go/token" "reflect" ) func main() { stub1 := `package main func myfunc(s string) error { return nil }` stub2 := `package main func myfunc(s string) error { return nil }` fset := token.NewFileSet() r1, err := parser.ParseFile(fset, "", stub1, parser.AllErrors) if err != nil { panic(err) } fset = token.NewFileSet() r2, err := parser.ParseFile(fset, "", stub2, parser.AllErrors) if err != nil { panic(err) } if !reflect.DeepEqual(r1, r2) { fmt.Printf("e %v, r %s, ", r1, r2) } }
【问题讨论】:
-
你想比较任意树,还是只去你已经解析的树?
-
只是去源代码/树,因此是去标签
标签: parsing go compare abstract-syntax-tree