summaryrefslogtreecommitdiff
path: root/src/luarocks/cmd/lint.lua
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
committerMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
commit5155816b7b925dec5d5feb1568b1d7ceb00938b9 (patch)
treedeca28ea15e79f6f804c3d90d2ba757881638af5 /src/luarocks/cmd/lint.lua
fetch tarballHEADmaster
Diffstat (limited to 'src/luarocks/cmd/lint.lua')
-rw-r--r--src/luarocks/cmd/lint.lua50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/luarocks/cmd/lint.lua b/src/luarocks/cmd/lint.lua
new file mode 100644
index 0000000..738503c
--- /dev/null
+++ b/src/luarocks/cmd/lint.lua
@@ -0,0 +1,50 @@
+
+--- Module implementing the LuaRocks "lint" command.
+-- Utility function that checks syntax of the rockspec.
+local lint = {}
+
+local util = require("luarocks.util")
+local download = require("luarocks.download")
+local fetch = require("luarocks.fetch")
+
+function lint.add_to_parser(parser)
+ local cmd = parser:command("lint", "Check syntax of a rockspec.\n\n"..
+ "Returns success if the text of the rockspec is syntactically correct, else failure.",
+ util.see_also())
+ :summary("Check syntax of a rockspec.")
+
+ cmd:argument("rockspec", "The rockspec to check.")
+end
+
+function lint.command(args)
+
+ local filename = args.rockspec
+ if not filename:match(".rockspec$") then
+ local err
+ filename, err = download.download("rockspec", filename:lower())
+ if not filename then
+ return nil, err
+ end
+ end
+
+ local rs, err = fetch.load_local_rockspec(filename)
+ if not rs then
+ return nil, "Failed loading rockspec: "..err
+ end
+
+ local ok = true
+
+ -- This should have been done in the type checker,
+ -- but it would break compatibility of other commands.
+ -- Making 'lint' alone be stricter shouldn't be a problem,
+ -- because extra-strict checks is what lint-type commands
+ -- are all about.
+ if not rs.description or not rs.description.license then
+ util.printerr("Rockspec has no description.license field.")
+ ok = false
+ end
+
+ return ok, ok or filename.." failed consistency checks."
+end
+
+return lint