See https://play.golang.org/p/uwG_GFPiU13 .
I expected the literal to be reformatted like this:
package main
func main() {
_ = []struct{ a int }{
{
a: 1,
},
{
a: 2,
},
{
a: 3,
},
}
}
instead, it preserves the previous formatting.
package main
func main() {
_ = []struct{ a int }{
{
a: 1,
},
{
a: 2,
}, {
a: 3,
},
}
}
Is this intentional? Or does it make sense to keep the formatting of structs in the slice the same?
7条答案
按热度按时间mbyulnm01#
/cc @griesemer
ou6hu8tu2#
和
}, {
都是允许的。为了让不同的样式在单个声明中归为一个,我们需要跟踪大括号及其位置,然后可能需要回溯并更改标记位置。
由 Robert 决定是否执行此操作。
j2qf4p5b3#
我个人认为如果它不会给gofmt增加太多复杂性,那么这将是很好的。
2nbm6dog4#
很高兴拥有,但要正确使用却很复杂。一般来说,在接受多种格式的情况下,我们会将决定权交给用户。
x3naxklr5#
我已经在mvdan/gofumpt@5d37481实现了一个原型,如果有人想玩的话。解决方案非常简单,但我已经有一些逻辑来判断复合字面量在其元素之间是否有任何换行符。
qojgxg4l6#
感谢您对此进行工作!
我尝试了mvdan/gofumpt@5d37481,但它强制执行
在所有情况下都应用。例如,对我来说,上面的文字没有明显地被重新格式化为
。什么会被确定为一致的风格?我能想到的唯一一个是列表中第一个元素的风格会被应用到后续元素上。
c2e8gylq7#
感谢报告,@smasher164。让我们将此问题提交给 mvdan/gofumpt#36 ,因为该错误与 gofmt 无关。