local check = require "luacheck.check"
|
local filter = require "luacheck.filter"
|
local options = require "luacheck.options"
|
local format = require "luacheck.format"
|
local utils = require "luacheck.utils"
|
|
local luacheck = {
|
_VERSION = "0.23.0"
|
}
|
|
local function raw_validate_options(fname, opts, stds, context)
|
local ok, err = options.validate(options.all_options, opts, stds)
|
|
if not ok then
|
if context then
|
error(("bad argument #2 to '%s' (%s: %s)"):format(fname, context, err))
|
else
|
error(("bad argument #2 to '%s' (%s)"):format(fname, err))
|
end
|
end
|
end
|
|
local function validate_options(fname, items, opts, stds)
|
raw_validate_options(fname, opts)
|
|
if opts ~= nil then
|
for i in ipairs(items) do
|
raw_validate_options(fname, opts[i], stds, ("invalid options at index [%d]"):format(i))
|
|
if opts[i] ~= nil then
|
for j, nested_opts in ipairs(opts[i]) do
|
raw_validate_options(fname, nested_opts, stds, ("invalid options at index [%d][%d]"):format(i, j))
|
end
|
end
|
end
|
end
|
end
|
|
-- Returns report for a string.
|
function luacheck.get_report(src)
|
local msg = ("bad argument #1 to 'luacheck.get_report' (string expected, got %s)"):format(type(src))
|
assert(type(src) == "string", msg)
|
return check(src)
|
end
|
|
-- Applies options to reports. Reports with .fatal field are unchanged.
|
-- Options are applied to reports[i] in order: options, options[i], options[i][1], options[i][2], ...
|
-- Returns new array of reports, adds .warnings, .errors and .fatals fields to this array.
|
function luacheck.process_reports(reports, opts, stds)
|
local msg = ("bad argument #1 to 'luacheck.process_reports' (table expected, got %s)"):format(type(reports))
|
assert(type(reports) == "table", msg)
|
validate_options("luacheck.process_reports", reports, opts, stds)
|
local report = filter.filter(reports, opts, stds)
|
report.warnings = 0
|
report.errors = 0
|
report.fatals = 0
|
|
for _, file_report in ipairs(report) do
|
if file_report.fatal then
|
report.fatals = report.fatals + 1
|
else
|
for _, event in ipairs(file_report) do
|
if event.code:sub(1, 1) == "0" then
|
report.errors = report.errors + 1
|
else
|
report.warnings = report.warnings + 1
|
end
|
end
|
end
|
end
|
|
return report
|
end
|
|
-- Checks strings with options, returns report.
|
-- Tables with .fatal field are unchanged.
|
function luacheck.check_strings(srcs, opts)
|
local msg = ("bad argument #1 to 'luacheck.check_strings' (table expected, got %s)"):format(type(srcs))
|
assert(type(srcs) == "table", msg)
|
|
for _, item in ipairs(srcs) do
|
msg = ("bad argument #1 to 'luacheck.check_strings' (array of strings or tables expected, got %s)"):format(
|
type(item))
|
assert(type(item) == "string" or type(item) == "table", msg)
|
end
|
|
validate_options("luacheck.check_strings", srcs, opts)
|
|
local reports = {}
|
|
for i, src in ipairs(srcs) do
|
if type(src) == "table" and src.fatal then
|
reports[i] = src
|
else
|
reports[i] = luacheck.get_report(src)
|
end
|
end
|
|
return luacheck.process_reports(reports, opts)
|
end
|
|
function luacheck.check_files(files, opts)
|
local msg = ("bad argument #1 to 'luacheck.check_files' (table expected, got %s)"):format(type(files))
|
assert(type(files) == "table", msg)
|
|
for _, item in ipairs(files) do
|
msg = ("bad argument #1 to 'luacheck.check_files' (array of paths or file handles expected, got %s)"):format(
|
type(item))
|
assert(type(item) == "string" or io.type(item) == "file", msg
|
)
|
end
|
|
validate_options("luacheck.check_files", files, opts)
|
|
local srcs = {}
|
|
for i, file in ipairs(files) do
|
local src, err = utils.read_file(file)
|
srcs[i] = src or {fatal = "I/O", msg = err}
|
end
|
|
return luacheck.check_strings(srcs, opts)
|
end
|
|
function luacheck.get_message(issue)
|
local msg = ("bad argument #1 to 'luacheck.get_message' (table expected, got %s)"):format(type(issue))
|
assert(type(issue) == "table", msg)
|
return format.get_message(issue)
|
end
|
|
setmetatable(luacheck, {__call = function(_, ...)
|
return luacheck.check_files(...)
|
end})
|
|
return luacheck
|