From 86d8ada5cb1dce635cf2dd8a09ee21a349b7b9c3 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sat, 22 Nov 2025 07:02:24 -0500 Subject: [PATCH] tombi: support `toml_tombi_online` flag to control remote schema fetching (#5032) --- ale_linters/toml/tombi.vim | 15 ++++++++++++- autoload/ale/fixers/tombi_format.vim | 7 ++++++ autoload/ale/fixers/tombi_lint.vim | 7 ++++++ doc/ale-toml.txt | 12 ++++++++++ .../test_tombi_format_fixer_callback.vader | 22 +++++++++++++------ .../test_tombi_lint_fixer_callback.vader | 12 ++++++++-- test/linter/test_toml_tombi.vader | 6 +++++ 7 files changed, 71 insertions(+), 10 deletions(-) diff --git a/ale_linters/toml/tombi.vim b/ale_linters/toml/tombi.vim index 72b859a0..dd8437da 100644 --- a/ale_linters/toml/tombi.vim +++ b/ale_linters/toml/tombi.vim @@ -3,6 +3,19 @@ call ale#Set('toml_tombi_executable', 'tombi') call ale#Set('toml_tombi_lsp_options', '') +call ale#Set('toml_tombi_online', 0) + +function! ale_linters#toml#tombi#GetCommand(buffer) abort + let l:offline = '' + + if !ale#Var(a:buffer, 'toml_tombi_online') + let l:offline = '--offline' + endif + + return '%e lsp' + \ . ale#Pad(l:offline) + \ . ale#Pad(ale#Var(a:buffer, 'toml_tombi_lsp_options')) +endfunction function! ale_linters#toml#tombi#GetProjectRoot(buffer) abort " Try to find nearest tombi.toml @@ -33,6 +46,6 @@ call ale#linter#Define('toml', { \ 'name': 'tombi', \ 'lsp': 'stdio', \ 'executable': {b -> ale#Var(b, 'toml_tombi_executable')}, -\ 'command': {b -> '%e lsp' . ale#Pad(ale#Var(b, 'toml_tombi_lsp_options'))}, +\ 'command': function('ale_linters#toml#tombi#GetCommand'), \ 'project_root': function('ale_linters#toml#tombi#GetProjectRoot'), \}) diff --git a/autoload/ale/fixers/tombi_format.vim b/autoload/ale/fixers/tombi_format.vim index 7574546f..4ddb8142 100644 --- a/autoload/ale/fixers/tombi_format.vim +++ b/autoload/ale/fixers/tombi_format.vim @@ -3,13 +3,20 @@ call ale#Set('toml_tombi_executable', 'tombi') call ale#Set('toml_tombi_format_options', '') +call ale#Set('toml_tombi_online', 0) function! ale#fixers#tombi_format#Fix(buffer) abort let l:executable = ale#Var(a:buffer, 'toml_tombi_executable') + let l:offline = '' + + if !ale#Var(a:buffer, 'toml_tombi_online') + let l:offline = '--offline' + endif return { \ 'command': ale#Escape(l:executable) \ . ' format' + \ . ale#Pad(l:offline) \ . ale#Pad(ale#Var(a:buffer, 'toml_tombi_format_options')), \} endfunction diff --git a/autoload/ale/fixers/tombi_lint.vim b/autoload/ale/fixers/tombi_lint.vim index e128debe..86dc161c 100644 --- a/autoload/ale/fixers/tombi_lint.vim +++ b/autoload/ale/fixers/tombi_lint.vim @@ -3,13 +3,20 @@ call ale#Set('toml_tombi_executable', 'tombi') call ale#Set('toml_tombi_lint_options', '') +call ale#Set('toml_tombi_online', 0) function! ale#fixers#tombi_lint#Fix(buffer) abort let l:executable = ale#Var(a:buffer, 'toml_tombi_executable') + let l:offline = '' + + if !ale#Var(a:buffer, 'toml_tombi_online') + let l:offline = '--offline' + endif return { \ 'command': ale#Escape(l:executable) \ . ' lint' + \ . ale#Pad(l:offline) \ . ale#Pad(ale#Var(a:buffer, 'toml_tombi_lint_options')), \} endfunction diff --git a/doc/ale-toml.txt b/doc/ale-toml.txt index 86c788a9..26ea8628 100644 --- a/doc/ale-toml.txt +++ b/doc/ale-toml.txt @@ -25,6 +25,18 @@ g:ale_toml_tombi_executable `tombi`. + *ale-options.toml_tombi_online* + *g:ale_toml_tombi_online* + *b:ale_toml_tombi_online* +toml_tombi_online +g:ale_toml_tombi_online + Type: |Boolean| + Default: `1` + + This variable can be modified allow fetching remote schemas when using + `tombi`. + + *ale-options.toml_tombi_lsp_options* *g:ale_toml_tombi_lsp_options* *b:ale_toml_tombi_lsp_options* diff --git a/test/fixers/test_tombi_format_fixer_callback.vader b/test/fixers/test_tombi_format_fixer_callback.vader index c71b86fe..4b720fc5 100644 --- a/test/fixers/test_tombi_format_fixer_callback.vader +++ b/test/fixers/test_tombi_format_fixer_callback.vader @@ -1,6 +1,7 @@ Before: Save g:ale_toml_tombi_executable Save g:ale_toml_tombi_format_options + Save g:ale_toml_tombi_online " Use an invalid global executable, so we don't match it. let g:ale_toml_tombi_executable = 'xxxinvalid' @@ -14,13 +15,20 @@ After: call ale#test#RestoreDirectory() Execute(The tombi format callback should return the correct default values): - AssertEqual - \ {'command': ale#Escape('xxxinvalid') . ' format'}, - \ ale#fixers#tombi_format#Fix(bufnr('')) - -Execute(The tombi format callback should include custom options): - let g:ale_toml_tombi_format_options = "--offline" - AssertEqual \ {'command': ale#Escape('xxxinvalid') . ' format --offline'}, \ ale#fixers#tombi_format#Fix(bufnr('')) + +Execute(The tombi format callback should obey `toml_tombi_online`): + let g:ale_toml_tombi_online = 1 + + AssertEqual + \ {'command': ale#Escape('xxxinvalid') . ' lint'}, + \ ale#fixers#tombi_lint#Fix(bufnr('')) + +Execute(The tombi format callback should include custom options): + let g:ale_toml_tombi_format_options = "--no-cache" + + AssertEqual + \ {'command': ale#Escape('xxxinvalid') . ' format --offline --no-cache'}, + \ ale#fixers#tombi_format#Fix(bufnr('')) diff --git a/test/fixers/test_tombi_lint_fixer_callback.vader b/test/fixers/test_tombi_lint_fixer_callback.vader index e1f56175..30d7483f 100644 --- a/test/fixers/test_tombi_lint_fixer_callback.vader +++ b/test/fixers/test_tombi_lint_fixer_callback.vader @@ -1,6 +1,7 @@ Before: Save g:ale_toml_tombi_executable Save g:ale_toml_tombi_lint_options + Save g:ale_toml_tombi_online " Use an invalid global executable, so we don't match it. let g:ale_toml_tombi_executable = 'xxxinvalid' @@ -14,13 +15,20 @@ After: call ale#test#RestoreDirectory() Execute(The tombi lint callback should return the correct default values): + AssertEqual + \ {'command': ale#Escape('xxxinvalid') . ' lint --offline'}, + \ ale#fixers#tombi_lint#Fix(bufnr('')) + +Execute(The tombi lint callback should obey `toml_tombi_online`): + let g:ale_toml_tombi_online = 1 + AssertEqual \ {'command': ale#Escape('xxxinvalid') . ' lint'}, \ ale#fixers#tombi_lint#Fix(bufnr('')) Execute(The tombi lint callback should include custom options): - let g:ale_toml_tombi_lint_options = "--offline" + let g:ale_toml_tombi_lint_options = "--no-cache" AssertEqual - \ {'command': ale#Escape('xxxinvalid') . ' lint --offline'}, + \ {'command': ale#Escape('xxxinvalid') . ' lint --offline --no-cache'}, \ ale#fixers#tombi_lint#Fix(bufnr('')) diff --git a/test/linter/test_toml_tombi.vader b/test/linter/test_toml_tombi.vader index f036cef0..8d23efb6 100644 --- a/test/linter/test_toml_tombi.vader +++ b/test/linter/test_toml_tombi.vader @@ -1,10 +1,16 @@ Before: + Save g:ale_toml_tombi_online call ale#assert#SetUpLinterTest('toml', 'tombi') After: call ale#assert#TearDownLinterTest() Execute(The default executable path should be correct): + AssertLinter 'tombi', ale#Escape('tombi') . ' lsp --offline' + +Execute(The default executable path should obey `toml_tombi_online`): + let g:ale_toml_tombi_online = 1 + AssertLinter 'tombi', ale#Escape('tombi') . ' lsp' Execute(The project root should be detected correctly with a configuration file):