feat(spell): opt-out of confirm when downloading spellfiles #36836

This commit is contained in:
Olivia Kinnear
2025-12-06 16:20:02 -06:00
committed by GitHub
parent 5370b7a2e0
commit 4e1644d4d3
3 changed files with 58 additions and 12 deletions

View File

@@ -185,6 +185,8 @@ The plugin can be disabled by setting `g:loaded_spellfile_plugin = 1`.
otherwise https://ftp.nluug.nl/pub/vim/runtime/spell.
• {timeout_ms} (`integer`, default: 15000) Number of milliseconds after
which the |vim.net.request()| times out.
• {confirm} (`boolean`, default: `true`) Whether to ask user to
confirm download.
config({opts}) *spellfile.config()*

View File

@@ -25,11 +25,16 @@ local M = {}
--- Number of milliseconds after which the [vim.net.request()] times out.
--- (default: 15000)
--- @field timeout_ms integer
---
--- Whether to ask user to confirm download.
--- (default: `true`)
--- @field confirm boolean
--- @type nvim.spellfile.Opts
local config = {
url = vim.g.spellfile_URL or 'https://ftp.nluug.nl/pub/vim/runtime/spell',
timeout_ms = 15000,
confirm = true,
}
--- Configure spellfile download options. For example:
@@ -270,18 +275,22 @@ function M.get(lang)
return
end
local prompt = ('No spell file found for %s (%s). Download? [y/N] '):format(
info.lang,
info.encoding
)
vim.ui.input({ prompt = prompt }, function(input)
-- properly clear the message window
vim.api.nvim_echo({ { ' ' } }, false, { kind = 'empty' })
if not input or input:lower() ~= 'y' then
return
end
if config.confirm then
local prompt = ('No spell file found for %s (%s). Download? [y/N] '):format(
info.lang,
info.encoding
)
vim.ui.input({ prompt = prompt }, function(input)
-- properly clear the message window
vim.api.nvim_echo({ { ' ' } }, false, { kind = 'empty' })
if not input or input:lower() ~= 'y' then
return
end
download(info)
end)
else
download(info)
end)
end
return info
end

View File

@@ -2,6 +2,7 @@ local n = require('test.functional.testnvim')()
local t = require('test.testutil')
local eq = t.eq
local neq = t.neq
local exec_lua = n.exec_lua
describe('nvim.spellfile', function()
@@ -40,7 +41,10 @@ describe('nvim.spellfile', function()
vim.fn.input = function() prompted = true; return 'n' end
local requests = 0
vim.net.request = function(...) requests = requests + 1 end
vim.net.request = function(_, _, cb)
requests = requests + 1
cb()
end
s.get('en_gb')
@@ -148,4 +152,35 @@ describe('nvim.spellfile', function()
eq(true, out.done)
eq(false, out.did_reload)
end)
it('no confirmation when using confirm = false', function()
local out = exec_lua(
[[
local rtp_dir = ...
local s = require('nvim.spellfile')
vim.fn.input = function(...)
error('prompt was triggered')
return 'n'
end
local requests = 0
vim.net.request = function(_, _, cb)
requests = requests + 1
cb()
end
s.config({ confirm = false })
s.get('en_gb')
-- Reset value
s.config({ confirm = true })
return { requests = requests }
]],
rtp_dir
)
neq(0, out.requests)
end)
end)