* Add luacheck ci job * Fix most of the linting issues * fixup: lint Co-authored-by: TJ DeVries <devries.timothyj@gmail.com>
203 lines
4.3 KiB
Lua
203 lines
4.3 KiB
Lua
local pathlib = require('telescope.path')
|
||
|
||
local utils = {}
|
||
|
||
utils.get_separator = function()
|
||
return pathlib.separator
|
||
end
|
||
|
||
utils.if_nil = function(x, was_nil, was_not_nil)
|
||
if x == nil then
|
||
return was_nil
|
||
else
|
||
return was_not_nil
|
||
end
|
||
end
|
||
|
||
utils.get_default = function(x, default)
|
||
return utils.if_nil(x, default, x)
|
||
end
|
||
|
||
utils.get_lazy_default = function(x, defaulter, ...)
|
||
if x == nil then
|
||
return defaulter(...)
|
||
else
|
||
return x
|
||
end
|
||
end
|
||
|
||
local function reversedipairsiter(t, i)
|
||
i = i - 1
|
||
if i ~= 0 then
|
||
return i, t[i]
|
||
end
|
||
end
|
||
|
||
utils.reversed_ipairs = function(t)
|
||
return reversedipairsiter, t, #t + 1
|
||
end
|
||
|
||
utils.default_table_mt = {
|
||
__index = function(t, k)
|
||
local obj = {}
|
||
rawset(t, k, obj)
|
||
return obj
|
||
end
|
||
}
|
||
|
||
utils.repeated_table = function(n, val)
|
||
local empty_lines = {}
|
||
for _ = 1, n do
|
||
table.insert(empty_lines, val)
|
||
end
|
||
return empty_lines
|
||
end
|
||
|
||
utils.quickfix_items_to_entries = function(locations)
|
||
local results = {}
|
||
|
||
for _, entry in ipairs(locations) do
|
||
local vimgrep_str = entry.vimgrep_str or string.format(
|
||
"%s:%s:%s: %s",
|
||
vim.fn.fnamemodify(entry.display_filename or entry.filename, ":."),
|
||
entry.lnum,
|
||
entry.col,
|
||
entry.text
|
||
)
|
||
|
||
table.insert(results, {
|
||
valid = true,
|
||
value = entry,
|
||
ordinal = vimgrep_str,
|
||
display = vimgrep_str,
|
||
|
||
start = entry.start,
|
||
finish = entry.finish,
|
||
})
|
||
end
|
||
|
||
return results
|
||
end
|
||
|
||
-- TODO: Figure out how to do this... could include in plenary :)
|
||
-- NOTE: Don't use this yet. It will segfault sometimes.
|
||
--
|
||
-- opts.shorten_path and function(value)
|
||
-- local result = {
|
||
-- valid = true,
|
||
-- display = utils.path_shorten(value),
|
||
-- ordinal = value,
|
||
-- value = value
|
||
-- }
|
||
|
||
-- return result
|
||
-- end or nil)
|
||
utils.path_shorten = pathlib.shorten
|
||
|
||
utils.path_tail = (function()
|
||
local os_sep = utils.get_separator()
|
||
local match_string = '[^' .. os_sep .. ']*$'
|
||
|
||
return function(path)
|
||
return string.match(path, match_string)
|
||
end
|
||
end)()
|
||
|
||
-- local x = utils.make_default_callable(function(opts)
|
||
-- return function()
|
||
-- print(opts.example, opts.another)
|
||
-- end
|
||
-- end, { example = 7, another = 5 })
|
||
|
||
-- x()
|
||
-- x.new { example = 3 }()
|
||
function utils.make_default_callable(f, default_opts)
|
||
default_opts = default_opts or {}
|
||
|
||
return setmetatable({
|
||
new = function(opts)
|
||
opts = vim.tbl_extend("keep", opts, default_opts)
|
||
return f(opts)
|
||
end,
|
||
}, {
|
||
__call = function()
|
||
local ok, err = pcall(f(default_opts))
|
||
if not ok then
|
||
error(debug.traceback(err))
|
||
end
|
||
end
|
||
})
|
||
end
|
||
|
||
function utils.job_is_running(job_id)
|
||
if job_id == nil then return false end
|
||
return vim.fn.jobwait({job_id}, 0)[1] == -1
|
||
end
|
||
|
||
function utils.buf_delete(bufnr)
|
||
if bufnr == nil then return end
|
||
|
||
-- Suppress the buffer deleted message for those with &report<2
|
||
local start_report = vim.o.report
|
||
if start_report < 2 then vim.o.report = 2 end
|
||
|
||
if vim.api.nvim_buf_is_valid(bufnr) and vim.api.nvim_buf_is_loaded(bufnr) then
|
||
vim.api.nvim_buf_delete(bufnr, { force = true })
|
||
end
|
||
|
||
if start_report < 2 then vim.o.report = start_report end
|
||
end
|
||
|
||
function utils.max_split(s, pattern, maxsplit)
|
||
pattern = pattern or ' '
|
||
maxsplit = maxsplit or -1
|
||
|
||
local t = {}
|
||
|
||
local curpos = 0
|
||
while maxsplit ~= 0 and curpos < #s do
|
||
local found, final = string.find(s, pattern, curpos, false)
|
||
if found ~= nil then
|
||
local val = string.sub(s, curpos, found - 1)
|
||
|
||
if #val > 0 then
|
||
maxsplit = maxsplit - 1
|
||
table.insert(t, val)
|
||
end
|
||
|
||
curpos = final + 1
|
||
else
|
||
table.insert(t, string.sub(s, curpos))
|
||
break
|
||
-- curpos = curpos + 1
|
||
end
|
||
|
||
if maxsplit == 0 then
|
||
table.insert(t, string.sub(s, curpos))
|
||
end
|
||
end
|
||
|
||
return t
|
||
end
|
||
|
||
|
||
function utils.data_directory()
|
||
local sourced_file = require('plenary.debug_utils').sourced_filepath()
|
||
local base_directory = vim.fn.fnamemodify(sourced_file, ":h:h:h")
|
||
|
||
return base_directory .. pathlib.separator .. 'data' .. pathlib.separator
|
||
end
|
||
|
||
function utils.display_termcodes(str)
|
||
return str:gsub(string.char(9), "<TAB>"):gsub("", "<C-F>"):gsub(" ", "<Space>")
|
||
end
|
||
|
||
function utils.get_os_command_output(cmd)
|
||
local handle = assert(io.popen(cmd, 'r'))
|
||
local output = assert(handle:read('*a'))
|
||
assert(handle:close())
|
||
return output
|
||
end
|
||
|
||
return utils
|