-
Notifications
You must be signed in to change notification settings - Fork 18k
x/tools/gopls: eliminate dependence on "seen files" #57558
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
Comments
Change https://go.dev/cl/459560 mentions this issue: |
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 <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: Robert Findley <[email protected]> Reviewed-by: Alan Donovan <[email protected]>
Change https://go.dev/cl/468775 mentions this issue: |
The workspace symbol handler was walking the files map ("seen files") rather than the package graph. In golang/go#57558, we endeavor to avoid any dependency on seen files, and pragmatically we will soon no longer read the entire workspace during loading. For golang/go#57558 Change-Id: Ie95a333842af24ab801bb3e314f5c00e1e5e1b0b Reviewed-on: https://go-review.googlesource.com/c/tools/+/468775 Reviewed-by: Alan Donovan <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: Robert Findley <[email protected]> gopls-CI: kokoro <[email protected]>
Change https://go.dev/cl/525616 mentions this issue: |
Great care was taken to track known directories in the snapshot without blocking in snapshot.Clone, introducing significant complexity. This complexity can be avoided by instead keeping track of observed directories as files are set in the snapshot. These directories need only be reset when files are deleted from the snapshot, which is a relatively rare event. Also rename filesMap->fileMap, and move to filemap.go, with a new unit test. This reduces some path dependence on seen files, as the set of directories is well defined and depends only on the files in the snapshot. Previously, when a file was removed, gopls called Stat to check if the directory still existed, which leads to path dependence: an add+remove was not the same as nothing at all. Updates golang/go#57558 Change-Id: I5fd89ce870fa7d8afd19471d150396b1e4ea8875 Reviewed-on: https://go-review.googlesource.com/c/tools/+/525616 Reviewed-by: Alan Donovan <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
Change https://go.dev/cl/551295 mentions this issue: |
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:
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
The text was updated successfully, but these errors were encountered: