forked from Mineclonia/Mineclonia
Merge pull request 'tools: set up luacheck' (#57) from e/Mineclonia:luacheck-setup into master
Reviewed-on: Mineclonia/Mineclonia#57 Reviewed-by: Elias Åström <ryvnf@riseup.net>
This commit is contained in:
commit
ab389e9995
|
@ -0,0 +1,102 @@
|
|||
std = "min"
|
||||
|
||||
read_globals = {
|
||||
"ItemStack",
|
||||
"dump", "dump2",
|
||||
"vector",
|
||||
"VoxelArea",
|
||||
"minetest",
|
||||
"PseudoRandom",
|
||||
"PerlinNoise",
|
||||
"PcgRandom",
|
||||
|
||||
string = {fields = {"split", "trim"}},
|
||||
table = {fields = {"copy", "getn", "indexof", "insert_all"}},
|
||||
math = {fields = {"hypot", "round"}},
|
||||
}
|
||||
|
||||
-- A config option to allow r/w access to mods which contain
|
||||
-- this one. It only avoids a couple warnings, and may not be
|
||||
-- the behavior we want, so it's disabled by default.
|
||||
local allow_parents=false
|
||||
|
||||
local lfs = require "lfs"
|
||||
|
||||
-- Seed the queue with the mods/ directory
|
||||
local queue={ {"mods"} }
|
||||
|
||||
local function check(dir)
|
||||
-- Get the string of the directory path
|
||||
local sdir=table.concat(dir, "/")
|
||||
-- Save the top-level directory name as a
|
||||
-- fallback in case there's no mod.conf,
|
||||
-- or no name= directive.
|
||||
local name=dir[#dir]
|
||||
|
||||
-- Is there a mod.conf?
|
||||
if lfs.attributes(sdir.."/mod.conf", "mode") == "file" then
|
||||
local deps={}
|
||||
for line in io.lines(sdir.."/mod.conf") do
|
||||
-- Use name= if it's there
|
||||
name=string.match(line, "name *= *([a-zA-Z0-9_]+)") or name
|
||||
-- Get the dependency entries (if they're there)
|
||||
local ents=string.match(line, "depends *=(.*)$")
|
||||
if ents then
|
||||
-- Split them in to the comma-separated names
|
||||
for m in string.gmatch(ents, "([a-zA-Z0-9_]+),?") do
|
||||
table.insert(deps, m)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local glb={ name }
|
||||
if allow_parents then
|
||||
for _, v in pairs(dir) do
|
||||
-- Skip ALL-CAPS names since those tend
|
||||
-- to be collections of mods instead of
|
||||
-- mods themselves.
|
||||
if not string.match(v, "^[A-Z]+$") then
|
||||
table.insert(glb, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Tell Luacheck what the directory is allowed to do
|
||||
files[sdir]={
|
||||
globals = glb,
|
||||
read_globals = deps,
|
||||
}
|
||||
elseif lfs.attributes(sdir.."/init.lua", "mode") == "file" then
|
||||
-- No mod.conf, but there's an init.lua here.
|
||||
local glb={ name }
|
||||
if allow_parents then
|
||||
for _, v in pairs(dir) do
|
||||
-- Again, skip ALL-CAPS.
|
||||
if not string.match(v, "^[A-Z]+$") then
|
||||
table.insert(glb, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
files[sdir]={ globals=glb }
|
||||
end
|
||||
|
||||
-- Queue any child directories
|
||||
for d in lfs.dir(sdir) do
|
||||
-- Skip hidden directories and parent/current directories.
|
||||
if lfs.attributes(sdir.."/"..d, "mode") == "directory" and not string.match(d, "^%.") then
|
||||
-- Copy dir in to nd (New Dir)
|
||||
local nd={}
|
||||
for k, v in pairs(dir) do
|
||||
nd[k]=v
|
||||
end
|
||||
nd[#nd+1]=d
|
||||
table.insert(queue, nd)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
while #queue > 0 do
|
||||
-- Pop an entry and process it.
|
||||
check(table.remove(queue, 1))
|
||||
end
|
Loading…
Reference in New Issue