Subject: Re: bug#60355: 29.0.60; Tree sitter incorrectly handles of PRED for treesit-defun-type-regexp

From: Yuan Fu <[email-masked]>
Date: Tue, 27 Dec 2022 17:47:35 -0800

Wilhelm H Kirschbaum <[email-masked]> writes:

> When `treesit-defun-type-regexp` is set with a cons cell (regexp .
> some-pred)
> the following case does not get handled as expected when calling
> (end-of-defun):
>
> ```elixir
> defmodule Example do
>  def foo() do ; regexp match, pred match
>  end
>
>  ;; <point here>
>  @impl true    ; regexp match, pred does not match
>  def bar() do  ; regexp match, pred match
>  end
>  ;; <should jump to here>
>
>  def baz() do
>  end
> end
> ;; <jumps to point here>
> ```

Thank you very much! The root cause is actually another problem, but
anyway it is fixed now.

May I also suggest you to use this function for the predicate:

(defun elixir-ts-mode--capture-defun (node)
  ;; NODE should be a ‘call’ node.
  (member (treesit-node-text
           (treesit-node-child-by-field-name node "target"))
          elixir-ts-mode--definition-keywords))

This should be more accurate than the current one, and is IMO simpler
too.

Yuan