Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

Indent continuation lines inside argument lists #19

Open
now opened this Issue Oct 28, 2010 · 3 comments

Comments

Projects
None yet
3 participants
Member

now commented Oct 28, 2010

a(bcd.
    gef)

instead of

a(bcd.
  gef)

that is, indent continuation lines inside parentheses.

Member

AndrewRadev commented Aug 26, 2011

I'm not sure if having such continuations inside argument lists is a good idea at all. The example you've given shows the problem clearly, but why the need to split the method invocation anyway? Method call too long? Why not do something like this instead:

example = a(
  bcd.gef
)

Regardless, I've created a branch called continuation-indent-tweaks. I think I managed to get it working, but there's an annoying side effect. You see, this works just like you specified:

a(bcd.
    gef)

Unfortunately, so does this:

a(bcd,
    gef)

The reason is that I'm using the s:non_bracket_continuation_regex pattern to match the line. It's an issue, because the very reason for having round braces indented in such a way (as far as I can tell) is aligning the arguments like so:

example = foo(:one => :two,
              :three => :four)

So, the question is, where do we draw the line? Do we exclude the comma in particular? This would probably mean having yet another "continuation" regex. Also, I really think that regardless of what we do, using line continuations within argument lists is never going to look good and defeats the purpose of the hanging indent in this case.

Yes. The reason that you'd do this is that it's too long for one line. This example is contrived, but succinct and plain. I noticed the problem when breaking a very long nested line across lines.

Expected

  def foo
    bar(
      thing
        .stuff
    )
  end

Actual

  def foo
    bar(
      thing
      .stuff
    )
  end
Member

AndrewRadev commented Jun 14, 2015

That's a reasonable example, I guess. Personally, I'd just extract thing.stuff to a variable before handing it to bar :). Vim-ruby has trouble handling complicated nested structures like this, there's a lot of edge cases and it's hard to tell them apart.

This is a big reason why I'm reluctant to try working on this -- it would be really hard to implement without breaking something else. And, again, it just seems like a really simple solution in cases like this would be to extract some variables instead of trying to cram everything into a single call. I know that it doesn't solve the actual problem of "vim-ruby doesn't indent this case right", but it should solve your problem until some day when we restructure the code to make stuff like this easier to handle :).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment