unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions
@ 2022-11-27 16:33 miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-02  5:25 ` Yuan Fu
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-11-27 16:33 UTC (permalink / raw)
  To: 59633

[-- Attachment #1: Type: text/plain, Size: 847 bytes --]

1. Visit empty buffer test in fundamental mode (C-x b test RET)
2. Insert

tee << EOF
text1 $var
text2 $(echo cmd)
text3
$var2
EOF

3. Put point before "text2"
4. M-x load-library RET treesit RET
5. M-: (treesit-node-children (treesit-node-at (point) 'bash))

    => (#<treesit-node (simple_expansion) in 18-22>
        #<treesit-node (command_substitution) in 29-40>)

   Note that this list is incorrect, "$var2" at the end of heredoc is
   missing.

6. M-: (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))

   => nil

   Expected return value here is #<treesit-node (command_substitution) in 29-40>

I'm not sure if this bug is on Emacs, tree-sitter-bash or even
tree-sitter itself and I don't know how to check.

tree-sitter-bash version: 0.19.0.r19.g77cf8a7-1
tree-sitter version: 0.20.7-1

Thanks and best regards.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of  heredocs with expansions
  2022-11-27 16:33 bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-02  5:25 ` Yuan Fu
  2022-12-02 16:26   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-09 22:10 ` Yuan Fu
  2022-12-14  4:01 ` Yuan Fu
  2 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-12-02  5:25 UTC (permalink / raw)
  To: miha; +Cc: 59633


miha@kamnitnik.top writes:

