A (doom) emacs user here.
<.liveviewtags> which is especially annoying for closing the tags.
Has anyone here figured out how to configure web-mode to recognize live view tags as tags?
Tried to tweak the
web-mode-(start-)tag-regexp variable, as well as messing with
web-mode-engine-* variable but these did not help.
not a solution, but have you considered Heex Tresitter Mode?
Thank you for the pointer! I looked there, but I understand it requires emacs 29 and I am not sure Doom Emacs config is v29 ready yet…
Confirming that in with emacs29
heex-ts-mode does what I expect
However, emacs29 is still under development and can break some packages
Perhaps you should file a bug report at the web-mode repo? That way once they fix it, you won’t have to upgrade to Emacs 29.
Actually I did this as first thing after failing to configure web-mode myself, but there is still no reply Elixir LiveView <.tag> syntax · Issue #1269 · fxbois/web-mode · GitHub
If you want to resolve this within web-mode itself (which is what I would do since this is something web-mode needs to sort out) the only thing we can do is to either fix this ourselves or wait for the maintainer.
I haven’t contributed to web-mode myself, but there is a chance that this is as simple as editing the regex for constitutes as a valid tag. Elisp is not my forte (it’s not many people’s forte), but if you do work on the PR, and you need some help, you can always ping me.
but hopefully Emacs 29 pretests will come out soon
Marcin via Elixir Programming Language Forum email@example.com writes:
Related post on the Doom discord: Customize tag name regexp in web-mode - User Support - Doom Emacs Discourse
(no resolution there on having
web-mode support HEEx, either)
Yep, in the end I switched to using Helix which supports tree sitter. I still have EMacs open for Magit and org-mode though… Best bet is to wait till emacs gets native tree sitter support (and doom too)
I ended up getting a bit further with this by upgrading to Emacs v29 (which natively supports tree-sitter), and using the
Doom’s docs do specifically call out that Emacs 29 is unsupported - but I haven’t found any issues after ~1 week of use.
Here’re the rough steps I took:
Upgraded to Emacs 29 (I’m using emacs-plus on macOS), so for me this looked like:
# I'm using emacs-plus on macOS
brew uninstall emacs-plus && brew install emacs-plus@29
brew install tree-sitter
elixir-ts-mode package to Doom config:
.heex files to use
elixir-ts-mode instead of
; Elixir: Use elixir-ts-mode instead of web-mode for HEEx
Followed instructions on
heex-ts-mode README to install grammar, YMMV, but for me it was as easy as
$ doom sync and restarted Emacs.
Verified it all works by opening a HEEx file and running
M-x treesit-explore-mode. You should see it print a HEEx AST, like this:
You could also use
.ex files to get syntax highlighting in
~H sigils, and then disable Doom’s default
elixir config altogether… but I’m leaving that experiment for another day!
I found that setting the following variables makes it work. The variables are defined in web-mode and some people got very close by setting first and second but not the third one:
(setq web-mode-start-tag-regexp "<\\([[:alpha:].][[:alnum:].:_-]*\\|>\\)")
(setq web-mode-tag-regexp "</?\\([[:alpha:].][[:alnum:].:_-]*\\)")
(setq web-mode-dom-regexp "<\\(/?>\\|/?[[:alpha:].][[:alnum:].:_-]*\\|!--\\|!\\[CDATA\\[\\|!doctype\\|!DOCTYPE\\|\?xml\\)")
Maybe someone else can check it in her installation.
Mmmmm, I am afraid it is not working when combined with EEx (
<%= ... %>) in a slot