What steps will reproduce the problem? 1. http://play.golang.org/p/Np4vGQFcqA 2. Hit Format. What is the expected output? What do you see instead? Want: Lines 6 and 13 removed. Have: No change. Please use labels and text to provide additional information. Discussed with the community in https://groups.google.com/forum/#!topic/golang-nuts/Z_s_tLTazJU Based on that feedback, I propose that gofmt: * remove trailing blank lines from function bodies * remove leading blank lines when the function declaration is a single line If this (or some variant thereof) gets an official blessing, I'd be happy to implement.
I sometimes write block comments for functions like http://play.golang.org/p/Nsovaj5c7j. I find the leading blank line helps separate it from the code, much like I would have a leading blank line before a block comment when not at the head of a function. It also makes it easier to use my editors wrap paragraph functionality. I would be slightly to somewhat annoyed if gofmt removed the line.
At the moment, gofmt doesn't distinguish between a function body and a block inside a
function (for the purpose of these empty lines) - though it could. At least for inner
blocks, sometimes it is desired to have extra empty lines as in:
if ... {
a lot of code here
a lot of code here
a lot of code here
a lot of code here
} else {
a lot of code here
a lot of code here
a lot of code here
a lot of code here
}
to highlight the structure of the if.
_Labels changed: added release-none, repo-main._
_Owner changed to @griesemer._
_Status changed to Thinking._
Thoughts on this one now that some time has passed @griesemer?
I am still surprised when gofmt leaves leading/trailing newlines in function bodies.
It's not a huge deal but removing them seems consistent with other gofmt newline behavior.
@calmh this reply is almost four years late, but have you considered doing:
func Foo() int {
//
// This function frobbles integers into other integers by means of
// a quux filter. The filter is five legged.
I have seen a similar technique used in the Go tree, to have function godocs that leave an empty trailing line, yet are still attached to the function:
// Foo does amazing stuff, and this godoc is very long.
//
func Foo() int {
Although it does seem safer to start by just removing trailing empty lines. A separate issue could be opened about leading empty lines.
Looking at my code I don't appear to write comments like that any more. This could be an effect of my editor becoming smarter at paragraph-wrapping just the comment and not the adjacent code, or my taste just evolved. Regardless, I no longer care. :)
It would be great to make sure there is one new line between things like imports and const and top level var and functions definitions too.
@mmwtsn Sorry, this has not been a priority. I agree it would be nice to fix this.
Marked for 1.13 so this gets some attention.
Cross-reference to @mvdan's https://github.com/mvdan/gofumpt that does that (among other nice things).
Shameless plug here for my tool I have written in the past:
Most helpful comment
Shameless plug here for my tool I have written in the past:
https://github.com/Eun/goremovelines