all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter
@ 2022-12-31 14:53 Wilhelm Kirschbaum
  2022-12-31 16:37 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Wilhelm Kirschbaum @ 2022-12-31 14:53 UTC (permalink / raw)
  To: 60453


With the following code without tree-sitter library:

(defvar elixir-ts-mode--treesit-range-rules
  (treesit-range-rules
   :embed 'heex
   :host 'elixir
   '((sigil (sigil_name) @name (:match "^[H]$" @name) 
   (quoted_content)
  @heex))))

upon loading the mode I get the following error:

treesit-range-rules: Symbol’s function definition is void:
treesit-query-compile

This can easily be mitigated with (when (treesit-available-p)...) 
but
think it should function similar to how (treesit-font-lock-rules 
work.

Wilhelm





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

* bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter
  2022-12-31 14:53 bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter Wilhelm Kirschbaum
@ 2022-12-31 16:37 ` Eli Zaretskii
  2022-12-31 16:50   ` Wilhelm Kirschbaum
  2023-01-02  0:19 ` Yuan Fu
  2023-01-17  9:41 ` Yuan Fu
  2 siblings, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2022-12-31 16:37 UTC (permalink / raw)
  To: Wilhelm Kirschbaum; +Cc: 60453

> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
> Date: Sat, 31 Dec 2022 16:53:08 +0200
> 
> 
> With the following code without tree-sitter library:
> 
> (defvar elixir-ts-mode--treesit-range-rules
>   (treesit-range-rules
>    :embed 'heex
>    :host 'elixir
>    '((sigil (sigil_name) @name (:match "^[H]$" @name) 
>    (quoted_content)
>   @heex))))
> 
> upon loading the mode I get the following error:
> 
> treesit-range-rules: Symbol’s function definition is void:
> treesit-query-compile
> 
> This can easily be mitigated with (when (treesit-available-p)...)
> but think it should function similar to how (treesit-font-lock-rules
> work.

Why does it make sense to protect treesit.el's code with
treesit-available-p?  You aren't supposed to use treesit.el functions
when the tree-sitter library is not available.  IOW, Lisp programs
that want to use treesit-range-rules and other functions from
treesit.el should make the treesit-available-p test _before_ that.





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

* bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter
  2022-12-31 16:37 ` Eli Zaretskii
@ 2022-12-31 16:50   ` Wilhelm Kirschbaum
  2022-12-31 17:05     ` Eli Zaretskii
  0 siblings, 1 reply; 7+ messages in thread
From: Wilhelm Kirschbaum @ 2022-12-31 16:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 60453


Eli Zaretskii <eliz@gnu.org> writes:

>> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>> Date: Sat, 31 Dec 2022 16:53:08 +0200
>> 
>> 
>> With the following code without tree-sitter library:
>> 
>> (defvar elixir-ts-mode--treesit-range-rules
>>   (treesit-range-rules
>>    :embed 'heex
>>    :host 'elixir
>>    '((sigil (sigil_name) @name (:match "^[H]$" @name) 
>>    (quoted_content)
>>   @heex))))
>> 
>> upon loading the mode I get the following error:
>> 
>> treesit-range-rules: Symbol’s function definition is void:
>> treesit-query-compile
>> 
>> This can easily be mitigated with (when 
>> (treesit-available-p)...)
>> but think it should function similar to how 
>> (treesit-font-lock-rules
>> work.
>
> Why does it make sense to protect treesit.el's code with
> treesit-available-p?  You aren't supposed to use treesit.el 
> functions
> when the tree-sitter library is not available.  IOW, Lisp 
> programs
> that want to use treesit-range-rules and other functions from
> treesit.el should make the treesit-available-p test _before_ 
> that.

Okay, that makes sense.  I just saw this comment on

;; treesit.el#618
(defun treesit-font-lock-rules (&rest query-specs)
  ...
  ;; Other tree-sitter function don't tend to be called unless
  ;; tree-sitter is enabled, which means tree-sitter must be 
  compiled.
  ;; But this function is usually call in `defvar' which runs
  ;; regardless whether tree-sitter is enabled.  So we need this
  ;; guard.
  (when (treesit-available-p)

As treesit-range-rules also gets called with defvar and it is a 
consistency
issue.  I think the reason why this has not popped up before is 
that no
other modes I have seen uses treesit-range-rules yet and think it 
will
probably catch people off guard in the future.






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

* bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter
  2022-12-31 16:50   ` Wilhelm Kirschbaum
@ 2022-12-31 17:05     ` Eli Zaretskii
  2022-12-31 17:08       ` Wilhelm Kirschbaum
  0 siblings, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2022-12-31 17:05 UTC (permalink / raw)
  To: Wilhelm Kirschbaum; +Cc: 60453

> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
> Cc: 60453@debbugs.gnu.org
> Date: Sat, 31 Dec 2022 18:50:31 +0200
> 
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
> >> Date: Sat, 31 Dec 2022 16:53:08 +0200
> >> 
> >> 
> >> With the following code without tree-sitter library:
> >> 
> >> (defvar elixir-ts-mode--treesit-range-rules
> >>   (treesit-range-rules
> >>    :embed 'heex
> >>    :host 'elixir
> >>    '((sigil (sigil_name) @name (:match "^[H]$" @name) 
> >>    (quoted_content)
> >>   @heex))))
> >> 
> >> upon loading the mode I get the following error:
> >> 
> >> treesit-range-rules: Symbol’s function definition is void:
> >> treesit-query-compile
> >> 
> >> This can easily be mitigated with (when 
> >> (treesit-available-p)...)
> >> but think it should function similar to how 
> >> (treesit-font-lock-rules
> >> work.
> >
> > Why does it make sense to protect treesit.el's code with
> > treesit-available-p?  You aren't supposed to use treesit.el 
> > functions
> > when the tree-sitter library is not available.  IOW, Lisp 
> > programs
> > that want to use treesit-range-rules and other functions from
> > treesit.el should make the treesit-available-p test _before_ 
> > that.
> 
> Okay, that makes sense.  I just saw this comment on
> 
> ;; treesit.el#618
> (defun treesit-font-lock-rules (&rest query-specs)
>   ...
>   ;; Other tree-sitter function don't tend to be called unless
>   ;; tree-sitter is enabled, which means tree-sitter must be 
>   compiled.
>   ;; But this function is usually call in `defvar' which runs
>   ;; regardless whether tree-sitter is enabled.  So we need this
>   ;; guard.
>   (when (treesit-available-p)
> 
> As treesit-range-rules also gets called with defvar and it is a
> consistency issue.  I think the reason why this has not popped up
> before is that no other modes I have seen uses treesit-range-rules
> yet and think it will probably catch people off guard in the future.

It's up to Yuan: if he thinks this is a good idea, he should feel free
to add that test.  But it's slippery slope, IMNSHO: we will very soon
find ourselves adding such tests to every treesit.el function, just
because some code somewhere calls that function without a prior test.
IOW, IMO a single case of such callers is not enough to add a test.
But that's me.





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

* bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter
  2022-12-31 17:05     ` Eli Zaretskii
@ 2022-12-31 17:08       ` Wilhelm Kirschbaum
  0 siblings, 0 replies; 7+ messages in thread
From: Wilhelm Kirschbaum @ 2022-12-31 17:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 60453


Eli Zaretskii <eliz@gnu.org> writes:

>> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>> Cc: 60453@debbugs.gnu.org
>> Date: Sat, 31 Dec 2022 18:50:31 +0200
>> 
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> >> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>> >> Date: Sat, 31 Dec 2022 16:53:08 +0200
>> >> 
>> >> 
>> >> With the following code without tree-sitter library:
>> >> 
>> >> (defvar elixir-ts-mode--treesit-range-rules
>> >>   (treesit-range-rules
>> >>    :embed 'heex
>> >>    :host 'elixir
>> >>    '((sigil (sigil_name) @name (:match "^[H]$" @name) 
>> >>    (quoted_content)
>> >>   @heex))))
>> >> 
>> >> upon loading the mode I get the following error:
>> >> 
>> >> treesit-range-rules: Symbol’s function definition is void:
>> >> treesit-query-compile
>> >> 
>> >> This can easily be mitigated with (when 
>> >> (treesit-available-p)...)
>> >> but think it should function similar to how 
>> >> (treesit-font-lock-rules
>> >> work.
>> >
>> > Why does it make sense to protect treesit.el's code with
>> > treesit-available-p?  You aren't supposed to use treesit.el 
>> > functions
>> > when the tree-sitter library is not available.  IOW, Lisp 
>> > programs
>> > that want to use treesit-range-rules and other functions from
>> > treesit.el should make the treesit-available-p test _before_ 
>> > that.
>> 
>> Okay, that makes sense.  I just saw this comment on
>> 
>> ;; treesit.el#618
>> (defun treesit-font-lock-rules (&rest query-specs)
>>   ...
>>   ;; Other tree-sitter function don't tend to be called unless
>>   ;; tree-sitter is enabled, which means tree-sitter must be 
>>   compiled.
>>   ;; But this function is usually call in `defvar' which runs
>>   ;; regardless whether tree-sitter is enabled.  So we need 
>>   this
>>   ;; guard.
>>   (when (treesit-available-p)
>> 
>> As treesit-range-rules also gets called with defvar and it is a
>> consistency issue.  I think the reason why this has not popped 
>> up
>> before is that no other modes I have seen uses 
>> treesit-range-rules
>> yet and think it will probably catch people off guard in the 
>> future.
>
> It's up to Yuan: if he thinks this is a good idea, he should 
> feel free
> to add that test.  But it's slippery slope, IMNSHO: we will very 
> soon
> find ourselves adding such tests to every treesit.el function, 
> just
> because some code somewhere calls that function without a prior 
> test.
> IOW, IMO a single case of such callers is not enough to add a 
> test.
> But that's me.

Okay, I will add the checks before defvar anyways to keep things
consistent on my side.  It does make more sense to me just to not 
have the
guards in the first place as it creates false expectation they 
will be
everywhere.





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

* bug#60453: 29.0.60; treesit-range-rules throw an error without  tree-sitter
  2022-12-31 14:53 bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter Wilhelm Kirschbaum
  2022-12-31 16:37 ` Eli Zaretskii
@ 2023-01-02  0:19 ` Yuan Fu
  2023-01-17  9:41 ` Yuan Fu
  2 siblings, 0 replies; 7+ messages in thread
From: Yuan Fu @ 2023-01-02  0:19 UTC (permalink / raw)
  To: Wilhelm; +Cc: Eli Zaretskii, 60453


Wilhelm Kirschbaum <wkirschbaum@gmail.com> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>>> Cc: 60453@debbugs.gnu.org
>>> Date: Sat, 31 Dec 2022 18:50:31 +0200
>>> Eli Zaretskii <eliz@gnu.org> writes:
>>>  >> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>>> >> Date: Sat, 31 Dec 2022 16:53:08 +0200
>>> >>  >>  >> With the following code without tree-sitter library:
>>> >>  >> (defvar elixir-ts-mode--treesit-range-rules
>>> >>   (treesit-range-rules
>>> >>    :embed 'heex
>>> >>    :host 'elixir
>>> >>    '((sigil (sigil_name) @name (:match "^[H]$" @name)  >>
>>> (quoted_content)
>>> >>   @heex))))
>>> >>  >> upon loading the mode I get the following error:
>>> >>  >> treesit-range-rules: Symbol’s function definition is void:
>>> >> treesit-query-compile
>>> >>  >> This can easily be mitigated with (when  >>
>>> (treesit-available-p)...)
>>> >> but think it should function similar to how  >>
>>> (treesit-font-lock-rules
>>> >> work.
>>> >
>>> > Why does it make sense to protect treesit.el's code with
>>> > treesit-available-p?  You aren't supposed to use treesit.el  >
>>> functions
>>> > when the tree-sitter library is not available.  IOW, Lisp  >
>>> programs
>>> > that want to use treesit-range-rules and other functions from
>>> > treesit.el should make the treesit-available-p test _before_  >
>>> that.
>>> Okay, that makes sense.  I just saw this comment on
>>> ;; treesit.el#618
>>> (defun treesit-font-lock-rules (&rest query-specs)
>>>   ...
>>>   ;; Other tree-sitter function don't tend to be called unless
>>>   ;; tree-sitter is enabled, which means tree-sitter must be
>>> compiled.
>>>   ;; But this function is usually call in `defvar' which runs
>>>   ;; regardless whether tree-sitter is enabled.  So we need   this
>>>   ;; guard.
>>>   (when (treesit-available-p)
>>> As treesit-range-rules also gets called with defvar and it is a
>>> consistency issue.  I think the reason why this has not popped up
>>> before is that no other modes I have seen uses treesit-range-rules
>>> yet and think it will probably catch people off guard in the
>>> future.
>>
>> It's up to Yuan: if he thinks this is a good idea, he should feel
>> free
>> to add that test.  But it's slippery slope, IMNSHO: we will very
>> soon
>> find ourselves adding such tests to every treesit.el function, just
>> because some code somewhere calls that function without a prior
>> test.
>> IOW, IMO a single case of such callers is not enough to add a test.
>> But that's me.
>
> Okay, I will add the checks before defvar anyways to keep things
> consistent on my side.  It does make more sense to me just to not have
> the
> guards in the first place as it creates false expectation they will be
> everywhere.

I wonder if we should remove that guard in treesit-font-lock-rules... It
looked like a good idea at the time, but now I can see it creating
confusion going forward.

Yuan





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

* bug#60453: 29.0.60; treesit-range-rules throw an error without  tree-sitter
  2022-12-31 14:53 bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter Wilhelm Kirschbaum
  2022-12-31 16:37 ` Eli Zaretskii
  2023-01-02  0:19 ` Yuan Fu
@ 2023-01-17  9:41 ` Yuan Fu
  2 siblings, 0 replies; 7+ messages in thread
From: Yuan Fu @ 2023-01-17  9:41 UTC (permalink / raw)
  To: Wilhelm; +Cc: Eli Zaretskii, 60453


Yuan Fu <casouri@gmail.com> writes:

> Wilhelm Kirschbaum <wkirschbaum@gmail.com> writes:
>
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>>>> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>>>> Cc: 60453@debbugs.gnu.org
>>>> Date: Sat, 31 Dec 2022 18:50:31 +0200
>>>> Eli Zaretskii <eliz@gnu.org> writes:
>>>>  >> From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
>>>> >> Date: Sat, 31 Dec 2022 16:53:08 +0200
>>>> >>  >>  >> With the following code without tree-sitter library:
>>>> >>  >> (defvar elixir-ts-mode--treesit-range-rules
>>>> >>   (treesit-range-rules
>>>> >>    :embed 'heex
>>>> >>    :host 'elixir
>>>> >>    '((sigil (sigil_name) @name (:match "^[H]$" @name)  >>
>>>> (quoted_content)
>>>> >>   @heex))))
>>>> >>  >> upon loading the mode I get the following error:
>>>> >>  >> treesit-range-rules: Symbol’s function definition is void:
>>>> >> treesit-query-compile
>>>> >>  >> This can easily be mitigated with (when  >>
>>>> (treesit-available-p)...)
>>>> >> but think it should function similar to how  >>
>>>> (treesit-font-lock-rules
>>>> >> work.
>>>> >
>>>> > Why does it make sense to protect treesit.el's code with
>>>> > treesit-available-p?  You aren't supposed to use treesit.el  >
>>>> functions
>>>> > when the tree-sitter library is not available.  IOW, Lisp  >
>>>> programs
>>>> > that want to use treesit-range-rules and other functions from
>>>> > treesit.el should make the treesit-available-p test _before_  >
>>>> that.
>>>> Okay, that makes sense.  I just saw this comment on
>>>> ;; treesit.el#618
>>>> (defun treesit-font-lock-rules (&rest query-specs)
>>>>   ...
>>>>   ;; Other tree-sitter function don't tend to be called unless
>>>>   ;; tree-sitter is enabled, which means tree-sitter must be
>>>> compiled.
>>>>   ;; But this function is usually call in `defvar' which runs
>>>>   ;; regardless whether tree-sitter is enabled.  So we need   this
>>>>   ;; guard.
>>>>   (when (treesit-available-p)
>>>> As treesit-range-rules also gets called with defvar and it is a
>>>> consistency issue.  I think the reason why this has not popped up
>>>> before is that no other modes I have seen uses treesit-range-rules
>>>> yet and think it will probably catch people off guard in the
>>>> future.
>>>
>>> It's up to Yuan: if he thinks this is a good idea, he should feel
>>> free
>>> to add that test.  But it's slippery slope, IMNSHO: we will very
>>> soon
>>> find ourselves adding such tests to every treesit.el function, just
>>> because some code somewhere calls that function without a prior
>>> test.
>>> IOW, IMO a single case of such callers is not enough to add a test.
>>> But that's me.
>>
>> Okay, I will add the checks before defvar anyways to keep things
>> consistent on my side.  It does make more sense to me just to not have
>> the
>> guards in the first place as it creates false expectation they will be
>> everywhere.
>
> I wonder if we should remove that guard in treesit-font-lock-rules... It
> looked like a good idea at the time, but now I can see it creating
> confusion going forward.

I think it’s too late to change treesit-font-lock-rules, maybe we should
add the guard to treesit-range-rules, just to be consistent? We can make
it an convention to add guards to all treesit-xxx-rules functions.

Yuan





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

end of thread, other threads:[~2023-01-17  9:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-31 14:53 bug#60453: 29.0.60; treesit-range-rules throw an error without tree-sitter Wilhelm Kirschbaum
2022-12-31 16:37 ` Eli Zaretskii
2022-12-31 16:50   ` Wilhelm Kirschbaum
2022-12-31 17:05     ` Eli Zaretskii
2022-12-31 17:08       ` Wilhelm Kirschbaum
2023-01-02  0:19 ` Yuan Fu
2023-01-17  9:41 ` Yuan Fu

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.