]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(glimmer): add syntax support for glimmer files
authorDevin Weaver <suki@tritarget.org>
Thu, 5 Mar 2026 20:07:50 +0000 (20:07 +0000)
committerChristian Brabandt <cb@256bit.org>
Thu, 5 Mar 2026 20:07:50 +0000 (20:07 +0000)
In commit cdf717283 ("patch 8.2.4424: ".gts" and ".gjs" files are not
recognized", 2022-02-19) support for the glimmer file types were added.

Problem:  Syntax hilighting suppoprt was missing.
Solution: Added a glimmer syntax file that will leverage the base
          syntaxs (javascript/typescript) and include handlebars syntax
          for .gjs/.gts files.

closes: #19569

Signed-off-by: Devin Weaver <suki@tritarget.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
.github/MAINTAINERS
runtime/syntax/glimmer.vim [new file with mode: 0644]

index 92e9e6025e93f39a9ba2199e292477234f49e9f4..6d51dea175b76ac745c54bf7668132834a0c04cf 100644 (file)
@@ -542,6 +542,7 @@ runtime/syntax/gitignore.vim                                @ObserverOfTime
 runtime/syntax/gitolite.vim                            @sitaramc
 runtime/syntax/gitrebase.vim                           @tpope
 runtime/syntax/gleam.vim                               @kirillmorozov
+runtime/syntax/glimmer.vim                             @sukima
 runtime/syntax/glsl.vim                                        @gpanders
 runtime/syntax/go.vim                                  @bhcleek
 runtime/syntax/goaccess.vim                            @meonkeys
diff --git a/runtime/syntax/glimmer.vim b/runtime/syntax/glimmer.vim
new file mode 100644 (file)
index 0000000..67555db
--- /dev/null
@@ -0,0 +1,51 @@
+" Vim syntax file
+" Language:     Glimmer
+" Maintainer:   Devin Weaver
+" Last Change:  2026 Feb 20
+" Origin:       https://github.com/joukevandermaas/vim-ember-hbs
+" Credits:      Jouke van der Maas
+" License:      Same as Vim
+
+" Vim detects GJS/GTS files as {java,type}script.glimmer
+" Vim will read the javascript/typescript syntax files first and set
+" b:current_syntax accordingly then it will read the glimmer syntax file.
+" This is why we use b:current_syntax to make sure we are in the correct state
+" to continue.
+
+if exists('b:current_syntax') && b:current_syntax !~# '\v%(type|java)script'
+  finish
+endif
+
+let base_syntax = b:current_syntax
+unlet! b:current_syntax
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syntax include @hbs syntax/handlebars.vim
+
+if base_syntax == "javascript"
+  syntax region glimmerTemplateBlock
+    \ start="<template>" end="</template>"
+    \ contains=@hbs
+    \ keepend fold
+
+  let b:current_syntax = "javascript.glimmer"
+else
+  " syntax/typescript.vim adds typescriptTypeCast which is in conflict with
+  " <template> typescriptreact doesn't define it but we want to not include
+  " the JSX syntax.
+  syntax clear typescriptTypeCast
+
+  syntax region glimmerTemplateBlock
+    \ start="<template>" end="</template>"
+    \ contains=@hbs
+    \ containedin=typescriptClassBlock,typescriptFuncCallArg
+    \ keepend fold
+
+  let b:current_syntax = "typescript.glimmer"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+unlet! base_syntax