go/parser:使用模式'parser.ImportsOnly|parser.ParseComments'解析的文件可以在导入声明后包含注解,

xoshrz7s  于 3个月前  发布在  Go
关注(0)|答案(4)|浏览(41)

你正在使用的Go版本是什么( go version )?

$ go version
go version go1.17 linux/amd64

这个问题在最新版本的发布中是否会重现?

是的

你做了什么?

  1. 用模式 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() {
}
  1. 打印 *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(评论)中发现的

tyu7yeag

tyu7yeag2#

@ShoshinNikita 这是1.17的新特性吗?暂时把它放到待办事项中,假设它不是。

nbysray5

nbysray53#

我发现这个漏洞在1.17版本发布之前。

s2j5cfk0

s2j5cfk04#

https://golang.org/cl/343369提到了这个问题:go/parser: fix incorrect comment parsing

相关问题