unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Aaron Jensen <aaronjensen@gmail.com>
Cc: 61017@debbugs.gnu.org
Subject: bug#61017: 29.0.60; ruby-ts-mode indents class between two lines incorrectly
Date: Wed, 25 Jan 2023 06:00:11 +0200	[thread overview]
Message-ID: <bbb2c706-a20d-389e-4b28-eb7b0d18719b@yandex.ru> (raw)
In-Reply-To: <CAHyO48y7jG7QLrk3NekuPaLDYVJFV9Az9FhB0-Zh-cyYNbpB1Q@mail.gmail.com>

On 25/01/2023 02:45, Aaron Jensen wrote:

>>>> Is it enough of an improvement?
>>>
>>> That seems to make indentation after an open def not happen:
>>>
>>> def foo
>>> bar
>>> end
>>
>> Not sure what you mean. Is that an example with an "open def"? "end"
>> seems to be closing it. In the final state, it indents correctly here.
> 
> Sorry, that's what I meant. If I do type exactly that and do not
> reindent, I end up with that though (closing with the end does not
> cause the previous line to reindent)

All right.

But if the proposed patch doesn't make things worse for this example, we 
might as well install it. Because this "unclosed def" case is distinct 
from the one you filed this bug report regarding.

>>> I applied the patch manually though, so maybe you can confirm that you
>>> see the same thing?
>>
>> If I have a buffer with just the first line:
>>
>>     def foo
>>
>> then it indeed doesn't indent. But I think that happens with or without
>> this patch?
>>
>> It's a slightly different problem: the grammar parses this code example
>> without ERROR nodes, like a full method, for some reason:
>>
>>     (program
>>      (method def body: (identifier) end))
>>
>> And the end position of the "virtual" end node stays at the previous
>> line, so our code doesn't know it's inside the method.
>>
>> I suppose we could add some tricky predicate like (is the previous node
>> a method with an "end" child that is 0 characters long), but the grammar
>> might change (we should look for any previous reported issues about this
>> behavior, or maybe ones that resulted in it), and it only happen this
>> way when there is nothing after "def xyz" in the buffer.
> 
> I wonder if this is mistaken handling of endless methods?

Those parse to nodes that look a little different (no "end"):

   (program
    (method def body: (identifier) = (integer)))

So I'm not sure.

> I can't
> think of a reason that it would parse like that. Should that be
> reported upstream?

I filed https://github.com/tree-sitter/tree-sitter-ruby/issues/234, 
let's see if there is any response.





  reply	other threads:[~2023-01-25  4:00 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-23  4:33 bug#61017: 29.0.60; ruby-ts-mode indents class between two lines incorrectly Aaron Jensen
2023-01-23 21:28 ` Dmitry Gutov
2023-01-24 14:17   ` Aaron Jensen
2023-01-24 18:53     ` Dmitry Gutov
2023-01-25  0:45       ` Aaron Jensen
2023-01-25  4:00         ` Dmitry Gutov [this message]
2023-01-25 14:22           ` Aaron Jensen
2023-01-25 15:23             ` Dmitry Gutov

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bbb2c706-a20d-389e-4b28-eb7b0d18719b@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=61017@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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).