Git Product home page Git Product logo

Comments (3)

AndrewRadev avatar AndrewRadev commented on May 18, 2024

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.

from vim-ruby.

e0da avatar e0da commented on May 18, 2024

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

from vim-ruby.

AndrewRadev avatar AndrewRadev commented on May 18, 2024

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 :).

from vim-ruby.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.