[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun
From: |
Theodor Thornhill |
Subject: |
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun behavior |
Date: |
Tue, 06 Dec 2022 11:36:31 +0100 |
Brian Leung <leungbk@posteo.net> writes:
> Thanks for your response!
>
> Theodor Thornhill <theo@thornhill.no> writes:
>
>>> public abstract class Class {
>>> public static interface Interface {
>>> void someMethod();
>>>
>>> void [o]therMethod();
>>> }
>>> }
>>>
>>> If point is at the "o" in otherMethod, pressing C-M-a in
>>> java-ts-mode
>>> moves point to the beginning of that line. However, in
>>> java-mode, point
>>> moves to the beginning of Interface's declaration.
>>>
>>
>> I see. To me this looks like java-ts-mode is "correct", in that
>> the
>> next step "outwards" is to the method start itself. The point
>> is in
>> fact inside the method still, IIUC.
>
> I don't actually know Java, so my expectations/intuition for what
> is "right" may be off. But from what I've read about, interfaces
> should be used to group methods with empty bodies. Body-less forms
> don't particularly feel like defuns to me, which is why I bring
> this up. Additionally, interactively using narrow-to-defun in
> java-ts-mode when point is inside the interface body produces
> unusual results:
>
>> public abstract class Class {
>> public static interface Interface {
>> void someMethod();
>> * *
>> void otherMethod();
>> *}*
>> }
Not sure I can reproduce this. I made two files:
```
package Foo;
import some.thing;
interface Foo {
void foo();
}
````
```
package Foo;
import some.thing;
public abstract class Fooo {
public static interface Foo {
void foo();
}
}
```
In the first one, when point is on the 'f' of 'foo()' I get narrowed to
that line. If I'm at column 0 of the same line, I see the whole
interface, but not the package declaration or import statement. That
seems correct to me. Also I see similar results on the other file.
What am I missing?
>>> def outer():
>>> def inner(i):
>>> return i
>>>
>>> [r]eturn 42
>>>
>>> If point is at the "r" in the outer return statement, pressing
>>> C-M-a in
>>> python-ts-mode moves point to the beginning of the line where
>>> the
>>> function "inner" is declared. However, in python-mode, point
>>> moves to
>>> the beginning of the line where "outer" is declared.
>>>
>>
>> In this case I think python-mode is correct, becase the 'inner'
>> function
>> is a sibling to the return statement, and it would make sense to
>> go
>> directly to outer.
>
> Yeah, I agree here.
Great! This sounds like a different bug report though.
Theo
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun behavior, Yuan Fu, 2022/12/07
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun behavior, Yuan Fu, 2022/12/21
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun behavior, Yuan Fu, 2022/12/21
bug#59853: 30.0.50; tree-sitter modes have unexpected beginning-of-defun behavior, Yuan Fu, 2022/12/22