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. otherwise https://ftp.nluug.nl/pub/vim/runtime/spell.
• {timeout_ms} (`integer`, default: 15000) Number of milliseconds after • {timeout_ms} (`integer`, default: 15000) Number of milliseconds after
which the |vim.net.request()| times out. which the |vim.net.request()| times out.
• {confirm} (`boolean`, default: `true`) Whether to ask user to
confirm download.
config({opts}) *spellfile.config()* config({opts}) *spellfile.config()*

View File

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

View File

@@ -2,6 +2,7 @@ local n = require('test.functional.testnvim')()
local t = require('test.testutil') local t = require('test.testutil')
local eq = t.eq local eq = t.eq
local neq = t.neq
local exec_lua = n.exec_lua local exec_lua = n.exec_lua
describe('nvim.spellfile', function() describe('nvim.spellfile', function()
@@ -40,7 +41,10 @@ describe('nvim.spellfile', function()
vim.fn.input = function() prompted = true; return 'n' end vim.fn.input = function() prompted = true; return 'n' end
local requests = 0 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') s.get('en_gb')
@@ -148,4 +152,35 @@ describe('nvim.spellfile', function()
eq(true, out.done) eq(true, out.done)
eq(false, out.did_reload) eq(false, out.did_reload)
end) 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) end)