Go: cmd/gofmt: remove leading/trailing blank lines from function bodies

Created on 21 Dec 2013  路  12Comments  路  Source: golang/go

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.
Thinking

Most helpful comment

Shameless plug here for my tool I have written in the past:

https://github.com/Eun/goremovelines

All 12 comments

Comment 1:

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.

Comment 2:

How about just removing trailing blank lines? No one yet on golang-nuts or here seems to
be opposed to the idea. (And they drive me crazy.)

Comment 3:

#1 the doc is supposed to go above the function declaration anyway

Comment 4:

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:

https://github.com/Eun/goremovelines

Was this page helpful?
0 / 5 - 0 ratings