43 lines
1.2 KiB
Lua
43 lines
1.2 KiB
Lua
local uv = vim.loop
|
|
|
|
local M = {}
|
|
|
|
-- A naive lint approach: if a file ends with .lua, run "luacheck" if available.
|
|
-- If .go, run "go build" or "go vet", etc. This is just an example; adapt to your needs.
|
|
-- Return nil if lint tool can't be determined or is not installed.
|
|
local function guess_linter_command(path)
|
|
if path:match("%.lua$") then
|
|
return "luacheck " .. vim.fn.shellescape(path)
|
|
elseif path:match("%.go$") then
|
|
-- We'll just do a quick "go build" or "go vet"
|
|
return "go vet " .. vim.fn.fnamemodify(path, ":h")
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- Executes the linter command and returns the output or an error if it fails to run.
|
|
local function run_command(cmd)
|
|
local handle = io.popen(cmd)
|
|
if not handle then
|
|
return nil, ("Failed to run: %s"):format(cmd)
|
|
end
|
|
local output = handle:read("*a") or ""
|
|
handle:close()
|
|
return output, nil
|
|
end
|
|
|
|
function M.lint_file(path)
|
|
local lint_cmd = guess_linter_command(path)
|
|
if not lint_cmd then
|
|
return nil, "No known lint command for file: " .. path
|
|
end
|
|
|
|
local output, err = run_command(lint_cmd)
|
|
if not output then
|
|
return nil, err or ("Failed to lint: " .. path)
|
|
end
|
|
return output, nil
|
|
end
|
|
|
|
return M
|