]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(compiler): add tombi compiler to lint TOML files
authorKonfekt <Konfekt@users.noreply.github.com>
Tue, 28 Oct 2025 20:42:17 +0000 (20:42 +0000)
committerChristian Brabandt <cb@256bit.org>
Tue, 28 Oct 2025 20:42:17 +0000 (20:42 +0000)
closes: #18590

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/compiler/tombi.vim [new file with mode: 0644]
runtime/doc/quickfix.txt
runtime/doc/tags

diff --git a/runtime/compiler/tombi.vim b/runtime/compiler/tombi.vim
new file mode 100644 (file)
index 0000000..e79a136
--- /dev/null
@@ -0,0 +1,69 @@
+" Vim compiler file
+" Language:    TOML
+" Maintainer:  Konfekt
+" Last Change: 2025 Oct 28
+
+if exists("current_compiler") | finish | endif
+let current_compiler = "tombi"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !executable('tombi')
+  echoerr "tombi compiler: 'tombi' executable not found in PATH"
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
+  finish
+endif
+
+" NO_COLOR support requires tombi 0.6.40 or later
+if !exists('s:tombi_nocolor')
+  " Expect output like: 'tombi 0.6.40' or '0.6.40'
+  let s:out = trim(system('tombi --version'))
+  let s:tombi_ver = matchstr(s:out, '\v\s\d+\.\d+\.\d+$')
+
+  function s:VersionGE(ver, req) abort
+    " Compare semantic versions a.b.c ≥ x.y.z
+    let l:pa = map(split(a:ver), '\.'), 'str2nr(v:val)')
+    let l:pb = map(split(a:req, '\.'), 'str2nr(v:val)')
+    while len(l:pa) < 3 | call add(l:pa, 0) | endwhile
+    while len(l:pb) < 3 | call add(l:pb, 0) | endwhile
+    for i in range(0, 2)
+      if l:pa[i] > l:pb[i] | return 1
+      elseif l:pa[i] < l:pb[i] | return 0
+      endif
+    endfor
+    return 1
+  endfunction
+  let s:tombi_nocolor = s:VersionGE(s:tombi_ver, '0.6.40')
+  delfunction s:VersionGE
+endif
+
+if s:tombi_nocolor
+  if has('win32')
+    if &shell =~# '\v<%(cmd|cmd)>'
+      CompilerSet makeprg=set\ NO_COLOR=1\ &&\ tombi\ lint
+    elseif &shell =~# '\v<%(powershell|pwsh)>'
+      CompilerSet makeprg=$env:NO_COLOR="1";\ tombi\ lint
+    else
+      echoerr "tombi compiler: Unsupported shell for Windows"
+    endif
+  else " if has('unix')
+    CompilerSet makeprg=env\ NO_COLOR=1\ tombi\ lint
+  endif
+else
+  " Older tombi: strip ANSI color codes with sed.
+  if executable('sed')
+    CompilerSet makeprg=tombi\ lint\ $*\ \|\ sed\ -E\ \"s/\\x1B(\\[[0-9;]*[JKmsu]\|\\(B)//g\"
+  else
+    echoerr "tombi compiler: tombi version < 0.6.40 requires 'sed' to strip ANSI color codes"
+  endif
+endif
+
+CompilerSet errorformat=%E%*\\sError:\ %m,%Z%*\\sat\ %f:%l:%c
+CompilerSet errorformat+=%W%*\\sWarning:\ %m,%Z%*\\sat\ %f:%l:%c
+CompilerSet errorformat+=%-G1\ file\ failed\ to\ be\ linted
+CompilerSet errorformat+=%-G1\ file\ linted\ successfully
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 9a9788c2faaf2c885c673536f2d1a7aee90fe9ae..a3226020aaa1e68aff9998d2868e85fbec31c0fd 100644 (file)
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 9.1.  Last change: 2025 Oct 12
+*quickfix.txt*  For Vim version 9.1.  Last change: 2025 Oct 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1724,6 +1724,16 @@ shells and OSes and also does not allow to use other available TeX options,
 if any.  If your TeX doesn't support "-interaction=nonstopmode", please
 report it with different means to express \nonstopmode from the command line.
 
+TOMBI                                  *quickfix-toml* *compiler-tombi*
+
+The tombi compiler plugin does not compile.
+
+It runs "tombi lint" and parses diagnostics into the quickfix list.
+
+Color codes are stripped from the linter output to keep |errorformat|
+parsing reliable.  This may require a working "sed" for old versions of the
+tombi linter.
+
 TSC COMPILER                                           *compiler-tsc*
 
 The executable and compiler options can be added to 'makeprg' by setting the
index 944017088a91c2f3a65c2d1b46311ccd81e3dfb1..6757a097a4b957ab55139106149779c1d6d3b7b2 100644 (file)
@@ -6762,6 +6762,7 @@ compiler-select   quickfix.txt    /*compiler-select*
 compiler-spotbugs      quickfix.txt    /*compiler-spotbugs*
 compiler-tex   quickfix.txt    /*compiler-tex*
 compiler-tsc   quickfix.txt    /*compiler-tsc*
+compiler-tombi quickfix.txt    /*compiler-tombi*
 compiler-typst quickfix.txt    /*compiler-typst*
 compiler-vaxada        ft_ada.txt      /*compiler-vaxada*
 compl-current  insert.txt      /*compl-current*
@@ -9946,6 +9947,7 @@ quickfix-perl     quickfix.txt    /*quickfix-perl*
 quickfix-size  quickfix.txt    /*quickfix-size*
 quickfix-stack quickfix.txt    /*quickfix-stack*
 quickfix-title quickfix.txt    /*quickfix-title*
+quickfix-toml  quickfix.txt    /*quickfix-toml*
 quickfix-valid quickfix.txt    /*quickfix-valid*
 quickfix-window        quickfix.txt    /*quickfix-window*
 quickfix-window-ID     quickfix.txt    /*quickfix-window-ID*