ruby-syntax-tree / syntax_tree

Interact with the Ruby syntax tree
https://ruby-syntax-tree.github.io/syntax_tree/
MIT License
556 stars 54 forks source link

Formatting proposal: Ensure empty line between method definitions #461

Open molawson opened 2 months ago

molawson commented 2 months ago

We've been using SyntaxTree extensively for formatting in a number of our apps at work, and I recently came across something I was a bit surprised wasn't already part of the formatting rules: ensuring there's a blank line between each method definition.

Before this change, the following code would be unchanged by SyntaxTree:

def foo
end
def bar
end

After, it will be formatted like so:

def foo
end

def bar
end

I think this is a fairly uncontroversial formatting opinion (though I've certainly misjudged these before πŸ˜„). It lines up with the RuboCop default for Layout/EmptyLineBetweenDefs, which of course is disable when using the SyntaxTree RuboCop config. I stopped short of doing the same for classes and modules as method definitions seemed the most common to have in succession.

I took a swing at implementing the change, but I'm not terribly confident that this is exactly the right approach. I have run this against a few of our code bases and haven't seen any unintended changes.

Is this something you'd consider tweaking in SyntaxTree? If so, is there anything I can do differently in the implementation to help it fit in with the rest of the project?