rsplug 0.2.4

A blazingly fast Neovim plugin manager written in Rust
-- Auto generated by rsplug
local cmd2pkgid = { <% for (cmd, ids) in cmd2pkgid {%>['<%=cmd%>']={<% for id in ids { %>'<%=id%>',<%}%>},<%}%> }

return {
	---@param args vim.api.keyset.create_user_command.command_args
	cmd_handler = function(cmd, args)
		vim.api.nvim_del_user_command(cmd)
		for _,id in ipairs(cmd2pkgid[cmd] or {}) do
			require '_rsplug'.packadd(id)
		end

		local range
		if args.line1 == args.line2 then
			range = ''
		elseif args.line1 == vim.fn.line "'<" and args.line2 == vim.fn.line "'>" then
			range = "'<,'>"
		else
			range = string.format('%d,%d', args.line1, args.line2)
		end

		local cmdline = cmd .. (args.bang and '! ' or ' ') .. args.args

		---@diagnostic disable-next-line: param-type-mismatch
		local ok, err = pcall(vim.cmd, cmdline)
		if not ok and tostring(err):match '^E481:' then
			vim.cmd(range .. cmdline)
		end
	end,
	dummy_complete = function(cmd, arglead, ...)
		vim.api.nvim_del_user_command(cmd)
		for _,id in ipairs(cmd2pkgid[cmd] or {}) do
			require '_rsplug'.packadd(id)
		end

		local cmdinfo = (vim.api.nvim_get_commands { builtin = false } or {})[cmd]
		local list = { arglead }
		if cmdinfo and cmdinfo.complete_arg then
			if cmdinfo.complete == 'custom' then
				list = vim.fn.split(vim.fn[cmdinfo.complete_arg](arglead, ...), '\n')
			elseif cmdinfo.complete == 'customlist' then
				list = vim.fn[cmdinfo.complete_arg](arglead, ...)
			end
		end
		return list
	end,
}