-
Notifications
You must be signed in to change notification settings - Fork 17.8k
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: format feature doesn't follow goimports
#33587
Comments
This is intentional. In If you would like to manually organize imports, you can run the organize imports source action (Ctrl + Shift + P -> Source Action -> Organize Imports). It will only be available if your imports are incomplete. Furthermore, if you see a diagnostic indicating that you are using a package that has not been imported, we will offer you a quick fix suggestion so that you can automatically import it (just hover over the place with the error and select "quick fix"). |
Maybe let others say their word instead of just closing all my issues? I believe you are very wrong with that approach. At least it's non-professional. There was a setting both in Sourcegraph's |
I apologize for closing your issue prematurely, but you are welcome to continue commenting if you feel I have made a mistake. Triaging a large number of issues is a difficult task, and I typically prefer to close an issue if I feel I have answered a question. As I explained in my comment, I have re-opened this issue so that we can continue the discussion. |
I very much like the fact that with Example: I'm debugging and I add a fmt.Println() statement temporarily; |
There are no extra manual steps. |
This setting was also available in both |
I don't think the formatting provider has never been configurable, the save hook was. Most people chose a save hook that did both formatting and something else, of which the most common by far was goimports which both formats and fixes imports. We chose to correctly split that functionality at the language server level so that editor integrations could choose how to combine the bits into a good user experience. Alt-Shift-F is a key binding that is bound to formatting (without saving) by default, which in language server implementations triggers the formatting calls. It would be technically wrong for a language server implementation to do more than formatting in a format call. If you want a function in your editor that triggers both formatting and import fixing, then you need to ask for that feature in your editor plugin, and you can bind it to any key you like, that is not a gopls feature. |
That's wrong. See screenshot above, how it's done by VS Code without |
Apologies if this has been asked, but is it configurable via |
Yes, that's #32049. |
Now that I've fixed #30843, I'm taking a look at this issue. I've read through it a couple times and I don't see anything left that's actionable. As discussed above, LSP defines what formatting means, and we don't want to cause problems for any LSP clients by violating their expectations. Ultimately editors have control over the UI, and it seems reasonable to me that VSCode could offer a shortcut that both formatted and organized imports. @inliquid: Judging by the lack of traffic on this issue, this seems to be a problem specific to your workflow. That doesn't necessarily mean we shouldn't fix it, but it would help if you explained why it's important to you rather than just saying that gopls provides a "degraded user experience". In particular, it's unclear to me why you can't simply save the file to trigger formatting and import organization. |
@heschik I think it was explained pretty much clear. PS: I'm a user of both Goland and VS Code. And last becomes less over time. Maybe that is where your "traffic" goes? |
Okay. I can't figure out anything to do here, so I'm going to close the issue. If GoLand works well for you, then by all means stick with that. |
This is more an advice for others, who still trying to use VS Code with |
Imports are instead handled by the gopls language server: golang/go#33587 (comment)
Imports are instead handled by the gopls language server: golang/go#33587 (comment)
Imports are instead handled by the gopls language server: golang/go#33587 (comment)
* Enable Codespaces - add default Go files Codespaces[1] allows us to use a remote vscode environment embedded in the browser in GitHub[1] This commit adds the pre-built container configuration[2] for Go[3]. We can customise this configuration as we wish in future commits. [1] https://github.com/features/codespaces/ [2] https://docs.github.com/en/github/developing-online-with-codespaces/configuring-codespaces-for-your-project#using-a-pre-built-container-configuration [3] https://github.com/microsoft/vscode-dev-containers/tree/master/containers/go * Suppress/fix devcontainer Dockerfile warnings These were hadolint warnings, and there were three of them, all on .devcontainer/Dockerfile#L17: DL3003 Use WORKDIR to switch to a directory DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>` DL3015 Avoid additional packages by specifying `--no-install-recommends` Suppressed the warnings apart from the DL3015 one, which was easy to fix. Not fixing the other warnings (for now anyway) as this Dockerfile is code that has been lifted and shifted from the `.devcontainer/Dockerfile` in: https://github.com/microsoft/vscode-dev-containers/tree/master/containers/go * Update module settings to "on" as we use modules See: https://dev.to/maelvls/why-is-go111module-everywhere-and-everything-about-go-modules-24k * Add shellcheck vscode extension to devcontainer https://www.shellcheck.net/ https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck * Use vscode go language server on devcontainer https://github.com/golang/vscode-go/blob/master/docs/gopls.md * Stop installing go dependencies on devcontainer There is no need to install them as we are using go modules - see: microsoft/vscode-go#2836 * Set vscode editor go tabsize to correct size of 8 See: microsoft/vscode-go#2479 (comment) * Use golangci-lint for vscode devcontainer linting https://github.com/golangci/golangci-lint * No longer install Guru on devcontainer It does not support Go modules: https://github.com/golang/vscode-go/blob/master/docs/tools.md#guru * Remove unnecessary gorename from devcontainer Not needed when using go modules and gopls language server: https://github.com/golang/vscode-go/blob/master/docs/tools.md#gorename * Remove unnecessary godoctor from devcontainer It is not needed when using go modules and the gopls language server: https://github.com/golang/vscode-go/blob/master/docs/tools.md#godoctor * Remove unnecessary goimports from devcontainer Imports are instead handled by the gopls language server: golang/go#33587 (comment) * Remove unnecessary golint from devcontainer Not needed as we are using golangci-lint * Remove unnecessary gotests from devcontainer gotests autogenerates table tests boilerplate code. We don't need this for this project. * Remove unnecessary goplay module from devcontainer We don't need this functionality: https://github.com/haya14busa/goplay/ * Remove unnecessary gometalinter from devcontainer Not needed as we are using golangci-lint for linting. * Remove unnecessary impl module from devcontainer It does not have support for go modules: golang/go#37537 * Remove unnecessary fillstruct from devcontainer fillstruct fills a struct literal with default values[1] This functionality is now available in the gopls language server[2] [1] https://github.com/davidrjenni/reftools/tree/master/cmd/fillstruct [2] golang/go#37576 (comment) * Add comment to explain why gopkgs is still needed It is still needed even with gopls: microsoft/vscode-go#3050 (comment) * Fix installation of golangci-lint on devcontainer Prior to this commit, vscode was saying "Analysis tools missing" and prompting to install it. Fix was to install golangci-lint via go get, as per: golangci/golangci-lint#1037 (comment) * Remove unnecessary gogetdoc from devcontainer Similar functionality is available in the gopls language server: fatih/vim-go#2808 (comment) * Remove unnecessary revive linter from devcontainer We are using golangci-lint for linting, so no need for revive. * Remove unnecessary go-tools from devcontainer go-tools primarily contains staticcheck, which we don't need as we are using golangci-lint for linting. * Output go version after building devcontainer Doing this just to provide assurance that the container has started successfully, after building. * Move settings which are not container-specific The guideline for`devcontainer.json` settings is that they should only contain settings which _must_ be be changed in a container (e.g. absolute paths)[1]. Moved the other settings to `.vscode/settings.json` so that they are more visible, and easier to use when working locally (i.e. not in a container). [1] microsoft/vscode-remote-release#874 (comment) * Up tests timeout as tests are slower on container The tests seem to run much slower (c. 100 seconds compared to c. 50 seconds) when running on a remote container, compared to locally. Will investigate to see if this is the same when running on Codespaces. If the tests are taking 100 seconds we may need to create an issue to speed them up. * Add recommended vscode go settings As per the recommendations at: https://github.com/golang/tools/blob/master/gopls/doc/vscode.md * Set dark colour theme for vscode in devcontainer * Set devcontainer vscode to autosave after 500ms Adding these settings to the devcontainer settings file rather than the vscode settings file, as we want them to apply at the machine level. https://code.visualstudio.com/docs/editor/codebasics#_save-auto-save
For example, here is what imports block looks like in VS Code after pressing
Alt-Shift-F
(formatting) with enabledgopls
:And here is what it looks like after pressing
Ctrl-S
(forcefully save file):For p.2, these options are enabled for
gopls
:I'd like to have an ability to configure
gopls
to followgoimports
style when formatting the file or to have this behavior as default.Related:
If I remove
fmt
dependency from code, but leave it in imports section, formatting will not removefmt
:The text was updated successfully, but these errors were encountered: