GoLang ast:生成并打印没有位置信息的树
GoLang ast: generating and printing a tree without position information
我正在寻找一种工具,它可以根据给定的输入生成方法存根。我见过 the ast
package,但它似乎代表一个已经解析的 AST,它包含有关源文件中所有内容的信息。重要的是,您需要提供来源信息
我正在考虑以编程方式生成源文件,所以我不知道我的 AST 节点将在最终文件中的何处结束。
我在想:
- 是否有更好的 AST 工具可以让您在不提供源文件位置信息的情况下生成代码?
- 如果我在
ast
包中提供职位的虚拟信息,它是否会正确打印(即忽略职位信息)?
我意识到我可以通过文本生成来完成这一切,但这似乎类型不安全并且更难处理。
考虑 https://github.com/lu4p/astextract 有更好的 AST 可以打印到 go 代码中。
我知道你已经考虑过了,但是在结果字符串上使用 text/template
和 goimports
实际上是很合理的。它更容易编写,并且可以更好地转换为编写普通的 go 代码。正如您所注意到的,它不是类型安全的(这很好,因为 运行 goimports
稍后会强制执行)。最大的缺点实际上是很难测试(我们最终编写了一组生成的测试和手动编写的测试)。
(编辑:刚刚意识到这是一个多么古老的问题 - 将我的答案留给其他人,因为我相信你现在已经找到了自己解决这个问题的方法)
我正在寻找一种工具,它可以根据给定的输入生成方法存根。我见过 the ast
package,但它似乎代表一个已经解析的 AST,它包含有关源文件中所有内容的信息。重要的是,您需要提供来源信息
我正在考虑以编程方式生成源文件,所以我不知道我的 AST 节点将在最终文件中的何处结束。
我在想:
- 是否有更好的 AST 工具可以让您在不提供源文件位置信息的情况下生成代码?
- 如果我在
ast
包中提供职位的虚拟信息,它是否会正确打印(即忽略职位信息)?
我意识到我可以通过文本生成来完成这一切,但这似乎类型不安全并且更难处理。
考虑 https://github.com/lu4p/astextract 有更好的 AST 可以打印到 go 代码中。
我知道你已经考虑过了,但是在结果字符串上使用 text/template
和 goimports
实际上是很合理的。它更容易编写,并且可以更好地转换为编写普通的 go 代码。正如您所注意到的,它不是类型安全的(这很好,因为 运行 goimports
稍后会强制执行)。最大的缺点实际上是很难测试(我们最终编写了一组生成的测试和手动编写的测试)。
(编辑:刚刚意识到这是一个多么古老的问题 - 将我的答案留给其他人,因为我相信你现在已经找到了自己解决这个问题的方法)