Skip to content

x/tools/gopls: supress analysis/simplifycompositelit on a generated code #67733

Closed
@ohir

Description

@ohir

gopls version

Build info
----------
golang.org/x/tools/gopls v0.15.3
    golang.org/x/tools/gopls@v0.15.3 h1:zbdOidFrPTc8Bx0YrN5QKgJ0zCjyGi0L27sKQ/bDG5o=
    github.com/BurntSushi/toml@v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
    github.com/google/go-cmp@v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
    golang.org/x/exp/typeparams@v0.0.0-20221212164502-fae10dda9338 h1:2O2DON6y3XMJiQRAS1UWU+54aec2uopH3x7MAiqGW6Y=
    golang.org/x/mod@v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
    golang.org/x/sync@v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
    golang.org/x/telemetry@v0.0.0-20240209200032-7b892fcb8a78 h1:vcVnuftN4J4UKLRcgetjzfU9FjjgXUUYUc3JhFplgV4=
    golang.org/x/text@v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
    golang.org/x/tools@v0.18.1-0.20240412183611-d92ae0781217 h1:uH9jJYgeLCvblH0S+03kFO0qUDxRkbLRLFiKVVDl7ak=
    golang.org/x/vuln@v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=
    honnef.co/go/tools@v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8=
    mvdan.cc/gofumpt@v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo=
    mvdan.cc/xurls/v2@v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
go: go1.22.1

go env

# empty items skipped
GOARCH='amd64'
GOBIN='/Path/To/bin'
GOCACHE='/Volumes/TEMP/gocache'
GOENV='/Path/To/go/env'
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOMODCACHE='/Path/To/src/pkg/mod'
GONOPROXY='example.com'
GONOSUMDB='example.com'
GOOS='darwin'
GOPATH='/Path/To/src'
GOPRIVATE='example.com'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Path/To/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR='/Path/To/TEMP/go'
GOTOOLCHAIN='auto'
GOTOOLDIR='/Path/To/go/pkg/tool/darwin_amd64'
GOVCS='public:git'
GOVERSION='go1.22.3'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Path/To/project/module/go.mod'
GOWORK='/Path/To/project/go.work'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/Path/To/TEMP/go/go-build1959820345=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

I have code that has been generated with fmt.Printf("%#v",somestruct) in files that are being properly
marked as such with // Code generated with somegen DO NOT EDIT. header in the first line.
Gopls errornously suggests to simplify Printf produced literals polluting the "Problems"
pane in the IDE (while properly refusing to format file on save).

Repr:

// Code generated with somegen DO NOT EDIT.
package main

import "fmt"

type ProofOB struct{
	A [][]string
}
func main(){
	// x := ProofOB{A: [][]string{{"some value"}}}
	x := ProofOB{A: [][]string{[]string{"some value"}}}
	fmt.Printf("%#v\n",x)
}
// Result: main.ProofOB{A:[][]string{[]string{"some value"}}}

What did you see happen?

hundreds of:

[{
	"resource": "[...cut...]/generated_test.go",
	"owner": "_generated_diagnostic_collection_name_#4",
	"code": {
		"value": "default",
		"target": {
			"$mid": 1,
			"path": "/golang.org/x/tools/gopls/internal/analysis/simplifycompositelit",
			"scheme": "https",
			"authority": "pkg.go.dev"
		}
	},
	"severity": 4,
	"message": "redundant type from array, slice, or map composite literal",
	"source": "simplifycompositelit",
	"startLineNumber": 2997,
	"startColumn": 104,
	"endLineNumber": 2997,
	"endColumn": 212,
	"tags": [
		1
	]
}]

What did you expect to see?

I expected Gopls to know from the "Code generated" header that code here CAN NOT be simplified.

Editor and settings

"gopls": {  
        "ui.diagnostic.analyses": {
            "simplifycompositelit": true,
        },
        "formatting.gofumpt": true,
    },

Note: simplifycompositelit is by default true, but I had to have set it to false as a workaround now.

Logs

No response

Metadata

Metadata

Assignees

Labels

ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions