[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