From: Dmitry Gutov <dgutov@yandex.ru>
To: Aaron Jensen <aaronjensen@gmail.com>
Cc: 60186@debbugs.gnu.org
Subject: bug#60186: 29.0.60; ruby-mode indentation of multi-line expressions
Date: Tue, 20 Dec 2022 17:53:31 +0200 [thread overview]
Message-ID: <8142f469-be53-a35e-24e4-27b64d59be99@yandex.ru> (raw)
In-Reply-To: <CAHyO48xLGj=eM7W4LwuN+FVcquW6vsUz6853+p1G3yAxr2Ot=w@mail.gmail.com>
On 20/12/2022 07:56, Aaron Jensen wrote:
> On Mon, Dec 19, 2022 at 11:48 PM Aaron Jensen<aaronjensen@gmail.com> wrote:
>> On Mon, Dec 19, 2022 at 9:12 PM Dmitry Gutov<dgutov@yandex.ru> wrote:
>>> On 19/12/2022 04:54, Aaron Jensen wrote:
>>>> Follow-up to bug#60110
>>> Thanks!
>>>
>>>> I prefer rather simplictic indentation for Ruby (and this appears to be
>>>> pretty common from codebases I've seen). Essentially, the rule is: If an
>>>> expression continues on another line, indent it once.
>>> FWIW, this feels a little wasteful -- working to emulate the editors
>>> which don't have much of a grammar definition, so they mostly line up
>>> things to the beginning of the previous line (plus maybe the indentation
>>> offset).
>>>
>>> But I guess that can make some experience better when working in teams.
>> The implication here is that the current indentation
>> rules are somehow objectively better. I'd argue the opposite,
>> that they have usability issues.
>>
>> 😄
>>
>> In all seriousness though,
> Sorry, I was going to say, this style of indentation is more inline
> with what I see in the wild in Ruby codebases and essentially every
> other editor I've seen. Also, enh-ruby-mode is what I'm using as a
> guide here, and it has a pretty much perfect grasp of the grammar
> since it uses the Ruby parser. It's just a simpler indentation norm.
I do believe it's "better" in the sense that can give more hints to the
user WRT to the program structure -- which, unlike in Lisp, is not
always obvious. For example, this:
some_variable = some_number + some_other_number *
some_third_number +
some_fourth_number -
some_fifth_number
conveys the implicit grouping, based on the operator precedence. It
might be less important for * vs +, but others can be more obscure.
That's not to say that it must be everyone's cup of tea, or that you
want it to look "lispy" every time. Ideally, there will always be a way
to write the code, with default indentation config, that the result
looks "mundane". E.g.
some_variable = if true
2
else
3
end
=>
some_variable =
if true
2
else
3
end
(this is also customizable)
or
some_method(foo,
bar,
baz)
=>
some_method(
foo,
bar,
baz
)
And I'll be the first to admit that the current behavior still has some
usability issues (though perhaps we'll disagree on the full list).
One example would be the previous bug report of yours, where the
existing (the current default) behavior didn't really benefit anybody much.
Another -- expressions like
some_method({
foo: bar,
tee: qux
}, zzz)
where it's not 100% obvious what TRT is, but we could probably do better.
next prev parent reply other threads:[~2022-12-20 15:53 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-19 2:54 bug#60186: 29.0.60; ruby-mode indentation of multi-line expressions Aaron Jensen
2022-12-20 2:12 ` Dmitry Gutov
2022-12-20 2:17 ` Dmitry Gutov
2022-12-20 4:48 ` Aaron Jensen
2022-12-20 5:56 ` Aaron Jensen
2022-12-20 15:53 ` Dmitry Gutov [this message]
2022-12-20 16:19 ` Dmitry Gutov
2022-12-20 17:31 ` Dmitry Gutov
2022-12-21 1:34 ` Aaron Jensen
2022-12-20 20:05 ` Aaron Jensen
2022-12-21 22:48 ` Dmitry Gutov
2022-12-22 2:31 ` Aaron Jensen
2022-12-22 21:21 ` Dmitry Gutov
2022-12-23 4:12 ` Aaron Jensen
2022-12-23 22:26 ` Dmitry Gutov
2022-12-24 0:17 ` Aaron Jensen
2022-12-24 22:47 ` Dmitry Gutov
2022-12-25 0:12 ` Aaron Jensen
2022-12-25 21:23 ` Dmitry Gutov
2022-12-25 21:29 ` bug#60321: 29.0.60; ruby-mode indentation of hash or array as first arg in multiline method call Dmitry Gutov
2022-12-25 23:46 ` Aaron Jensen
2022-12-27 1:16 ` Dmitry Gutov
2022-12-27 1:38 ` Aaron Jensen
2024-08-31 23:41 ` Aaron Jensen
2024-09-01 0:54 ` Aaron Jensen
2024-09-01 16:36 ` Dmitry Gutov
2024-09-01 19:28 ` Aaron Jensen
2024-09-02 0:19 ` Dmitry Gutov
2024-09-02 0:49 ` Aaron Jensen
2024-09-02 1:10 ` Dmitry Gutov
2024-09-02 1:56 ` Aaron Jensen
2024-09-02 19:01 ` Dmitry Gutov
2024-09-02 19:21 ` Aaron Jensen
2022-12-25 0:14 ` bug#60186: 29.0.60; ruby-mode indentation of multi-line expressions Aaron Jensen
2022-12-25 21:29 ` Dmitry Gutov
2022-12-27 1:28 ` Dmitry Gutov
2022-12-27 1:47 ` Aaron Jensen
2022-12-27 15:56 ` Dmitry Gutov
2022-12-27 16:34 ` Aaron Jensen
2022-12-27 23:04 ` Dmitry Gutov
2022-12-28 0:38 ` Aaron Jensen
2022-12-28 1:02 ` Dmitry Gutov
2022-12-28 3:47 ` Aaron Jensen
2022-12-28 12:47 ` Dmitry Gutov
2022-12-28 21:24 ` Dmitry Gutov
2022-12-29 22:59 ` Aaron Jensen
2022-12-30 15:02 ` Dmitry Gutov
2022-12-30 18:00 ` Aaron Jensen
2022-12-30 18:16 ` Aaron Jensen
2022-12-30 22:07 ` Dmitry Gutov
2022-12-31 1:11 ` Aaron Jensen
2023-01-22 3:02 ` Dmitry Gutov
2023-01-22 5:15 ` Aaron Jensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8142f469-be53-a35e-24e4-27b64d59be99@yandex.ru \
--to=dgutov@yandex.ru \
--cc=60186@debbugs.gnu.org \
--cc=aaronjensen@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.