]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(gleam): update filetype plugin, include new compiler and syntax script
authorKirill Morozov <mail2kirill@gmail.com>
Thu, 24 Apr 2025 19:28:56 +0000 (21:28 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 24 Apr 2025 19:30:59 +0000 (21:30 +0200)
closes: #17172

Signed-off-by: Kirill Morozov <mail2kirill@gmail.com>
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
.github/MAINTAINERS
runtime/compiler/gleam_build.vim [new file with mode: 0644]
runtime/ftplugin/gleam.vim
runtime/syntax/gleam.vim [new file with mode: 0644]

index 6c723186dbc9c802b25d6f86025d8c93a69d87d2..132585e83cfc03dcd55fdb0a208a3b53dec0f445 100644 (file)
@@ -63,6 +63,7 @@ runtime/compiler/eruby.vim            @dkearns
 runtime/compiler/fbc.vim               @dkearns
 runtime/compiler/gawk.vim              @dkearns
 runtime/compiler/gjs.vim               @dkearns
+runtime/compiler/gleam.vim             @kirillmorozov
 runtime/compiler/gm2.vim               @dkearns
 runtime/compiler/go.vim                        @dbarnett
 runtime/compiler/groff.vim             @Konfekt
@@ -500,6 +501,7 @@ runtime/syntax/gitconfig.vim                @tpope
 runtime/syntax/gitignore.vim           @ObserverOfTime
 runtime/syntax/gitolite.vim            @sitaramc
 runtime/syntax/gitrebase.vim           @tpope
+runtime/syntax/gleam.vim               @kirillmorozov
 runtime/syntax/glsl.vim                @gpanders
 runtime/syntax/go.vim                  @bhcleek
 runtime/syntax/goaccess.vim            @meonkeys
diff --git a/runtime/compiler/gleam_build.vim b/runtime/compiler/gleam_build.vim
new file mode 100644 (file)
index 0000000..c2b1679
--- /dev/null
@@ -0,0 +1,25 @@
+" Vim compiler file
+" Language:    Gleam
+" Maintainer:  Kirill Morozov <kirill@robotix.pro>
+" Based On:    https://github.com/gleam-lang/gleam.vim
+" Last Change: 2025 Apr 21
+
+if exists('current_compiler')
+  finish
+endif
+let current_compiler = "gleam_build"
+
+CompilerSet makeprg=gleam\ build
+
+" Example error message:
+"
+" error: Unknown variable
+"    ┌─ /home/michael/root/projects/tutorials/gleam/try/code/src/main.gleam:19:18
+"    │
+" 19 │   Ok(tuple(name, spot))
+"    │                  ^^^^ did you mean `sport`?
+"
+" The name `spot` is not in scope here.
+CompilerSet errorformat=%Eerror:\ %m,%Wwarning:\ %m,%C\ %#┌─%#\ %f:%l:%c\ %#-%#
+
+" vim: sw=2 sts=2 et
index 70958c70fc8209274948d1cee8066086039c2bb5..3ea68fa0a7c1ca38715dbf706f32ac72f64d0526 100644 (file)
@@ -2,24 +2,32 @@
 " Language:            Gleam
 " Maintainer:          Kirill Morozov <kirill@robotix.pro>
 " Previous Maintainer: Trilowy (https://github.com/trilowy)
-" Last Change:         2025 Apr 16
+" Based On:            https://github.com/gleam-lang/gleam.vim
+" Last Change:         2025 Apr 21
 
 if exists('b:did_ftplugin')
   finish
 endif
 let b:did_ftplugin = 1
 
-setlocal comments=://,:///,:////
+setlocal comments=:////,:///,://
 setlocal commentstring=//\ %s
 setlocal formatprg=gleam\ format\ --stdin
-
-let b:undo_ftplugin = "setlocal com< cms< fp<"
+setlocal suffixesadd=.gleam
+let b:undo_ftplugin = "setlocal com< cms< fp< sua<"
 
 if get(g:, "gleam_recommended_style", 1)
   setlocal expandtab
   setlocal shiftwidth=2
+  setlocal smartindent
   setlocal softtabstop=2
-  let b:undo_ftplugin ..= " | setlocal et< sw< sts<"
+  setlocal tabstop=2
+  let b:undo_ftplugin ..= " | setlocal et< sw< si< sts< ts<"
+endif
+
+if !exists('current_compiler')
+  compiler gleam_build
+  let b:undo_ftplugin ..= "| compiler make"
 endif
 
 " vim: sw=2 sts=2 et
diff --git a/runtime/syntax/gleam.vim b/runtime/syntax/gleam.vim
new file mode 100644 (file)
index 0000000..6c2bab7
--- /dev/null
@@ -0,0 +1,97 @@
+" Vim syntax file
+" Language:    Gleam
+" Maintainer:  Kirill Morozov <kirill@robotix.pro>
+" Based On:    https://github.com/gleam-lang/gleam.vim
+" Last Change: 2025 Apr 20
+
+if exists("b:current_syntax")
+  finish
+endif
+let b:current_syntax = "gleam"
+
+syntax case match
+
+" Keywords
+syntax keyword gleamConditional case if
+syntax keyword gleamConstant const
+syntax keyword gleamDebug echo
+syntax keyword gleamException panic assert todo
+syntax keyword gleamInclude import
+syntax keyword gleamKeyword as let use
+syntax keyword gleamStorageClass pub opaque
+syntax keyword gleamType type
+
+" Number
+"" Int
+syntax match gleamNumber "\<-\=\%(0\|\%(\d\|\d_\d\)\+\)\>"
+
+"" Binary
+syntax match gleamNumber "\<-\=0[bB]_\?\%([01]\|[01]_[01]\)\+\>"
+
+"" Octet
+syntax match gleamNumber "\<-\=0[oO]\?_\?\%(\o\|\o_\o\)\+\>"
+
+"" Hexadecimal
+syntax match gleamNumber "\<-\=0[xX]_\?\%(\x\|\x_\x\)\+\>"
+
+"" Float
+syntax match gleamFloat "\(0*[1-9][0-9_]*\|0\)\.\(0*[1-9][0-9_]*\|0\)\(e-\=0*[1-9][0-9_]*\)\="
+
+" String
+syntax region gleamString start=/"/ end=/"/ contains=gleamSpecial
+syntax match gleamSpecial '\\.' contained
+
+" Operators
+"" Basic
+syntax match gleamOperator "[-+/*]\.\=\|[%=]"
+
+"" Arrows + Pipeline
+syntax match gleamOperator "<-\|[-|]>"
+
+"" Bool
+syntax match gleamOperator "&&\|||"
+
+"" Comparison
+syntax match gleamOperator "[<>]=\=\.\=\|[=!]="
+
+"" Misc
+syntax match gleamOperator "\.\.\|<>\||"
+
+" Type
+syntax match gleamIdentifier "\<[A-Z][a-zA-Z0-9]*\>"
+
+" Attribute
+syntax match gleamPreProc "@[a-z][a-z_]*"
+
+" Function definition
+syntax keyword gleamKeyword fn nextgroup=gleamFunction skipwhite skipempty
+syntax match gleamFunction "[a-z][a-z0-9_]*\ze\s*(" skipwhite skipnl
+
+" Comments
+syntax region gleamComment start="//" end="$" contains=gleamTodo
+syntax region gleamSpecialComment start="///" end="$"
+syntax region gleamSpecialComment start="////" end="$"
+syntax keyword gleamTodo contained TODO FIXME XXX NB NOTE
+
+" Highlight groups
+highlight link gleamComment Comment
+highlight link gleamConditional Conditional
+highlight link gleamConstant Constant
+highlight link gleamDebug Debug
+highlight link gleamException Exception
+highlight link gleamFloat Float
+highlight link gleamFunction Function
+highlight link gleamIdentifier Identifier
+highlight link gleamInclude Include
+highlight link gleamKeyword Keyword
+highlight link gleamNumber Number
+highlight link gleamOperator Operator
+highlight link gleamPreProc PreProc
+highlight link gleamSpecial Special
+highlight link gleamSpecialComment SpecialComment
+highlight link gleamStorageClass StorageClass
+highlight link gleamString String
+highlight link gleamTodo Todo
+highlight link gleamType Type
+
+" vim: sw=2 sts=2 et