GoLang ast:生成并打印没有位置信息的树

时间:2016-11-01 17:24:27

标签: go abstract-syntax-tree pretty-print

我正在寻找一个从某些给定输入生成方法存根的工具。我已经看过the ast package,但它似乎代表了一个已经解析过的AST,它有关于源文件中所有内容的信息。重要的是,您需要提供源信息

我正在考虑以编程方式生成源文件,所以我不知道最终文件中我的AST节点最终会在哪里结束。

我想知道:

  • 是否有更好的AST工具可以让您生成代码而无需提供源文件位置信息?
  • 如果我为ast包中的位置提供虚拟信息,是否可以正确打印(即忽略位置信息)?

我意识到我可以使用文本生成来完成所有这些操作,但这似乎是类型不安全且难以处理。

1 个答案:

答案 0 :(得分:1)

考虑到https://github.com/lu4p/astextract,它具有更好的AST,可以将其打印到go代码中。

我知道您已经考虑过这一点,但是在结果字符串上使用text/templategoimports实际上是很合理的。它更容易编写,并且比编写普通的go代码要好得多。如您所述,它不是类型安全的(这很好,因为稍后在其上运行goimports会强制执行此操作)。最大的缺点实际上是很难测试(我们最终编写了一组生成的测试和手动书面测试)。

(编辑:刚刚意识到问题有多大了-因为我确定您现在已经找到某种方法可以自己解决这个问题,所以将答案留给其他人使用)