Hi Sergey, thank you for the patch, LGTM.   >Среда, 8 апреля 2020, 18:43 +03:00 от Sergey Bronnikov : >  >From: Sergey Bronnikov < sergeyb@tarantool.org > > >Many warnings fixed with help from Vladislav Shpilevoy. > >Closes #4681 >--- > src/lua/argparse.lua | 6 ++-- > src/lua/buffer.lua | 4 +-- > src/lua/clock.lua | 2 +- > src/lua/crypto.lua | 4 +-- > src/lua/csv.lua | 5 ++- > src/lua/digest.lua | 2 +- > src/lua/env.lua | 2 +- > src/lua/fio.lua | 25 +++++++------- > src/lua/httpc.lua | 3 -- > src/lua/init.lua | 7 ++-- > src/lua/msgpackffi.lua | 16 +++------ > src/lua/socket.lua | 65 ++++++++++++++++++------------------ > src/lua/string.lua | 1 - > src/lua/swim.lua | 16 ++++----- > src/lua/tap.lua | 75 ++++++++++++++++++++---------------------- > src/lua/trigger.lua | 3 -- > 16 files changed, 109 insertions(+), 127 deletions(-) > >diff --git a/src/lua/argparse.lua b/src/lua/argparse.lua >index faa0ae130..f58985425 100644 >--- a/src/lua/argparse.lua >+++ b/src/lua/argparse.lua >@@ -90,8 +90,8 @@ local function convert_parameter(name, convert_from, convert_to) >     return convert_from > end >  >-local function parameters_parse(t_in, options) >- local t_out, t_in = {}, t_in or {} >+local function parameters_parse(t__in, options) >+ local t_out, t_in = {}, t__in or {} >  >     -- Prepare a lookup table for options. An option name -> a >     -- type name to convert a parameter into or true (which means >@@ -145,7 +145,7 @@ local function parameters_parse(t_in, options) >                 if parameter_has_value(lookup[command]) then >                     -- in case next argument is value of this key (not --arg) >                     local next_arg = t_in[i + 1] >- local is_long, is_short, is_dash = parse_param_prefix(next_arg) >+ is_long, is_short, is_dash = parse_param_prefix(next_arg) >                     if is_dash then >                         skip_param = true >                     elseif is_long == false and not is_short and not is_dash then >diff --git a/src/lua/buffer.lua b/src/lua/buffer.lua >index 9aac82b39..43c7e1170 100644 >--- a/src/lua/buffer.lua >+++ b/src/lua/buffer.lua >@@ -182,7 +182,7 @@ local ibuf_methods = { >     unused = ibuf_unused; > } >  >-local function ibuf_tostring(ibuf) >+local function ibuf_tostring() >     return '' > end > local ibuf_mt = { >@@ -193,7 +193,7 @@ local ibuf_mt = { >  > ffi.metatype(ibuf_t, ibuf_mt); >  >-local function ibuf_new(arg, arg2) >+local function ibuf_new(arg) >     local buf = ffi.new(ibuf_t) >     local slabc = builtin.tarantool_lua_slab_cache() >     builtin.ibuf_create(buf, slabc, READAHEAD) >diff --git a/src/lua/clock.lua b/src/lua/clock.lua >index 60c78663c..fee43ccde 100644 >--- a/src/lua/clock.lua >+++ b/src/lua/clock.lua >@@ -33,7 +33,7 @@ clock.bench = function(fun, ...) >     overhead = clock.proc() - overhead >     local start_time = clock.proc() >     local res = {0, fun(...)} >- res[1] = clock.proc() - start_time - overhead, res >+ res[1] = clock.proc() - start_time - overhead >     return res > end >  >diff --git a/src/lua/crypto.lua b/src/lua/crypto.lua >index bf3064c70..c0eb0d303 100644 >--- a/src/lua/crypto.lua >+++ b/src/lua/crypto.lua >@@ -75,7 +75,7 @@ local function openssl_err_str() > end >  > local digests = {} >-for class, name in pairs({ >+for class, _ in pairs({ >     md2 = 'MD2', md4 = 'MD4', md5 = 'MD5', >     sha1 = 'SHA1', sha224 = 'SHA224', >     sha256 = 'SHA256', sha384 = 'SHA384', sha512 = 'SHA512', >@@ -428,7 +428,7 @@ local public_methods = { > } >  > local module_mt = { >- __serialize = function(s) >+ __serialize = function() >         return public_methods >     end, >     __index = public_methods >diff --git a/src/lua/csv.lua b/src/lua/csv.lua >index 7dff2f213..de6726bb7 100644 >--- a/src/lua/csv.lua >+++ b/src/lua/csv.lua >@@ -188,10 +188,10 @@ module.dump = function(t, opts, writable) >     if type(writable) == 'nil' then >         result_table = {} >     end >- for k, line in pairs(t) do >+ for _, line in pairs(t) do >         local first = true >         local output_tuple = {} >- for k2, field in pairs(line) do >+ for _, field in pairs(line) do >             local strf = tostring(field) >             local buf_new_size = (strf:len() + 1) * 2 >             if buf_new_size > bufsz then >@@ -214,7 +214,6 @@ module.dump = function(t, opts, writable) >         else >             writable:write(table.concat(output_tuple)) >         end >- output_tuple = {} >     end >     ffi.C.csv_destroy(csv) >     csv.realloc(buf, 0) >diff --git a/src/lua/digest.lua b/src/lua/digest.lua >index 6ed91cfa2..7f1aea8d0 100644 >--- a/src/lua/digest.lua >+++ b/src/lua/digest.lua >@@ -246,7 +246,7 @@ local m = { >     end > } >  >-for digest, name in pairs(digest_shortcuts) do >+for digest, _ in pairs(digest_shortcuts) do >     m[digest] = function (str) >         return crypto.digest[digest](str) >     end >diff --git a/src/lua/env.lua b/src/lua/env.lua >index dd1616a84..a31b7098f 100644 >--- a/src/lua/env.lua >+++ b/src/lua/env.lua >@@ -28,7 +28,7 @@ os.environ = function() > end >  > os.setenv = function(key, value) >- local rv = nil >+ local rv >     if value ~= nil then >         rv = ffi.C.setenv(key, value, 1) >     else >diff --git a/src/lua/fio.lua b/src/lua/fio.lua >index 83fddaa0a..b2b4b4c77 100644 >--- a/src/lua/fio.lua >+++ b/src/lua/fio.lua >@@ -329,7 +329,7 @@ fio.abspath = function(path) >         error("Usage: fio.abspath(path)") >     end >     path = path >- local joined_path = '' >+ local joined_path >     local path_tab = {} >     if string.sub(path, 1, 1) == '/' then >         joined_path = path >@@ -366,7 +366,7 @@ fio.listdir = function(path) >         return t >     end >     local names = string.split(str, "\n") >- for i, name in ipairs(names) do >+ for _, name in ipairs(names) do >         table.insert(t, name) >     end >     return t >@@ -378,15 +378,15 @@ fio.mktree = function(path, mode) >     end >     path = fio.abspath(path) >  >- local path = string.gsub(path, '^/', '') >+ path = string.gsub(path, '^/', '') >     local dirs = string.split(path, "/") >  >     local current_dir = "/" >- for i, dir in ipairs(dirs) do >+ for _, dir in ipairs(dirs) do >         current_dir = fio.pathjoin(current_dir, dir) >         local stat = fio.stat(current_dir) >         if stat == nil then >- local st, err = fio.mkdir(current_dir, mode) >+ local _, err = fio.mkdir(current_dir, mode) >             -- fio.stat() and fio.mkdir() above are separate calls >             -- and a file system may be changed between them. So >             -- if the error here is due to an existing directory, >@@ -407,20 +407,20 @@ fio.rmtree = function(path) >     if type(path) ~= 'string' then >         error("Usage: fio.rmtree(path)") >     end >- local status, err >+ local status >     path = fio.abspath(path) >     local ls, err = fio.listdir(path) >     if err ~= nil then >         return nil, err >     end >- for i, f in ipairs(ls) do >+ for _, f in ipairs(ls) do >         local tmppath = fio.pathjoin(path, f) >         local st = fio.lstat(tmppath) >         if st then >             if st:is_dir() then >- st, err = fio.rmtree(tmppath) >+ _, err = fio.rmtree(tmppath) >             else >- st, err = fio.unlink(tmppath) >+ _, err = fio.unlink(tmppath) >             end >             if err ~= nil then >                 return nil, err >@@ -471,10 +471,10 @@ fio.copytree = function(from, to) >     if reason ~= nil then >         return false, reason >     end >- for i, f in ipairs(ls) do >+ for _, f in ipairs(ls) do >         local ffrom = fio.pathjoin(from, f) >         local fto = fio.pathjoin(to, f) >- local st = fio.lstat(ffrom) >+ st = fio.lstat(ffrom) >         if st and st:is_dir() then >             status, reason = fio.copytree(ffrom, fto) >             if reason ~= nil then >@@ -488,7 +488,8 @@ fio.copytree = function(from, to) >             end >         end >         if st:is_link() then >- local link_to, reason = fio.readlink(ffrom) >+ local link_to >+ link_to, reason = fio.readlink(ffrom) >             if reason ~= nil then >                 return false, reason >             end >diff --git a/src/lua/httpc.lua b/src/lua/httpc.lua >index 6381c6a1a..9336dcee0 100644 >--- a/src/lua/httpc.lua >+++ b/src/lua/httpc.lua >@@ -29,8 +29,6 @@ > -- SUCH DAMAGE. > -- >  >-local fiber = require('fiber') >- > local driver = package.loaded.http.client > package.loaded.http = nil >  >@@ -112,7 +110,6 @@ local special_characters = { >     [']'] = true, >     ['<'] = true, >     ['>'] = true, >- ['>'] = true, >     ['@'] = true, >     [','] = true, >     [';'] = true, >diff --git a/src/lua/init.lua b/src/lua/init.lua >index ff3e74c3c..a831549d1 100644 >--- a/src/lua/init.lua >+++ b/src/lua/init.lua >@@ -144,9 +144,9 @@ local function gen_search_func(path_fn, templates, need_traverse) >  >         local searchpaths = {} >  >- for _, path in ipairs(paths) do >+ for _, p in ipairs(paths) do >             for _, template in pairs(templates) do >- table.insert(searchpaths, fio.pathjoin(path, template)) >+ table.insert(searchpaths, fio.pathjoin(p, template)) >             end >         end >  >@@ -176,7 +176,8 @@ local function gen_loader_func(search_fn, load_fn) >         if not file then >             return err >         end >- local loaded, err = load_fn(file, name) >+ local loaded >+ loaded, err = load_fn(file, name) >         if err == nil then >             return loaded >         else >diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua >index f775f2d41..eacf2d1d5 100644 >--- a/src/lua/msgpackffi.lua >+++ b/src/lua/msgpackffi.lua >@@ -291,10 +291,6 @@ local function encode(obj) >     return r > end >  >-local function encode_ibuf(obj, ibuf) >- encode_r(ibuf, obj, 0) >-end >- > on_encode(ffi.typeof('uint8_t'), encode_int) > on_encode(ffi.typeof('uint16_t'), encode_int) > on_encode(ffi.typeof('uint32_t'), encode_int) >@@ -320,7 +316,6 @@ local decode_r >  > -- See similar constants in utils.cc > local DBL_INT_MAX = 1e14 - 1 >-local DBL_INT_MIN = -1e14 + 1 >  > local function decode_u8(data) >     local num = ffi.cast(uint8_ptr_t, data[0])[0] >@@ -465,8 +460,7 @@ end > local function decode_array(data, size) >     assert (type(size) == "number") >     local arr = {} >- local i >- for i=1,size,1 do >+ for _ = 1, size do >         table.insert(arr, decode_r(data)) >     end >     if not msgpack.cfg.decode_save_metatables then >@@ -478,8 +472,7 @@ end > local function decode_map(data, size) >     assert (type(size) == "number") >     local map = {} >- local i >- for i=1,size,1 do >+ for _ = 1, size do >         local key = decode_r(data); >         local val = decode_r(data); >         map[key] = val >@@ -492,7 +485,7 @@ end >  > local ext_decoder = { >     -- MP_UNKNOWN_EXTENSION >- [0] = function(data, len) error("unsupported extension type") end, >+ [0] = function() error("unsupported extension type") end, >     -- MP_DECIMAL >     [1] = function(data, len) local num = ffi.new("decimal_t") builtin.decimal_unpack(data, len, num) return num end, > } >@@ -502,7 +495,6 @@ local function decode_ext(data) >     -- mp_decode_extl and mp_decode_decimal >     -- need type code >     data[0] = data[0] - 1 >- local old_data = data[0] >     local len = builtin.mp_decode_extl(data, t) >     local fun = ext_decoder[t[0]] >     if type(fun) == 'function' then >@@ -589,7 +581,7 @@ local function check_offset(offset, len) >     if offset == nil then >         return 1 >     end >- local offset = ffi.cast('ptrdiff_t', offset) >+ offset = ffi.cast('ptrdiff_t', offset) >     if offset < 1 or offset > len then >         error(string.format("offset = %d is out of bounds [1..%d]", >             tonumber(offset), len)) >diff --git a/src/lua/socket.lua b/src/lua/socket.lua >index a334ad45b..317acfe8e 100644 >--- a/src/lua/socket.lua >+++ b/src/lua/socket.lua >@@ -172,7 +172,7 @@ local function get_iflags(table, flags) >     if type(flags) ~= 'table' then >         flags = { flags } >     end >- for i, f in pairs(flags) do >+ for _, f in pairs(flags) do >         if table[f] == nil then >             return nil >         end >@@ -660,7 +660,7 @@ local function check_delimiter(self, limit, eols) >     end >  >     local shortest >- for i, eol in ipairs(eols) do >+ for _, eol in ipairs(eols) do >         local data = ffi.C.memmem(rbuf.rpos, rbuf:size(), eol, #eol) >         if data ~= nil then >             local len = ffi.cast('char *', data) - rbuf.rpos + #eol >@@ -706,16 +706,16 @@ local function read(self, limit, timeout, check, ...) >         local res = sysread(self, data, rbuf:unused()) >         if res == 0 then -- eof >             self._errno = nil >- local len = rbuf:size() >- local data = ffi.string(rbuf.rpos, len) >+ len = rbuf:size() >+ data = ffi.string(rbuf.rpos, len) >             rbuf.rpos = rbuf.rpos + len >             return data >         elseif res ~= nil then >             rbuf.wpos = rbuf.wpos + res >- local len = check(self, limit, ...) >+ len = check(self, limit, ...) >             if len ~= nil then >                 self._errno = nil >- local data = ffi.string(rbuf.rpos, len) >+ data = ffi.string(rbuf.rpos, len) >                 rbuf.rpos = rbuf.rpos + len >                 return data >             end >@@ -1039,7 +1039,7 @@ local function tcp_connect(host, port, timeout) >         boxerrno(0) >         return s >     end >- local timeout = timeout or TIMEOUT_INFINITY >+ timeout = timeout or TIMEOUT_INFINITY >     local stop = fiber.clock() + timeout >     local dns = getaddrinfo(host, port, timeout, { type = 'SOCK_STREAM', >         protocol = 'tcp' }) >@@ -1047,7 +1047,7 @@ local function tcp_connect(host, port, timeout) >         boxerrno(boxerrno.EINVAL) >         return nil >     end >- for i, remote in pairs(dns) do >+ for _, remote in pairs(dns) do >         timeout = stop - fiber.clock() >         if timeout <= 0 then >             boxerrno(boxerrno.ETIMEDOUT) >@@ -1078,8 +1078,8 @@ local function tcp_server_handler(server, sc, from) >     end > end >  >-local function tcp_server_loop(server, s, addr) >- fiber.name(format("%s/%s:%s", server.name, addr.host, addr.port), {truncate = true}) >+local function tcp_server_loop(server, s, address) >+ fiber.name(format("%s/%s:%s", server.name, address.host, address.port), {truncate = true}) >     log.info("started") >     while socket_readable(s) do >         local sc, from = socket_accept(s) >@@ -1104,15 +1104,15 @@ local function tcp_server_usage() >     error('Usage: socket.tcp_server(host, port, handler | opts)') > end >  >-local function tcp_server_do_bind(s, addr) >- if socket_bind(s, addr.host, addr.port) then >- if addr.family == 'AF_UNIX' then >+local function tcp_server_do_bind(s, address) >+ if socket_bind(s, address.host, address.port) then >+ if address.family == 'AF_UNIX' then >             -- Make close() remove the unix socket file created >             -- by bind(). Note, this must be done before closing >             -- the socket fd so that no other tcp server can >             -- reuse the same path before we remove the file. >             s.close = function(self) >- fio.unlink(addr.port) >+ fio.unlink(address.port) >                 return socket_close(self) >             end >         end >@@ -1121,12 +1121,12 @@ local function tcp_server_do_bind(s, addr) >     return false > end >  >-local function tcp_server_bind_addr(s, addr) >- if tcp_server_do_bind(s, addr) then >+local function tcp_server_bind_addr(s, address) >+ if tcp_server_do_bind(s, address) then >         return true >     end >  >- if addr.family ~= 'AF_UNIX' then >+ if address.family ~= 'AF_UNIX' then >         return false >     end >  >@@ -1136,7 +1136,7 @@ local function tcp_server_bind_addr(s, addr) >  >     local save_errno = boxerrno() >  >- local sc = tcp_connect(addr.host, addr.port) >+ local sc = tcp_connect(address.host, address.port) >     if sc ~= nil then >         sc:close() >         boxerrno(save_errno) >@@ -1148,13 +1148,13 @@ local function tcp_server_bind_addr(s, addr) >         return false >     end >  >- log.info("tcp_server: remove dead UNIX socket: %s", addr.port) >- if not fio.unlink(addr.port) then >+ log.info("tcp_server: remove dead UNIX socket: %s", address.port) >+ if not fio.unlink(address.port) then >         log.warn("tcp_server: %s", boxerrno.strerror()) >         boxerrno(save_errno) >         return false >     end >- return tcp_server_do_bind(s, addr) >+ return tcp_server_do_bind(s, address) > end >  >  >@@ -1172,8 +1172,8 @@ local function tcp_server_bind(host, port, prepare, timeout) >         end >     end >  >- for _, addr in ipairs(dns) do >- local s = socket_new(addr.family, addr.type, addr.protocol) >+ for _, address in ipairs(dns) do >+ local s = socket_new(address.family, address.type, address.protocol) >         if s ~= nil then >             local backlog >             if prepare then >@@ -1181,13 +1181,13 @@ local function tcp_server_bind(host, port, prepare, timeout) >             else >                 socket_setsockopt(s, 'SOL_SOCKET', 'SO_REUSEADDR', 1) -- ignore error >             end >- if not tcp_server_bind_addr(s, addr) or not s:listen(backlog) then >+ if not tcp_server_bind_addr(s, address) or not s:listen(backlog) then >                 local save_errno = boxerrno() >                 socket_close(s) >                 boxerrno(save_errno) >                 return nil >             end >- return s, addr >+ return s, address >        end >     end >     -- DNS resolved successfully, but addresss family is not supported >@@ -1211,12 +1211,12 @@ local function tcp_server(host, port, opts, timeout) >         tcp_server_usage() >     end >     server.name = server.name or 'server' >- local s, addr = tcp_server_bind(host, port, server.prepare, timeout) >+ local s, address = tcp_server_bind(host, port, server.prepare, timeout) >     if not s then >         return nil >     end >- fiber.create(tcp_server_loop, server, s, addr) >- return s, addr >+ fiber.create(tcp_server_loop, server, s, address) >+ return s, address > end >  > socket_mt = { >@@ -1311,10 +1311,9 @@ local function lsocket_tcp_getpeername(self) >     return peer.host, tostring(peer.port), peer.family:match("AF_(.*)"):lower() > end >  >-local function lsocket_tcp_settimeout(self, value, mode) >+local function lsocket_tcp_settimeout(self, value) >     check_socket(self) >     self.timeout = value >- -- mode is effectively ignored >     return 1 > end >  >@@ -1467,7 +1466,7 @@ local function lsocket_tcp_receive(self, pattern, prefix) >         local result = { prefix } >         local deadline = fiber.clock() + (self.timeout or TIMEOUT_INFINITY) >         repeat >- local data = read(self, LIMIT_INFINITY, timeout, check_infinity) >+ data = read(self, LIMIT_INFINITY, timeout, check_infinity) >             if data == nil then >                 if not errno_is_transient[self._errno] then >                     return nil, socket_error(self) >@@ -1535,7 +1534,7 @@ lsocket_tcp_mt.__index.send = lsocket_tcp_send; > -- TCP Constructor and Shortcuts > -- >  >-local function lsocket_tcp() >+local function lsocket_tcp(self) >     local s = socket_new('AF_INET', 'SOCK_STREAM', 'tcp') >     if not s then >         return nil, socket_error(self) >@@ -1559,7 +1558,7 @@ local function lsocket_bind(host, port, backlog) >     if host == nil or port == nil then >         error("Usage: luasocket.bind(host, port [, backlog])") >     end >- local function prepare(s) return backlog end >+ local function prepare() return backlog end >     local s = tcp_server_bind(host, port, prepare) >     if not s then >         return nil, boxerrno.strerror() >diff --git a/src/lua/string.lua b/src/lua/string.lua >index 6e12c59ae..d3a846645 100644 >--- a/src/lua/string.lua >+++ b/src/lua/string.lua >@@ -233,7 +233,6 @@ local function string_startswith(inp, head, _start, _end) >         return false >     end >     _start = _start - 1 >- _end = _start + head_len - 1 >     return memcmp(c_char_ptr(inp) + _start, c_char_ptr(head), head_len) == 0 > end >  >diff --git a/src/lua/swim.lua b/src/lua/swim.lua >index 0859915c9..466e77ce4 100644 >--- a/src/lua/swim.lua >+++ b/src/lua/swim.lua >@@ -371,7 +371,7 @@ end > -- > local function swim_member_payload_str(m) >     local ptr = swim_check_member(m, 'member:payload_str()') >- local cdata, size = swim_member_payload_raw(ptr) >+ local _, size = swim_member_payload_raw(ptr) >     if size > 0 then >         return ffi.string(swim_member_payload_raw(ptr)) >     end >@@ -462,7 +462,7 @@ local swim_member_mt = { >         is_dropped = swim_member_is_dropped, >     }, >     __serialize = swim_member_serialize, >- __newindex = function(m) >+ __newindex = function() >         return error('swim_member is a read-only object') >     end > } >@@ -782,20 +782,20 @@ local swim_member_event_mt = { > -- > -- Create a closure function for preprocessing raw SWIM member > -- event trigger parameters. >--- @param s SWIM instance. >+-- @param instance SWIM instance. > -- @param callback User functions to call. > -- @param ctx An optional parameter for @a callback passed as is. > -- @return A function to set as a trigger. > -- >-local function swim_on_member_event_new(s, callback, ctx) >+local function swim_on_member_event_new(instance, callback, ctx) >     -- Do not keep a hard reference to a SWIM instance. Otherwise >     -- it is a cyclic reference, and both the instance and the >     -- trigger will never be GC-ed. >- s = setmetatable({s}, {__mode = 'v'}) >+ instance = setmetatable({instance}, {__mode = 'v'}) >     return function(member_ptr, event_mask) >- local s = s[1] >- if s then >- local m = swim_wrap_member(s, member_ptr) >+ local i = instance[1] >+ if i then >+ local m = swim_wrap_member(i, member_ptr) >             local event = setmetatable({event_mask}, swim_member_event_mt) >             return callback(m, event, ctx) >         end >diff --git a/src/lua/tap.lua b/src/lua/tap.lua >index 94b080d5a..04497386e 100644 >--- a/src/lua/tap.lua >+++ b/src/lua/tap.lua >@@ -53,7 +53,7 @@ local function ok(test, cond, message, extra) >     io.write(string.format("not ok - %s\n", message)) >     extra = extra or {} >     if test.trace then >- local frame = debug.getinfo(3, "Sl") >+ debug.getinfo(3, "Sl") >         extra.trace = traceback() >         extra.filename = extra.trace[#extra.trace].filename >         extra.line = extra.trace[#extra.trace].line >@@ -76,9 +76,6 @@ local function skip(test, message, extra) >     ok(test, true, message.." # skip", extra) > end >  >- >-local nan = 0/0 >- > local function cmpdeeply(got, expected, extra) >     if type(expected) == "number" or type(got) == "number" then >         extra.got = got >@@ -190,38 +187,38 @@ local function isboolean(test, v, message, extra) >     return is(test, type(v), 'boolean', message, extra) > end >  >-local function isfunction(test, v, message, extra) >- return is(test, type(v), 'function', message, extra) >+local function isfunction(testcase, v, message, extra) >+ return is(testcase, type(v), 'function', message, extra) > end >  >-local function isudata(test, v, utype, message, extra) >+local function isudata(testcase, v, utype, message, extra) >     extra = extra or {} >     extra.expected = 'userdata<'..utype..'>' >     if type(v) == 'userdata' then >         extra.got = 'userdata<'..getmetatable(v)..'>' >- return ok(test, getmetatable(v) == utype, message, extra) >+ return ok(testcase, getmetatable(v) == utype, message, extra) >     else >         extra.got = type(v) >- return fail(test, message, extra) >+ return fail(testcase, message, extra) >     end > end >  >-local function iscdata(test, v, ctype, message, extra) >+local function iscdata(testcase, v, ctype, message, extra) >     extra = extra or {} >     extra.expected = ffi.typeof(ctype) >     if type(v) == 'cdata' then >         extra.got = ffi.typeof(v) >- return ok(test, ffi.istype(ctype, v), message, extra) >+ return ok(testcase, ffi.istype(ctype, v), message, extra) >     else >         extra.got = type(v) >- return fail(test, message, extra) >+ return fail(testcase, message, extra) >     end > end >  > local test_mt > local function test(parent, name, fun, ...) >     local level = parent ~= nil and parent.level + 1 or 0 >- local test = setmetatable({ >+ local testcase = setmetatable({ >         parent = parent; >         name = name; >         level = level; >@@ -232,48 +229,48 @@ local function test(parent, name, fun, ...) >         strict = false; >     }, test_mt) >     if fun ~= nil then >- test:diag('%s', test.name) >- fun(test, ...) >- test:diag('%s: end', test.name) >- return test:check() >+ testcase:diag('%s', testcase.name) >+ fun(testcase, ...) >+ testcase:diag('%s: end', testcase.name) >+ return testcase:check() >     else >- return test >+ return testcase >     end > end >  >-local function plan(test, planned) >- test.planned = planned >- io.write(string.rep(' ', 4 * test.level), string.format("1..%d\n", planned)) >+local function plan(testcase, planned) >+ testcase.planned = planned >+ io.write(string.rep(' ', 4 * testcase.level), string.format("1..%d\n", planned)) > end >  >-local function check(test) >- if test.checked then >+local function check(testcase) >+ if testcase.checked then >         error('check called twice') >     end >- test.checked = true >- if test.planned ~= test.total then >- if test.parent ~= nil then >- ok(test.parent, false, "bad plan", { planned = test.planned; >- run = test.total}) >+ testcase.checked = true >+ if testcase.planned ~= testcase.total then >+ if testcase.parent ~= nil then >+ ok(testcase.parent, false, "bad plan", { planned = testcase.planned; >+ run = testcase.total}) >         else >- diag(test, string.format("bad plan: planned %d run %d", >- test.planned, test.total)) >+ diag(testcase, string.format("bad plan: planned %d run %d", >+ testcase.planned, testcase.total)) >         end >- elseif test.failed > 0 then >- if test.parent ~= nil then >- ok(test.parent, false, "failed subtests", { >- failed = test.failed; >- planned = test.planned; >+ elseif testcase.failed > 0 then >+ if testcase.parent ~= nil then >+ ok(testcase.parent, false, "failed subtests", { >+ failed = testcase.failed; >+ planned = testcase.planned; >             }) >         else >- diag(test, "failed subtest: %d", test.failed) >+ diag(testcase, "failed subtest: %d", testcase.failed) >         end >     else >- if test.parent ~= nil then >- ok(test.parent, true, test.name) >+ if testcase.parent ~= nil then >+ ok(testcase.parent, true, testcase.name) >         end >     end >- return test.planned == test.total and test.failed == 0 >+ return testcase.planned == testcase.total and testcase.failed == 0 > end >  > test_mt = { >diff --git a/src/lua/trigger.lua b/src/lua/trigger.lua >index 76a582c47..1330ecdd4 100644 >--- a/src/lua/trigger.lua >+++ b/src/lua/trigger.lua >@@ -1,7 +1,4 @@ > local fun = require('fun') >-local log = require('log') >- >-local table_clear = require('table.clear') >  > -- > -- Checks that argument is a callable, i.e. a function or a table >-- >2.23.0 >      -- Alexander Tikhonov