From 8377bd024b8cee4bef05a8af19277532fd373413 Mon Sep 17 00:00:00 2001 From: Andrew Haust Date: Sun, 16 Jun 2024 10:48:54 -0400 Subject: [PATCH] Improve embedded HEEx and Surface syntax highlighting * Properly highlight embedded HEEx (and Surface) * Re-name groups to favour HEEx naming * Add highlight group for `phx-` attributes * Add highlight group for heex attribute (eg, `some_attr="some value"`) * Add highlight group for heex special attribute (ie, `:if` and `:for`) * Add heexComponentName group * Add heexEndComponent group --- syntax/elixir.vim | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/syntax/elixir.vim b/syntax/elixir.vim index 95a1f11..6738cc1 100644 --- a/syntax/elixir.vim +++ b/syntax/elixir.vim @@ -109,16 +109,42 @@ syn region elixirSigil matchgroup=elixirSigilDelimiter start="\~\l\/" syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z("""\)+ end=+^\s*\z1+ skip=+\\"+ fold syn region elixirSigil matchgroup=elixirSigilDelimiter start=+\~\a\z('''\)+ end=+^\s*\z1+ skip=+\\'+ fold - -" LiveView Sigils surrounded with ~L""" +" LiveView-specific sigils for embedded templates syntax include @HTML syntax/html.vim unlet b:current_syntax -syntax region elixirLiveViewSigil matchgroup=elixirSigilDelimiter keepend start=+\~L\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold -syntax region elixirSurfaceSigil matchgroup=elixirSigilDelimiter keepend start=+\~H\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold +syntax region elixirHeexSigil matchgroup=elixirSigilDelimiter keepend start=+\~H\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold syntax region elixirSurfaceSigil matchgroup=elixirSigilDelimiter keepend start=+\~F\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold +syntax region elixirLiveViewSigil matchgroup=elixirSigilDelimiter keepend start=+\~L\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold syntax region elixirPhoenixESigil matchgroup=elixirSigilDelimiter keepend start=+\~E\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold syntax region elixirPhoenixeSigil matchgroup=elixirSigilDelimiter keepend start=+\~e\z("""\)+ end=+^\s*\z1+ skip=+\\"+ contains=@HTML fold +syn cluster elixirTemplateSigils contains=elixirLiveViewSigil,elixirHeexSigil,elixirSurfaceSigil,elixirPhoenixESigil,elixirPhoenixeSigil + +syn region heexComponent matchgroup=eelixirDelimiter start="<\.[a-z_]\+" end="%\@" contains=ALLBUT,@elixirNotTop keepend +syn region eelixirExpression matchgroup=eelixirDelimiter start="<%" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend +syn region eelixirExpression matchgroup=eelixirDelimiter start="<%=" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend +syn region eelixirQuote matchgroup=eelixirDelimiter start="<%%" end="%\@" contains=ALLBUT,@elixirNotTop containedin=@elixirTemplateSigils keepend +syn region heexComment matchgroup=eelixirDelimiter start="<%!--" end="%\@