jmi*_*ite 5 pretty-print abstract-syntax-tree go
我正在寻找一种工具,可以从某些给定的输入生成方法存根。我已经看到 了astpackage,但它似乎代表了一个已经解析的 AST,它包含有关源文件中所有位置的信息。重要的是,您需要提供源信息
我正在考虑以编程方式生成源文件,所以我不知道我的 AST 节点将在最终文件中的哪个位置结束。
我很好奇:
ast包裹中的位置提供虚拟信息,它是否会正确打印(即忽略位置信息)?我意识到我可以通过文本生成来完成这一切,但这似乎不安全且难以处理。
考虑一下https://github.com/lu4p/astextract,它有一个更好的 AST,可以打印到 go 代码中。
我知道您已经考虑过这一点,但在结果字符串上使用text/templateand实际上是相当合理的。goimports它更容易编写,并且可以更好地转换为编写正常的 go 代码。正如您所注意到的,它不是类型安全的(这很好,因为goimports稍后在其上运行会强制执行此操作)。最大的缺点实际上是它很难测试(我们最终编写了一组生成的测试和手动编写的测试)。
(编辑:刚刚意识到这是一个多么古老的问题 - 将把我的答案留给其他人,因为我确信你现在已经找到了一些方法来自己解决这个问题)