vim-patch:32f4973: runtime(gleam): update filetype plugin, include new compiler and syntax script

closes: vim/vim#17172

32f49738d1

Co-authored-by: Kirill Morozov <mail2kirill@gmail.com>
This commit is contained in:
Christian Clason
2025-04-25 10:16:44 +02:00
committed by Christian Clason
parent 4ddd31de14
commit 9e450000d3
3 changed files with 135 additions and 5 deletions

View File

@ -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

View File

@ -2,24 +2,32 @@
" Language: Gleam " Language: Gleam
" Maintainer: Kirill Morozov <kirill@robotix.pro> " Maintainer: Kirill Morozov <kirill@robotix.pro>
" Previous Maintainer: Trilowy (https://github.com/trilowy) " 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') if exists('b:did_ftplugin')
finish finish
endif endif
let b:did_ftplugin = 1 let b:did_ftplugin = 1
setlocal comments=://,:///,://// setlocal comments=:////,:///,://
setlocal commentstring=//\ %s setlocal commentstring=//\ %s
setlocal formatprg=gleam\ format\ --stdin setlocal formatprg=gleam\ format\ --stdin
setlocal suffixesadd=.gleam
let b:undo_ftplugin = "setlocal com< cms< fp<" let b:undo_ftplugin = "setlocal com< cms< fp< sua<"
if get(g:, "gleam_recommended_style", 1) if get(g:, "gleam_recommended_style", 1)
setlocal expandtab setlocal expandtab
setlocal shiftwidth=2 setlocal shiftwidth=2
setlocal smartindent
setlocal softtabstop=2 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 endif
" vim: sw=2 sts=2 et " vim: sw=2 sts=2 et

97
runtime/syntax/gleam.vim Normal file
View File

@ -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