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