ruby-syntax-tree / syntax_tree

Interact with the Ruby syntax tree

Home Page:https://ruby-syntax-tree.github.io/syntax_tree/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Block with long list of block vars doesn't get split onto multiple lines

dom-binti opened this issue · comments

Blocks with a long list of vars doesn't get split. Eg:

query do |long_arg:, longer_arg:, longerest_arg:, longerester_arg:, very_long_long_long_arg:|
  foo
end

isn't changed when run through stree format.

I started by writing my own plugin for BlockVar adding a group and a couple breakable_emptys, which works and produces output that conforms with line length:

query do |
  long_arg:,
  longer_arg:,
  longerest_arg:,
  longerester_arg:,
  very_long_long_long_arg:
|
  foo
end

The plugin has an issue though with blocks passed to methods with their own long list of args. In its current state, syntax_tree formats it like this:

foo(
  argument,
  argument,
  argument,
  argument,
  argument,
  argument,
  argument,
) { |val| bar }

With the plugin I wrote, that ends up being formatted as

foo(argument, argument, argument, argument, argument, argument, argument) do |
  val
|
  bar
end

presumably because the block var groups are the outermost, and therefore get split first.

Is there a way to tell syntax_tree to break the method call before breaking the block vars?