Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/gopls: eliminate dependence on "seen files" #57558

Open
findleyr opened this issue Jan 3, 2023 · 1 comment
Open

x/tools/gopls: eliminate dependence on "seen files" #57558

findleyr opened this issue Jan 3, 2023 · 1 comment
Assignees
Labels
gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@findleyr
Copy link
Contributor

findleyr commented Jan 3, 2023

Caveat: this is an abstract issue, but sufficiently fundamental to warrant independent tracking.

In two places inside gopls, there is a notion of "previously seen" files that affects gopls behavior:

  • cache.View.knownFile, which is used to determine if a file is relevant to a given view
  • cache.snapshot.FindFile (and anything that walks the snapshot.files set), which is used to filter to relevant or active files

These notions have no intrinsic definition: by construction they are path dependent. As such, they have been a source of historical and current bugs (for example, changing configuration can invalidate the set of known files, which leads to undefined behavior). They are also a source of test flakes, which is really just a manifestation of underlying bugginess.

We should replace these with well-defined notions, on a case by case basis. For example "is a file in the workspace directory", or "is this file in a loaded package, after loading completes".

CC @adonovan @pjweinb

@findleyr findleyr added this to the gopls/v0.12.0 milestone Jan 3, 2023
@findleyr findleyr self-assigned this Jan 3, 2023
@gopherbot gopherbot added Tools This label describes issues relating to any tools in the x/tools repository. gopls Issues related to the Go language server, gopls. labels Jan 3, 2023
@gopherbot
Copy link

Change https://go.dev/cl/459560 mentions this issue: gopls/internal/regtest: avoid race in TestSwitchFromGOPATHToModuleMode

gopherbot pushed a commit to golang/tools that referenced this issue Jan 3, 2023
Fix two bugs in TestSwitchFromGOPATHToModuleMode:
- `go mod init` was run in the wrong directory.
- on-disk change notifications raced with the main.go edit, causing us
  to only encounter the problem of the previous bullet in rare cases
  where the on-disk notification won the race

I've filed golang/go#57558 to track fixing the fundamental raciness of
view changes.

Fixes golang/go#57512

Change-Id: I2b21f944377e0ba45ee7be019a28f18a334f3516
Reviewed-on: https://go-review.googlesource.com/c/tools/+/459560
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

2 participants