Go 如何增加token.File的大小?
我正在编写一个重写器,它使用Go 如何增加token.File的大小?,go,abstract-syntax-tree,Go,Abstract Syntax Tree,我正在编写一个重写器,它使用go/ast向文件中添加一些内容。除了注释外,一切都很好,注释是出了名的糟糕。但问题的一部分似乎是它在积极地反对我修复它的努力 我在文件末尾附近插入了一个比文件中剩余内容大的内容。在这一点之后还有一些其他的funcs,他们对它们有评论。我使用访问者为我的更新计算适当的Pos,然后用新的Pos更新其余节点,这样它们就不会失去与注释的关联,但现在注释被移动到我插入的上方 在跟踪执行之后,我发现position.go中的func(s*FileSet)PositionFor在
go/ast
向文件中添加一些内容。除了注释外,一切都很好,注释是出了名的糟糕。但问题的一部分似乎是它在积极地反对我修复它的努力
我在文件末尾附近插入了一个比文件中剩余内容大的内容。在这一点之后还有一些其他的func
s,他们对它们有评论。我使用访问者为我的更新计算适当的Pos
,然后用新的Pos
更新其余节点,这样它们就不会失去与注释的关联,但现在注释被移动到我插入的上方
在跟踪执行之后,我发现position.go中的func(s*FileSet)PositionFor
在剩余注释的位置返回0,因为它们新的Pos
超出了相关的标记.File
数据的末尾。那么,看起来我需要更新令牌.File
上的大小,但它是小写字段,所以我不能直接这样做,而且似乎没有任何方法可以为我这样做size
似乎是不可变的,只在构造时设置,这很奇怪,因为token.File
structs的其他部分可以更新
我到底该如何解决这个问题?我只是想把我的评论打印到应该打印的地方,但每次我认为我已经解决了这个问题,它背后隐藏着其他一些问题,现在我遇到了一个无法改变的问题 你能分享一个?@icza吗?这很难,因为这里涉及大量代码,分散在几个文件中,即使将其简化为简单的内容,也会涉及大量代码