Add luacheck (#3)

Co-authored-by: syimyuzya <syimyuzya@gmail.com>
This commit is contained in:
OgelGames 2021-12-09 15:46:33 +11:00 committed by GitHub
parent 30d0af57be
commit aa5f865131
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 29 deletions

13
.github/workflows/luacheck.yml vendored Normal file
View File

@ -0,0 +1,13 @@
name: luacheck
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: apt
run: sudo apt-get install -y luarocks
- name: luacheck install
run: luarocks install --local luacheck
- name: luacheck run
run: $HOME/.luarocks/bin/luacheck ./

17
.luacheckrc Normal file
View File

@ -0,0 +1,17 @@
unused_args = false
max_line_length = 180
globals = {
"minetest",
"signs_lib",
}
read_globals = {
-- Builtin
table = {fields = {"copy"}},
"ItemStack", "vector",
-- Mod deps
"intllib",
"screwdriver",
}

30
api.lua
View File

@ -255,8 +255,7 @@ end
function signs_lib.set_obj_text(pos, text, glow) function signs_lib.set_obj_text(pos, text, glow)
local split = signs_lib.split_lines_and_words local split = signs_lib.split_lines_and_words
local text_ansi = Utf8ToAnsi(text) local text_ansi = signs_lib.Utf8ToAnsi(text)
local n = minetest.registered_nodes[minetest.get_node(pos).name]
signs_lib.delete_objects(pos) signs_lib.delete_objects(pos)
-- only create sign entity for actual text -- only create sign entity for actual text
if text_ansi and text_ansi ~= "" then if text_ansi and text_ansi ~= "" then
@ -448,8 +447,6 @@ signs_lib.lineheight32,
signs_lib.avgwidth32, signs_lib.avgwidth32,
signs_lib.charwidth_wide32 = build_char_db(32) signs_lib.charwidth_wide32 = build_char_db(32)
local sign_groups = {choppy=2, dig_immediate=2}
local fences_with_sign = { }
-- some local helper functions -- some local helper functions
@ -471,7 +468,8 @@ local function char_tex(font_name, ch)
return ctexcache[font_name..ch], true return ctexcache[font_name..ch], true
else else
local c = ch:byte() local c = ch:byte()
local exists, tex = file_exists(CHAR_PATH:format(font_name, c)) local exists = file_exists(CHAR_PATH:format(font_name, c))
local tex
if exists and c ~= 14 then if exists and c ~= 14 then
tex = CHAR_FILE:format(font_name, c) tex = CHAR_FILE:format(font_name, c)
else else
@ -486,7 +484,8 @@ local function char_tex_wide(font_name, ch)
if ctexcache_wide[font_name..ch] then if ctexcache_wide[font_name..ch] then
return ctexcache_wide[font_name..ch], true return ctexcache_wide[font_name..ch], true
else else
local exists, tex = file_exists(CHAR_PATH_WIDE:format(font_name, ch)) local exists = file_exists(CHAR_PATH_WIDE:format(font_name, ch))
local tex
if exists then if exists then
tex = CHAR_FILE_WIDE:format(font_name, ch) tex = CHAR_FILE_WIDE:format(font_name, ch)
else else
@ -534,13 +533,12 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi
wide_type = "u" wide_type = "u"
elseif c:byte() < 0x80 or c:byte() >= 0xa0 then elseif c:byte() < 0x80 or c:byte() >= 0xa0 then
wide_type = "u" wide_type = "u"
local uchar = AnsiToUtf8(c) local uchar = signs_lib.AnsiToUtf8(c)
local code local code
if #uchar == 1 then if #uchar == 1 then
code = uchar:byte() code = uchar:byte()
else else
code = uchar:byte() % (2 ^ (7 - #uchar)) code = uchar:byte() % (2 ^ (7 - #uchar))
local j
for j = 1, #uchar do for j = 1, #uchar do
code = code * (2 ^ 6) + uchar:byte(j) - 0x80 code = code * (2 ^ 6) + uchar:byte(j) - 0x80
end end
@ -910,10 +908,6 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
local def = minetest.registered_items[signname] local def = minetest.registered_items[signname]
local ppos = minetest.get_pointed_thing_position(pointed_thing)
local pnode = minetest.get_node(ppos)
local pdef = minetest.registered_items[pnode.name]
if def.allow_onpole and signs_lib.check_for_pole(pos, pointed_thing) and not controls.sneak then if def.allow_onpole and signs_lib.check_for_pole(pos, pointed_thing) and not controls.sneak then
local newparam2 local newparam2
local lookdir = minetest.yaw_to_dir(placer:get_look_horizontal()) local lookdir = minetest.yaw_to_dir(placer:get_look_horizontal())
@ -922,7 +916,6 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
else else
newparam2 = minetest.dir_to_facedir(lookdir) newparam2 = minetest.dir_to_facedir(lookdir)
end end
local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = no_wall_name.."_onpole", param2 = newparam2}) minetest.swap_node(pos, {name = no_wall_name.."_onpole", param2 = newparam2})
elseif def.allow_onpole_horizontal and signs_lib.check_for_horizontal_pole(pos, pointed_thing) and not controls.sneak then elseif def.allow_onpole_horizontal and signs_lib.check_for_horizontal_pole(pos, pointed_thing) and not controls.sneak then
local newparam2 local newparam2
@ -932,15 +925,12 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
else else
newparam2 = minetest.dir_to_facedir(lookdir) newparam2 = minetest.dir_to_facedir(lookdir)
end end
local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = no_wall_name.."_onpole_horiz", param2 = newparam2}) minetest.swap_node(pos, {name = no_wall_name.."_onpole_horiz", param2 = newparam2})
elseif def.allow_hanging and signs_lib.check_for_ceiling(pointed_thing) and not controls.sneak then elseif def.allow_hanging and signs_lib.check_for_ceiling(pointed_thing) and not controls.sneak then
local newparam2 = minetest.dir_to_facedir(placer:get_look_dir()) local newparam2 = minetest.dir_to_facedir(placer:get_look_dir())
local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = no_wall_name.."_hanging", param2 = newparam2}) minetest.swap_node(pos, {name = no_wall_name.."_hanging", param2 = newparam2})
elseif def.allow_yard and signs_lib.check_for_floor(pointed_thing) and not controls.sneak then elseif def.allow_yard and signs_lib.check_for_floor(pointed_thing) and not controls.sneak then
local newparam2 = minetest.dir_to_facedir(placer:get_look_dir()) local newparam2 = minetest.dir_to_facedir(placer:get_look_dir())
local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = no_wall_name.."_yard", param2 = newparam2}) minetest.swap_node(pos, {name = no_wall_name.."_yard", param2 = newparam2})
elseif def.paramtype2 == "facedir" and signs_lib.check_for_ceiling(pointed_thing) then elseif def.paramtype2 == "facedir" and signs_lib.check_for_ceiling(pointed_thing) then
minetest.swap_node(pos, {name = signname, param2 = 6}) minetest.swap_node(pos, {name = signname, param2 = 6})
@ -1242,7 +1232,7 @@ minetest.register_lbm({
run_at_every_load = true, run_at_every_load = true,
action = function(pos, node) action = function(pos, node)
-- yeah, yeah... I know I'm hashing a block pos, but it's still just a set of coords -- yeah, yeah... I know I'm hashing a block pos, but it's still just a set of coords
local hash = minetest.hash_node_position(vector.floor(vector.divide(pos, core.MAP_BLOCKSIZE))) local hash = minetest.hash_node_position(vector.floor(vector.divide(pos, minetest.MAP_BLOCKSIZE)))
if not signs_lib.block_list[hash] then if not signs_lib.block_list[hash] then
signs_lib.block_list[hash] = true signs_lib.block_list[hash] = true
signs_lib.totalblocks = signs_lib.totalblocks + 1 signs_lib.totalblocks = signs_lib.totalblocks + 1
@ -1259,9 +1249,9 @@ minetest.register_chatcommand("regen_signs", {
local totalsigns = 0 local totalsigns = 0
for b in pairs(signs_lib.block_list) do for b in pairs(signs_lib.block_list) do
local blockpos = minetest.get_position_from_hash(b) local blockpos = minetest.get_position_from_hash(b)
local pos1 = vector.multiply(blockpos, core.MAP_BLOCKSIZE) local pos1 = vector.multiply(blockpos, minetest.MAP_BLOCKSIZE)
local pos2 = vector.add(pos1, core.MAP_BLOCKSIZE - 1) local pos2 = vector.add(pos1, minetest.MAP_BLOCKSIZE - 1)
if minetest.get_node_or_nil(vector.add(pos1, core.MAP_BLOCKSIZE/2)) then if minetest.get_node_or_nil(vector.add(pos1, minetest.MAP_BLOCKSIZE/2)) then
local signs_in_block = minetest.find_nodes_in_area(pos1, pos2, {"group:sign"}) local signs_in_block = minetest.find_nodes_in_area(pos1, pos2, {"group:sign"})
allsigns[#allsigns + 1] = signs_in_block allsigns[#allsigns + 1] = signs_in_block
totalsigns = totalsigns + #signs_in_block totalsigns = totalsigns + #signs_in_block

View File

@ -237,7 +237,7 @@ local nmdc = {
[124] = "|" [124] = "|"
} }
function AnsiToUtf8(s) function signs_lib.AnsiToUtf8(s)
local r, b = "" local r, b = ""
for i = 1, s and s:len() or 0 do for i = 1, s and s:len() or 0 do
b = s:byte(i) b = s:byte(i)
@ -258,7 +258,7 @@ function AnsiToUtf8(s)
return r return r
end end
function Utf8ToAnsi(s) function signs_lib.Utf8ToAnsi(s)
local r, b = "" local r, b = ""
local scope local scope
local j, l, u local j, l, u
@ -278,7 +278,7 @@ function Utf8ToAnsi(s)
if scope[b] then if scope[b] then
scope = scope[b] scope = scope[b]
if "string" == type(scope) then if "string" == type(scope) then
r, scope = r .. scope r, scope = r .. scope, nil
j = -1 -- supress general UTF-8 parser j = -1 -- supress general UTF-8 parser
end end
else else
@ -290,11 +290,11 @@ function Utf8ToAnsi(s)
-- general UTF-8 parser -- general UTF-8 parser
if j == -1 then -- supressed by legacy parser if j == -1 then -- supressed by legacy parser
j, l, u = nil j = nil
elseif b < 0x80 then elseif b < 0x80 then
if j then if j then
r = r .. "&#ufffd;" r = r .. "&#ufffd;"
j, l, u = nil j = nil
end end
-- ASCII handled by legacy parser -- ASCII handled by legacy parser
elseif b >= 0xc0 then elseif b >= 0xc0 then
@ -304,7 +304,7 @@ function Utf8ToAnsi(s)
j = i j = i
if b >= 0xf8 then if b >= 0xf8 then
r = r .. "&#ufffd;" r = r .. "&#ufffd;"
j, l, u = nil j = nil
elseif b >= 0xf0 then elseif b >= 0xf0 then
l, u = 4, b % (2 ^ 3) l, u = 4, b % (2 ^ 3)
elseif b >= 0xe0 then elseif b >= 0xe0 then
@ -317,7 +317,7 @@ function Utf8ToAnsi(s)
u = u * (2 ^ 6) + b % (2 ^ 6) u = u * (2 ^ 6) + b % (2 ^ 6)
if i == j + l - 1 then if i == j + l - 1 then
r = r .. string.format("&#u%x;", u) r = r .. string.format("&#u%x;", u)
j, l, u = nil j = nil
end end
else else
r = r .. "&#ufffd;" r = r .. "&#ufffd;"

View File

@ -7,7 +7,7 @@ signs_lib = {}
signs_lib.path = minetest.get_modpath(minetest.get_current_modname()) signs_lib.path = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(signs_lib.path .. "/intllib.lua") local S = dofile(signs_lib.path .. "/intllib.lua")
signs_lib.gettext = S signs_lib.gettext = S
dofile(signs_lib.path.."/encoding.lua") dofile(signs_lib.path.."/encoding.lua")