golang / vscode-go

Go extension for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=golang.Go
Other
3.78k stars 728 forks source link

Warning of missing fields when using build constraints #3270

Open nikpivkin opened 3 months ago

nikpivkin commented 3 months ago

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
* Run `go version` to get version of Go from _the VS Code integrated terminal_. - go version go1.21.2 darwin/arm64 * Run `gopls -v version` to get version of Gopls from _the VS Code integrated terminal_. - golang.org/x/tools/gopls v0.15.2 * Run `code -v` or `code-insiders -v` to get version of VS Code or VS Code Insiders. - 1.87.2 863d2581ecda6849923a2118d93a088b0745d9d6 arm64 * Check your installed extensions to get the version of the VS Code Go extension - v0.41.2 * Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > `Go: Locate Configured Go Tools` command. - toolsGopath: gopath: /Users/foo/go GOROOT: /usr/local/go

Share the Go related settings you have added/edited

Run Preferences: Open Settings (JSON) command to open your settings.json file. Share all the settings with the go. or ["go"] or gopls prefixes.

Workspace settings:

{
    "go.buildTags": "integration,tinygo.wasm,k8s_integration,module_integration,mage_cloudactions,wireinject,cgo"
}

Describe the bug

There are several variants of the structure for different builds: common with the constraint //go:build !tinygo.wasm and Wasm //go:build tinygo.wasm. Some methods are defined only for common builds (they will never be called in a Wasm build) and this is handled normally in IDEs like Goland or Zed but in VSCode I get a warning:

uuid.New().URN undefined (type uuid.UUID has no field or method URN)

Additional: I get the following warning for a package with a constraint for a common build:

No packages found for open file /Users/nikita/projects/trivy/pkg/uuid/uuid.go. This file may be excluded due to its build tags; try adding "-tags=" to your gopls "buildFlags" configuration See the documentation for more information on working with build tags: https://github.com/golang/tools/blob/master/gopls/doc/settings.md#buildflags-string.

Steps to reproduce the behavior:

  1. git clone git@github.com:aquasecurity/trivy.git
  2. cd trivy && code .
  3. open pkg/sbom/cyclonedx/marshal.go

Screenshots or recordings

If applicable, add screenshots or recordings to help explain your problem.

image image
adonovan commented 3 months ago

Gopls automatically selects builds based on GOOS and GOARCH tags in source files, but it does not do the same for arbitrary build tags (and it seems like a difficult problem for gopls to solve). We usually advise that you set any project-specific build tags in your LSP client configuration (e.g. settings.json).

I'm curious that Zed supports the desired feature, because it uses gopls as its Go backend. Can you tell us a little about your Zed LSP configuration?

nikpivkin commented 3 months ago

Hi @adonovan

I have specified all tags that are used in the project in the go.buildTags field (see description).

Zed has default settings, I haven't changed anything.