emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Detecting tree-sitter based major-modes for end-user customization a


From: Stefan Monnier
Subject: Re: Detecting tree-sitter based major-modes for end-user customization and third party functions/packages
Date: Tue, 20 Dec 2022 15:21:40 -0500
User-agent: Gnus/5.13 (Gnus v5.13)

> Something like the code below:
>
> (defun my-auto-parent ()
>   (interactive)
>   (when (treesit-parser-list)
>     (goto-char (treesit-node-start (treesit-node-parent (treesit-node-at
> (point)))))))

Even if Tree-sitter is available and there's a parser active in the
current buffer, `treesit-node-at` may return nil, so the better code is
probably something like

    (defun my-auto-parent ()
      (interactive)
      (let ((node (treesit-node-at (point))))
        (if node
            (goto-char (treesit-node-start (treesit-node-parent node)))
          <do something else>)))

and then lobby for `treesit-node-at` to return nil rather
than signal an error when there's no parser, tho an alternative is

    (defun my-auto-parent ()
      (interactive)
      (condition-case nil
          (let ((node (treesit-node-at (point))))
            (if node
                (goto-char (treesit-node-start (treesit-node-parent node)))
              <do something else>))
        (treesit-error
         <do yet something else, or maybe not>)))



        Stefan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]