emacs-devel
[Top][All Lists]
Advanced

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

Re: Tree sitter: Should *-ts-modes derive from a common base?


From: Phil Sainty
Subject: Re: Tree sitter: Should *-ts-modes derive from a common base?
Date: Thu, 23 Mar 2023 21:50:08 +1300
User-agent: Orcon Webmail

Dmitry Gutov wrote:
> (define-derived-mode css-base-mode prog-mode "CSS"
> (define-derived-mode css-mode css-base-mode "CSS"
> (define-derived-mode css-ts-mode css-base-mode "CSS"
>
> That could be refactored if this idea was a sensible one.

How would you refactor it? We don't have multiple inheritance.

My thought was simply to remove css-base-mode (which looks to have
been added solely for the new css-mode/css-ts-mode split and is only
being used for its body) and instead simply have css-ts-mode and
css-mode both directly call a common function in their own body.


There's been a bunch of discussions on the bug tracker, and at
least one where the participants landed on the xxx-base-mode
design.  I don't have the bug number at hand, though.

Right, I figured it would have come up.  I'll happily defer to
conclusions made by people who've thought about this more.



Daniel Martín wrote:
some major modes offer Tree-sitter functionality without introducing
a specific new Tree-sitter-based major mode, so having a common
inheritance wouldn't help here, I think.

Ah, ok.  Yes, agreed.


Aren't (treesit-parser-list BUFFER) and (treesit-parser-language
PARSER) the best ways to check if Tree-sitter can be used in a
particular buffer, for a particular language?

I'll take your word for it.  The stackexchange user I mentioned
initially has done something slightly different:

 (defun treesit-enabled-p ()
   "Checks if the current buffer has a treesit parser."
   (and (fboundp 'treesit-available-p)
        (treesit-available-p)
        (treesit-language-at (point))))

( https://emacs.stackexchange.com/questions/76400 )

However using treesit-language-at or treesit-parser-language
doesn't seem much less cumbersome -- they're not defined in my
build of Emacs 29 (without tree-sitter support), so the fboundp
is still needed at minimum.  If that's the best we have right
now, perhaps a standard predicate should be added for this.


-Phil




reply via email to

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