我正在使用go/ast
向文件中添加一些内容的重写器。一切都运作良好,除了评论,go/ast
是众所周知的。但部分问题似乎是它正在积极密谋反对我修复它的努力。
我在文件末尾附近插入的内容大于文件中剩余的内容。在那之后还有其他几个func
,他们对它们有评论。我使用访问者为我的更新计算了适当的Pos
,然后使用新的Pos
更新剩余的节点,这样他们就不会失去与评论的关联,但现在评论会被移动上面我的插入!
在追踪执行后,我发现func (s *FileSet) PositionFor
中的position.go
在剩余评论的位置上返回0,因为他们的新Pos
超出了关联的token.File
数据。那么,看起来我需要更新size
上的token.File
,但它是一个小写字段,所以我不能直接这样做,并且似乎没有任何方法那会为我做的。 size
似乎是不可变的,仅在构造时设置,这是奇怪的,因为token.File
结构的其他部分可以更新。
我如何解决这个问题?我只是希望我的评论打印出他们应该的位置,但每当我认为我已经解决了问题时,其背后隐藏着一些其他问题,现在我遇到了一个不可改变的问题!