Subject: bug#61871: closed (Re: bug#61871: 29.0.60; ruby-mode indentation with destructuring assignment)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 28 Feb 2023 21:03:02 +0000

Your bug report

#61871: 29.0.60; ruby-mode indentation with destructuring assignment

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
61871: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=61871
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#61871: 29.0.60; ruby-mode indentation with destructuring assignment
From: Dmitry Gutov <[email-masked]>
To: Aaron Jensen <[email-masked]>
Cc: [email-masked]
Date: Tue, 28 Feb 2023 23:01:57 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 29.1

On 28/02/2023 22:00, Aaron Jensen wrote:
> On Tue, Feb 28, 2023 at 1:37 PM Dmitry Gutov<[email-masked]>  wrote:
>> Hi!
>>
>> On 28/02/2023 18:17, Aaron Jensen wrote:
>>> I found another edge case:
>>>
>>> foo, bar = baz.(
>>>          some_arg
>>>        )
>>>
>>> Should indent to:
>>>
>>> foo, bar = baz.(
>>>     some_arg
>>> )
>> Thanks for that. This one is caused by implicit syntax which it
>> non-trivial for SMIE to handle. ruby-ts-mode, predictably, indents it fine.
>>
>> Please try this patch out:
>>
>> diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
>> index 559b62fef54..beccb8182a7 100644
>> --- a/lisp/progmodes/ruby-mode.el
>> +++ b/lisp/progmodes/ruby-mode.el
>> @@ -916,11 +916,14 @@ ruby-smie-rules
>>                (smie-indent--hanging-p))
>>           ruby-indent-level)))
>>        (`(:before . "=")
>> -     (save-excursion
>> -      (and (smie-rule-parent-p " @ ")
>> -           (goto-char (nth 1 (smie-indent--parent)))
>> -           (smie-rule-prev-p "def=")
>> -           (cons 'column (+ (current-column) ruby-indent-level -3)))))
>> +     (or
>> +      (save-excursion
>> +        (and (smie-rule-parent-p " @ ")
>> +             (goto-char (nth 1 (smie-indent--parent)))
>> +             (smie-rule-prev-p "def=")
>> +             (cons 'column (+ (current-column) ruby-indent-level -3))))
>> +      (and (smie-rule-parent-p ",")
>> +           (smie-rule-parent))))
>>        (`(:after . ,(or "?" ":"))
>>         (if ruby-after-operator-indent
>>             ruby-indent-level
> This works for me for this case, thank you.

Thanks for checking! Closing.

Subject: 29.0.60; ruby-mode indentation with destructuring assignment
From: Aaron Jensen <[email-masked]>
To: [email-masked]
Date: Tue, 28 Feb 2023 11:17:27 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

I found another edge case:

foo, bar = baz.(
       some_arg
     )

Should indent to:

foo, bar = baz.(
  some_arg
)