cmd/gofmt: not idempotent on line with multiple comments

6tqwzwtp  于 5个月前  发布在  Go
关注(0)|答案(4)|浏览(63)

注意,由于第二次调用gofmt会再次更改代码:

$ cat test.go
package p

func f() {
	foo(); /* one */ fooooo(); /* two */
}

$ cat test.go | gofmt
package p

func f() {
	foo() /* one */
	fooooo() /* two */
}

$ cat test.go | gofmt | gofmt
package p

func f() {
	foo()    /* one */
	fooooo() /* two */
qq24tv8q

qq24tv8q1#

仅供参考,以下是测试后的休息时间:

% go test cmd/gofmt
--- FAIL: TestAll (13.14s)
	long_test.go:88: gofmt /Users/thorn/golang/test/fixedbugs/issue22662.go not idempotent
FAIL
FAIL	cmd/gofmt	13.182s
yi0zb3m4

yi0zb3m42#

https://golang.org/cl/130377提到了这个问题:cmd/gofmt: skip gofmt idempotency check on known issue

20jt8wwn

20jt8wwn3#

坏文件测试 fixedbugs/issue22662.go (在没有 -short 的情况下在 TestAll 中运行时导致 std 库测试套件中的失败)现已跳过(CL 130377)。当此问题修复后,应重新启用对该文件的检查。

lrl1mhuk

lrl1mhuk4#

这个问题似乎是由以下代码块引起的。
go/src/go/printer/printer.go
第383行到第388行
| | ifpos.Line==next.Line { |
| | // next item is on the same line as the comment |
| | // (which must be a /*-style comment): separate |
| | // with a blank instead of a tab |
| | sep=' ' |
| | } |
当下一个标记与注解在同一行时,这会将空格字符附加到\t上,而不是换行符。然而,在格式化后,下一个标记不一定在同一行。

相关问题