Skip to content

Commit 826a0b1

Browse files
committed
fusion-lint: Add initial linter
1 parent 5486b42 commit 826a0b1

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

bin/util/linter.lua

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/usr/bin/env lua
2+
--- Check a FusionScript file for syntax and logical errors
3+
-- @script fusion-lint
4+
-- @usage fusion-lint [-h] [FILE]
5+
local argparse = require("argparse")
6+
local parser = require("fusion.core.parser")
7+
local unpack = require("fusion.util").unpack
8+
9+
local argparser = argparse() {
10+
name = "fusion-lint";
11+
description = "Check a FusionScript file for syntax and logical errors";
12+
epilog = "For more info, see https://fusionscript.info";
13+
}
14+
argparser:argument("file", "File(s) to lint"):args("+")
15+
local files = argparser:parse().file
16+
17+
local function lint_file(file_name, file)
18+
local messages = {}
19+
local is_linted, result = pcall(parser.match, nil, file:read("*a"))
20+
if not is_linted then
21+
local message = result.msg[2]
22+
local pos = result.pos
23+
messages[#messages + 1] =
24+
("%s:%d:%d: (E001) %s"):format(file_name, pos.y, pos.x, message)
25+
else -- luacheck: ignore
26+
-- pass
27+
end
28+
return messages
29+
end
30+
31+
for index, file in ipairs(files) do
32+
files[index] = {file, assert(io.open(file))} -- TODO: support for dirs
33+
end
34+
35+
for _, file in ipairs(files) do
36+
for _, line in ipairs(lint_file(unpack(file))) do
37+
print(line)
38+
end
39+
end

0 commit comments

Comments
 (0)