GNU bug report logs -
#60186
29.0.60; ruby-mode indentation of multi-line expressions
Previous Next
Reported by: Aaron Jensen <aaronjensen <at> gmail.com>
Date: Mon, 19 Dec 2022 02:55:02 UTC
Severity: normal
Found in version 29.0.60
Fixed in version 29.1
Done: Dmitry Gutov <dgutov <at> yandex.ru>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
On 20/12/2022 06:48, Aaron Jensen wrote:
> In all seriousness though,
>
>>> Current:
>>>
>>> some_variable = some_object.
>>> some_method
>>>
>>> Desired:
>>>
>>> some_variable = some_object.
>>> some_method
>
> This one isn't quite right, maybe there was an email formatting issue.
> I'm expecting some_method to be indented by 1 level, for me it's 2:
>
> some_variable = some_object.
> some_method
Yes, that's also the "needs more work" part.
>>>
>>> Current:
>>>
>>> some_variable = some_number + some_other_number *
>>> some_third_number + some_fourth_number -
>>> some_fifth_number
>>>
>>> Desired:
>>>
>>> some_variable = some_number + some_other_number *
>>> some_third_number + some_fourth_number -
>>> some_fifth_number
>
> This looks good.
The funny thing is this case looked more difficult originally.
>> This will take some more work too. Not in the least because the
>> "Desired" forms looks illogical (at least in the context of SMIE): we're
>> already "escaping" the current syntax node to line the indentation of
>> the block to the beginning of the statement (which makes sense, at least
>> from the ergonomics POV), so why would the line break matter?
>
> Do you mean why are these different?
>
> some_variable = some_array.
> map do |x|
> x + 1
> end
>
> vs
>
> some_variable = some_array.map do |x|
> x + 1
> end
>
> It's because the end is lined up with the line opened the
> block/increased indentation. In the first example, the indented map
> line is the beginning and on the second, it's the assignment.
One might ask why it's lined up to 'map' only after it's moved to the
next line, but not in the first example.
Anyway, the important part is to choose an unambiguous algorithm, even
if it uses its own logic.
>> Take more complex cases. How much indentation will the block have after
>> some heterogeneous continuations? Is this right?
>>
>> some_variable = 4 +
>> some_array.
>> reduce do |acc, x|
>> acc + x
>> end
>
> No, there is nothing that would cause reduce to be further indented.
> It should be this:
>
> some_variable = 4 +
> some_array.
> reduce do |acc, x|
> acc + x
> end
Okay, so there should be two basic cases:
- Indent to the beginning of the statement,
- If there was a line continuation (no matter how many), indent 1 extra
level?
And maybe something related to parentheses, if used.
This bug report was last modified 2 years and 175 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.