Skip to content

x/tools/gopls: gopls not properly interpreting build.directoryFilters #71303

@djahandarie

Description

@djahandarie

gopls version

golang.org/x/tools/gopls v0.17.0
    golang.org/x/tools/gopls@v0.17.0 h1:yiwvxZX6lAQzZtJyDhKbGUiCepoGOEVw7E/i31JUcLE=
    github.com/BurntSushi/toml@v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs=
    github.com/google/go-cmp@v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
    golang.org/x/exp/typeparams@v0.0.0-20231108232855-2478ac86f678 h1:1P7xPZEwZMoBoz0Yze5Nx2/4pxj6nw9ZqHWXqP0iRgQ=
    golang.org/x/mod@v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
    golang.org/x/sync@v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
    golang.org/x/telemetry@v0.0.0-20241106142447-58a1122356f5 h1:TCDqnvbBsFapViksHcHySl/sW4+rTGNIAoJJesHRuMM=
    golang.org/x/text@v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
    golang.org/x/tools@v0.27.1-0.20241211153006-a83c4ee29a47 h1:dFDhAo0DFSbmpMYZcvCfIQK9q/wH3fMI8V18Gbcnm9E=
    golang.org/x/vuln@v1.0.4 h1:SP0mPeg2PmGCu03V+61EcQiOjmpri2XijexKdzv8Z1I=
    honnef.co/go/tools@v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I=
    mvdan.cc/gofumpt@v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU=
    mvdan.cc/xurls/v2@v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
go: go1.23.4

go env

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/darius/Library/Caches/go-build'
GOENV='/Users/darius/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/darius/go/pkg/mod'
GONOPROXY='github.com/[redacted]/*'
GONOSUMDB='github.com/[redacted]/*'
GOOS='darwin'
GOPATH='/Users/darius/go'
GOPRIVATE='github.com/[redacted]/*'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/darius/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.9.darwin-arm64'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/darius/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.9.darwin-arm64/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.9'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/darius/[redacted]/go.mod'
GOWORK=''
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 arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/zt/m98ktd916s16_d4xl9nq34v40000gp/T/go-build2505097657=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

In VSCode, set

  "gopls": {
    [...]
    "build.directoryFilters": ["-", "+go", "-go/example"]
    [...]
  }

And then in go/example/example.go, have a function with an unused parameter

What did you see happen?

gopls still reports unusedparams error on example.go

What did you expect to see?

I expected to see no report of unusedparams errors in example.go.

Note, if +go is removed from the build.directoryFilters paths, it no longer shows, but of course this disables gopls entirely on my codebase which is not desirable.

Based on docs, build.directoryFilters seems intended to allow excluding a subdirectory like this:

Include only project_a, but not node_modules inside it: -, +project_a, -project_a/node_modules

Editor and settings

No response

Logs

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    ToolProposalIssues describing a requested change to a Go tool or command-line program.ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.gopls/metadataIssues related to metadata loading in gopls

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions