你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.17 linux/amd64
这个问题在最新版本的发布中是否会重现?
是的
你做了什么?
- 用模式
parser.ImportsOnly|parser.ParseComments
解析以下源代码:
// Package main
package main
import (
// fmt import
_ "fmt"
_ "github.com/pkg/errors" // errors import
)
// F func
func F() {}
// B func
func B() {}
// Hello const
const Hello = "word"
func main() {
}
- 打印
*ast.File.Comments
Go Playground链接: https://play.golang.org/p/w0yK1K_q4tr
你期望看到什么?
3条评论:
"Package main\n"
"fmt import\n"
"errors import\n"
你实际看到了什么?
4条评论:
"Package main\n"
"fmt import\n"
"errors import\n"
"F func\n"
"F func\n"
是一个额外的评论,因为parser.ImportsOnly
的文档说明了stop parsing after import declarations
。然而,如果一个导入声明后面跟着没有任何注解的代码,就不会有额外的评论。例如:
// Package main
package main
import (
_ "fmt" // fmt import
)
var A = 1
// F func
func F() {}
这个bug最初是在#47436(评论)中发现的
4条答案
按热度按时间uwopmtnx1#
CC @griesemer via https://dev.golang.org/owners。
tyu7yeag2#
@ShoshinNikita 这是1.17的新特性吗?暂时把它放到待办事项中,假设它不是。
nbysray53#
我发现这个漏洞在1.17版本发布之前。
s2j5cfk04#
https://golang.org/cl/343369提到了这个问题:
go/parser: fix incorrect comment parsing