I’m trying to configure doom emacs to work with elixir, but the rendering in heex files and ~H sigils are off. For example, tag attributes and anything inside {} are rendered with the same color.
This happens with the catppuccin and tokyo night themes. With the default doom emacs theme, the tag attributes are rendered with a different color, but anything inside {} are treated as the same thing and they get rendered with the same color.
Do you have to do anything other than adding (elixir +lsp +tree-sitter) and (web +tree-sitter) to the init.el file?
I’ve been checking my own config and the only other thing I can think of is to also uncomment tree-sitter module, apart from remembering to doom sync after making the changes.
@franciscoj what version of emacs are you using?
I’m using 30.2, which is the one that comes with Arch Linux Arch Linux - emacs 30.2-3 (x86_64)
There was a discussion about it recently in Discord and the conclusion was that it’s rather hard and maybe possible using polymode with some custom glue code. However, I find this slightly suspicious, as it does work in Zed and they both use tree sitter for it.
Personally, I never got it to work and stopped caring.
Update: I’m glad I wrote I gave up, because I think I got it to work now with this in config.el:
;; Add highlighting for Elixir code inside HEEx's curly braces
(defun my/elixir-ts-embed-elixir-in-heex ()
(when (treesit-ready-p 'heex)
(setq-local
treesit-range-settings
(append treesit-range-settings
(treesit-range-rules
:embed 'elixir
:host 'heex
:local t
'((expression (expression_value) @cap)
(directive (expression_value) @cap)
(directive (partial_expression_value) @cap)
(directive (ending_expression_value) @cap)))))))
(add-hook 'elixir-ts-mode-hook #'my/elixir-ts-embed-elixir-in-heex)
@katafrakt
I think that I got the original message from @ggarciajr wrong, I had indeed the same issue as him, however with your suggestion for config.el I made it work.
Thanks!
It seems emacs 30.2 tree-sitter support is limited. maybe that will improve on the 31x.
And yes, glue-code was the only way I found to make tree-sitter work properly on heex templates or in ~H sigils.
I’ll wait until the next version. I’m still evaluating if I want to move to emacs
I’m on 30.2 myself. But I think I don’t use built-in tree sitter grammars, but at some point updated them. Perhaps by running M-x treesit-install-language-grammar for both Elixir and HEEx, although TBH I’m not sure.