> 1. Visit empty buffer test in fundamental mode (C-x b test RET)
> 2. Insert
>
> tee << EOF
> text1 $var
> text2 $(echo cmd)
> text3
> $var2
> EOF
>
> 3. Put point before "text2"
> 4. M-x load-library RET treesit RET
> 5. M-: (treesit-node-children (treesit-node-at (point) 'bash))
>
>     => (#<treesit-node (simple_expansion) in 18-22>
>         #<treesit-node (command_substitution) in 29-40>)
>
>    Note that this list is incorrect, "$var2" at the end of heredoc is
>    missing.
>
> 6. M-: (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
>
>    => nil
>
>    Expected return value here is #<treesit-node (command_substitution) in 29-40>
>
> I'm not sure if this bug is on Emacs, tree-sitter-bash or even
> tree-sitter itself and I don't know how to check.
>
> tree-sitter-bash version: 0.19.0.r19.g77cf8a7-1
> tree-sitter version: 0.20.7-1
>
> Thanks and best regards.

Thanks. This is the tree produced by tree-sitter, does it match your
expectation?

(heredoc_body
(simple_expansion $ (variable_name))
(command_substitution $(
  (command
   name: (command_name (word))
   argument: (word))
  ))
(simple_expansion $ (variable_name)))

treesit-node-at gives you the _smallest_ node at point, maybe that’s why
you didn’t see expected behavior?

Yuan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions
  2022-12-02  5:25 ` Yuan Fu
@ 2022-12-02 16:26   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-03  0:50     ` Yuan Fu
  0 siblings, 1 reply; 8+ messages in thread
From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-02 16:26 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 59633

[-- Attachment #1: Type: text/plain, Size: 2124 bytes --]

Yuan Fu <casouri@gmail.com> writes:

> miha@kamnitnik.top writes:
>
>> 1. Visit empty buffer test in fundamental mode (C-x b test RET)
>> 2. Insert
>>
>> tee << EOF
>> text1 $var
>> text2 $(echo cmd)
>> text3
>> $var2
>> EOF
>>
>> 3. Put point before "text2"
>> 4. M-x load-library RET treesit RET
>> 5. M-: (treesit-node-children (treesit-node-at (point) 'bash))
>>
>>     => (#<treesit-node (simple_expansion) in 18-22>
>>         #<treesit-node (command_substitution) in 29-40>)
>>
>>    Note that this list is incorrect, "$var2" at the end of heredoc is
>>    missing.
>>
>> 6. M-: (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
>>
>>    => nil
>>
>>    Expected return value here is #<treesit-node (command_substitution) in 29-40>
>>
>> I'm not sure if this bug is on Emacs, tree-sitter-bash or even
>> tree-sitter itself and I don't know how to check.
>>
>> tree-sitter-bash version: 0.19.0.r19.g77cf8a7-1
>> tree-sitter version: 0.20.7-1
>>
>> Thanks and best regards.
>
> Thanks. This is the tree produced by tree-sitter, does it match your
> expectation?
>
> (heredoc_body
> (simple_expansion $ (variable_name))
> (command_substitution $(
>   (command
>    name: (command_name (word))
>    argument: (word))
>   ))
> (simple_expansion $ (variable_name)))
>
> treesit-node-at gives you the _smallest_ node at point, maybe that’s why
> you didn’t see expected behavior?
>
> Yuan

The latest commit to tree-sitter-bash is

commit 4488aa41406547e478636a4fcfd24f5bbc3f2f74
Author: João P. L. Carvalho <jaopaulolc@gmail.com>
Date:   Sun Nov 27 20:39:41 2022 -0700

    Fix scanning of heredoc_body to allow empty bodies (#137).

Seems like it has fixed the problem described in the 5. step and the
tree produced by tree-sitter is now expected.

The problem in the 6. step is still present though. With point in front
of command_substitution, on would expect

    (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))

to return the command_substitution node instead of returning nil.

Thanks.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions
  2022-12-02 16:26   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-03  0:50     ` Yuan Fu
  2022-12-03  7:25       ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-12-03  0:50 UTC (permalink / raw)
  To: miha; +Cc: 59633



> On Dec 2, 2022, at 8:26 AM, miha@kamnitnik.top wrote:
> 
> Yuan Fu <casouri@gmail.com> writes:
> 
>> miha@kamnitnik.top writes:
>> 
>>> 1. Visit empty buffer test in fundamental mode (C-x b test RET)
>>> 2. Insert
>>> 
>>> tee << EOF
>>> text1 $var
>>> text2 $(echo cmd)
>>> text3
>>> $var2
>>> EOF
>>> 
>>> 3. Put point before "text2"
>>> 4. M-x load-library RET treesit RET
>>> 5. M-: (treesit-node-children (treesit-node-at (point) 'bash))
>>> 
>>>    => (#<treesit-node (simple_expansion) in 18-22>
>>>        #<treesit-node (command_substitution) in 29-40>)
>>> 
>>>   Note that this list is incorrect, "$var2" at the end of heredoc is
>>>   missing.
>>> 
>>> 6. M-: (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
>>> 
>>>   => nil
>>> 
>>>   Expected return value here is #<treesit-node (command_substitution) in 29-40>
>>> 
>>> I'm not sure if this bug is on Emacs, tree-sitter-bash or even
>>> tree-sitter itself and I don't know how to check.
>>> 
>>> tree-sitter-bash version: 0.19.0.r19.g77cf8a7-1
>>> tree-sitter version: 0.20.7-1
>>> 
>>> Thanks and best regards.
>> 
>> Thanks. This is the tree produced by tree-sitter, does it match your
>> expectation?
>> 
>> (heredoc_body
>> (simple_expansion $ (variable_name))
>> (command_substitution $(
>>  (command
>>   name: (command_name (word))
>>   argument: (word))
>>  ))
>> (simple_expansion $ (variable_name)))
>> 
>> treesit-node-at gives you the _smallest_ node at point, maybe that’s why
>> you didn’t see expected behavior?
>> 
>> Yuan
> 
> The latest commit to tree-sitter-bash is
> 
> commit 4488aa41406547e478636a4fcfd24f5bbc3f2f74
> Author: João P. L. Carvalho <jaopaulolc@gmail.com>
> Date:   Sun Nov 27 20:39:41 2022 -0700
> 
>    Fix scanning of heredoc_body to allow empty bodies (#137).
> 
> Seems like it has fixed the problem described in the 5. step and the
> tree produced by tree-sitter is now expected.
> 
> The problem in the 6. step is still present though. With point in front
> of command_substitution, on would expect
> 
>    (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
> 
> to return the command_substitution node instead of returning nil.

What’s the return value of (treesit-node-at (point)) at that point? Probably the command_substitution node, and since it doesn’t have any children, treesit-node-first-child-for-pos would return nil.

Yuan




^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions
  2022-12-03  0:50     ` Yuan Fu
@ 2022-12-03  7:25       ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 8+ messages in thread
From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-03  7:25 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 59633

[-- Attachment #1: Type: text/plain, Size: 1163 bytes --]

Yuan Fu <casouri@gmail.com> writes:

> What’s the return value of (treesit-node-at (point)) at that point?
> Probably the command_substitution node, and since it doesn’t have any
> children, treesit-node-first-child-for-pos would return nil.

(treesit-node-at (point) 'bash)
=> #<treesit-node (heredoc_body) in 12-56>

I forgot to say that point is before "text2", outside of the
command_substitution node.

> Yuan

tee << EOF
text1 $var
text2 $(echo cmd)
text3
$var2
EOF


Filling a test buffer with these contents and placing point before
"text2", we get

    (treesit-node-at (point) 'bash)
    => #<treesit-node (heredoc_body) in 12-56>

    (treesit-node-children (treesit-node-at (point) 'bash))
    => (#<treesit-node (simple_expansion) in 18-22>
        #<treesit-node (command_substitution) in 29-40>
        #<treesit-node (simple_expansion) in 47-52>)

This is now expected.

    (point)
    => 23

    (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
    => nil

This is not expected. One would expect this to return
command_substitution node, since it follows the position 23.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of  heredocs with expansions
  2022-11-27 16:33 bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-02  5:25 ` Yuan Fu
@ 2022-12-09 22:10 ` Yuan Fu
  2022-12-14  4:01 ` Yuan Fu
  2 siblings, 0 replies; 8+ messages in thread
From: Yuan Fu @ 2022-12-09 22:10 UTC (permalink / raw)
  To: miha; +Cc: 59633


<miha@kamnitnik.top> writes:

> Yuan Fu <casouri@gmail.com> writes:
>
>> What’s the return value of (treesit-node-at (point)) at that point?
>> Probably the command_substitution node, and since it doesn’t have any
>> children, treesit-node-first-child-for-pos would return nil.
>
> (treesit-node-at (point) 'bash)
> => #<treesit-node (heredoc_body) in 12-56>
>
> I forgot to say that point is before "text2", outside of the
> command_substitution node.
>
>> Yuan
>
> tee << EOF
> text1 $var
> text2 $(echo cmd)
> text3
> $var2
> EOF
>
>
> Filling a test buffer with these contents and placing point before
> "text2", we get
>
>     (treesit-node-at (point) 'bash)
>     => #<treesit-node (heredoc_body) in 12-56>
>
>     (treesit-node-children (treesit-node-at (point) 'bash))
>     => (#<treesit-node (simple_expansion) in 18-22>
>         #<treesit-node (command_substitution) in 29-40>
>         #<treesit-node (simple_expansion) in 47-52>)
>
> This is now expected.
>
>     (point)
>     => 23
>
>     (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
>     => nil
>
> This is not expected. One would expect this to return
> command_substitution node, since it follows the position 23.

Ah, I (finally) see what you mean. I agree that it should return the
command_substitution node. It seems that tree-sitter returns nil
whenever POS is not in a child node. I need to see what’s the problem
here since treesit-node-first-child-for-pos is just a think wrapper
around the C counterpart.

Yuan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of  heredocs with expansions
  2022-11-27 16:33 bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2022-12-02  5:25 ` Yuan Fu
  2022-12-09 22:10 ` Yuan Fu
@ 2022-12-14  4:01 ` Yuan Fu
  2022-12-14 15:07   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-12-14  4:01 UTC (permalink / raw)
  To: miha; +Cc: 59633


Yuan Fu <casouri@gmail.com> writes:

> <miha@kamnitnik.top> writes:
>
>> Yuan Fu <casouri@gmail.com> writes:
>>
>>> What’s the return value of (treesit-node-at (point)) at that point?
>>> Probably the command_substitution node, and since it doesn’t have any
>>> children, treesit-node-first-child-for-pos would return nil.
>>
>> (treesit-node-at (point) 'bash)
>> => #<treesit-node (heredoc_body) in 12-56>
>>
>> I forgot to say that point is before "text2", outside of the
>> command_substitution node.
>>
>>> Yuan
>>
>> tee << EOF
>> text1 $var
>> text2 $(echo cmd)
>> text3
>> $var2
>> EOF
>>
>>
>> Filling a test buffer with these contents and placing point before
>> "text2", we get
>>
>>     (treesit-node-at (point) 'bash)
>>     => #<treesit-node (heredoc_body) in 12-56>
>>
>>     (treesit-node-children (treesit-node-at (point) 'bash))
>>     => (#<treesit-node (simple_expansion) in 18-22>
>>         #<treesit-node (command_substitution) in 29-40>
>>         #<treesit-node (simple_expansion) in 47-52>)
>>
>> This is now expected.
>>
>>     (point)
>>     => 23
>>
>>     (treesit-node-first-child-for-pos (treesit-node-at (point) 'bash) (point))
>>     => nil
>>
>> This is not expected. One would expect this to return
>> command_substitution node, since it follows the position 23.
>
> Ah, I (finally) see what you mean. I agree that it should return the
> command_substitution node. It seems that tree-sitter returns nil
> whenever POS is not in a child node. I need to see what’s the problem
> here since treesit-node-first-child-for-pos is just a think wrapper
> around the C counterpart.

Seems to be tree-sitter-bash problem, I submitted an issue at
https://github.com/tree-sitter/tree-sitter-bash/issues/139

Yuan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions
  2022-12-14  4:01 ` Yuan Fu
@ 2022-12-14 15:07   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 8+ messages in thread
From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-14 15:07 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 59633-done

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

Yuan Fu <casouri@gmail.com> writes:

> Seems to be tree-sitter-bash problem, I submitted an issue at
> https://github.com/tree-sitter/tree-sitter-bash/issues/139

Thanks. As this seems to be a tree-sitter-bash problem, I'm closing this
bug.

> Yuan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-12-14 15:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-27 16:33 bug#59633: 29.0.50; tree-sitter-bash: Incorrect behaviour of heredocs with expansions miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-02  5:25 ` Yuan Fu
2022-12-02 16:26   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-03  0:50     ` Yuan Fu
2022-12-03  7:25       ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-09 22:10 ` Yuan Fu
2022-12-14  4:01 ` Yuan Fu
2022-12-14 15:07   ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors

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).