vscode-go icon indicating copy to clipboard operation
vscode-go copied to clipboard

No support for `"editor.formatOnSaveMode":` `"modifications"` and `"modificationsIfAvailable"`

Open Malix-Labs opened this issue 1 year ago • 5 comments

What version of Go, VS Code & VS Code Go extension are you using?

Version Information
  • Run go version to get version of Go from the VS Code integrated terminal.
  • Run gopls -v version to get version of Gopls from the VS Code integrated terminal.
  • Run code -v or code-insiders -v to get version of VS Code or VS Code Insiders.
  • Check your installed extensions to get the version of the VS Code Go extension
  • Run Ctrl+Shift+P (Cmd+Shift+P on Mac OS) > Go: Locate Configured Go Tools command.

Share the Go related settings you have added/edited

Run Preferences: Open Settings (JSON) command to open your settings.json file. Share all the settings with the go. or ["go"] or gopls prefixes.

	"gopls": {},


	"[go]": {
		"editor.defaultFormatter": "golang.go",
		"editor.formatOnSave": true,
		"editor.formatOnSaveMode":
			"file", // (default)
			// "modifications" // BUG: DOESN'T FORMAT
			// "modificationsIfAvailable" // BUG: USES "modifications" INSTEAD OF "file"
	},

https://github.com/Malix-off/vscode-issues-203463/blob/4c506f5c9fedbd12d0295455675a63c1f45f1591/.vscode/settings.json#L8-L17

Describe the bug

"editor.formatOnSaveMode": "modifications" is broken anywhere & "editor.formatOnSaveMode": "modificationsIfAvailable" relies on modification anyway

Steps to reproduce the behavior:

  1. Clone https://github.com/Malix-off/vscode-issues-203463 I provided a dev container config
  2. Disable every extension except golang.go.
  3. Test with "editor.formatOnSaveMode": "file"
    1. Make https://github.com/Malix-off/vscode-issues-203463/blob/master/main.go unformatted (for exemple, add a tabulation before L3)
    2. Save
    3. Check results (currently works)
  4. Test with "editor.formatOnSaveMode": "modifications"
    1. Make https://github.com/Malix-off/vscode-issues-203463/blob/master/main.go unformatted (for exemple, add a tabulation before L3)
    2. Save
    3. Check results (currently doesn't work)
  5. Test with "editor.formatOnSaveMode": "modificationsIfAvailable"
    1. Make https://github.com/Malix-off/vscode-issues-203463/blob/master/main.go unformatted (for exemple, add a tabulation before L3)
    2. Save
    3. Check results (currently call "modifications", thus doesn't work)

Malix-Labs avatar Feb 15 '24 15:02 Malix-Labs

VS Code Go doesn't support formatOnSaveMode: "modifications". Formatting uses the same logic as gofmt, which operates on whole files at a time.

Marking this as a feature request, but it is realistically unlikely to be implemented any time soon, given that so much relies on preserving gofmt'edness for the entire file.

findleyr avatar Feb 15 '24 21:02 findleyr

Understandable.

There sure would be a way to make it so modificationsIfAvailable would chose file instead of crashing on modifications (otherwise there would be no point in this option)

Moreover, there is a way in the VSCode API to make extensions enforce external settings defaults, and would be great to use it for

    [go]: {
        "editor.formatOnSaveMode": "modifications"
    }

Until modificationsIfAvailable is fixed

Malix-Labs avatar Feb 15 '24 21:02 Malix-Labs

@Malix-off I'm not sure. CC @hyangah, who may know.

findleyr avatar Feb 15 '24 21:02 findleyr

With Go, "editor.formatOnSaveMode": "modificationsIfAvailable" is missleading and break formatting.

It should possible to differentiate from file and modification, at least, thus making it possible to use file instead of modifications when using modificationsIfAvailable.

By the way, my initial issue was more to address a bug report about modificationsIfAvailable chosing modifications instead of file than to feature request modifications to work (which would be a feature request).

References

see https://github.com/microsoft/vscode/issues/203463#issuecomment-1918864999

Malix-Labs avatar Feb 15 '24 21:02 Malix-Labs

Poke @findleyr

This issue is not a feature request but a bug report

See https://github.com/golang/vscode-go/issues/3174#issuecomment-1947364694

Malix-Labs avatar Mar 17 '24 16:03 Malix-Labs