fix: resolve all remaining LuaLS warnings in src/

This commit is contained in:
Riccardo Mazzarini
2026-03-01 12:59:16 +01:00
parent 9204b7541d
commit 92b2a26772
19 changed files with 87 additions and 43 deletions

View File

@@ -212,7 +212,7 @@ function CppLintState:suppress_errors_from(fname)
local ok2, data = pcall(vim.json.decode, line)
if ok2 then
local fname2, lines, category = data[1], data[2], data[3]
local lines_tuple = vim.tbl_islist(lines) and lines or { lines }
local lines_tuple = vim.islist(lines) and lines or { lines }
self.suppressed_errors[fname2][vim.inspect(lines_tuple)][category] = true
end
end

View File

@@ -50,11 +50,15 @@
--- @class nvim.c_grammar.Empty
--- @field [1] 'empty'
--- @class nvim.c_grammar.Comment
--- @field comment string
--- @alias nvim.c_grammar.result
--- | nvim.c_grammar.Proto
--- | nvim.c_grammar.Preproc
--- | nvim.c_grammar.Empty
--- | nvim.c_grammar.Keyset
--- | nvim.c_grammar.Comment
--- @class nvim.c_grammar
--- @field match fun(self, input: string): nvim.c_grammar.result[]

View File

@@ -10,7 +10,7 @@ local api_type = require('gen.api_types')
--- @class nvim.cdoc.parser.return
--- @field name string
--- @field type string
--- @field desc string
--- @field desc? string
--- @class nvim.cdoc.parser.note
--- @field desc string
@@ -25,7 +25,8 @@ local api_type = require('gen.api_types')
--- @field returns nvim.cdoc.parser.return[]
--- @field desc string
--- @field deprecated? true
--- @field since? string
--- @field deprecated_since? integer
--- @field since? string|integer
--- @field attrs? string[]
--- @field nodoc? true
--- @field notes? nvim.cdoc.parser.note[]
@@ -107,6 +108,8 @@ local function process_doc_line(line, state)
table.insert(cur_obj.params, state.last_doc_item)
elseif kind == 'return' then
cur_obj.returns = { {
name = '',
type = '',
desc = parsed.desc,
} }
state.last_doc_item_indent = nil
@@ -132,7 +135,7 @@ local function process_doc_line(line, state)
end
end
--- @param item table
--- @param item nvim.c_grammar.Proto
--- @param state nvim.cdoc.parser.State
local function process_proto(item, state)
state.cur_obj = state.cur_obj or {}
@@ -160,7 +163,11 @@ local function process_proto(item, state)
end
end
cur_obj.returns = cur_obj.returns or { {} }
cur_obj.returns = cur_obj.returns or { {
name = '',
type = '',
desc = nil,
} }
cur_obj.returns[1].type = api_type(item.return_type)
for _, a in ipairs({
@@ -191,7 +198,7 @@ end
local M = {}
--- @param filename string
--- @return {} classes
--- @return table<string,nvim.luacats.parser.class> classes
--- @return nvim.cdoc.parser.fun[] funs
--- @return string[] briefs
function M.parse(filename)
@@ -208,7 +215,7 @@ function M.parse(filename)
else
add_doc_lines_to_obj(state)
if item[1] == 'proto' then
process_proto(item, state)
process_proto(item --[[@as nvim.c_grammar.Proto]], state)
table.insert(funs, state.cur_obj)
end
local cur_obj = state.cur_obj

View File

@@ -294,7 +294,6 @@ local metadata_output = assert(io.open(exported_funcs_metadata_outputf, 'wb'))
metadata_output:write(vim.mpack.encode(exported_functions))
metadata_output:close()
--- @type integer[]
-- start building the dispatch wrapper output
local output = assert(io.open(dispatch_outputf, 'wb'))
@@ -682,6 +681,8 @@ local mpack_output = assert(io.open(eval_funcs_metadata_outputf, 'wb'))
mpack_output:write(vim.mpack.encode(functions))
mpack_output:close()
--- @param output_handle file*
--- @param headers_to_include string[]
local function include_headers(output_handle, headers_to_include)
for i = 1, #headers_to_include do
if headers_to_include[i]:sub(-12) ~= '.generated.h' then

View File

@@ -9,12 +9,12 @@ local nvim_version_inputf = arg[5] -- nvim version
local dump_bin_array_inputf = arg[6]
local api_metadata_outputf = arg[7]
local version = loadfile(nvim_version_inputf)()
local version = loadfile(nvim_version_inputf)() --[[@as {[1]: string, [2]: any}[] ]]
local git_version = io.open(git_version_inputf):read '*a'
local version_build = git_version:match('#define NVIM_VERSION_BUILD "([^"]+)"') or vim.NIL
local text = io.open(ui_options_inputf):read '*a'
local ui_options_text = text:match('ui_ext_names%[][^{]+{([^}]+)}')
local text = assert(io.open(ui_options_inputf)):read '*a'
local ui_options_text = assert(text:match('ui_ext_names%[][^{]+{([^}]+)}')) --[[@as string]]
local ui_options = { 'rgb' }
for x in ui_options_text:gmatch('"([a-z][a-z_]+)"') do
table.insert(ui_options, x)

View File

@@ -2,11 +2,11 @@
local mpack = vim.mpack
assert(#arg == 5)
local input = io.open(arg[1], 'rb')
local call_output = io.open(arg[2], 'wb')
local remote_output = io.open(arg[3], 'wb')
local metadata_output = io.open(arg[4], 'wb')
local client_output = io.open(arg[5], 'wb')
local input = assert(io.open(arg[1], 'rb'))
local call_output = assert(io.open(arg[2], 'wb'))
local remote_output = assert(io.open(arg[3], 'wb'))
local metadata_output = assert(io.open(arg[4], 'wb'))
local client_output = assert(io.open(arg[5], 'wb'))
local c_grammar = require('gen.c_grammar')
local events = c_grammar.grammar:match(input:read('*all'))

View File

@@ -25,7 +25,7 @@ end
assert(#arg >= 3 and (#arg - 1) % 2 == 0)
local target_file = arg[1] or error('Need a target file')
local target = io.open(target_file, 'w')
local target = assert(io.open(target_file, 'w'))
target:write('#include <stdint.h>\n\n')

View File

@@ -66,7 +66,6 @@ local function process_decl(d)
return d .. ';'
end
--- @param fname string
--- @param text string
--- @return string[] static
--- @return string[] non_static

View File

@@ -90,11 +90,14 @@ hashpipe:write('static const EvalFuncDef functions[] = {\n')
for _, name in ipairs(neworder) do
local def = funcs[name]
local args = def.args or 0
if type(args) == 'number' then
args = { args, args }
elseif #args == 1 then
args[2] = 'MAX_FUNC_ARGS'
local min_args = 0
local max_args = 0 --- @type integer|string
local def_args = def.args
if type(def_args) == 'number' then
min_args, max_args = def_args, def_args
elseif type(def_args) == 'table' then
min_args = def_args[1] or 0
max_args = def_args[2] or 'MAX_FUNC_ARGS'
end
local base = def.base or 'BASE_NONE'
local func = def.func or ('f_' .. name)
@@ -103,8 +106,8 @@ for _, name in ipairs(neworder) do
hashpipe:write(
(' { "%s", %s, %s, %s, %s, &%s, %s },\n'):format(
name,
args[1],
args[2],
min_args,
max_args,
base,
fast,
func,

View File

@@ -395,7 +395,7 @@ local function render_eval_meta(f, fun, write)
write('--- @deprecated')
end
local desc = fun.desc
local desc = fun.desc --[[@as string?]]
if desc then
--- @type string
@@ -406,7 +406,9 @@ local function render_eval_meta(f, fun, write)
end
end
for _, text in ipairs(vim.fn.reverse(fun.generics or {})) do
for _, text in
ipairs(vim.fn.reverse(fun.generics or {} --[[@as string[] ]]))
do
write(fmt('--- @generic %s', text))
end
@@ -586,7 +588,12 @@ local function render_option_meta(_f, opt, write)
write('--- @type ' .. OPTION_TYPES[opt.type])
end
write('vim.o.' .. opt.full_name .. ' = ' .. render_option_default(opt.defaults))
write(
'vim.o.'
.. opt.full_name
.. ' = '
.. render_option_default(opt.defaults --[[@as vim.option_defaults]])
)
if opt.abbreviation then
write('vim.o.' .. opt.abbreviation .. ' = vim.o.' .. opt.full_name)
end
@@ -777,7 +784,7 @@ local function render_option_doc(_f, opt, write)
local otype = opt.type == 'boolean' and 'boolean' or opt.type
if opt.defaults.doc or opt.defaults.if_true ~= nil or opt.defaults.meta ~= nil then
local v = render_option_default(opt.defaults, true)
local v = render_option_default(opt.defaults --[[@as vim.option_defaults]], true)
local pad = string.rep('\t', math.max(1, math.ceil((24 - #name_str) / 8)))
if opt.defaults.doc then
local deflen = #fmt('%s%s%s (', name_str, pad, otype)

View File

@@ -3,7 +3,9 @@ local names_file = arg[2]
local auevents_file = arg[3]
local hashy = require('gen.hashy')
local auevents = loadfile(auevents_file)()
---@type {events: table<string, boolean>, aliases: table<string, string>}
local auevents = assert(loadfile(auevents_file))()
local events = auevents.events
local aliases = auevents.aliases

View File

@@ -6,8 +6,8 @@ local enumfname = arg[1] -- '/ex_cmds_enum.generated.h'
local defsfname = arg[2] -- '/ex_cmds_defs.generated.h'
local ex_cmds_name = arg[3] -- 'ex_cmds.lua'
local enumfile = io.open(enumfname, 'w')
local defsfile = io.open(defsfname, 'w')
local enumfile = assert(io.open(enumfname, 'w'))
local defsfile = assert(io.open(defsfname, 'w'))
local bit = require 'bit'
local ex_cmds = loadfile(ex_cmds_name)()

View File

@@ -204,7 +204,7 @@ do
end
end
end
local f = io.open(filetype_lua, 'w')
local f = assert(io.open(filetype_lua, 'w'))
f:write(table.concat(lines, '\n') .. '\n')
f:close()
end

View File

@@ -244,6 +244,9 @@ local function is_noise(line, noise_lines)
end
--- Creates a github issue URL at neovim/tree-sitter-vimdoc with prefilled content.
--- @param fname string
--- @param to_fname string
--- @param sample_text string
--- @return string
local function get_bug_url_vimdoc(fname, to_fname, sample_text)
local this_url = string.format('https://neovim.io/doc/user/%s', vim.fs.basename(to_fname))
@@ -260,6 +263,10 @@ local function get_bug_url_vimdoc(fname, to_fname, sample_text)
end
--- Creates a github issue URL at neovim/neovim with prefilled content.
--- @param fname string
--- @param to_fname string
--- @param sample_text string
--- @param token_name? string
--- @return string
local function get_bug_url_nvim(fname, to_fname, sample_text, token_name)
local this_url = string.format('https://neovim.io/doc/user/%s', vim.fs.basename(to_fname))
@@ -481,7 +488,7 @@ local function visit_validate(root, level, lang_tree, opt, stats)
and (not vim.tbl_contains({ 'codespan', 'taglink', 'tag' }, parent))
then
local text_nopunct = vim.fn.trim(text, '.,', 0) -- Ignore some punctuation.
local fname_basename = assert(vim.fs.basename(opt.fname))
local fname_basename = assert(vim.fs.basename(opt.fname --[[ @as string ]]))
if spell_dict[text_nopunct] then
local should_ignore = (
spell_ignore_files[fname_basename] == true
@@ -791,12 +798,16 @@ local function get_helpfiles(dir, include)
end
--- Populates the helptags map.
--- @param help_dir string
--- @return table<string, string>
local function _get_helptags(help_dir)
---@type table<string, string>
local m = {}
-- Load a random help file to convince taglist() to do its job.
vim.cmd(string.format('split %s/api.txt', help_dir))
vim.cmd('lcd %:p:h')
for _, item in ipairs(vim.fn.taglist('.*')) do
local tags = vim.fn.taglist('.*') --[[ @as {name: string, filename: string}[] ]]
for _, item in ipairs(tags) do
if vim.endswith(item.filename, '.txt') then
m[item.name] = item.filename
end

View File

@@ -4,7 +4,7 @@
local out = arg[1]
local dir = arg[2]
local dirfd = vim.uv.fs_opendir(dir, nil, 1)
local dirfd = assert(vim.uv.fs_opendir(dir, nil, 1))
local files = {}
while true do
local file = dirfd:readdir()
@@ -60,8 +60,8 @@ table.sort(tags, function(a, b)
return a[1] < b[1]
end)
local f = io.open(out, 'w')
local lasttagname, lastfn = nil
local f = assert(io.open(out, 'w'))
local lasttagname, lastfn = nil, nil
for _, tag in ipairs(tags) do
local tagname, fn = unpack(tag)
if tagname == lasttagname then

View File

@@ -2,8 +2,9 @@ local names_file = arg[1]
local keycodes_file = arg[2]
local hashy = require('gen.hashy')
local keycodes = loadfile(keycodes_file)()
---@type {names: [string, string][]}
local keycodes = assert(loadfile(keycodes_file))()
local keycode_names = keycodes.names
local hashorder = {} --- @type string[]

View File

@@ -147,6 +147,7 @@ local function quote(str)
return '"' .. str .. '"'
end
--- @type fun(...: any)
local dbg = function() end
-- dbg = print
@@ -199,7 +200,9 @@ for _, entry in ipairs(entries) do
local boolpat = prepat .. ','
local numpat = prepat .. '#([^,]+),'
local strpat = prepat .. '=([^,]+),'
local bools, nums, strs = {}, {}, {}
local bools = {} --- @type table<string, true>
local nums = {} --- @type table<string, string>
local strs = {} --- @type table<string, string>
for i, line in ipairs(lines) do
local boolmatch = string.match(line, boolpat)
local nummatch, numval = string.match(line, numpat)

View File

@@ -54,10 +54,15 @@ local INDENTATION = 4
--- @field helptag_fmt fun(name: string): string|string[]
---
--- Per-function helptag.
--- @field fn_helptag_fmt? fun(fun: nvim.luacats.parser.fun): string
--- @field fn_helptag_fmt? fun(fun: nvim.gen_vimdoc.HelptagTarget): string
---
--- @field append_only? string[]
---@alias nvim.gen_vimdoc.HelptagTarget
---| nvim.luacats.parser.fun
---| nvim.luacats.parser.field
---| nvim.luacats.parser.param
local function contains(t, xs)
return vim.tbl_contains(xs, t)
end
@@ -84,13 +89,13 @@ local function nvim_api_info()
prerelease = m2 == 'true'
end
end
nvim_api_info_ = { level = level, prerelease = prerelease }
nvim_api_info_ = { level = assert(level), prerelease = assert(prerelease) }
end
return nvim_api_info_
end
--- @param fun nvim.luacats.parser.fun
--- @param fun nvim.gen_vimdoc.HelptagTarget
--- @return string
local function fn_helptag_fmt_common(fun)
local fn_sfx = fun.table and '' or '()'

View File

@@ -461,6 +461,7 @@ end
--- @param filename string
--- @param uncommitted nvim.luacats.parser.obj[]
-- luacheck: no unused
---@diagnostic disable-next-line: unused-function, unused-local
local function dump_uncommitted(filename, uncommitted)
local out_path = 'luacats-uncommited/' .. filename:gsub('/', '%%') .. '.txt'
if #uncommitted > 0 then