GNU bug report logs - #74610
31.0.50; Submitting mhtml-ts-mode, treesitter alternative to mhtml-mode

Previous Next

Package: emacs;

Reported by: Vincenzo Pupillo <v.pupillo <at> gmail.com>

Date: Fri, 29 Nov 2024 21:58:01 UTC

Severity: wishlist

Fixed in version 31.0.50

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Juri Linkov <juri <at> linkov.net>
To: Vincenzo Pupillo <v.pupillo <at> gmail.com>
Cc: casouri <at> gmail.com, Eli Zaretskii <eliz <at> gnu.org>, 74610 <at> debbugs.gnu.org
Subject: bug#74610: 31.0.50; Submitting mhtml-ts-mode, treesitter alternative to mhtml-mode
Date: Thu, 13 Feb 2025 19:55:59 +0200
>> I think we need now clarify the relation
>> between mhtml-ts-mode and html-ts-mode.
>> 
>> For example, currently I added a new function
>> 'html-ts-mode--outline-predicate' to html-ts-mode.el.
>> Should it be used in mhtml-ts-mode.el as well?
> I have to try but I think so, mhtml-ts-mode is declared as derived from html-
> ts-mode (although it is not very clear to me how derived modes work). The 
> treesit-outline-predicate variable is set by html-ts-mode and mhtml-ts-mode 
> inherits the same value. 

It seems inheritance doesn't work for embedded ts-modes
since even the primary ts-mode should be configured
by aggregation like with treesit-aggregated-simple-imenu-settings,
not by inheritance.

I see that you added TODO for an aggregated version of
treesit-defun-type-regexp.  Then treesit-outline-predicate
also needs an aggregated version, and maybe other settings too.
Ok, I could look how to do this with treesit-outline-predicate.

>> What about other settings?  Should html-ts-mode and mhtml-ts-mode
>> always be kept in sync?  Or html-ts-mode should be obsoleted
>> when it will be superseded by mhtml-ts-mode?
>> 
>> Maybe html-ts-mode would be still needed as a separate mode
>> to be used as embedded submode in such files as e.g.
>> Vue single-file component with *.vue files that contain parts
>> from js-ts-mode, css-ts-mode, and html-ts-mode for templates.
>
> I don't know. In general, I think having simple major modes makes it easier to 
> build more complex aggregations, rather than having to disable some features 
> inherited from complex major modes, as in html-ts-mode: "
>  ;; `html-ts-mode' inherits from `html-mode' that sets
>   ;; regexp-based outline variables.  So need to restore
>   ;; the default values of outline variables to be able
>   ;; to use `treesit-outline-predicate' above.

I checked that neither aggregation nor inheritance from html-ts-mode
can be used for vue-ts-mode since tree-sitter-vue duplicates
HTML grammar in its own grammar.  Even tree-sitter-astro
incorporates a simplified HTML grammar into its own grammar.
This is similar to HTML-like jsx elements in tsx grammar.




This bug report was last modified 98 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.