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/cmd/gopls: can't add new file to existing package #32341

Closed
muirdm opened this issue May 30, 2019 · 3 comments
Closed

x/tools/cmd/gopls: can't add new file to existing package #32341

muirdm opened this issue May 30, 2019 · 3 comments

Comments

@muirdm
Copy link

@muirdm muirdm commented May 30, 2019

On master (ce1a380) whenever I add a new file to an existing package I get a diagnostic at the first character of the new file saying " is not part of a package". As you might expect, LSP commands don't work inside the new file.

To reproduce, I just created a new file in an existing package with only the package declaration.

For example, if you have foo/a.go:

package foo

Create foo/b.go:

package foo

and you should see the error in b.go.

@gopherbot gopherbot added this to the Unreleased milestone May 30, 2019
@gopherbot gopherbot added the gopls label May 30, 2019
@muirdm
Copy link
Author

@muirdm muirdm commented Jun 3, 2019

Note that the error in b.go will go away eventually if you make an edit to a.go.

@stamblerre
Copy link
Contributor

@stamblerre stamblerre commented Jun 3, 2019

I am able to reproduce this in VSCode. Thanks for reporting.

muirdm added a commit to muirdm/tools that referenced this issue Jun 9, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to make this work:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
muirdm added a commit to muirdm/tools that referenced this issue Jun 9, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to fix the errors:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
@gopherbot
Copy link

@gopherbot gopherbot commented Jun 9, 2019

Change https://golang.org/cl/181417 mentions this issue: internal/lsp: fix errors when adding new file to existing package

muirdm added a commit to muirdm/tools that referenced this issue Jun 11, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to fix the errors:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
muirdm added a commit to muirdm/tools that referenced this issue Jun 11, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to fix the errors:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
muirdm added a commit to muirdm/tools that referenced this issue Jun 11, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to fix the errors:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
muirdm added a commit to muirdm/tools that referenced this issue Jun 11, 2019
Previously when you added a new file to an existing package, the new
file would get stuck with the "no package for file" error until you
saved the file and then made changed a different file in the
package. There were two changes required to fix the errors:

First, we need to invalidate the package cache when a new file is
added to a package so that the package will actually re-parse and
re-type check. We now notice if file names changed when updating a
package's metadata and invalidate the package cache accordingly.

Second, when dealing with overlay (unsaved) files, we need to map
the *goFile to the package even if we fail to parse the
file (e.g. the new file fails to parse when it is empty). If we don't
map it to the package, the package won't get refreshed as the file is
changed.

Fixes golang/go#32341
@golang golang locked and limited conversation to collaborators Jun 10, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

3 participants
You can’t perform that action at this time.