Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck
@ 2020-04-14  7:55 Sergey Bronnikov
  2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
                   ` (7 more replies)
  0 siblings, 8 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  7:55 UTC (permalink / raw)
  To: avtikhon, alexander.turenko, o.piskunov, tarantool-patches

Changelog:

- removed asserts in test/ to keep following diff-based approach with tests
- added separate install target in .travis.mk
- added comment regarding ENABLE_DIST in .travis.mk
- enabled app-tap in .luacheckrc
- removed duplicate warnings W212 and W122
- disabled checking of files in test/var directory

GH issue: https://github.com/tarantool/tarantool/issues/4681
GitHub branch: https://github.com/tarantool/tarantool/tree/ligurio/gh-4681-fix-luacheck-warnings

Sergey Bronnikov (6):
  Fix luacheck warnings in src/lua/
  Fix luacheck warnings in test/
  Fix luacheck warnings in src/box/lua/
  Fix luacheck warnings in extra/dist/tarantoolctl.in
  Add luacheck config
  gitlab-ci: enable static analysis with luacheck

 .gitlab-ci.yml                                |   9 +
 .luacheckrc                                   | 175 ++++++++++++++++++
 .travis.mk                                    |  15 +-
 extra/dist/tarantoolctl.in                    |  18 +-
 src/box/lua/upgrade.lua                       |  12 +-
 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                              |  10 +-
 src/lua/tap.lua                               |  74 ++++----
 src/lua/trigger.lua                           |   3 -
 test/app-tap/console.test.lua                 |   4 -
 test/app-tap/csv.test.lua                     |  28 +--
 test/app-tap/logger.test.lua                  |   2 +-
 test/box-py/box.lua                           |   2 +-
 test/box-tap/gc.test.lua                      |   4 +-
 test/box/box.lua                              |   2 +-
 test/box/hash_multipart.result                |   2 +-
 test/box/hash_multipart.test.lua              |   2 +-
 test/box/lua/cfg_bad_vinyl_dir.lua            |   2 +-
 test/box/lua/cfg_rtree.lua                    |   2 +-
 test/box/lua/cfg_test1.lua                    |   2 +-
 test/box/lua/cfg_test2.lua                    |   2 +-
 test/box/lua/cfg_test3.lua                    |   2 +-
 test/box/lua/cfg_test4.lua                    |   2 +-
 test/box/lua/cfg_test5.lua                    |   4 +-
 test/box/lua/cfg_test6.lua                    |   2 +-
 test/box/lua/utils.lua                        |   3 +-
 test/box/on_schema_init.lua                   |   2 +-
 test/box/proxy.lua                            |   2 +-
 test/box/tiny.lua                             |   2 +-
 test/box/tree_pk.result                       |   4 +-
 test/box/tree_pk.test.lua                     |   4 +-
 test/engine/tree_min_max_count.result         |   2 +-
 test/engine/tree_min_max_count.test.lua       |   2 +-
 test/replication-py/master.lua                |   2 +-
 test/replication-py/panic.lua                 |   2 +-
 test/replication/master.lua                   |   2 +-
 test/replication/replicaset_ro_mostly.result  |   2 +-
 .../replication/replicaset_ro_mostly.test.lua |   2 +-
 test/sql-tap/analyze3.test.lua                |   6 +-
 test/sql-tap/analyze9.test.lua                |  16 +-
 .../gh-4077-iproto-execute-no-bind.test.lua   |   7 +-
 test/sql-tap/index1.test.lua                  |   1 -
 test/sql-tap/join3.test.lua                   |   2 +-
 test/sql-tap/select9.test.lua                 |  10 +-
 test/sql-tap/tkt-fa7bf5ec.test.lua            |   6 +-
 test/sql-tap/where2.test.lua                  |   2 +-
 test/sql/lua/sql_tokenizer.lua                |   2 +-
 test/sql/savepoints.result                    |   6 +-
 test/sql/savepoints.test.lua                  |   6 +-
 test/sql/triggers.result                      |   2 +-
 test/sql/triggers.test.lua                    |   2 +-
 test/vinyl/large.lua                          |   3 +-
 test/vinyl/txn_proxy.lua                      |   6 +-
 test/vinyl/vinyl.lua                          |   2 +-
 test/wal_off/rtree_benchmark.result           |   2 +-
 test/wal_off/rtree_benchmark.test.lua         |   2 +-
 test/xlog-py/box.lua                          |   2 +-
 test/xlog/panic.lua                           |   2 +-
 test/xlog/reader.result                       |   2 +-
 test/xlog/reader.test.lua                     |   2 +-
 test/xlog/snap_io_rate.test.lua               |   2 +-
 test/xlog/transaction.result                  |   2 +-
 test/xlog/transaction.test.lua                |   2 +-
 test/xlog/xlog.lua                            |   2 +-
 76 files changed, 409 insertions(+), 243 deletions(-)
 create mode 100644 .luacheckrc

-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
@ 2020-04-14  7:56 ` Sergey Bronnikov
  2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-15 20:51   ` Igor Munkin
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/ Sergey Bronnikov
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  7:56 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, alexander.turenko, o.piskunov

Many warnings fixed with help from Vladislav Shpilevoy.

Closes #4681

Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
---

 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       | 10 +++---
 src/lua/tap.lua        | 74 ++++++++++++++++++++----------------------
 src/lua/trigger.lua    |  3 --
 16 files changed, 105 insertions(+), 124 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 '<ibuf>'
 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 f01ffaef0..9105c3f23 100644
--- a/src/lua/msgpackffi.lua
+++ b/src/lua/msgpackffi.lua
@@ -302,10 +302,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)
@@ -332,7 +328,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]
@@ -477,8 +472,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
@@ -490,8 +484,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
@@ -504,7 +497,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,
     -- MP_UUID
@@ -516,7 +509,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
@@ -603,7 +595,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..8e3b0ab13 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
 }
@@ -793,9 +793,9 @@ local function swim_on_member_event_new(s, callback, ctx)
     -- trigger will never be GC-ed.
     s = setmetatable({s}, {__mode = 'v'})
     return function(member_ptr, event_mask)
-        local s = s[1]
-        if s then
-            local m = swim_wrap_member(s, member_ptr)
+        local si = s[1]
+        if si then
+            local m = swim_wrap_member(si, 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..094eb883f 100644
--- a/src/lua/tap.lua
+++ b/src/lua/tap.lua
@@ -53,7 +53,6 @@ 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")
         extra.trace = traceback()
         extra.filename = extra.trace[#extra.trace].filename
         extra.line = extra.trace[#extra.trace].line
@@ -76,9 +75,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 +186,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 +228,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


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
  2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
@ 2020-04-14  7:57 ` Sergey Bronnikov
  2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-16 13:43   ` Igor Munkin
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/ Sergey Bronnikov
                   ` (5 subsequent siblings)
  7 siblings, 2 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  7:57 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, alexander.turenko, o.piskunov

Closes #4681

Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
---

 test/app-tap/console.test.lua                 |  4 ---
 test/app-tap/csv.test.lua                     | 28 +++++++++----------
 test/app-tap/logger.test.lua                  |  2 +-
 test/box-py/box.lua                           |  2 +-
 test/box-tap/gc.test.lua                      |  4 +--
 test/box/box.lua                              |  2 +-
 test/box/hash_multipart.result                |  2 +-
 test/box/hash_multipart.test.lua              |  2 +-
 test/box/lua/cfg_bad_vinyl_dir.lua            |  2 +-
 test/box/lua/cfg_rtree.lua                    |  2 +-
 test/box/lua/cfg_test1.lua                    |  2 +-
 test/box/lua/cfg_test2.lua                    |  2 +-
 test/box/lua/cfg_test3.lua                    |  2 +-
 test/box/lua/cfg_test4.lua                    |  2 +-
 test/box/lua/cfg_test5.lua                    |  4 +--
 test/box/lua/cfg_test6.lua                    |  2 +-
 test/box/lua/utils.lua                        |  3 +-
 test/box/on_schema_init.lua                   |  2 +-
 test/box/proxy.lua                            |  2 +-
 test/box/tiny.lua                             |  2 +-
 test/box/tree_pk.result                       |  4 +--
 test/box/tree_pk.test.lua                     |  4 +--
 test/engine/tree_min_max_count.result         |  2 +-
 test/engine/tree_min_max_count.test.lua       |  2 +-
 test/replication-py/master.lua                |  2 +-
 test/replication-py/panic.lua                 |  2 +-
 test/replication/master.lua                   |  2 +-
 test/replication/replicaset_ro_mostly.result  |  2 +-
 .../replication/replicaset_ro_mostly.test.lua |  2 +-
 test/sql-tap/analyze3.test.lua                |  6 ++--
 test/sql-tap/analyze9.test.lua                | 16 +++++------
 .../gh-4077-iproto-execute-no-bind.test.lua   |  7 +++--
 test/sql-tap/index1.test.lua                  |  1 -
 test/sql-tap/join3.test.lua                   |  2 +-
 test/sql-tap/select9.test.lua                 | 10 ++-----
 test/sql-tap/tkt-fa7bf5ec.test.lua            |  6 ++--
 test/sql-tap/where2.test.lua                  |  2 +-
 test/sql/lua/sql_tokenizer.lua                |  2 +-
 test/sql/savepoints.result                    |  6 ++--
 test/sql/savepoints.test.lua                  |  6 ++--
 test/sql/triggers.result                      |  2 +-
 test/sql/triggers.test.lua                    |  2 +-
 test/vinyl/large.lua                          |  3 +-
 test/vinyl/txn_proxy.lua                      |  6 ++--
 test/vinyl/vinyl.lua                          |  2 +-
 test/wal_off/rtree_benchmark.result           |  2 +-
 test/wal_off/rtree_benchmark.test.lua         |  2 +-
 test/xlog-py/box.lua                          |  2 +-
 test/xlog/panic.lua                           |  2 +-
 test/xlog/reader.result                       |  2 +-
 test/xlog/reader.test.lua                     |  2 +-
 test/xlog/snap_io_rate.test.lua               |  2 +-
 test/xlog/transaction.result                  |  2 +-
 test/xlog/transaction.test.lua                |  2 +-
 test/xlog/xlog.lua                            |  2 +-
 55 files changed, 92 insertions(+), 102 deletions(-)

diff --git a/test/app-tap/console.test.lua b/test/app-tap/console.test.lua
index 4feadfa5e..1f61ba837 100755
--- a/test/app-tap/console.test.lua
+++ b/test/app-tap/console.test.lua
@@ -5,7 +5,6 @@ local console = require('console')
 local socket = require('socket')
 local yaml = require('yaml')
 local fiber = require('fiber')
-local ffi = require('ffi')
 local log = require('log')
 local fio = require('fio')
 
@@ -95,12 +94,9 @@ test:is(#client:read(EOL) > 0, true, "_G")
 client:write("require('fiber').id()\n")
 local fid1 = yaml.decode(client:read(EOL))[1]
 local state = fiber.find(fid1).storage.console
-local server_info = state.client:peer()
 local client_info = state.client:name()
 test:is(client_info.host, client_info.host, "state.socker:peer().host")
 test:is(client_info.port, client_info.port, "state.socker:peer().port")
-server_info = nil
-client_info = nil
 
 -- Check console.delimiter()
 client:write("require('console').delimiter(';')\n")
diff --git a/test/app-tap/csv.test.lua b/test/app-tap/csv.test.lua
index a7f17b1ea..689db7997 100755
--- a/test/app-tap/csv.test.lua
+++ b/test/app-tap/csv.test.lua
@@ -2,9 +2,9 @@
 
 local function table2str(t)
     local res = ""
-    for k, line in pairs(t) do
+    for _, line in pairs(t) do
         local s = ""
-        for k2, field in pairs(line) do
+        for _, field in pairs(line) do
             s = s .. '|' .. field .. '|\t'
         end
         res = res .. s .. '\n'
@@ -12,9 +12,9 @@ local function table2str(t)
     return res
 end
 
-local function myread(self, bytes) 
+local function myread(self, bytes)
     self.i = self.i + bytes
-    return self.v:sub(self.i - bytes + 1, self.i) 
+    return self.v:sub(self.i - bytes + 1, self.i)
 end
 local csv = require('csv')
 local fio = require('fio')
@@ -27,10 +27,10 @@ local test4_ans = '|123|\t|5|\t|92|\t|0|\t|0|\t\n|1|\t|12  34|\t|56|\t' ..
 local test5_ans = "|1|\t\n|23|\t|456|\t|abcac|\t|'multiword field 4'|\t\n" ..
                   "|none|\t|none|\t|0|\t\n||\t||\t||\t\n|aba|\t|adda|\t|f" ..
                   "3|\t|0|\t\n|local res = internal.pwrite(self.fh|\t|dat" ..
-                  "a|\t|len|\t|offset)|\t\n|iflag = bit.bor(iflag|\t|fio." .. 
+                  "a|\t|len|\t|offset)|\t\n|iflag = bit.bor(iflag|\t|fio." ..
                   "c.flag[ flag ])|\t\n||\t||\t||\t\n"
 local test6_ans = "|23|\t|456|\t|abcac|\t|'multiword field 4'|\t\n|none|" ..
-                  "\t|none|\t|0|\t\n||\t||\t||\t\n|aba|\t|adda|\t|f3|\t|" .. 
+                  "\t|none|\t|0|\t\n||\t||\t||\t\n|aba|\t|adda|\t|f3|\t|" ..
                   "0|\t\n|local res = internal.pwrite(self.fh|\t|data|\t" ..
                   "|len|\t|offset)|\t\n|iflag = bit.bor(iflag|\t|fio.c.f" ..
                   "lag[ flag ])|\t\n||\t||\t||\t\n"
@@ -62,7 +62,7 @@ local f = fio.open(file1, { 'O_WRONLY', 'O_TRUNC', 'O_CREAT' }, tonumber('0777',
 f:write("123 , 5  ,       92    , 0, 0\n" ..
         "1, 12  34, 56, \"quote , \", 66\nok")
 f:close()
-f = fio.open(file1, {'O_RDONLY'}) 
+f = fio.open(file1, {'O_RDONLY'})
 test:is(table2str(csv.load(f, {chunk_size = 10})), test4_ans, "fio test1")
 f:close()
 
@@ -77,20 +77,20 @@ f:write("1\n23,456,abcac,\'multiword field 4\'\n" ..
         ",,"
 )
 f:close()
-f = fio.open(file2, {'O_RDONLY'}) 
+f = fio.open(file2, {'O_RDONLY'})
 --symbol by symbol reading
-test:is(table2str(csv.load(f, {chunk_size = 1})), test5_ans, "fio test2") 
+test:is(table2str(csv.load(f, {chunk_size = 1})), test5_ans, "fio test2")
 f:close()
 
-f = fio.open(file2, {'O_RDONLY'}) 
+f = fio.open(file2, {'O_RDONLY'})
 opts = {chunk_size = 7, skip_head_lines = 1}
 --7 symbols per chunk
-test:is(table2str(csv.load(f, opts)), test6_ans, "fio test3") 
+test:is(table2str(csv.load(f, opts)), test6_ans, "fio test3")
 f:close()
 
 t = {
-    {'quote" d', ',and, comma', 'both " of " t,h,e,m'}, 
-    {'"""', ',","'}, 
+    {'quote" d', ',and, comma', 'both " of " t,h,e,m'},
+    {'"""', ',","'},
     {'mul\nti\nli\r\nne\n\n', 'field'},
     {""},
     {'"'},
@@ -100,7 +100,7 @@ t = {
 f = require("fio").open(file3, { "O_WRONLY", "O_TRUNC" , "O_CREAT"}, 0x1FF)
 csv.dump(t, {}, f)
 f:close()
-f = fio.open(file3, {'O_RDONLY'}) 
+f = fio.open(file3, {'O_RDONLY'})
 t2 = csv.load(f, {chunk_size = 5})
 f:close()
 
diff --git a/test/app-tap/logger.test.lua b/test/app-tap/logger.test.lua
index 492d5ea0b..6ec85d0e0 100755
--- a/test/app-tap/logger.test.lua
+++ b/test/app-tap/logger.test.lua
@@ -57,7 +57,7 @@ file:close()
 test:ok(log.pid() >= 0, "pid()")
 
 -- logger uses 'debug', try to set it to nil
-debug = nil
+local debug = nil
 log.info("debug is nil")
 debug = require('debug')
 
diff --git a/test/box-py/box.lua b/test/box-py/box.lua
index e9403774c..35a087de9 100644
--- a/test/box-py/box.lua
+++ b/test/box-py/box.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box-tap/gc.test.lua b/test/box-tap/gc.test.lua
index f88752e71..f0155779c 100755
--- a/test/box-tap/gc.test.lua
+++ b/test/box-tap/gc.test.lua
@@ -4,7 +4,7 @@ local fiber = require('fiber')
 
 box.cfg{}
 
-local debug = type(box.error.injection) == "table" 
+local debug = type(box.error.injection) == "table"
 
 -- check box.info.gc() is false if snapshot is not in progress
 local test = tap.test('box.info.gc')
@@ -19,7 +19,7 @@ test:is(gc.checkpoint_is_in_progress, false, "checkpoint is not in progress")
 if debug then
     box.error.injection.set("ERRINJ_SNAP_COMMIT_DELAY", true)
     local snapshot_f  = function()
-       box.snapshot() 
+       box.snapshot()
     end
     fiber.create(snapshot_f)
     local gc = box.info.gc()
diff --git a/test/box/box.lua b/test/box/box.lua
index 6fad07015..2cf399f96 100644
--- a/test/box/box.lua
+++ b/test/box/box.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 local msgpack = require('msgpack')
 
diff --git a/test/box/hash_multipart.result b/test/box/hash_multipart.result
index e94313b62..e6915652f 100644
--- a/test/box/hash_multipart.result
+++ b/test/box/hash_multipart.result
@@ -62,7 +62,7 @@ test_run:cmd("setopt delimiter ';'")
 function select_all()
     local result = {}
     local tuple, v
-    for tuple, v in hash:pairs() do
+    for _, v in hash:pairs() do
         table.insert(result, v)
     end
     return result
diff --git a/test/box/hash_multipart.test.lua b/test/box/hash_multipart.test.lua
index c0a871bee..c572d13b6 100644
--- a/test/box/hash_multipart.test.lua
+++ b/test/box/hash_multipart.test.lua
@@ -24,7 +24,7 @@ test_run:cmd("setopt delimiter ';'")
 function select_all()
     local result = {}
     local tuple, v
-    for tuple, v in hash:pairs() do
+    for _, v in hash:pairs() do
         table.insert(result, v)
     end
     return result
diff --git a/test/box/lua/cfg_bad_vinyl_dir.lua b/test/box/lua/cfg_bad_vinyl_dir.lua
index 8e1a98dc8..82746b99a 100644
--- a/test/box/lua/cfg_bad_vinyl_dir.lua
+++ b/test/box/lua/cfg_bad_vinyl_dir.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_rtree.lua b/test/box/lua/cfg_rtree.lua
index f2d32ef7d..860cb14a8 100644
--- a/test/box/lua/cfg_rtree.lua
+++ b/test/box/lua/cfg_rtree.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 box.error.injection.set("ERRINJ_INDEX_RESERVE", true)
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_test1.lua b/test/box/lua/cfg_test1.lua
index 60b7aff9a..aa026ed42 100644
--- a/test/box/lua/cfg_test1.lua
+++ b/test/box/lua/cfg_test1.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_test2.lua b/test/box/lua/cfg_test2.lua
index 2397f9c19..536661698 100644
--- a/test/box/lua/cfg_test2.lua
+++ b/test/box/lua/cfg_test2.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_test3.lua b/test/box/lua/cfg_test3.lua
index 6a6e544b6..4978900fb 100644
--- a/test/box/lua/cfg_test3.lua
+++ b/test/box/lua/cfg_test3.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_test4.lua b/test/box/lua/cfg_test4.lua
index 82dab8757..21a38f95c 100644
--- a/test/box/lua/cfg_test4.lua
+++ b/test/box/lua/cfg_test4.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/lua/cfg_test5.lua b/test/box/lua/cfg_test5.lua
index e3eb87392..8b6f9b31c 100644
--- a/test/box/lua/cfg_test5.lua
+++ b/test/box/lua/cfg_test5.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
@@ -7,4 +7,4 @@ box.cfg{
 }
 
 require('console').listen(os.getenv('ADMIN'))
-box.schema.user.grant('guest', 'read,write,execute', 'universe')
\ No newline at end of file
+box.schema.user.grant('guest', 'read,write,execute', 'universe')
diff --git a/test/box/lua/cfg_test6.lua b/test/box/lua/cfg_test6.lua
index efcfc6f3e..0a5859bc5 100644
--- a/test/box/lua/cfg_test6.lua
+++ b/test/box/lua/cfg_test6.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen = os.getenv("LISTEN"),
diff --git a/test/box/lua/utils.lua b/test/box/lua/utils.lua
index 5f859fd19..058c4a471 100644
--- a/test/box/lua/utils.lua
+++ b/test/box/lua/utils.lua
@@ -212,10 +212,9 @@ function create_iterator(obj, key, opts)
         return tp
     end
     res.iterate_over = function()
-        local tp = nil
         local ret = {}
         local i = 0
-        tp = res.next()
+        local tp = res.next()
         while tp do
             ret[i] = tp
             i = i + 1
diff --git a/test/box/on_schema_init.lua b/test/box/on_schema_init.lua
index 17cf89166..f74d6d7fe 100644
--- a/test/box/on_schema_init.lua
+++ b/test/box/on_schema_init.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 function test_before_replace_trig(old, new)
     -- return multiple values so that the stack fills earlier.
diff --git a/test/box/proxy.lua b/test/box/proxy.lua
index 8bbd505f8..c763e9634 100644
--- a/test/box/proxy.lua
+++ b/test/box/proxy.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/tiny.lua b/test/box/tiny.lua
index 04b523fb2..608d48366 100644
--- a/test/box/tiny.lua
+++ b/test/box/tiny.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/box/tree_pk.result b/test/box/tree_pk.result
index df3c78bed..f2a4f5352 100644
--- a/test/box/tree_pk.result
+++ b/test/box/tree_pk.result
@@ -153,8 +153,8 @@ test_run:cmd("setopt delimiter ';'")
 ...
 function crossjoin(space0, space1, limit)
     local result = {}
-    for state, v0 in space0:pairs() do
-        for state, v1 in space1:pairs() do
+    for _, v0 in space0:pairs() do
+        for _, v1 in space1:pairs() do
             if limit <= 0 then
                 return result
             end
diff --git a/test/box/tree_pk.test.lua b/test/box/tree_pk.test.lua
index 1190ab424..86041a642 100644
--- a/test/box/tree_pk.test.lua
+++ b/test/box/tree_pk.test.lua
@@ -58,8 +58,8 @@ test_run = env.new()
 test_run:cmd("setopt delimiter ';'")
 function crossjoin(space0, space1, limit)
     local result = {}
-    for state, v0 in space0:pairs() do
-        for state, v1 in space1:pairs() do
+    for _, v0 in space0:pairs() do
+        for _, v1 in space1:pairs() do
             if limit <= 0 then
                 return result
             end
diff --git a/test/engine/tree_min_max_count.result b/test/engine/tree_min_max_count.result
index f55732aa6..9f1595a20 100644
--- a/test/engine/tree_min_max_count.result
+++ b/test/engine/tree_min_max_count.result
@@ -1189,7 +1189,7 @@ space6:drop()
 ---
 ...
 -- min max count after many inserts
-string = require('string')
+local string = require('string')
 ---
 ...
 space7 = box.schema.space.create('space7', { engine = engine })
diff --git a/test/engine/tree_min_max_count.test.lua b/test/engine/tree_min_max_count.test.lua
index 0633c56b3..19b5fe92d 100644
--- a/test/engine/tree_min_max_count.test.lua
+++ b/test/engine/tree_min_max_count.test.lua
@@ -337,7 +337,7 @@ space6:drop()
 
 -- min max count after many inserts
 
-string = require('string')
+local string = require('string')
 
 space7 = box.schema.space.create('space7', { engine = engine })
 index7 = space7:create_index('primary', { type = 'tree', parts = {1, 'scalar'} })
diff --git a/test/replication-py/master.lua b/test/replication-py/master.lua
index e924b5495..b43bafd54 100644
--- a/test/replication-py/master.lua
+++ b/test/replication-py/master.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 box.cfg({
     listen              = os.getenv("LISTEN"),
     memtx_memory        = 107374182,
diff --git a/test/replication-py/panic.lua b/test/replication-py/panic.lua
index 75a738cbb..e72d11419 100644
--- a/test/replication-py/panic.lua
+++ b/test/replication-py/panic.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 box.cfg({
     listen              = os.getenv("LISTEN"),
     memtx_memory        = 107374182,
diff --git a/test/replication/master.lua b/test/replication/master.lua
index e924b5495..b43bafd54 100644
--- a/test/replication/master.lua
+++ b/test/replication/master.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 box.cfg({
     listen              = os.getenv("LISTEN"),
     memtx_memory        = 107374182,
diff --git a/test/replication/replicaset_ro_mostly.result b/test/replication/replicaset_ro_mostly.result
index a471779d3..e509e0da0 100644
--- a/test/replication/replicaset_ro_mostly.result
+++ b/test/replication/replicaset_ro_mostly.result
@@ -35,7 +35,7 @@ test_run:cmd("setopt delimiter ';'")
 - true
 ...
 function create_cluster_uuid(servers, uuids)
-    for i, name in ipairs(servers) do
+    for _, name in ipairs(servers) do
         test_run:cmd(create_cluster_cmd1:format(name, name))
     end
     for i, name in ipairs(servers) do
diff --git a/test/replication/replicaset_ro_mostly.test.lua b/test/replication/replicaset_ro_mostly.test.lua
index 19cd1fe4a..e06e29c8e 100644
--- a/test/replication/replicaset_ro_mostly.test.lua
+++ b/test/replication/replicaset_ro_mostly.test.lua
@@ -16,7 +16,7 @@ create_cluster_cmd2 = 'start server %s with args="%s", wait_load=False, wait=Fal
 
 test_run:cmd("setopt delimiter ';'")
 function create_cluster_uuid(servers, uuids)
-    for i, name in ipairs(servers) do
+    for _, name in ipairs(servers) do
         test_run:cmd(create_cluster_cmd1:format(name, name))
     end
     for i, name in ipairs(servers) do
diff --git a/test/sql-tap/analyze3.test.lua b/test/sql-tap/analyze3.test.lua
index dcbea1da5..5c9c28601 100755
--- a/test/sql-tap/analyze3.test.lua
+++ b/test/sql-tap/analyze3.test.lua
@@ -23,15 +23,15 @@ testprefix = "analyze3"
 ------------------------------------------------------------------------
 -- Test Organization:
 --
--- analyze3-1.*: Test that the values of bound parameters are considered 
+-- analyze3-1.*: Test that the values of bound parameters are considered
 --               in the same way as constants when planning queries that
 --               use range constraints.
 --
--- analyze3-2.*: Test that the values of bound parameters are considered 
+-- analyze3-2.*: Test that the values of bound parameters are considered
 --               in the same way as constants when planning queries that
 --               use LIKE expressions in the WHERE clause.
 --
--- analyze3-3.*: Test that binding to a variable does not invalidate the 
+-- analyze3-3.*: Test that binding to a variable does not invalidate the
 --               query plan when there is no way in which replanning the
 --               query may produce a superior outcome.
 --
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 02eb49f69..7412ba5fe 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -609,7 +609,7 @@ test:do_execsql_test(
 test:do_test(
     "10.1.2",
     function()
-        local a = 0
+        local a
         for i = 1, 100 do
             if i > 90 then
                 a = i
@@ -657,7 +657,7 @@ test:do_execsql_test(
 test:do_test(
     "10.2.2",
     function()
-        local a = 0
+        local a
         for i = 1, 100 do
             if i > 90 then
                 a = i
@@ -711,7 +711,7 @@ test:do_execsql_test(
 test:do_test(
     11.1,
     function()
-        local a = 0
+        local a
         for i = 0, 100 do
             if i % 10 == 0 then 
                 a = "\"ABC\""
@@ -762,7 +762,7 @@ test:do_execsql_test(
 test:do_test(
     11.5,
     function()
-        local a = 0
+        local a
         for i = 0, 100 do
             if i % 10 == 0 then 
                 a = "\"ABC\""
@@ -823,7 +823,7 @@ test:do_execsql_test(
 test:do_test(
     12.1,
     function()
-        local a = 0
+        local a
         for i = 0, 100 do
             if i % 10 == 0 then 
                 a = "\"ABC\""
@@ -874,7 +874,7 @@ test:do_execsql_test(
 test:do_test(
     12.5,
     function()
-        local a = 0
+        local a
         for i = 0, 100 do
             if i % 10 == 0 then 
                 a = "\"ABC\""
@@ -931,7 +931,7 @@ test:do_test(
         test:execsql("CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a TEXT, b INT, c INT, d INT);")
         test:execsql("CREATE INDEX i1 ON t1(a);")
         test:execsql("CREATE INDEX i2 ON t1(b, c);")
-        local a = 0
+        local a
         for i = 0, 100 do
             if i % 2 == 1 then
                 a = "\"abc\""
@@ -1161,7 +1161,7 @@ test:do_test(
             INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
             INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
         ]])
-        local b = 0
+        local b
         for i = 0, 31 do
             if (i < 8) then
                 b = 0
diff --git a/test/sql-tap/gh-4077-iproto-execute-no-bind.test.lua b/test/sql-tap/gh-4077-iproto-execute-no-bind.test.lua
index d4b597e35..2f71a68ea 100755
--- a/test/sql-tap/gh-4077-iproto-execute-no-bind.test.lua
+++ b/test/sql-tap/gh-4077-iproto-execute-no-bind.test.lua
@@ -41,10 +41,11 @@ local size = msgpack.encode(header:len() + body:len())
 sock:write(size .. header .. body)
 
 -- Read response.
-local size = msgpack.decode(sock:read(5))
+size = msgpack.decode(sock:read(5))
 local header_body = sock:read(size)
-local header, header_len = msgpack.decode(header_body)
-local body = msgpack.decode(header_body:sub(header_len))
+local header_len
+header, header_len = msgpack.decode(header_body)
+body = msgpack.decode(header_body:sub(header_len))
 sock:close()
 
 -- Verify response.
diff --git a/test/sql-tap/index1.test.lua b/test/sql-tap/index1.test.lua
index e173e685c..4c4a37ca7 100755
--- a/test/sql-tap/index1.test.lua
+++ b/test/sql-tap/index1.test.lua
@@ -106,7 +106,6 @@ test:do_test(
 test:do_test(
     "index-2.2",
     function()
-        local msg
         local v , msg= pcall(function()
             test:execsql("CREATE INDEX index1 ON test1(f1, f2, f4, f3)")
             end)
diff --git a/test/sql-tap/join3.test.lua b/test/sql-tap/join3.test.lua
index 876b3121a..030fbaba3 100755
--- a/test/sql-tap/join3.test.lua
+++ b/test/sql-tap/join3.test.lua
@@ -49,7 +49,7 @@ for N=1, bitmask_size do
 end
 -- Joins with a comparison
 --
-local result = {}
+result = {}
 --for _ in X(0, "X!for", [=[["set N 1","$N<=$bitmask_size","incr N"]]=]) do
 for N=1, bitmask_size do
     table.insert(result,N)
diff --git a/test/sql-tap/select9.test.lua b/test/sql-tap/select9.test.lua
index 1ae16a658..bcc270593 100755
--- a/test/sql-tap/select9.test.lua
+++ b/test/sql-tap/select9.test.lua
@@ -60,10 +60,8 @@ function subrange(t, first, last)
 end
 
 local function test_compound_select(testname, sql, result)
-    local nCol = 1
     local A = box.execute(sql) --test.box(sql)
-    nCol = #A.metadata
-    A = A.rows
+    local nCol = #A.metadata
     local nRow = #result / nCol
     local compound_sql = sql
     test:do_execsql_test(
@@ -274,10 +272,8 @@ test:do_execsql_test(
         -- </select9-2.0>
     })
 
-local t1_space_id = ""
-local t2_space_id = ""
-t1_space_id = test:execsql([[SELECT * from "_space" where "name"='T1']])["id"]
-t2_space_id = test:execsql([[SELECT * from "_space" where "name"='T2']])["id"]
+local t1_space_id = test:execsql([[SELECT * from "_space" where "name"='T1']])["id"]
+local t2_space_id = test:execsql([[SELECT * from "_space" where "name"='T2']])["id"]
 --X(276, "X!cmd", [=[["db","eval","SELECT * from _space where name='t2'","data","\n  set t2_space_id $data(id)\n"]]=])
 --local function reverse(lhs, rhs)
 --    return X(283, "X!cmd", [=[["string","compare",["rhs"],["lhs"]]]=])
diff --git a/test/sql-tap/tkt-fa7bf5ec.test.lua b/test/sql-tap/tkt-fa7bf5ec.test.lua
index 7152e028c..25d44c9d3 100755
--- a/test/sql-tap/tkt-fa7bf5ec.test.lua
+++ b/test/sql-tap/tkt-fa7bf5ec.test.lua
@@ -20,9 +20,9 @@ test:plan(1)
 -- The problem described by this ticket was that the sqlExprCompare()
 -- function was saying that expressions (x='a') and (x='A') were identical
 -- because it was using sqlStrICmp() instead of strcmp() to compare string
--- literals.  That was causing the query optimizer for aggregate queries to 
--- believe that both count() operations were identical, and thus only 
--- computing the first count() and making a copy of the result for the 
+-- literals.  That was causing the query optimizer for aggregate queries to
+-- believe that both count() operations were identical, and thus only
+-- computing the first count() and making a copy of the result for the
 -- second count().
 --
 -- ["set","testdir",[["file","dirname",["argv0"]]]]
diff --git a/test/sql-tap/where2.test.lua b/test/sql-tap/where2.test.lua
index f267be8e6..f2db6fcee 100755
--- a/test/sql-tap/where2.test.lua
+++ b/test/sql-tap/where2.test.lua
@@ -115,7 +115,7 @@ local function queryplan(sql)
                 table.insert(data, tab)
                 table.insert(data, idx)
             else
-                as, tab = string.match(v, "TABLE (%w+ AS) (%w+)")
+                _, tab = string.match(v, "TABLE (%w+ AS) (%w+)")
                 if tab == nil  then
                     tab = string.match(v, "TABLE (%w+)")
                 end
diff --git a/test/sql/lua/sql_tokenizer.lua b/test/sql/lua/sql_tokenizer.lua
index 9922d792d..ffe4fb4e8 100644
--- a/test/sql/lua/sql_tokenizer.lua
+++ b/test/sql/lua/sql_tokenizer.lua
@@ -134,7 +134,7 @@ end
 -- @retval Token type. If the rest of the SQL request consists of
 --         spaces and comments, then return TK_EMPTY.
 local function get_next_token(context)
-    local c = ''
+    local c
     repeat
         local i = context.offset
         c = context.sql:sub(i, i)
diff --git a/test/sql/savepoints.result b/test/sql/savepoints.result
index 509c33e59..b0915f398 100644
--- a/test/sql/savepoints.result
+++ b/test/sql/savepoints.result
@@ -102,12 +102,12 @@ collision_sv_2 = function()
     box.begin()
     box.execute('SAVEPOINT t1;')
     box.execute('SAVEPOINT t2;')
-    local _,err = box.execute('SAVEPOINT t1;')
+    local _, err = box.execute('SAVEPOINT t1;')
     assert(err == nil)
     box.execute('RELEASE SAVEPOINT t1;')
-    local _,err = box.execute('RELEASE SAVEPOINT t1;')
+    _, err = box.execute('RELEASE SAVEPOINT t1;')
     assert(err ~= nil)
-    local _, err = box.execute('ROLLBACK TO t2;')
+    _, err = box.execute('ROLLBACK TO t2;')
     assert(err == nil)
 end;
 ---
diff --git a/test/sql/savepoints.test.lua b/test/sql/savepoints.test.lua
index f1b15c748..eb7bea37d 100644
--- a/test/sql/savepoints.test.lua
+++ b/test/sql/savepoints.test.lua
@@ -65,12 +65,12 @@ collision_sv_2 = function()
     box.begin()
     box.execute('SAVEPOINT t1;')
     box.execute('SAVEPOINT t2;')
-    local _,err = box.execute('SAVEPOINT t1;')
+    local _, err = box.execute('SAVEPOINT t1;')
     assert(err == nil)
     box.execute('RELEASE SAVEPOINT t1;')
-    local _,err = box.execute('RELEASE SAVEPOINT t1;')
+    _, err = box.execute('RELEASE SAVEPOINT t1;')
     assert(err ~= nil)
-    local _, err = box.execute('ROLLBACK TO t2;')
+    _, err = box.execute('ROLLBACK TO t2;')
     assert(err == nil)
 end;
 collision_sv_2();
diff --git a/test/sql/triggers.result b/test/sql/triggers.result
index ceecb8ef2..e70d72947 100644
--- a/test/sql/triggers.result
+++ b/test/sql/triggers.result
@@ -11,7 +11,7 @@ _ = box.space._session_settings:update('sql_default_engine', {{'=', 2, engine}})
 ---
 ...
 -- Get invariant part of the tuple; name and opts don't change.
- function immutable_part(data) local r = {} for i, l in pairs(data) do table.insert(r, {l.name, l.opts}) end return r end
+ function immutable_part(data) local r = {} for _, l in pairs(data) do table.insert(r, {l.name, l.opts}) end return r end
 ---
 ...
 --
diff --git a/test/sql/triggers.test.lua b/test/sql/triggers.test.lua
index f5c8a3961..bc694ebc4 100644
--- a/test/sql/triggers.test.lua
+++ b/test/sql/triggers.test.lua
@@ -4,7 +4,7 @@ engine = test_run:get_cfg('engine')
 _ = box.space._session_settings:update('sql_default_engine', {{'=', 2, engine}})
 
 -- Get invariant part of the tuple; name and opts don't change.
- function immutable_part(data) local r = {} for i, l in pairs(data) do table.insert(r, {l.name, l.opts}) end return r end
+ function immutable_part(data) local r = {} for _, l in pairs(data) do table.insert(r, {l.name, l.opts}) end return r end
 
 --
 -- gh-3273: Move Triggers to server
diff --git a/test/vinyl/large.lua b/test/vinyl/large.lua
index e10e94c1a..a997aec7e 100644
--- a/test/vinyl/large.lua
+++ b/test/vinyl/large.lua
@@ -1,5 +1,4 @@
-fiber = require('fiber')
-digest = require('digest')
+local digest = require('digest')
 
 local PAGE_SIZE = 1024
 local RANGE_SIZE = 64 * PAGE_SIZE
diff --git a/test/vinyl/txn_proxy.lua b/test/vinyl/txn_proxy.lua
index 7a4d0b865..15b0e4add 100644
--- a/test/vinyl/txn_proxy.lua
+++ b/test/vinyl/txn_proxy.lua
@@ -1,11 +1,11 @@
--- A fiber can't use multiple transactions simultaneously;  
+-- A fiber can't use multiple transactions simultaneously;
 -- i.e. [fiber] --? [transaction] in UML parlor.
 --
 -- This module provides a simple transaction proxy facility
--- to control multiple transactions at once. A proxy executes 
+-- to control multiple transactions at once. A proxy executes
 -- statements in a worker fiber in order to overcome
 -- "one transaction per fiber" limitation.
--- 
+--
 -- Ex:
 -- proxy = require('txn_proxy').new()
 -- proxy:begin()
diff --git a/test/vinyl/vinyl.lua b/test/vinyl/vinyl.lua
index 31307f4bc..02b5c010b 100644
--- a/test/vinyl/vinyl.lua
+++ b/test/vinyl/vinyl.lua
@@ -15,7 +15,7 @@ box.cfg {
     vinyl_max_tuple_size = 1024 * 1024 * 6,
 }
 
-function box_info_sort(data)
+local function box_info_sort(data)
     if type(data)~='table' then
         return data
     end
diff --git a/test/wal_off/rtree_benchmark.result b/test/wal_off/rtree_benchmark.result
index 8e01c9f2a..8deefca82 100644
--- a/test/wal_off/rtree_benchmark.result
+++ b/test/wal_off/rtree_benchmark.result
@@ -163,7 +163,7 @@ for i = 1, 0 do
    for j = 1, dimension do
       table.insert(rect, 180*math.random())
    end
-   for k,v in pairs(s.index.spatial:select(rect, {limit = n_neighbors, iterator = 'NEIGHBOR'})) do
+   for _,_ in pairs(s.index.spatial:select(rect, {limit = n_neighbors, iterator = 'NEIGHBOR'})) do
       n = n + 1
    end
 end;
diff --git a/test/wal_off/rtree_benchmark.test.lua b/test/wal_off/rtree_benchmark.test.lua
index 6fae977c9..6bdc0a758 100644
--- a/test/wal_off/rtree_benchmark.test.lua
+++ b/test/wal_off/rtree_benchmark.test.lua
@@ -96,7 +96,7 @@ for i = 1, 0 do
    for j = 1, dimension do
       table.insert(rect, 180*math.random())
    end
-   for k,v in pairs(s.index.spatial:select(rect, {limit = n_neighbors, iterator = 'NEIGHBOR'})) do
+   for _,_ in pairs(s.index.spatial:select(rect, {limit = n_neighbors, iterator = 'NEIGHBOR'})) do
       n = n + 1
    end
 end;
diff --git a/test/xlog-py/box.lua b/test/xlog-py/box.lua
index c87f7b94b..8b9e9434f 100644
--- a/test/xlog-py/box.lua
+++ b/test/xlog-py/box.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/xlog/panic.lua b/test/xlog/panic.lua
index 2d4eb8d2e..0fa855421 100644
--- a/test/xlog/panic.lua
+++ b/test/xlog/panic.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
diff --git a/test/xlog/reader.result b/test/xlog/reader.result
index 9985aa2ac..74ac3579e 100644
--- a/test/xlog/reader.result
+++ b/test/xlog/reader.result
@@ -40,7 +40,7 @@ trun:cmd("setopt delimiter ';'")
 ...
 function collect_results(file)
     local val = {}
-    for k, v in xlog(file) do
+    for _, v in xlog(file) do
         table.insert(val, setmetatable(v, { __serialize = "map"}))
     end
     return val
diff --git a/test/xlog/reader.test.lua b/test/xlog/reader.test.lua
index 327af54dd..707ba394b 100644
--- a/test/xlog/reader.test.lua
+++ b/test/xlog/reader.test.lua
@@ -21,7 +21,7 @@ pattern_ok_v13 = fio.pathjoin(pattern_prefix, "v13/")
 trun:cmd("setopt delimiter ';'")
 function collect_results(file)
     local val = {}
-    for k, v in xlog(file) do
+    for _, v in xlog(file) do
         table.insert(val, setmetatable(v, { __serialize = "map"}))
     end
     return val
diff --git a/test/xlog/snap_io_rate.test.lua b/test/xlog/snap_io_rate.test.lua
index f71296269..5626ea1f4 100644
--- a/test/xlog/snap_io_rate.test.lua
+++ b/test/xlog/snap_io_rate.test.lua
@@ -9,6 +9,6 @@ for i = 0, 127 do box.space.snap:replace({i, digest.urandom(512 * 1024)}) end
 t1 = fiber.time()
 box.snapshot()
 t2 = fiber.time()
-t2 - t1 > 64 / box.cfg.snap_io_rate_limit * 0.95
+assert(t2 - t1 > 64 / box.cfg.snap_io_rate_limit * 0.95)
 
 box.space.snap:drop()
diff --git a/test/xlog/transaction.result b/test/xlog/transaction.result
index 63adb0f25..d45b60b0a 100644
--- a/test/xlog/transaction.result
+++ b/test/xlog/transaction.result
@@ -16,7 +16,7 @@ test_run:cmd("setopt delimiter ';'")
 ...
 function read_xlog(file)
     local val = {}
-    for k, v in xlog(file) do
+    for _, v in xlog(file) do
         table.insert(val, setmetatable(v, { __serialize = "map"}))
     end
     return val
diff --git a/test/xlog/transaction.test.lua b/test/xlog/transaction.test.lua
index 2d8090b4c..5fdeec625 100644
--- a/test/xlog/transaction.test.lua
+++ b/test/xlog/transaction.test.lua
@@ -6,7 +6,7 @@ test_run = env.new()
 test_run:cmd("setopt delimiter ';'")
 function read_xlog(file)
     local val = {}
-    for k, v in xlog(file) do
+    for _, v in xlog(file) do
         table.insert(val, setmetatable(v, { __serialize = "map"}))
     end
     return val
diff --git a/test/xlog/xlog.lua b/test/xlog/xlog.lua
index 004096d2d..aaf1a0ae6 100644
--- a/test/xlog/xlog.lua
+++ b/test/xlog/xlog.lua
@@ -1,5 +1,5 @@
 #!/usr/bin/env tarantool
-os = require('os')
+local os = require('os')
 
 box.cfg{
     listen              = os.getenv("LISTEN"),
-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
  2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/ Sergey Bronnikov
@ 2020-04-14  7:57 ` Sergey Bronnikov
  2020-04-14 23:30   ` Vladislav Shpilevoy
  2020-04-14  7:58 ` [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in Sergey Bronnikov
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  7:57 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, alexander.turenko, o.piskunov

Closes #4681

Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
---

 src/box/lua/upgrade.lua | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
index 075cc236e..6b8ece513 100644
--- a/src/box/lua/upgrade.lua
+++ b/src/box/lua/upgrade.lua
@@ -173,7 +173,7 @@ local function initial_1_7_5()
     format[5] = {name='field_count', type='unsigned'}
     format[6] = {name='flags', type='map'}
     format[7] = {name='format', type='array'}
-    local def = _space:insert{_space.id, ADMIN, '_space', 'memtx', 0, MAP, format}
+    _space:insert{_space.id, ADMIN, '_space', 'memtx', 0, MAP, format}
     -- space name is unique
     log.info("create index primary on _space")
     _index:insert{_space.id, 0, 'primary', 'tree', { unique = true }, {{0, 'unsigned'}}}
@@ -194,7 +194,7 @@ local function initial_1_7_5()
     format[4] = {name = 'type', type = 'string'}
     format[5] = {name = 'opts', type = 'map'}
     format[6] = {name = 'parts', type = 'array'}
-    def = _space:insert{_index.id, ADMIN, '_index', 'memtx', 0, MAP, format}
+    _space:insert{_index.id, ADMIN, '_index', 'memtx', 0, MAP, format}
     -- index name is unique within a space
     log.info("create index primary on _index")
     _index:insert{_index.id, 0, 'primary', 'tree', {unique = true}, {{0, 'unsigned'}, {1, 'unsigned'}}}
@@ -211,7 +211,7 @@ local function initial_1_7_5()
     format[2] = {name='owner', type='unsigned'}
     format[3] = {name='name', type='string'}
     format[4] = {name='setuid', type='unsigned'}
-    def = _space:insert{_func.id, ADMIN, '_func', 'memtx', 0, MAP, format}
+    _space:insert{_func.id, ADMIN, '_func', 'memtx', 0, MAP, format}
     -- function name and id are unique
     log.info("create index _func:primary")
     _index:insert{_func.id, 0, 'primary', 'tree', {unique = true}, {{0, 'unsigned'}}}
@@ -231,7 +231,7 @@ local function initial_1_7_5()
     format[3] = {name='name', type='string'}
     format[4] = {name='type', type='string'}
     format[5] = {name='auth', type='map'}
-    def = _space:insert{_user.id, ADMIN, '_user', 'memtx', 0, MAP, format}
+    _space:insert{_user.id, ADMIN, '_user', 'memtx', 0, MAP, format}
     -- user name and id are unique
     log.info("create index _func:primary")
     _index:insert{_user.id, 0, 'primary', 'tree', {unique = true}, {{0, 'unsigned'}}}
@@ -251,7 +251,7 @@ local function initial_1_7_5()
     format[3] = {name='object_type', type='string'}
     format[4] = {name='object_id', type='unsigned'}
     format[5] = {name='privilege', type='unsigned'}
-    def = _space:insert{_priv.id, ADMIN, '_priv', 'memtx', 0, MAP, format}
+    _space:insert{_priv.id, ADMIN, '_priv', 'memtx', 0, MAP, format}
     -- user id, object type and object id are unique
     log.info("create index primary on _priv")
     _index:insert{_priv.id, 0, 'primary', 'tree', {unique = true}, {{1, 'unsigned'}, {2, 'string'}, {3, 'unsigned'}}}
@@ -580,7 +580,7 @@ local function upgrade_to_2_1_0()
     -- Now, abscent field means NULL, so we can safely set second
     -- field in format, marking it nullable.
     log.info("Add nullable value field to space _schema")
-    local format = {}
+    format = {}
     format[1] = {type='string', name='key'}
     format[2] = {type='any', name='value', is_nullable=true}
     box.space._schema:format(format)
-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
                   ` (2 preceding siblings ...)
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/ Sergey Bronnikov
@ 2020-04-14  7:58 ` Sergey Bronnikov
  2020-04-14 23:30   ` Vladislav Shpilevoy
  2020-04-15 15:35   ` Igor Munkin
  2020-04-14  8:01 ` [Tarantool-patches] [PATCH 5/6] Add luacheck config Sergey Bronnikov
                   ` (3 subsequent siblings)
  7 siblings, 2 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  7:58 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, alexander.turenko, o.piskunov

Closes #4681

Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
---

 extra/dist/tarantoolctl.in | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in
index f5a912ccd..d7f098735 100755
--- a/extra/dist/tarantoolctl.in
+++ b/extra/dist/tarantoolctl.in
@@ -46,7 +46,6 @@ local instance_dir
 local default_cfg
 local positional_arguments
 local keyword_arguments
-local lua_arguments = arg
 local language
 
 -- function for printing usage reference
@@ -64,7 +63,7 @@ end
 
 local function check_user_level()
     local uid = os.getenv('UID')
-    local udir = nil
+    local udir
     if uid == 0 or os.getenv("NOTIFY_SOCKET") then
         return nil
     end
@@ -790,7 +789,7 @@ end
 local function eval()
     local console_sock_path = uri.parse(console_sock).service
     local filename = arg[3]
-    local code = nil
+    local code
     if filename == nil then
         if stdin_isatty() then
             log.error("Usage:")
@@ -848,7 +847,6 @@ end
 -- xlog / snap file, so even when it stops on LSN >= @a opts.to on
 -- a current file a next file will be processed.
 local function filter_xlog(gen, param, state, opts, cb)
-    local spaces = opts.spaces
     local from, to, spaces = opts.from, opts.to, opts.space
     local show_system, replicas = opts['show-system'], opts.replica
 
@@ -875,7 +873,7 @@ local function cat()
     local cat_format = opts.format
     local format_cb = cat_formats[cat_format]
     local is_printed = false
-    for id, file in ipairs(positional_arguments) do
+    for _, file in ipairs(positional_arguments) do
         log.error("Processing file '%s'", file)
         local gen, param, state = xlog.pairs(file)
         filter_xlog(gen, param, state, opts, function(record)
@@ -901,7 +899,7 @@ local function play()
     if not remote:wait_connected() then
         error(("Error while connecting to host '%s'"):format(uri))
     end
-    for id, file in ipairs(positional_arguments) do
+    for _, file in ipairs(positional_arguments) do
         log.info(("Processing file '%s'"):format(file))
         local gen, param, state = xlog.pairs(file)
         filter_xlog(gen, param, state, opts, function(record)
@@ -923,7 +921,7 @@ local function play()
 end
 
 local function find_arg(name_arg)
-    for i, key in ipairs(arg) do
+    for _, key in ipairs(arg) do
         if key:find(name_arg) ~= nil then
             return key
         end
@@ -937,7 +935,7 @@ local function rocks()
     local util = require("luarocks.util")
     local command_line = require("luarocks.cmd")
     local options = keyword_arguments
-    local key = nil
+    local key
     if options["only-server"] ~= nil then
         key = find_arg("only%-server")
     else
@@ -954,7 +952,7 @@ local function rocks()
     end
 
     -- Tweak help messages
-    util.see_help = function(command, program)
+    util.see_help = function()
         -- TODO: print extended help message here
         return "See Tarantool documentation for help."
     end
@@ -1321,7 +1319,7 @@ local function usage_command(name, cmd)
     if type(header) == 'string' then
         header = { header }
     end
-    for no, line in ipairs(header) do
+    for _, line in ipairs(header) do
         log.error("    " .. line, name)
     end
 end
-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 5/6] Add luacheck config
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
                   ` (3 preceding siblings ...)
  2020-04-14  7:58 ` [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in Sergey Bronnikov
@ 2020-04-14  8:01 ` Sergey Bronnikov
  2020-04-14 23:30   ` Vladislav Shpilevoy
  2020-04-14  8:01 ` [Tarantool-patches] [PATCH 6/6] gitlab-ci: enable static analysis with luacheck Sergey Bronnikov
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  8:01 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, alexander.turenko, o.piskunov

From the beginning we haven't use static analysis for Lua source code and
therefore now we have about 32k warnings and errors produced by luacheck. Sure
these issues are not real bugs but fixing them will make source code better and
clear. Aim to fix all of them at once looks insane and perhaps it is not worth
it.

Summary of static analysis:

There were no errors found by luacheck in production source code (src/),
many warnings were fixed in previous commits and non-interested warnings were
supressed using luacheck config.

Lua source code in test/ directory contains both errors and warnings and there
are a lot of them. Some of these warnings were fixed by previous commits and
most part of warnings and errors supressed in luacheck config. Regarding
errors: all found errors belongs to a single error class - "Syntax error"
(E011). All of them have a single root cause - at the of testscases we write
conditions without assignments and it is confuses luacheck. Usually such
conditions used together with asserts, but in our tests we uses reference outputs
instead of asserts.

How-to check:

$ tarantoolctl rocks install luacheck
$ .rocks/bin/luacheck --codes --config .luacheckrc .

Closes #4681

Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
---

 .luacheckrc | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 175 insertions(+)
 create mode 100644 .luacheckrc

diff --git a/.luacheckrc b/.luacheckrc
new file mode 100644
index 000000000..83774d3f7
--- /dev/null
+++ b/.luacheckrc
@@ -0,0 +1,175 @@
+include_files = {
+    "**/*.lua",
+    "extra/dist/tarantoolctl.in",
+}
+
+exclude_files = {
+    "third_party/**/*.lua",
+    "test/wal_off/*.lua", -- E011
+    "test/xlog/*.lua", -- E011
+    "test/vinyl/*.lua", -- E011
+    "test/sql/*.lua", -- E011
+    "test/replication/*.lua", -- E011
+    "test/engine/*.lua", -- E011
+    "test/swim/*.lua", -- E011
+    "test/box/*.lua", -- E011
+    "test/app/*.lua", -- E011
+    "test/app-tap/lua/serializer_test.lua", -- E011
+    "test/var/**/*.lua",
+    "test-run/lib/tarantool-python/test-run/**/*.lua",
+    "build/**/*.lua",
+    ".rocks/**/*.lua",
+    ".git/**/*.lua",
+}
+
+files["**/*.lua"] = {ignore = {"212", "122"}}
+files["extra/dist/tarantoolctl.in"] = {ignore = {"431", "411", "122", "542", "212"}}
+files["src/lua/help.lua"] = {globals = {"help", "tutorial"}, ignore = {"113", "211"}}
+files["src/lua/swim.lua"] = {ignore = {"431"}}
+files["src/lua/fio.lua"] = {ignore = {"231"}}
+files["src/lua/init.lua"] = {ignore = {"121"}}
+files["src/lua/fiber.lua"] = {ignore = {"331", "311"}}
+files["src/box/lua/serpent.lua"] = {globals = {"_ENV"}, ignore = {"431", "421", "631", "432", "542", "412", "422"}}
+files["src/box/lua/load_cfg.lua"] = {ignore = {"431", "143", "311", "542"}}
+files["src/box/lua/net_box.lua"] = {ignore = {"431", "211", "421", "432", "311", "231", "411", "412"}}
+files["src/box/lua/schema.lua"] = {globals = {"update_format", "iid", "role_check_grant_revoke_of_sys_priv"}, ignore = {"431", "211", "421", "213", "432", "311", "542", "412"}}
+files["src/box/lua/key_def.lua"] = {ignore = {"431"}}
+files["src/box/lua/feedback_daemon.lua"] = {ignore = {"211"}}
+files["src/box/lua/tuple.lua"] = {ignore = {"211", "421", "412"}}
+files["src/box/lua/upgrade.lua"] = {ignore = {"211", "421", "213"}}
+files["src/box/lua/console.lua"] = {globals = {"help"}, ignore = {"211", "143"}}
+files["test-run/test_run.lua"] = {ignore = {"412", "211", "431"}}
+files["test-run/lib/tarantool-python/test/cluster-py/master.lua"] = {ignore = {"121"}}
+files["test-run/lib/tarantool-python/unit/suites/box.lua"] = {ignore = {"121"}}
+files["test/**/*.lua"] = {ignore = {"631", "611", "614", "613", "612", "621", "112", "211", "432"}}
+files["test/app/*.lua"] = {ignore = {"111", "113"}}
+files["test/app/lua/fiber.lua"] = {ignore = {"111"}}
+files["test/app-tap/*.lua"] = {ignore = {"111", "113", "411", "431"}}
+files["test/app-tap/yaml.test.lua"] = {ignore = {"311"}}
+files["test/app-tap/module_api.test.lua"] = {ignore = {"311"}}
+files["test/app-tap/debug.test.lua"] = {ignore = {"421"}}
+files["test/app-tap/console_lua.test.lua"] = {ignore = {"412"}}
+files["test/app-tap/string.test.lua"] = {ignore = {"311"}}
+files["test/app-tap/logger.test.lua"] = {ignore = {"231"}}
+files["test/app-tap/snapshot.test.lua"] = {ignore = {"213"}}
+files["test/app-tap/msgpackffi.test.lua"] = {ignore = {"213"}}
+files["test/app-tap/http_client.test.lua"] = {ignore = {"213", "422", "412", "311"}}
+files["test/app-tap/fail_main.test.lua"] = {ignore = {"412"}}
+files["test/app-tap/tarantoolctl.test.lua"] = {ignore = {"511", "421"}}
+files["test/app-tap/lua/require_mod.lua"] = {ignore = {"113", "111"}}
+files["test/box/admin.test.lua"] = {ignore = {"213"}}
+files["test/box/lua/*.lua"] = {ignore = {"111"}}
+files["test/box/*.lua"] = {ignore = {"111", "113"}}
+files["test/box/lua/utils.lua"] = {ignore = {"421", "113", "213", "412"}}
+files["test/box/lua/bitset.lua"] = {ignore = {"113", "213"}}
+files["test/box/lua/fifo.lua"] = {ignore = {"113", "213"}}
+files["test/box/lua/identifier.lua"] = {ignore = {"113"}}
+files["test/box/lua/require_mod.lua"] = {ignore = {"113"}}
+files["test/box/lua/require_init.lua"] = {ignore = {"412", "143"}}
+files["test/box/lua/test_init.lua"] = {ignore = {"113", "412", "143"}}
+files["test/box/lua/index_random_test.lua"] = {ignore = {"213"}}
+files["test/box-tap/*.lua"] = {ignore = {"111"}}
+files["test/box-tap/auth.test.lua"] = {ignore = {"311", "411", "113"}}
+files["test/box-tap/cfg.test.lua"] = {ignore = {"311", "411", "113"}}
+files["test/box-tap/cfgup.test.lua"] = {ignore = {"113"}}
+files["test/box-tap/feedback_daemon.test.lua"] = {ignore = {"411"}}
+files["test/box-tap/gc.test.lua"] = {ignore = {"421"}}
+files["test/box-tap/on_schema_init.test.lua"] = {ignore = {"113"}}
+files["test/box-tap/schema_mt.test.lua"] = {ignore = {"113"}}
+files["test/box-tap/key_def.test.lua"] = {ignore = {"411", "431"}}
+files["test/box-tap/merger.test.lua"] = {ignore = {"411", "431", "412", "213"}}
+files["test/box-tap/session.storage.test.lua"] = {ignore = {"113"}}
+files["test/box-tap/session.test.lua"] = {ignore = {"411", "113", "412", "143"}}
+files["test/box-tap/trigger_atexit.test.lua"] = {ignore = {"113"}}
+files["test/box-tap/trigger_yield.test.lua"] = {ignore = {"213", "113"}}
+files["test/luajit-tap/fix_string_find_recording.test.lua"] = {ignore = {"111", "113", "231"}}
+files["test/luajit-tap/gh-4476-fix-string-find-recording.test.lua"] = {ignore = {"231"}}
+files["test/luajit-tap/fold_bug_LuaJIT_505.test.lua"] = {ignore = {"111", "113"}}
+files["test/luajit-tap/gh.test.lua"] = {ignore = {"111", "113"}}
+files["test/luajit-tap/table_chain_bug_LuaJIT_494.test.lua"] = {ignore = {"111", "113"}}
+files["test/luajit-tap/unsink_64_kptr.test.lua"] = {ignore = {"111", "113", "551", "542"}}
+files["test/luajit-tap/or-232-unsink-64-kptr.test.lua"] = {ignore = {"542"}}
+files["test/luajit-tap/lj-494-table-chain-infinite-loop.test.lua"] = {ignore = {"111", "113", "213"}}
+files["test/engine/*.lua"] = {ignore = {"111", "113"}}
+files["test/engine_long/suite.lua"] = {ignore = {"421", "111", "213"}}
+files["test/engine_long/delete_replace_update.test.lua"] = {ignore = {"113", "111"}}
+files["test/engine_long/delete_insert.test.lua"] = {ignore = {"113", "111"}}
+files["test/long_run-py/suite.lua"] = {ignore = {"421", "111", "113", "213"}}
+files["test/long_run-py/lua/finalizers.lua"] = {ignore = {"241", "511", "111", "113"}}
+files["test/replication/*.lua"] = {ignore = {"113", "111"}}
+files["test/replication/lua/fast_replica.lua"] = {ignore = {"113", "213"}}
+files["test/replication/lua/rlimit.lua"] = {ignore = {"113"}}
+files["test/replication-py/replica.lua"] = {ignore = {"111"}}
+files["test/replication/lua/fast_replica.lua"] = {ignore = {"113", "111", "213"}}
+files["test/replication/lua/rlimit.lua"] = {ignore = {"113", "111"}}
+files["test/sql/*.lua"] = {ignore = {"113", "111"}}
+files["test/sql/triggers.test.lua"] = {ignore = {"631", "113", "111"}}
+files["test/sql/tokenizer.test.lua"] = {ignore = {"113", "111"}}
+files["test/sql/transitive-transactions.test.lua"] = {ignore = {"113", "111"}}
+files["test/sql/savepoints.test.lua"] = {ignore = {"113", "111"}}
+files["test/sql/persistency.test.lua"] = {ignore = {"113", "111"}}
+files["test/sql-tap/*.lua"] = {ignore = {"113", "111"}}
+files["test/sql-tap/lua_sql.test.lua"] = {ignore = {"412"}}
+files["test/sql-tap/subquery.test.lua"] = {ignore = {"412", "143"}}
+files["test/sql-tap/alias.test.lua"] = {ignore = {"412", "143"}}
+files["test/sql-tap/analyze9.test.lua"] = {ignore = {"213", "411"}}
+files["test/sql-tap/between.test.lua"] = {ignore = {"421", "213"}}
+files["test/sql-tap/check.test.lua"] = {ignore = {"412", "143"}}
+files["test/sql-tap/date.test.lua"] = {ignore = {"511"}}
+files["test/sql-tap/e_expr.test.lua"] = {ignore = {"512", "431", "213", "411"}}
+files["test/sql-tap/func.test.lua"] = {ignore = {"412", "143"}}
+files["test/sql-tap/func5.test.lua"] = {ignore = {"412", "143"}}
+files["test/sql-tap/misc1.test.lua"] = {ignore = {"411"}}
+files["test/sql-tap/select1.test.lua"] = {ignore = {"511", "213"}}
+files["test/sql-tap/select2.test.lua"] = {ignore = {"421"}}
+files["test/sql-tap/select4.test.lua"] = {ignore = {"421"}}
+files["test/sql-tap/select5.test.lua"] = {ignore = {"421"}}
+files["test/sql-tap/selectA.test.lua"] = {ignore = {"542"}}
+files["test/sql-tap/selectB.test.lua"] = {ignore = {"213", "542"}}
+files["test/sql-tap/selectG.test.lua"] = {ignore = {"421"}}
+files["test/sql-tap/table.test.lua"] = {ignore = {"511"}}
+files["test/sql-tap/tkt-bd484a090c.test.lua"] = {ignore = {"511"}}
+files["test/sql-tap/tkt-38cb5df375.test.lua"] = {ignore = {"421"}}
+files["test/sql-tap/tkt-91e2e8ba6f.test.lua"] = {ignore = {"542"}}
+files["test/sql-tap/tkt-9a8b09f8e6.test.lua"] = {ignore = {"542"}}
+files["test/sql-tap/tkt2192.test.lua"] = {ignore = {"511"}}
+files["test/sql-tap/tkt3493.test.lua"] = {ignore = {"542"}}
+files["test/sql-tap/triggerA.test.lua"] = {ignore = {"311"}}
+files["test/sql-tap/trigger2.test.lua"] = {ignore = {"213"}}
+files["test/sql-tap/trigger9.test.lua"] = {ignore = {"143", "412"}}
+files["test/sql-tap/update.test.lua"] = {ignore = {"611"}}
+files["test/sql-tap/whereB.test.lua"] = {ignore = {"611"}}
+files["test/sql-tap/with1.test.lua"] = {ignore = {"542"}}
+files["test/sql-tap/with2.test.lua"] = {ignore = {"213", "412"}}
+files["test/sql-tap/lua_sql.test.lua"] = {ignore = {"143"}}
+files["test/sql-tap/lua/sqltester.lua"] = {ignore = {"111", "113", "431", "213"}}
+files["test/sql-tap/gh-2723-concurrency.test.lua"] = {ignore = {"213"}}
+files["test/sql-tap/gh-3307-xfer-optimization-issue.test.lua"] = {ignore = {"412", "213"}}
+files["test/sql-tap/gh-3083-ephemeral-unref-tuples.test.lua"] = {ignore = {"213"}}
+files["test/sql-tap/gh-3332-tuple-format-leak.test.lua"] = {ignore = {"213"}}
+files["test/sql-tap/gh2127-indentifier-max-length.test.lua"] = {ignore = {"213"}}
+files["test/sql-tap/misc5.test.lua"] = {ignore = {"213"}}
+files["test/wal_off/rtree_benchmark.test.lua"] = {ignore = {"213", "113", "111"}}
+files["test/wal_off/func_max.test.lua"] = {ignore = {"511", "113", "111"}}
+files["test/vinyl/upgrade/fill.lua"] = {ignore = {"111", "113"}}
+files["test/vinyl/write_iterator_rand.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/savepoint.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/replica_quota.test.lua"] = {ignore = {"113", "111", "213"}}
+files["test/vinyl/stress.test.lua"] = {ignore = {"431", "213"}}
+files["test/vinyl/hermitage.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/dump_stress.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/constraint.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/large.test.lua"] = {ignore = {"113", "111"}}
+files["test/vinyl/options.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/fill.lua"] = {ignore = {"111", "113"}}
+files["test/xlog/transaction.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/snap_io_rate.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/reader.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/panic_on_broken_lsn.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/gh1433.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/header.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/errinj.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/force_recovery.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/big_tx.test.lua"] = {ignore = {"113", "111"}}
+files["test/xlog/checkpoint_threshold.test.lua"] = {ignore = {"113", "111", "213"}}
+files["test/swim/box.lua"] = {ignore = {"113", "111"}}
-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH 6/6] gitlab-ci: enable static analysis with luacheck
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
                   ` (4 preceding siblings ...)
  2020-04-14  8:01 ` [Tarantool-patches] [PATCH 5/6] Add luacheck config Sergey Bronnikov
@ 2020-04-14  8:01 ` Sergey Bronnikov
  2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 7/6] schema: fix index promotion to functional index Vladislav Shpilevoy
  2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 8/6] schema: fix internal symbols dangling in _G Vladislav Shpilevoy
  7 siblings, 0 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-14  8:01 UTC (permalink / raw)
  To: tarantool-patches, avtikhon, o.piskunov, alexander.turenko

Closes #4681
---

 .gitlab-ci.yml |  9 +++++++++
 .travis.mk     | 15 ++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cd710027f..adbd892c8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,5 @@
 stages:
+  - static_analysis
   - test
   - perf
   - cleanup
@@ -96,6 +97,14 @@ variables:
   script:
     - ${GITLAB_MAKE} perf_run
 
+# Static Analysis
+
+luacheck:
+  <<: *docker_test_definition
+  stage: static_analysis
+  script:
+    - ${GITLAB_MAKE} test_debian_luacheck
+
 # Tests
 
 release:
diff --git a/.travis.mk b/.travis.mk
index f709a18b6..d917a1694 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -77,9 +77,13 @@ deps_buster_clang_8: deps_debian
 # Release
 
 build_debian:
-	cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
+	# ENABLE_DIST required to enable tarantoolctl for test_debian_luacheck
+	cmake . -DENABLE_DIST=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
 	make -j
 
+build_debian_install: build_debian
+	sudo make install
+
 test_debian_no_deps: build_debian
 	cd test && /usr/bin/python test-run.py --force $(TEST_RUN_EXTRA_PARAMS)
 
@@ -145,6 +149,15 @@ test_static_build: deps_debian_static
 test_static_docker_build:
 	docker build --network=host --build-arg RUN_TESTS=ON -f Dockerfile.staticbuild .
 
+# ###################
+# Static Analysis
+# ###################
+
+test_debian_luacheck: build_debian_install
+	tarantoolctl rocks install luacheck
+	# TODO: run in parallel with LuaLanes
+	.rocks/bin/luacheck --codes --config .luacheckrc .
+
 #######
 # OSX #
 #######
-- 
2.23.0


-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
@ 2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-15 20:51     ` Igor Munkin
  2020-04-17  9:09     ` Sergey Bronnikov
  2020-04-15 20:51   ` Igor Munkin
  1 sibling, 2 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:29 UTC (permalink / raw)
  To: Sergey Bronnikov, tarantool-patches, avtikhon, alexander.turenko,
	o.piskunov

Thanks for the patch!

Consider more fixes below and on the branch in a separate commit.
That allowed to remove some warning mutes from the luacheck
config.

====================

    Review fixes: src/lua

diff --git a/src/lua/fiber.lua b/src/lua/fiber.lua
index 89c17f63d..692408e54 100644
--- a/src/lua/fiber.lua
+++ b/src/lua/fiber.lua
@@ -40,7 +40,7 @@ fiber.stall = nil
 
 local worker_next_task = nil
 local worker_last_task = nil
-local worker_fiber = nil
+local worker_fiber
 
 --
 -- Worker is a singleton fiber for not urgent delayed execution of
diff --git a/src/lua/help.lua b/src/lua/help.lua
index 54ff1b5d0..f4041d4a4 100644
--- a/src/lua/help.lua
+++ b/src/lua/help.lua
@@ -11,9 +11,6 @@ help = { doc.help }
 tutorial = {}
 tutorial[1] = help[1]
 
-local help_function_data = {};
-local help_object_data = {}
-
 local function help_call(table, param)
     return help
 end
diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
index 9105c3f23..793f47854 100644
--- a/src/lua/msgpackffi.lua
+++ b/src/lua/msgpackffi.lua
@@ -501,7 +501,11 @@ local ext_decoder = {
     -- MP_DECIMAL
     [1] = function(data, len) local num = ffi.new("decimal_t") builtin.decimal_unpack(data, len, num) return num end,
     -- MP_UUID
-    [2] = function(data, len) local uuid = ffi.new("struct tt_uuid") builtin.uuid_unpack(data, len, uuid) return uuid end,
+    [2] = function(data, len)
+        local uuid = ffi.new("struct tt_uuid")
+        builtin.uuid_unpack(data, len, uuid)
+        return uuid
+    end,
 }
 
 local function decode_ext(data)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/ Sergey Bronnikov
@ 2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-17 12:05     ` Igor Munkin
  2020-04-17 19:47     ` Sergey Bronnikov
  2020-04-16 13:43   ` Igor Munkin
  1 sibling, 2 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:29 UTC (permalink / raw)
  To: Sergey Bronnikov, tarantool-patches, avtikhon, alexander.turenko,
	o.piskunov

Thanks for the patch!

Consider more fixes below and on the branch in a separate commit.
That allowed to remove some warning mutes from the luacheck
config.

====================

    Review fixes: test/

diff --git a/test/app-tap/console_lua.test.lua b/test/app-tap/console_lua.test.lua
index 3ed6aad97..d0e290d9c 100755
--- a/test/app-tap/console_lua.test.lua
+++ b/test/app-tap/console_lua.test.lua
@@ -13,7 +13,7 @@ local CONSOLE_SOCKET = 'console-lua.sock'
 --
 -- Set Lua output mode.
 local function set_lua_output(client, opts)
-    local opts = opts or {}
+    opts = opts or {}
     local mode = opts.block and 'lua,block' or 'lua'
     client:write(('\\set output %s\n'):format(mode))
     assert(client:read(EOL), 'true' .. EOL, 'set lua output mode')
diff --git a/test/app-tap/fail_main.test.lua b/test/app-tap/fail_main.test.lua
index f8c45bf6f..917577f46 100755
--- a/test/app-tap/fail_main.test.lua
+++ b/test/app-tap/fail_main.test.lua
@@ -16,7 +16,7 @@ function run_script(code)
     script:close()
     local output_file = fio.pathjoin(fio.cwd(), 'out.txt')
     local cmd = [[/bin/sh -c 'cd "%s" && "%s" ./script.lua 0> %s 2> %s']]
-    local code = os.execute(
+    code = os.execute(
         string.format(cmd, dir, tarantool_bin, output_file, output_file)
     )
     fio.rmtree(dir)
diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
index 4d7059559..3fda53274 100755
--- a/test/app-tap/tarantoolctl.test.lua
+++ b/test/app-tap/tarantoolctl.test.lua
@@ -97,23 +97,14 @@ local function tctl_wait_start(dir, name)
             fiber.sleep(0.01)
         end
         ::again::
-        while true do
-            local stat, nb = pcall(require('net.box').new, path, {
-                wait_connected = true, console = true
-            })
-            if stat == false then
-                fiber.sleep(0.01)
-                goto again
-            else
-                break
-            end
-            local stat, msg = pcall(nb.eval, nb, 'require("fiber").time()')
-            if stat == false then
-                fiber.sleep(0.01)
-            else
-                break
-            end
+        local stat, nb = pcall(require('net.box').new, path, {
+            wait_connected = true, console = true
+        })
+        if stat == false then
+            fiber.sleep(0.01)
+            goto again
         end
+        return
     end
 end
 

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/ Sergey Bronnikov
@ 2020-04-14 23:30   ` Vladislav Shpilevoy
  0 siblings, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:30 UTC (permalink / raw)
  To: Sergey Bronnikov, tarantool-patches, avtikhon, alexander.turenko,
	o.piskunov

Thanks for the patch!

Consider more fixes below and on the branch in a separate commit.
That allowed to remove some warning mutes from the luacheck
config.

Also luacheck discovered two bugs, which were muted in luacheck
config. I fixed them in 2 separate commits so as they could be
backported.

So in total there are +1 commit with review fixes and +2 self
sufficient commits, which should not be squashed.

The 2 new commits I sent as separate letters.

====================

    Review fixes: src/box/lua

diff --git a/src/box/lua/console.lua b/src/box/lua/console.lua
index 2add9a79d..5fd8b5e4e 100644
--- a/src/box/lua/console.lua
+++ b/src/box/lua/console.lua
@@ -465,7 +465,7 @@ local text_connection_mt = {
                 -- Make sure it is exactly "\set output" command.
                 if operators[items[1]] == set_param and
                     param_handlers[items[2]] == set_output then
-                    local err, fmt, opts = parse_output(items[3])
+                    local err, fmt = parse_output(items[3])
                     if not err then
                         self.fmt = fmt
                         self.eos = output_eos[fmt]
@@ -489,7 +489,7 @@ local text_connection_mt = {
                     break
                 end
                 if fmt == "yaml" then
-                    local handle, prefix = yaml.decode(rc, {tag_only = true})
+                    local handle = yaml.decode(rc, {tag_only = true})
                     if not handle then
                         -- Can not fail - tags are encoded with no
                         -- user participation and are correct always.
@@ -869,7 +869,7 @@ local function listen(uri)
         host = u.host
         port = u.service or 3313
     end
-    local s, addr = socket.tcp_server(host, port, { handler = client_handler,
+    local s = socket.tcp_server(host, port, { handler = client_handler,
         name = 'console'})
     if not s then
         error(string.format('failed to create server %s:%s: %s',
diff --git a/src/box/lua/feedback_daemon.lua b/src/box/lua/feedback_daemon.lua
index ad71a3fe2..06bf3f281 100644
--- a/src/box/lua/feedback_daemon.lua
+++ b/src/box/lua/feedback_daemon.lua
@@ -60,7 +60,7 @@ local function guard_loop(self)
             self.fiber = fiber.create(feedback_loop, self)
             log.verbose("%s restarted", PREFIX)
         end
-        local st, err = pcall(fiber.sleep, self.interval)
+        local st = pcall(fiber.sleep, self.interval)
         if not st then
             -- fiber was cancelled
             break
diff --git a/src/box/lua/key_def.lua b/src/box/lua/key_def.lua
index 586005709..a1b61441e 100644
--- a/src/box/lua/key_def.lua
+++ b/src/box/lua/key_def.lua
@@ -15,5 +15,5 @@ ffi.metatype(key_def_t, {
     __index = function(self, key)
         return methods[key]
     end,
-    __tostring = function(key_def) return "<struct key_def &>" end,
+    __tostring = function() return "<struct key_def &>" end,
 })
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index b671eb7a2..8d5dfa590 100644
--- a/src/box/lua/load_cfg.lua
+++ b/src/box/lua/load_cfg.lua
@@ -430,7 +430,6 @@ local function prepare_cfg(cfg, default_cfg, template_cfg, modify_cfg, prefix)
         else
             local good_types = string.gsub(template_cfg[k], ' ', '');
             if (string.find(',' .. good_types .. ',', ',' .. type(v) .. ',') == nil) then
-                good_types = string.gsub(good_types, ',', ', ');
                 box.error(box.error.CFG, readable_name, "should be one of types "..
                     template_cfg[k])
             end
diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua
index 07fa54c38..1e351bb31 100644
--- a/src/box/lua/net_box.lua
+++ b/src/box/lua/net_box.lua
@@ -38,10 +38,6 @@ local IPROTO_STATUS_KEY    = 0x00
 local IPROTO_ERRNO_MASK    = 0x7FFF
 local IPROTO_SYNC_KEY      = 0x01
 local IPROTO_SCHEMA_VERSION_KEY = 0x05
-local IPROTO_METADATA_KEY = 0x32
-local IPROTO_SQL_INFO_KEY = 0x42
-local SQL_INFO_ROW_COUNT_KEY = 0
-local IPROTO_FIELD_NAME_KEY = 0
 local IPROTO_DATA_KEY      = 0x30
 local IPROTO_ERROR_KEY     = 0x31
 local IPROTO_ERROR_STACK   = 0x52
@@ -155,7 +151,7 @@ local function next_id(id) return band(id + 1, 0x7FFFFFFF) end
 -- @retval two non-nils A connected socket and a decoded greeting.
 --
 local function establish_connection(host, port, timeout)
-    local timeout = timeout or DEFAULT_CONNECT_TIMEOUT
+    timeout = timeout or DEFAULT_CONNECT_TIMEOUT
     local begin = fiber.clock()
     local s = socket.tcp_connect(host, port, timeout)
     if not s then
@@ -425,7 +421,7 @@ local function create_transport(host, port, user, password, callback,
         state = new_state
         last_errno = new_errno
         last_error = new_error
-        callback('state_changed', new_state, new_errno, new_error)
+        callback('state_changed', new_state, new_error)
         state_cond:broadcast()
         if state == 'error' or state == 'error_reconnect' or
            state == 'closed' then
@@ -647,7 +643,7 @@ local function create_transport(host, port, user, password, callback,
 
     local function send_and_recv_iproto(timeout)
         local data_len = recv_buf.wpos - recv_buf.rpos
-        local required = 0
+        local required
         if data_len < 5 then
             required = 5
         else
@@ -711,7 +707,8 @@ local function create_transport(host, port, user, password, callback,
                      "please use require('console').connect() instead")
             local setup_delimiter = 'require("console").delimiter("$EOF$")\n'
             method_encoder.inject(send_buf, nil, setup_delimiter)
-            local err, response = send_and_recv_console()
+            local response
+            err, response = send_and_recv_console()
             if err then
                 return error_sm(err, response)
             elseif response ~= '---\n...\n' then
@@ -729,7 +726,6 @@ local function create_transport(host, port, user, password, callback,
     end
 
     console_sm = function(rid)
-        local delim = '\n...\n'
         local err, response = send_and_recv_console()
         if err then
             return error_sm(err, response)
@@ -803,8 +799,7 @@ local function create_transport(host, port, user, password, callback,
                 local status = hdr[IPROTO_STATUS_KEY]
                 local response_schema_version = hdr[IPROTO_SCHEMA_VERSION_KEY]
                 if status ~= 0 then
-                    local body
-                    body, body_end = decode(body_rpos)
+                    local body = decode(body_rpos)
                     return error_sm(E_NO_CONNECTION, body[IPROTO_ERROR_KEY])
                 end
                 if schema_version == nil then
@@ -813,8 +808,7 @@ local function create_transport(host, port, user, password, callback,
                     -- schema changed while fetching schema; restart loader
                     return iproto_schema_sm()
                 end
-                local body
-                body, body_end = decode(body_rpos)
+                local body = decode(body_rpos)
                 response[id] = body[IPROTO_DATA_KEY]
             end
         until response[select1_id] and response[select2_id] and
@@ -830,14 +824,11 @@ local function create_transport(host, port, user, password, callback,
         local err, hdr, body_rpos, body_end = send_and_recv_iproto()
         if err then return error_sm(err, hdr) end
         dispatch_response_iproto(hdr, body_rpos, body_end)
-        local status = hdr[IPROTO_STATUS_KEY]
         local response_schema_version = hdr[IPROTO_SCHEMA_VERSION_KEY]
         if response_schema_version > 0 and
            response_schema_version ~= schema_version then
             -- schema_version has been changed - start to load a new version.
             -- Sic: self.schema_version will be updated only after reload.
-            local body
-            body, body_end = decode(body_rpos)
             set_state('fetch_schema')
             return iproto_schema_sm(schema_version)
         end
@@ -954,7 +945,7 @@ local function new_sm(host, port, opts, connection, greeting)
     local remote = {host = host, port = port, opts = opts, state = 'initial'}
     local function callback(what, ...)
         if what == 'state_changed' then
-            local state, errno, err = ...
+            local state, err = ...
             local was_connected = remote._is_connected
             if state == 'active' then
                 if not was_connected then
@@ -1601,7 +1592,6 @@ this_module.self = {
             rollback()
             return box.error() -- re-throw
         end
-        local result
         if obj ~= nil then
             return handle_eval_result(pcall(proc, obj, unpack(args)))
         else
diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 85fcca562..545abe714 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -2,7 +2,6 @@
 --
 local ffi = require('ffi')
 local msgpack = require('msgpack')
-local msgpackffi = require('msgpackffi')
 local fun = require('fun')
 local log = require('log')
 local fio = require('fio')
@@ -274,7 +273,6 @@ local function check_param_table(table, template)
             local haystack = ',' .. good_types .. ','
             local needle = ',' .. param_type(v) .. ','
             if (string.find(haystack, needle) == nil) then
-                good_types = string.gsub(good_types, ',', ', ')
                 box.error(box.error.ILLEGAL_PARAMS,
                           "options parameter '" .. k ..
                           "' should be one of types: " .. template[k])
@@ -582,9 +580,9 @@ end
 --
 local function format_field_resolve(format, path, what)
     assert(type(path) == 'number' or type(path) == 'string')
-    local idx = nil
+    local idx
     local relative_path = nil
-    local field_name = nil
+    local field_name
     -- Path doesn't require resolve.
     if type(path) == 'number' then
         idx = path
@@ -844,7 +842,7 @@ local function space_sequence_alter_prepare(format, parts, options,
             if id == nil then
                 box.error(box.error.NO_SUCH_SEQUENCE, new_sequence.id)
             end
-            local tuple = _space_sequence.index.sequence:select(id)[1]
+            tuple = _space_sequence.index.sequence:select(id)[1]
             if tuple ~= nil and tuple.is_generated then
                 box.error(box.error.ALTER_SPACE, space_name,
                           "can not attach generated sequence")
@@ -1281,7 +1279,6 @@ end
 
 -- global struct port instance to use by select()/get()
 local port_tuple = ffi.new('struct port_tuple')
-local port_tuple_entry_t = ffi.typeof('struct port_tuple_entry')
 
 -- Helper function to check space:method() usage
 local function check_space_arg(space, method)
@@ -1499,7 +1496,8 @@ end
 
 base_index_mt.get_ffi = function(index, key)
     check_index_arg(index, 'get')
-    local key, key_end = tuple_encode(key)
+    local key_end
+    key, key_end = tuple_encode(key)
     if builtin.box_index_get(index.space_id, index.id,
                              key, key_end, ptuple) ~= 0 then
         return box.error() -- error
@@ -1532,7 +1530,8 @@ end
 
 base_index_mt.select_ffi = function(index, key, opts)
     check_index_arg(index, 'select')
-    local key, key_end = tuple_encode(key)
+    local key_end
+    key, key_end = tuple_encode(key)
     local iterator, offset, limit = check_select_opts(opts, key + 1 >= key_end)
 
     local port = ffi.cast('struct port *', port_tuple)
@@ -1554,7 +1553,7 @@ end
 
 base_index_mt.select_luac = function(index, key, opts)
     check_index_arg(index, 'select')
-    local key = keify(key)
+    key = keify(key)
     local iterator, offset, limit = check_select_opts(opts, #key == 0)
     return internal.select(index.space_id, index.id, iterator,
         offset, limit, key)
@@ -2680,7 +2679,7 @@ box.once = function(key, func, ...)
         box.error(box.error.ILLEGAL_PARAMS, "Usage: box.once(key, func, ...)")
     end
 
-    local key = "once"..key
+    key = "once"..key
     if box.space._schema:get{key} ~= nil then
         return
     end
diff --git a/src/box/lua/tuple.lua b/src/box/lua/tuple.lua
index f97aa1579..6d5df1ae7 100644
--- a/src/box/lua/tuple.lua
+++ b/src/box/lua/tuple.lua
@@ -1,7 +1,6 @@
 -- tuple.lua (internal file)
 
 local ffi = require('ffi')
-local yaml = require('yaml')
 local msgpackffi = require('msgpackffi')
 local fun = require('fun')
 local buffer = require('buffer')
@@ -81,7 +80,6 @@ local tuple_encode = function(obj)
         encode_r(tmpbuf, obj, 1)
     elseif type(obj) == "table" then
         encode_array(tmpbuf, #obj)
-        local i
         for i = 1, #obj, 1 do
             encode_r(tmpbuf, obj[i], 1)
         end
@@ -232,7 +230,7 @@ local function tuple_update(tuple, expr)
         error("Usage: tuple:update({ { op, field, arg}+ })")
     end
     local pexpr, pexpr_end = tuple_encode(expr)
-    local tuple = builtin.box_tuple_update(tuple, pexpr, pexpr_end)
+    tuple = builtin.box_tuple_update(tuple, pexpr, pexpr_end)
     if tuple == nil then
         return box.error()
     end
@@ -245,7 +243,7 @@ local function tuple_upsert(tuple, expr)
         error("Usage: tuple:upsert({ { op, field, arg}+ })")
     end
     local pexpr, pexpr_end = tuple_encode(expr)
-    local tuple = builtin.box_tuple_upsert(tuple, pexpr, pexpr_end)
+    tuple = builtin.box_tuple_upsert(tuple, pexpr, pexpr_end)
     if tuple == nil then
         return box.error()
     end
diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
index 6b8ece513..f95b1ae4a 100644
--- a/src/box/lua/upgrade.lua
+++ b/src/box/lua/upgrade.lua
@@ -52,7 +52,6 @@ end
 local function truncate(space)
     local pk = space.index[0]
     while pk:len() > 0 do
-        local state, t
         for state, t in pk:pairs() do
             local key = {}
             for _k2, parts in ipairs(pk.parts) do

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in
  2020-04-14  7:58 ` [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in Sergey Bronnikov
@ 2020-04-14 23:30   ` Vladislav Shpilevoy
  2020-04-15 15:35   ` Igor Munkin
  1 sibling, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:30 UTC (permalink / raw)
  To: Sergey Bronnikov, tarantool-patches, avtikhon, alexander.turenko,
	o.piskunov

Thanks for the patch!

Consider more fixes below and on the branch in a separate commit.
That allowed to remove some warning mutes from the luacheck
config.

====================

    Review fixes: tarantoolctl.in

diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in
index d7f098735..b8e8d0632 100755
--- a/extra/dist/tarantoolctl.in
+++ b/extra/dist/tarantoolctl.in
@@ -132,7 +132,8 @@ local function load_default_file(default_file)
             log.error("Failed to load defaults file: %s", msg)
         end
         debug.setfenv(ufunc, env)
-        local state, msg = pcall(ufunc)
+        local state
+        state, msg = pcall(ufunc)
         if not state then
             log.error('Failed to execute defaults file: %s', msg)
         end

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 5/6] Add luacheck config
  2020-04-14  8:01 ` [Tarantool-patches] [PATCH 5/6] Add luacheck config Sergey Bronnikov
@ 2020-04-14 23:30   ` Vladislav Shpilevoy
  0 siblings, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:30 UTC (permalink / raw)
  To: Sergey Bronnikov, tarantool-patches, avtikhon, alexander.turenko,
	o.piskunov

Thanks for the patch!

Consider more fixes below and on the branch in a separate commit.

====================

    Review fixes: luacheck

diff --git a/.luacheckrc b/.luacheckrc
index 83774d3f7..0862f7f2a 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -22,41 +22,36 @@ exclude_files = {
     ".git/**/*.lua",
 }
 
-files["**/*.lua"] = {ignore = {"212", "122"}}
-files["extra/dist/tarantoolctl.in"] = {ignore = {"431", "411", "122", "542", "212"}}
-files["src/lua/help.lua"] = {globals = {"help", "tutorial"}, ignore = {"113", "211"}}
+files["**/*.lua"] = {
+    globals = {"box", "_TARANTOOL", "help", "tutorial"},
+    ignore = {"212", "122"}
+}
+files["extra/dist/tarantoolctl.in"] = {ignore = {"431", "122", "542", "212"}}
 files["src/lua/swim.lua"] = {ignore = {"431"}}
 files["src/lua/fio.lua"] = {ignore = {"231"}}
 files["src/lua/init.lua"] = {ignore = {"121"}}
-files["src/lua/fiber.lua"] = {ignore = {"331", "311"}}
+files["src/lua/fiber.lua"] = {ignore = {"331"}}
 files["src/box/lua/serpent.lua"] = {globals = {"_ENV"}, ignore = {"431", "421", "631", "432", "542", "412", "422"}}
-files["src/box/lua/load_cfg.lua"] = {ignore = {"431", "143", "311", "542"}}
-files["src/box/lua/net_box.lua"] = {ignore = {"431", "211", "421", "432", "311", "231", "411", "412"}}
-files["src/box/lua/schema.lua"] = {globals = {"update_format", "iid", "role_check_grant_revoke_of_sys_priv"}, ignore = {"431", "211", "421", "213", "432", "311", "542", "412"}}
-files["src/box/lua/key_def.lua"] = {ignore = {"431"}}
-files["src/box/lua/feedback_daemon.lua"] = {ignore = {"211"}}
-files["src/box/lua/tuple.lua"] = {ignore = {"211", "421", "412"}}
-files["src/box/lua/upgrade.lua"] = {ignore = {"211", "421", "213"}}
-files["src/box/lua/console.lua"] = {globals = {"help"}, ignore = {"211", "143"}}
+files["src/box/lua/load_cfg.lua"] = {ignore = {"431", "143", "542"}}
+files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411",}}
+files["src/box/lua/schema.lua"] = {ignore = {"431", "213", "432", "542"}}
+files["src/box/lua/upgrade.lua"] = {ignore = {"213"}}
 files["test-run/test_run.lua"] = {ignore = {"412", "211", "431"}}
 files["test-run/lib/tarantool-python/test/cluster-py/master.lua"] = {ignore = {"121"}}
 files["test-run/lib/tarantool-python/unit/suites/box.lua"] = {ignore = {"121"}}
 files["test/**/*.lua"] = {ignore = {"631", "611", "614", "613", "612", "621", "112", "211", "432"}}
-files["test/app/*.lua"] = {ignore = {"111", "113"}}
 files["test/app/lua/fiber.lua"] = {ignore = {"111"}}
 files["test/app-tap/*.lua"] = {ignore = {"111", "113", "411", "431"}}
 files["test/app-tap/yaml.test.lua"] = {ignore = {"311"}}
 files["test/app-tap/module_api.test.lua"] = {ignore = {"311"}}
 files["test/app-tap/debug.test.lua"] = {ignore = {"421"}}
-files["test/app-tap/console_lua.test.lua"] = {ignore = {"412"}}
 files["test/app-tap/string.test.lua"] = {ignore = {"311"}}
 files["test/app-tap/logger.test.lua"] = {ignore = {"231"}}
 files["test/app-tap/snapshot.test.lua"] = {ignore = {"213"}}
 files["test/app-tap/msgpackffi.test.lua"] = {ignore = {"213"}}
 files["test/app-tap/http_client.test.lua"] = {ignore = {"213", "422", "412", "311"}}
-files["test/app-tap/fail_main.test.lua"] = {ignore = {"412"}}
-files["test/app-tap/tarantoolctl.test.lua"] = {ignore = {"511", "421"}}
-files["test/app-tap/lua/require_mod.lua"] = {ignore = {"113", "111"}}
+files["test/app-tap/tarantoolctl.test.lua"] = {ignore = {"421"}}
+files["test/app-tap/lua/require_mod.lua"] = {globals = {"exports"}}
 files["test/box/admin.test.lua"] = {ignore = {"213"}}
 files["test/box/lua/*.lua"] = {ignore = {"111"}}
 files["test/box/*.lua"] = {ignore = {"111", "113"}}

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH v3 7/6] schema: fix index promotion to functional index
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
                   ` (5 preceding siblings ...)
  2020-04-14  8:01 ` [Tarantool-patches] [PATCH 6/6] gitlab-ci: enable static analysis with luacheck Sergey Bronnikov
@ 2020-04-14 23:30 ` Vladislav Shpilevoy
  2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 8/6] schema: fix internal symbols dangling in _G Vladislav Shpilevoy
  7 siblings, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:30 UTC (permalink / raw)
  To: Sergey Bronnikov, avtikhon, alexander.turenko, o.piskunov,
	tarantool-patches


    When index:alter() was called on a non-functional index with
    specified 'func', it led to accessing a not declared variable in
    schema.lua.

diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 545abe714..ad4a5470b 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -1210,7 +1210,7 @@ box.schema.index.alter = function(space_id, index_id, options)
                    index_opts, parts}
     if index_opts.func ~= nil then
         local _func_index = box.space[box.schema.FUNC_INDEX_ID]
-        _func_index:insert{space_id, iid, index_opts.func}
+        _func_index:insert{space_id, index_id, index_opts.func}
     end
     space_sequence_alter_commit(sequence_proxy)
 end
diff --git a/test/engine/func_index.result b/test/engine/func_index.result
index a827c929f..dfa609ce8 100644
--- a/test/engine/func_index.result
+++ b/test/engine/func_index.result
@@ -847,3 +847,42 @@ s:drop()
 box.func.extr:drop()
  | ---
  | ...
+
+--
+-- Function is added at alter.
+--
+s = box.schema.space.create('withdata', {engine = engine})
+ | ---
+ | ...
+lua_code = [[function(tuple) return {tuple[2] >= 0 and tuple[2] or -tuple[2]} end]]
+ | ---
+ | ...
+box.schema.func.create('second_field_module', {body = lua_code, is_deterministic = true, is_sandboxed = true})
+ | ---
+ | ...
+pk = s:create_index('pk')
+ | ---
+ | ...
+sk = s:create_index('sk', {parts = {{2, 'unsigned'}}})
+ | ---
+ | ...
+sk:alter({func = 'second_field_module', parts = {{1, 'unsigned'}}})
+ | ---
+ | ...
+s:insert({1, -3})
+ | ---
+ | - [1, -3]
+ | ...
+sk:get{3}
+ | ---
+ | - [1, -3]
+ | ...
+s:drop()
+ | ---
+ | ...
+box.schema.func.drop('second_field_module')
+ | ---
+ | ...
diff --git a/test/engine/func_index.test.lua b/test/engine/func_index.test.lua
index 5db588c1f..98df886f4 100644
--- a/test/engine/func_index.test.lua
+++ b/test/engine/func_index.test.lua
@@ -294,3 +294,18 @@ idx:get({3})
 
 s:drop()
 box.func.extr:drop()
+
+--
+-- Function is added at alter.
+--
+s = box.schema.space.create('withdata', {engine = engine})
+lua_code = [[function(tuple) return {tuple[2] >= 0 and tuple[2] or -tuple[2]} end]]
+box.schema.func.create('second_field_module', {body = lua_code, is_deterministic = true, is_sandboxed = true})
+pk = s:create_index('pk')
+sk = s:create_index('sk', {parts = {{2, 'unsigned'}}})
+sk:alter({func = 'second_field_module', parts = {{1, 'unsigned'}}})
+s:insert({1, -3})
+sk:get{3}
+s:drop()
+box.schema.func.drop('second_field_module')

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Tarantool-patches] [PATCH v3 8/6] schema: fix internal symbols dangling in _G
  2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
                   ` (6 preceding siblings ...)
  2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 7/6] schema: fix index promotion to functional index Vladislav Shpilevoy
@ 2020-04-14 23:30 ` Vladislav Shpilevoy
  7 siblings, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-14 23:30 UTC (permalink / raw)
  To: Sergey Bronnikov, avtikhon, alexander.turenko, o.piskunov,
	tarantool-patches

    
    A couple of functions were mistakenly declared as 'function'
    instead of 'local function' in schema.lua. That led to their
    presence in the global namespace.

diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index ad4a5470b..80e67a82a 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -350,7 +350,7 @@ end
 -- box.commit yields, so it's defined as Lua/C binding
 -- box.rollback and box.rollback_to_savepoint yields as well
 
-function update_format(format)
+local function update_format(format)
     local result = {}
     for i, given in ipairs(format) do
         local field = {}
@@ -2639,7 +2639,7 @@ box.schema.role.drop = function(name, opts)
     return drop(uid)
 end
 
-function role_check_grant_revoke_of_sys_priv(priv)
+local function role_check_grant_revoke_of_sys_priv(priv)
     priv = string.lower(priv)
     if (type(priv) == 'string' and (priv:match("session") or priv:match("usage"))) or
         (type(priv) == "number" and (bit.band(priv, 8) ~= 0 or bit.band(priv, 16) ~= 0)) then

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in
  2020-04-14  7:58 ` [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in Sergey Bronnikov
  2020-04-14 23:30   ` Vladislav Shpilevoy
@ 2020-04-15 15:35   ` Igor Munkin
  1 sibling, 0 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-15 15:35 UTC (permalink / raw)
  To: Sergey Bronnikov; +Cc: o.piskunov, tarantool-patches

Sergey,

Thanks for the patch! I started with this one, since it's simple and I
can point the general issues related to the fix.

I see the following approach to fix the errors and warning found by
luacheck in *Lua sources*:

* If the fix is obvious and simple -- please do it.
* If the warning/erro fix leads to code complication or reduce
  readability (e.g. empty if branch) -- let's add an inline ignore
  comment, since it unlikely to be fixed and just burdens .luacheckrc.
* If none of the above -- add the corresponding rule to .luacheckrc.

I left inline comments for your patch and added the fix I made for
tarantoolctl at the end. Please consider them.

On 14.04.20, Sergey Bronnikov wrote:
> Closes #4681
> 
> Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
> ---
> 
>  extra/dist/tarantoolctl.in | 18 ++++++++----------
>  1 file changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in
> index f5a912ccd..d7f098735 100755
> --- a/extra/dist/tarantoolctl.in
> +++ b/extra/dist/tarantoolctl.in

<snipped>

> @@ -64,7 +63,7 @@ end
>  
>  local function check_user_level()
>      local uid = os.getenv('UID')
> -    local udir = nil
> +    local udir

Minor: I looked at the code nearby and it looks like this initialization
can be moved below, since udir is unused prior it (consider the changes
below).

>      if uid == 0 or os.getenv("NOTIFY_SOCKET") then
>          return nil
>      end

<snipped>

> -- 
> 2.23.0
> 
> 
> -- 
> sergeyb@

I tried to fix the issues by myself and dumped my step-by-step activity
below. At first let's see what luacheck reports for tarantoolctl source:

| $ luacheck --codes extra/dist/tarantoolctl.in | tail -1
| Total: 35 warnings / 0 errors in 1 file
| $ luacheck --codes extra/dist/tarantoolctl.in | \
|         grep -vP '^(Total:|Checking|$)' | cut -f 6 -d ' ' | sort | uniq -c
|       1 (W112)
|       5 (W113)
|       1 (W122)
|       2 (W211)
|       3 (W212)
|       4 (W213)
|       3 (W311)
|       2 (W411)
|      13 (W431)
|       1 (W542)

According to the list of warnings[1] W113 is reported when accessing an
undefined global variable is detected. At the same time W112 is reported
when mutating an undefined global variable is detected. Considering
output these are well known Tarantool globals: box and _TARANTOOL. Let's
suppress them (now with CLI option and globally in .luacheckrc further):

| $ luacheck --codes extra/dist/tarantoolctl.in --globals box --globals _TARANTOOL | \
|         grep -vP '^(Total:|Checking|$)' | cut -f 6 -d ' ' | sort | uniq -c
|       1 (W122)
|       2 (W211)
|       3 (W212)
|       4 (W213)
|       3 (W311)
|       2 (W411)
|      13 (W431)
|       1 (W542)

Well, 6 false-positive warnings are suppressed, 29 others left. Let's
see the remaining ones:

| $ luacheck --codes extra/dist/tarantoolctl.in --globals box --globals _TARANTOOL
| Checking extra/dist/tarantoolctl.in               29 warnings
|
|     extra/dist/tarantoolctl.in:49:7: (W211) unused variable 'lua_arguments'
|     extra/dist/tarantoolctl.in:67:11: (W311) value assigned to variable 'udir' is unused
|     extra/dist/tarantoolctl.in:127:34: (W431) shadowing upvalue 'default_file' on line 38
|     extra/dist/tarantoolctl.in:136:22: (W411) variable 'msg' was previously defined on line 130
|     extra/dist/tarantoolctl.in:217:5: (W122) setting read-only field '?' of global 'arg'
|     extra/dist/tarantoolctl.in:423:24: (W212) unused argument 'self'
|     extra/dist/tarantoolctl.in:440:15: (W431) shadowing upvalue 'console_sock' on line 42
|     extra/dist/tarantoolctl.in:573:11: (W431) shadowing upvalue 'console_sock' on line 42
|     extra/dist/tarantoolctl.in:634:11: (W431) shadowing upvalue 'console_sock' on line 42
|     extra/dist/tarantoolctl.in:695:31: (W431) shadowing upvalue 'uri' on line 9
|     extra/dist/tarantoolctl.in:759:11: (W431) shadowing upvalue 'console_sock' on line 42
|     extra/dist/tarantoolctl.in:793:11: (W311) value assigned to variable 'code' is unused
|     extra/dist/tarantoolctl.in:819:11: (W431) shadowing upvalue 'status' on line 750
|     extra/dist/tarantoolctl.in:851:11: (W211) unused variable 'spaces'
|     extra/dist/tarantoolctl.in:852:21: (W411) variable 'spaces' was previously defined on line 851
|     extra/dist/tarantoolctl.in:865:59: (W542) empty if branch
|     extra/dist/tarantoolctl.in:878:9: (W213) unused loop variable 'id'
|     extra/dist/tarantoolctl.in:895:11: (W431) shadowing upvalue 'uri' on line 9
|     extra/dist/tarantoolctl.in:904:9: (W213) unused loop variable 'id'
|     extra/dist/tarantoolctl.in:926:9: (W213) unused loop variable 'i'
|     extra/dist/tarantoolctl.in:940:11: (W311) value assigned to variable 'key' is unused
|     extra/dist/tarantoolctl.in:957:30: (W212) unused argument 'command'
|     extra/dist/tarantoolctl.in:957:39: (W212) unused argument 'program'
|     extra/dist/tarantoolctl.in:1324:9: (W213) unused loop variable 'no'
|     extra/dist/tarantoolctl.in:1333:31: (W431) shadowing upvalue 'commands' on line 1019
|     extra/dist/tarantoolctl.in:1335:18: (W431) shadowing upvalue 'self_name' on line 30
|     extra/dist/tarantoolctl.in:1387:15: (W431) shadowing upvalue 'command_name' on line 32
|     extra/dist/tarantoolctl.in:1388:15: (W431) shadowing upvalue 'positional_arguments' on line 47
|     extra/dist/tarantoolctl.in:1388:37: (W431) shadowing upvalue 'keyword_arguments' on line 48
|
| Total: 29 warnings / 0 errors in 1 file

Considering your patch you've already fixed all W211[unused local
variable], W212[unused argument] (considering the fix proposed by Oleg)
and W213[unused loop variable] warnings. The fixes are obvious and
good. Furthermore, you've successfully fixed all W311[value assigned to
a local variable is unused] warnings (but I fixed one of them in a
slightly different way below).

If I didn't miss anything, only the following warnings are left:

| $ luacheck --codes extra/dist/tarantoolctl.in --globals box --globals _TARANTOOL | \
|         grep -vP '^(Total:|Checking|$)' | cut -f 6 -d ' ' | sort | uniq -c
|       1 (W122)
|       1 (W411)
|      13 (W431)
|       1 (W542)

* extra/dist/tarantoolctl.in:136:22: (W411) variable 'msg' was previously defined on line 130
  Both msg values are well-localized, so I guess we can simply rename
  both occurences (consider the changes below).
* extra/dist/tarantoolctl.in:865:59: (W542) empty if branch
  This warning is also false-positive, since the way the branches are
  organized makes code clearer. Thereby this warning looks unlikely to
  be fixed, so I added an inline suppression.

The remaining errors (read-only arg table modification and upvalue
shadowing) can be placed to .luacheckrc to be fixed in future, since
fixes seem to be non-trivial and some of them introduce changes to
function contracts/behaviour.

Omitting few lines to be added to .luacheckrc, here are my changes:

================================================================================

diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in
index f5a912ccd..a80ecc057 100755
--- a/extra/dist/tarantoolctl.in
+++ b/extra/dist/tarantoolctl.in
@@ -46,7 +46,6 @@ local instance_dir
 local default_cfg
 local positional_arguments
 local keyword_arguments
-local lua_arguments = arg
 local language
 
 -- function for printing usage reference
@@ -64,13 +63,12 @@ end
 
 local function check_user_level()
     local uid = os.getenv('UID')
-    local udir = nil
     if uid == 0 or os.getenv("NOTIFY_SOCKET") then
         return nil
     end
     -- local dir configuration
     local pwd = os.getenv('PWD')
-    udir = pwd and pwd .. '/.tarantoolctl'
+    local udir = pwd and pwd .. '/.tarantoolctl' or nil
     udir = udir and fio.stat(udir) and udir or nil
     -- or home dir configuration
     local homedir = os.getenv('HOME')
@@ -127,15 +125,15 @@ end
 local function load_default_file(default_file)
     if default_file then
         local env = setmetatable({}, { __index = _G })
-        local ufunc, msg = loadfile(default_file)
+        local ufunc, loaderr = loadfile(default_file)
         -- if load fails - show the last 10 lines of the log file
         if not ufunc then
-            log.error("Failed to load defaults file: %s", msg)
+            log.error("Failed to load defaults file: %s", loaderr)
         end
         debug.setfenv(ufunc, env)
-        local state, msg = pcall(ufunc)
+        local state, err = pcall(ufunc)
         if not state then
-            log.error('Failed to execute defaults file: %s', msg)
+            log.error('Failed to execute defaults file: %s', err)
         end
         default_cfg = env.default_cfg
         instance_dir = env.instance_dir
@@ -420,7 +418,7 @@ local cat_formats = setmetatable({
     json = cat_json_cb,
     lua  = cat_lua_cb,
 }, {
-    __index = function(self, cmd)
+    __index = function(_, cmd)
         error(("Unknown formatter '%s'"):format(cmd))
     end
 })
@@ -790,7 +788,7 @@ end
 local function eval()
     local console_sock_path = uri.parse(console_sock).service
     local filename = arg[3]
-    local code = nil
+    local code
     if filename == nil then
         if stdin_isatty() then
             log.error("Usage:")
@@ -848,7 +846,6 @@ end
 -- xlog / snap file, so even when it stops on LSN >= @a opts.to on
 -- a current file a next file will be processed.
 local function filter_xlog(gen, param, state, opts, cb)
-    local spaces = opts.spaces
     local from, to, spaces = opts.from, opts.to, opts.space
     local show_system, replicas = opts['show-system'], opts.replica
 
@@ -862,7 +859,7 @@ local function filter_xlog(gen, param, state, opts, cb)
         elseif (lsn < from) or (lsn >= to) or
            (not spaces and sid and sid < 512 and not show_system) or
            (spaces and (sid == nil or not find_in_list(sid, spaces))) or
-           (replicas and not find_in_list(rid, replicas)) then
+           (replicas and not find_in_list(rid, replicas)) then -- luacheck: ignore
             -- pass this tuple
         else
             cb(record)
@@ -875,7 +872,7 @@ local function cat()
     local cat_format = opts.format
     local format_cb = cat_formats[cat_format]
     local is_printed = false
-    for id, file in ipairs(positional_arguments) do
+    for _, file in ipairs(positional_arguments) do
         log.error("Processing file '%s'", file)
         local gen, param, state = xlog.pairs(file)
         filter_xlog(gen, param, state, opts, function(record)
@@ -901,7 +898,7 @@ local function play()
     if not remote:wait_connected() then
         error(("Error while connecting to host '%s'"):format(uri))
     end
-    for id, file in ipairs(positional_arguments) do
+    for _, file in ipairs(positional_arguments) do
         log.info(("Processing file '%s'"):format(file))
         local gen, param, state = xlog.pairs(file)
         filter_xlog(gen, param, state, opts, function(record)
@@ -923,7 +920,7 @@ local function play()
 end
 
 local function find_arg(name_arg)
-    for i, key in ipairs(arg) do
+    for _, key in ipairs(arg) do
         if key:find(name_arg) ~= nil then
             return key
         end
@@ -937,7 +934,7 @@ local function rocks()
     local util = require("luarocks.util")
     local command_line = require("luarocks.cmd")
     local options = keyword_arguments
-    local key = nil
+    local key
     if options["only-server"] ~= nil then
         key = find_arg("only%-server")
     else
@@ -954,7 +951,7 @@ local function rocks()
     end
 
     -- Tweak help messages
-    util.see_help = function(command, program)
+    util.see_help = function()
         -- TODO: print extended help message here
         return "See Tarantool documentation for help."
     end
@@ -1321,7 +1318,7 @@ local function usage_command(name, cmd)
     if type(header) == 'string' then
         header = { header }
     end
-    for no, line in ipairs(header) do
+    for _, line in ipairs(header) do
         log.error("    " .. line, name)
     end
 end

================================================================================

[1]: https://luacheck.readthedocs.io/en/stable/warnings.html

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
  2020-04-14 23:29   ` Vladislav Shpilevoy
@ 2020-04-15 20:51   ` Igor Munkin
  2020-04-15 21:46     ` Vladislav Shpilevoy
  2020-04-17  9:26     ` Sergey Bronnikov
  1 sibling, 2 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-15 20:51 UTC (permalink / raw)
  To: Sergey Bronnikov; +Cc: o.piskunov, tarantool-patches

Sergey,

Thanks for the patch!

On 14.04.20, Sergey Bronnikov wrote:
> Many warnings fixed with help from Vladislav Shpilevoy.
> 
> Closes #4681
> 
> Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
> ---
> 
>  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       | 10 +++---
>  src/lua/tap.lua        | 74 ++++++++++++++++++++----------------------
>  src/lua/trigger.lua    |  3 --
>  16 files changed, 105 insertions(+), 124 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 {}

I guess you can just give t__in a proper name, e.g. args, params, etc.

>  
>      -- Prepare a lookup table for options. An option name -> a
>      -- type name to convert a parameter into or true (which means

<snipped>

> 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

<snipped>

> @@ -428,7 +428,7 @@ local public_methods = {
>  }
>  
>  local module_mt = {
> -    __serialize = function(s)
> +    __serialize = function()
>          return public_methods
>      end,
>      __index = public_methods

I see no reasons to leave other W212[unused argument self] occurences.
Here is a diff:

================================================================================

diff --git a/src/lua/crypto.lua b/src/lua/crypto.lua
index c0eb0d303..6a7ee53f0 100644
--- a/src/lua/crypto.lua
+++ b/src/lua/crypto.lua
@@ -318,7 +318,7 @@ for class, digest in pairs(digests) do
     digest_api[class] = setmetatable({
         new = function () return digest_new(digest) end
     }, {
-        __call = function (self, str)
+        __call = function (_, str)
             if type(str) ~= 'string' then
                 error("Usage: digest."..class.."(string)")
             end
@@ -332,7 +332,7 @@ for class, digest in pairs(digests) do
 end
 
 digest_api = setmetatable(digest_api,
-    {__index = function(self, digest)
+    {__index = function(_, digest)
         return error('Digest method "' .. digest .. '" is not supported')
     end })
 
@@ -341,7 +341,7 @@ for class, digest in pairs(hmacs) do
     hmac_api[class] = setmetatable({
         new = function (key) return hmac_new(digest, key) end
     }, {
-        __call = function (self, key, str)
+        __call = function (_, key, str)
             if type(str) ~= 'string' then
                 error("Usage: hmac."..class.."(key, string)")
             end
@@ -356,12 +356,12 @@ for class, digest in pairs(hmacs) do
         if type(str) ~= 'string' then
             error("Usage: hmac."..class.."_hex(key, string)")
         end
-        return string.hex(hmac_api[class](key, str))
+        return hmac_api[class](key, str):hex()
     end
 end
 
 hmac_api = setmetatable(hmac_api,
-    {__index = function(self, digest)
+    {__index = function(_, digest)
         return error('HMAC method "' .. digest .. '" is not supported')
     end })
 
@@ -384,12 +384,12 @@ local crypto_dirs = {
 }
 
 local algo_api_mt = {
-    __index = function(self, mode)
+    __index = function(_, mode)
         error('Cipher mode ' .. mode .. ' is not supported')
     end
 }
 local crypto_api_mt = {
-    __index = function(self, cipher)
+    __index = function(_, cipher)
         return error('Cipher method "' .. cipher .. '" is not supported')
     end
 }
@@ -408,7 +408,7 @@ for algo_name, algo_value in pairs(crypto_algos) do
                                              dir_value)
                 end
             }, {
-                __call = function(self, str, key, iv)
+                __call = function(_, str, key, iv)
                     local ctx = crypto_stream_new(algo_value, mode_value, key,
                                                   iv, dir_value)
                     local res = ctx:update(str)

================================================================================

<snipped>

> 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

Fixed the remaining errors:

================================================================================

diff --git a/src/lua/digest.lua b/src/lua/digest.lua
index 7f1aea8d0..6175228ab 100644
--- a/src/lua/digest.lua
+++ b/src/lua/digest.lua
@@ -91,7 +91,7 @@ PMurHash = {
 }
 
 setmetatable(PMurHash, {
-    __call = function(self, str)
+    __call = function(_, str)
         if type(str) ~= 'string' then
             error("Usage: digest.murhash(string)")
         end
@@ -134,7 +134,7 @@ CRC32 = {
 }
 
 setmetatable(CRC32, {
-    __call = function(self, str)
+    __call = function(_, str)
         if type(str) ~= 'string' then
             error("Usage digest.crc32(string)")
         end

================================================================================

<snipped>

Fixed the remaining errors in src/lua/errno.lua:

================================================================================

diff --git a/src/lua/errno.lua b/src/lua/errno.lua
index db800ce30..9b8dd518a 100644
--- a/src/lua/errno.lua
+++ b/src/lua/errno.lua
@@ -17,5 +17,5 @@ return setmetatable({
 }, {
     __index = errno_list,
     __newindex = function() error("Can't create new errno constants") end,
-    __call = function(self, ...) return ffi.errno(...) end
+    __call = function(_, ...) return ffi.errno(...) end
 })

================================================================================

> 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

It is a confusing noop, please drop it.

> -    local joined_path = ''
> +    local joined_path
>      local path_tab = {}
>      if string.sub(path, 1, 1) == '/' then
>          joined_path = path

<snipped>

> @@ -407,20 +407,20 @@ fio.rmtree = function(path)
>      if type(path) ~= 'string' then
>          error("Usage: fio.rmtree(path)")
>      end
> -    local status, err
> +    local status

This value is unused (and the corresponding warning is reported).
Consider the changes below:

================================================================================

diff --git a/src/lua/fio.lua b/src/lua/fio.lua
index b2b4b4c77..e271eccf6 100644
--- a/src/lua/fio.lua
+++ b/src/lua/fio.lua
@@ -407,7 +407,6 @@ fio.rmtree = function(path)
     if type(path) ~= 'string' then
         error("Usage: fio.rmtree(path)")
     end
-    local status
     path = fio.abspath(path)
     local ls, err = fio.listdir(path)
     if err ~= nil then
@@ -427,7 +426,8 @@ fio.rmtree = function(path)
             end
         end
     end
-    status, err = fio.rmdir(path)
+    local _
+    _, err = fio.rmdir(path)
     if err ~= nil then
         return false, string.format("failed to remove %s: %s", path, err)
     end

================================================================================

>      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)

This value is unused (and the corresponding warning is reported).
Consider the changes below:

================================================================================

diff --git a/src/lua/fio.lua b/src/lua/fio.lua
index b2b4b4c77..5fc47b8fc 100644
--- a/src/lua/fio.lua
+++ b/src/lua/fio.lua
@@ -453,7 +453,6 @@ fio.copytree = function(from, to)
     if type(from) ~= 'string' or type(to) ~= 'string' then
         error('Usage: fio.copytree(from, to)')
     end
-    local status, reason
     local st = fio.stat(from)
     if not st then
         return false, string.format("Directory %s does not exist", from)
@@ -467,7 +466,7 @@ fio.copytree = function(from, to)
     end
 
     -- create tree of destination
-    status, reason = fio.mktree(to)
+    local _, reason = fio.mktree(to)
     if reason ~= nil then
         return false, reason
     end
@@ -476,13 +475,13 @@ fio.copytree = function(from, to)
         local fto = fio.pathjoin(to, f)
         st = fio.lstat(ffrom)
         if st and st:is_dir() then
-            status, reason = fio.copytree(ffrom, fto)
+            _, reason = fio.copytree(ffrom, fto)
             if reason ~= nil then
                 return false, reason
             end
         end
         if st:is_reg() then
-            status, reason = fio.copyfile(ffrom, fto)
+            _, reason = fio.copyfile(ffrom, fto)
             if reason ~= nil then
                 return false, reason
             end
@@ -493,7 +492,7 @@ fio.copytree = function(from, to)
             if reason ~= nil then
                 return false, reason
             end
-            status, reason = fio.symlink(link_to, fto)
+            _, reason = fio.symlink(link_to, fto)
             if reason ~= nil then
                 return false, "can't create symlink in place of existing file "..fto
             end

================================================================================

>              if reason ~= nil then

<snipped>

> diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
> index f01ffaef0..9105c3f23 100644
> --- a/src/lua/msgpackffi.lua
> +++ b/src/lua/msgpackffi.lua

<snipped>

> @@ -504,7 +497,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,

Again another suppressed warning, that can be simply fixed:

================================================================================

diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
index 9105c3f23..786118d2d 100644
--- a/src/lua/msgpackffi.lua
+++ b/src/lua/msgpackffi.lua
@@ -499,9 +499,17 @@ local ext_decoder = {
     -- MP_UNKNOWN_EXTENSION
     [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,
+    [1] = function(data, len)
+        local num = ffi.new("decimal_t")
+        builtin.decimal_unpack(data, len, num)
+        return num
+    end,
     -- MP_UUID
-    [2] = function(data, len) local uuid = ffi.new("struct tt_uuid") builtin.uuid_unpack(data, len, uuid) return uuid end,
+    [2] = function(data, len)
+        local uuid = ffi.new("struct tt_uuid")
+        builtin.uuid_unpack(data, len, uuid)
+        return uuid
+    end,
 }
 
 local function decode_ext(data)

================================================================================

>      -- MP_UUID

<snipped>

> 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

<snipped>

Fixed the remaining errors:

================================================================================

diff --git a/src/lua/socket.lua b/src/lua/socket.lua
index 317acfe8e..75a4e8fb5 100644
--- a/src/lua/socket.lua
+++ b/src/lua/socket.lua
@@ -1577,7 +1577,7 @@ return setmetatable({
     iowait = internal.iowait,
     internal = internal,
 }, {
-    __call = function(self, ...) return socket_new(...) end;
+    __call = function(_, ...) return socket_new(...) end;
     __index = {
         tcp = lsocket_tcp;
         connect = lsocket_connect;

================================================================================

<snipped>

> diff --git a/src/lua/tap.lua b/src/lua/tap.lua
> index 94b080d5a..094eb883f 100644
> --- a/src/lua/tap.lua
> +++ b/src/lua/tap.lua

<snipped>

> @@ -190,38 +186,38 @@ local function isboolean(test, v, message, extra)
>      return is(test, type(v), 'boolean', message, extra)
>  end
>  

I don't get the difference between <isfunction> routine and <isboolean>,
but you changed parameter name only in one of them. Please, choose the
one naming and adjust everything considering it.

> -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;

<snipped>

> -- 
> 2.23.0
> 
> 
> -- 
> sergeyb@

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-14 23:29   ` Vladislav Shpilevoy
@ 2020-04-15 20:51     ` Igor Munkin
  2020-04-15 21:40       ` Vladislav Shpilevoy
  2020-04-17  9:07       ` Sergey Bronnikov
  2020-04-17  9:09     ` Sergey Bronnikov
  1 sibling, 2 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-15 20:51 UTC (permalink / raw)
  To: Vladislav Shpilevoy; +Cc: o.piskunov, tarantool-patches

Vlad,

Thanks for the fixes!

On 15.04.20, Vladislav Shpilevoy wrote:
> Thanks for the patch!
> 
> Consider more fixes below and on the branch in a separate commit.
> That allowed to remove some warning mutes from the luacheck
> config.
> 
> ====================
> 
>     Review fixes: src/lua
> 
> diff --git a/src/lua/fiber.lua b/src/lua/fiber.lua
> index 89c17f63d..692408e54 100644
> --- a/src/lua/fiber.lua
> +++ b/src/lua/fiber.lua
> @@ -40,7 +40,7 @@ fiber.stall = nil
>  
>  local worker_next_task = nil
>  local worker_last_task = nil

It looks like this assignment can also be omitted (anyway luacheck also
reports it as a warning).

> -local worker_fiber = nil
> +local worker_fiber
>  
>  --
>  -- Worker is a singleton fiber for not urgent delayed execution of

<snipped>

> diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
> index 9105c3f23..793f47854 100644
> --- a/src/lua/msgpackffi.lua
> +++ b/src/lua/msgpackffi.lua
> @@ -501,7 +501,11 @@ local ext_decoder = {
>      -- MP_DECIMAL
>      [1] = function(data, len) local num = ffi.new("decimal_t") builtin.decimal_unpack(data, len, num) return num end,

I guess MP_DECIMAL decoder can also be transformed to multiline function.

>      -- MP_UUID
> -    [2] = function(data, len) local uuid = ffi.new("struct tt_uuid") builtin.uuid_unpack(data, len, uuid) return uuid end,
> +    [2] = function(data, len)
> +        local uuid = ffi.new("struct tt_uuid")
> +        builtin.uuid_unpack(data, len, uuid)
> +        return uuid
> +    end,
>  }
>  
>  local function decode_ext(data)

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-15 20:51     ` Igor Munkin
@ 2020-04-15 21:40       ` Vladislav Shpilevoy
  2020-04-17  9:07       ` Sergey Bronnikov
  1 sibling, 0 replies; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-15 21:40 UTC (permalink / raw)
  To: Igor Munkin; +Cc: o.piskunov, tarantool-patches

>> diff --git a/src/lua/fiber.lua b/src/lua/fiber.lua
>> index 89c17f63d..692408e54 100644
>> --- a/src/lua/fiber.lua
>> +++ b/src/lua/fiber.lua
>> @@ -40,7 +40,7 @@ fiber.stall = nil
>>  
>>  local worker_next_task = nil
>>  local worker_last_task = nil
> 
> It looks like this assignment can also be omitted (anyway luacheck also
> reports it as a warning).

It didn't report for me.

>> -local worker_fiber = nil
>> +local worker_fiber
>>  
>>  --
>>  -- Worker is a singleton fiber for not urgent delayed execution of
> 
> <snipped>
> 
>> diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
>> index 9105c3f23..793f47854 100644
>> --- a/src/lua/msgpackffi.lua
>> +++ b/src/lua/msgpackffi.lua
>> @@ -501,7 +501,11 @@ local ext_decoder = {
>>      -- MP_DECIMAL
>>      [1] = function(data, len) local num = ffi.new("decimal_t") builtin.decimal_unpack(data, len, num) return num end,
> 
> I guess MP_DECIMAL decoder can also be transformed to multiline function.

It can, but luacheck does not complain about it (on my machine),
so I decided to keep it to reduce diff size.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-15 20:51   ` Igor Munkin
@ 2020-04-15 21:46     ` Vladislav Shpilevoy
  2020-04-16 13:52       ` Igor Munkin
  2020-04-17  9:26     ` Sergey Bronnikov
  1 sibling, 1 reply; 28+ messages in thread
From: Vladislav Shpilevoy @ 2020-04-15 21:46 UTC (permalink / raw)
  To: Igor Munkin, Sergey Bronnikov; +Cc: o.piskunov, tarantool-patches

>> @@ -428,7 +428,7 @@ local public_methods = {
>>  }
>>  
>>  local module_mt = {
>> -    __serialize = function(s)
>> +    __serialize = function()
>>          return public_methods
>>      end,
>>      __index = public_methods
> 
> I see no reasons to leave other W212[unused argument self] occurences.
> Here is a diff:
> 
> ================================================================================
> 
> diff --git a/src/lua/crypto.lua b/src/lua/crypto.lua
> index c0eb0d303..6a7ee53f0 100644
> --- a/src/lua/crypto.lua
> +++ b/src/lua/crypto.lua
> @@ -318,7 +318,7 @@ for class, digest in pairs(digests) do
>      digest_api[class] = setmetatable({
>          new = function () return digest_new(digest) end
>      }, {
> -        __call = function (self, str)
> +        __call = function (_, str)

I would better avoid such changes. They make it harder to understand
what the function takes as arguments. Luacheck in these cases basically
dictates to us how to name variables, because nothing is removed here.
The variable is just renamed to a less understandable name.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-14  7:57 ` [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/ Sergey Bronnikov
  2020-04-14 23:29   ` Vladislav Shpilevoy
@ 2020-04-16 13:43   ` Igor Munkin
  1 sibling, 0 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-16 13:43 UTC (permalink / raw)
  To: Sergey Bronnikov; +Cc: o.piskunov, tarantool-patches

Sergey,

Thanks for the patch! I left several comments and changes reducing
amount of warnings, please consider them.

On 14.04.20, Sergey Bronnikov wrote:
> Closes #4681
> 
> Reviewed-by: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
> ---
> 
>  test/app-tap/console.test.lua                 |  4 ---
>  test/app-tap/csv.test.lua                     | 28 +++++++++----------
>  test/app-tap/logger.test.lua                  |  2 +-
>  test/box-py/box.lua                           |  2 +-
>  test/box-tap/gc.test.lua                      |  4 +--
>  test/box/box.lua                              |  2 +-
>  test/box/hash_multipart.result                |  2 +-
>  test/box/hash_multipart.test.lua              |  2 +-
>  test/box/lua/cfg_bad_vinyl_dir.lua            |  2 +-
>  test/box/lua/cfg_rtree.lua                    |  2 +-
>  test/box/lua/cfg_test1.lua                    |  2 +-
>  test/box/lua/cfg_test2.lua                    |  2 +-
>  test/box/lua/cfg_test3.lua                    |  2 +-
>  test/box/lua/cfg_test4.lua                    |  2 +-
>  test/box/lua/cfg_test5.lua                    |  4 +--
>  test/box/lua/cfg_test6.lua                    |  2 +-
>  test/box/lua/utils.lua                        |  3 +-
>  test/box/on_schema_init.lua                   |  2 +-
>  test/box/proxy.lua                            |  2 +-
>  test/box/tiny.lua                             |  2 +-
>  test/box/tree_pk.result                       |  4 +--
>  test/box/tree_pk.test.lua                     |  4 +--
>  test/engine/tree_min_max_count.result         |  2 +-
>  test/engine/tree_min_max_count.test.lua       |  2 +-
>  test/replication-py/master.lua                |  2 +-
>  test/replication-py/panic.lua                 |  2 +-
>  test/replication/master.lua                   |  2 +-
>  test/replication/replicaset_ro_mostly.result  |  2 +-
>  .../replication/replicaset_ro_mostly.test.lua |  2 +-
>  test/sql-tap/analyze3.test.lua                |  6 ++--
>  test/sql-tap/analyze9.test.lua                | 16 +++++------
>  .../gh-4077-iproto-execute-no-bind.test.lua   |  7 +++--
>  test/sql-tap/index1.test.lua                  |  1 -
>  test/sql-tap/join3.test.lua                   |  2 +-
>  test/sql-tap/select9.test.lua                 | 10 ++-----
>  test/sql-tap/tkt-fa7bf5ec.test.lua            |  6 ++--
>  test/sql-tap/where2.test.lua                  |  2 +-
>  test/sql/lua/sql_tokenizer.lua                |  2 +-
>  test/sql/savepoints.result                    |  6 ++--
>  test/sql/savepoints.test.lua                  |  6 ++--
>  test/sql/triggers.result                      |  2 +-
>  test/sql/triggers.test.lua                    |  2 +-
>  test/vinyl/large.lua                          |  3 +-
>  test/vinyl/txn_proxy.lua                      |  6 ++--
>  test/vinyl/vinyl.lua                          |  2 +-
>  test/wal_off/rtree_benchmark.result           |  2 +-
>  test/wal_off/rtree_benchmark.test.lua         |  2 +-
>  test/xlog-py/box.lua                          |  2 +-
>  test/xlog/panic.lua                           |  2 +-
>  test/xlog/reader.result                       |  2 +-
>  test/xlog/reader.test.lua                     |  2 +-
>  test/xlog/snap_io_rate.test.lua               |  2 +-
>  test/xlog/transaction.result                  |  2 +-
>  test/xlog/transaction.test.lua                |  2 +-
>  test/xlog/xlog.lua                            |  2 +-
>  55 files changed, 92 insertions(+), 102 deletions(-)
> 

Fixed a single warning left in test/app-tap/cfg.test.lua:

================================================================================

diff --git a/test/app-tap/cfg.test.lua b/test/app-tap/cfg.test.lua
index ba6b735ab..14e040f9f 100755
--- a/test/app-tap/cfg.test.lua
+++ b/test/app-tap/cfg.test.lua
@@ -12,7 +12,7 @@ test:plan(11)
 local nil_uuid = '00000000-0000-0000-0000-000000000000'
 local ok = pcall(box.cfg, {instance_uuid = nil_uuid})
 test:ok(not ok, 'nil instance UUID is not allowed')
-ok, err = pcall(box.cfg, {replicaset_uuid = nil_uuid})
+ok = pcall(box.cfg, {replicaset_uuid = nil_uuid})
 test:ok(not ok, 'nil replicaset UUID is not allowed')
 
 test:is(type(box.ctl), "table", "box.ctl is available before box.cfg")

================================================================================

Fixed all warnings in test/app-tap/clock.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/clock.test.lua b/test/app-tap/clock.test.lua
index fd1c4f272..d1ea4f0a8 100755
--- a/test/app-tap/clock.test.lua
+++ b/test/app-tap/clock.test.lua
@@ -1,7 +1,7 @@
 #!/usr/bin/env tarantool
 
-clock = require("clock")
-test = require("tap").test("csv")
+local clock = require("clock")
+local test = require("tap").test("csv")
 test:plan(10)
 test:ok(clock.realtime() > 0, "realtime")
 test:ok(clock.thread() > 0, "thread")

================================================================================

Fixed a simple warning in test/app-tap/console_lua.test.lua:

================================================================================

diff --git a/test/app-tap/console_lua.test.lua b/test/app-tap/console_lua.test.lua
index 3ed6aad97..24f9744bb 100755
--- a/test/app-tap/console_lua.test.lua
+++ b/test/app-tap/console_lua.test.lua
@@ -83,7 +83,7 @@ local function execute_and_verify(test, client, input, exp_output, name)
         test:ok(res ~= nil, ('-> [[%s]]'):format(input))
 
         local exp = exp_output .. EOL
-        local res = client:read(EOL)
+        res = client:read(EOL)
         test:is(res, exp, ('<- [[%s]]'):format(exp:gsub('\n', '\\n')))
     end)
 end

================================================================================

> diff --git a/test/app-tap/console.test.lua b/test/app-tap/console.test.lua
> index 4feadfa5e..1f61ba837 100755
> --- a/test/app-tap/console.test.lua
> +++ b/test/app-tap/console.test.lua

In addition to your changes the fix below solves 98/99 remaining
warnings in this file:

================================================================================

diff --git a/test/app-tap/console.test.lua b/test/app-tap/console.test.lua
index 1f61ba837..65cf40485 100755
--- a/test/app-tap/console.test.lua
+++ b/test/app-tap/console.test.lua
@@ -18,7 +18,8 @@ os.remove(IPROTO_SOCKET)
 --
 local EOL = "\n...\n"
 
-test = tap.test("console")
+local test = tap.test("console")
+local _
 
 test:plan(80)
 
@@ -58,7 +59,8 @@ test:is(client:read(";"), 'true;', "pushed message")
 client:write('\\set output lua\n')
 client:read(";")
 
-long_func_f = nil
+local long_func_f
+-- luacheck: globals long_func (is called via client socket)
 function long_func()
     long_func_f = fiber.self()
     box.session.push('push')
@@ -229,13 +231,13 @@ box.cfg{listen = ''}
 os.remove(IPROTO_SOCKET)
 
 local s = console.listen('127.0.0.1:0')
-addr = s:name()
+local addr = s:name()
 test:is(addr.family, 'AF_INET', 'console.listen uri support')
 test:is(addr.host, '127.0.0.1', 'console.listen uri support')
 test:isnt(addr.port, 0, 'console.listen uri support')
 s:close()
 
-local s = console.listen('console://unix/:'..CONSOLE_SOCKET)
+s = console.listen('console://unix/:'..CONSOLE_SOCKET)
 addr = s:name()
 test:is(addr.family, 'AF_UNIX', 'console.listen uri support')
 test:is(addr.host, 'unix/', 'console.listen uri support')

================================================================================

<snipped>

> diff --git a/test/app-tap/csv.test.lua b/test/app-tap/csv.test.lua
> index a7f17b1ea..689db7997 100755
> --- a/test/app-tap/csv.test.lua
> +++ b/test/app-tap/csv.test.lua

In addition to your changes the fix below solves all remaining warnings
in this file:

================================================================================

diff --git a/test/app-tap/csv.test.lua b/test/app-tap/csv.test.lua
index 689db7997..b17c48664 100755
--- a/test/app-tap/csv.test.lua
+++ b/test/app-tap/csv.test.lua
@@ -35,10 +35,10 @@ local test6_ans = "|23|\t|456|\t|abcac|\t|'multiword field 4'|\t\n|none|" ..
                   "|len|\t|offset)|\t\n|iflag = bit.bor(iflag|\t|fio.c.f" ..
                   "lag[ flag ])|\t\n||\t||\t||\t\n"
 
-test = tap.test("csv")
+local test = tap.test("csv")
 test:plan(12)
 
-readable = {}
+local readable = {}
 readable.read = myread
 readable.v = "a,b\n1,\"ha\n\"\"ha\"\"\nha\"\n3,4\n"
 readable.i = 0
@@ -52,11 +52,11 @@ readable.v = ", \r\nkp\"\"v"
 readable.i = 0
 test:is(table2str(csv.load(readable, {chunk_size = 3})), test3_ans, "obj test3")
 
-tmpdir = fio.tempdir()
-file1 = fio.pathjoin(tmpdir, 'file.1')
-file2 = fio.pathjoin(tmpdir, 'file.2')
-file3 = fio.pathjoin(tmpdir, 'file.3')
-file4 = fio.pathjoin(tmpdir, 'file.4')
+local tmpdir = fio.tempdir()
+local file1 = fio.pathjoin(tmpdir, 'file.1')
+local file2 = fio.pathjoin(tmpdir, 'file.2')
+local file3 = fio.pathjoin(tmpdir, 'file.3')
+local file4 = fio.pathjoin(tmpdir, 'file.4')
 
 local f = fio.open(file1, { 'O_WRONLY', 'O_TRUNC', 'O_CREAT' }, tonumber('0777', 8))
 f:write("123 , 5  ,       92    , 0, 0\n" ..
@@ -83,12 +83,12 @@ test:is(table2str(csv.load(f, {chunk_size = 1})), test5_ans, "fio test2")
 f:close()
 
 f = fio.open(file2, {'O_RDONLY'})
-opts = {chunk_size = 7, skip_head_lines = 1}
+local opts = {chunk_size = 7, skip_head_lines = 1}
 --7 symbols per chunk
 test:is(table2str(csv.load(f, opts)), test6_ans, "fio test3")
 f:close()
 
-t = {
+local t = {
     {'quote" d', ',and, comma', 'both " of " t,h,e,m'},
     {'"""', ',","'},
     {'mul\nti\nli\r\nne\n\n', 'field'},
@@ -101,7 +101,7 @@ f = require("fio").open(file3, { "O_WRONLY", "O_TRUNC" , "O_CREAT"}, 0x1FF)
 csv.dump(t, {}, f)
 f:close()
 f = fio.open(file3, {'O_RDONLY'})
-t2 = csv.load(f, {chunk_size = 5})
+local t2 = csv.load(f, {chunk_size = 5})
 f:close()
 
 test:is(table2str(t), table2str(t2), "test roundtrip")

================================================================================

<snipped>

Fixed a couple warnings in test/app-tap/cfg.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/debug.test.lua b/test/app-tap/debug.test.lua
index 0d199e55b..184bcc904 100755
--- a/test/app-tap/debug.test.lua
+++ b/test/app-tap/debug.test.lua
@@ -44,7 +44,7 @@ print(('debug.sourcefile() => %s; %s'):format(tostring(result), tostring(err)))
 assert(result == box.NULL, 'debug.sourcefile() returns box.NULL')
 assert(err == nil, 'debug.sourcefile() returns no error')
 
-local result, err = conn:call('debug.sourcedir')
+result, err = conn:call('debug.sourcedir')
 print(('debug.sourcedir() => %s; %s'):format(tostring(result), tostring(err)))
 assert(result == '.', 'debug.sourcedir() returns "."')
 assert(err == nil, 'debug.sourcedir() returns no error')
@@ -74,7 +74,7 @@ if not dirstat then
 end
 assert(dirstat:is_dir(), dirname..' must be a directory')
 
-local cmd = TNTBIN..' '..filename
+cmd = TNTBIN..' '..filename
 print('======================================')
 print('When running lua code from script file')
 print('======================================')

================================================================================

Fixed all warnings in test/app-tap/fail_main.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/fail_main.test.lua b/test/app-tap/fail_main.test.lua
index f8c45bf6f..3fe0971eb 100755
--- a/test/app-tap/fail_main.test.lua
+++ b/test/app-tap/fail_main.test.lua
@@ -7,7 +7,7 @@ local tarantool_bin = arg[-1]
 
 test:plan(1)
 
-function run_script(code)
+local function run_script(code)
     local dir = fio.tempdir()
     local script_path = fio.pathjoin(dir, 'script.lua')
     local script = fio.open(script_path, {'O_CREAT', 'O_WRONLY', 'O_APPEND'},
@@ -30,7 +30,7 @@ end
 -- gh-4382: an error in main script should be handled gracefully,
 -- with proper logging.
 --
-local code, output = run_script("error('Error in the main script')")
+local _, output = run_script("error('Error in the main script')")
 
 test:ok(output:match("fatal error, exiting the event loop"),
         "main script error is handled gracefully")

================================================================================

Fixed all warnings in test/app-tap/gh-4761-json-per-call-options.test.lua
with the diff below:

================================================================================

diff --git a/test/app-tap/gh-4761-json-per-call-options.test.lua b/test/app-tap/gh-4761-json-per-call-options.test.lua
index 1fb24744e..6dfce51fd 100755
--- a/test/app-tap/gh-4761-json-per-call-options.test.lua
+++ b/test/app-tap/gh-4761-json-per-call-options.test.lua
@@ -12,24 +12,23 @@ local tap = require('tap')
 local res = tap.test('gh-4761-json-per-call-options', function(test)
     test:plan(2)
 
+    local ok, res, exp_res
     -- Preparation code: call :decode() with a custom option.
-    local ok, err = pcall(json.decode, '{"foo": {"bar": 1}}',
-                          {decode_max_depth = 1})
+    ok = pcall(json.decode, '{"foo": {"bar": 1}}', {decode_max_depth = 1})
     assert(not ok, 'expect "too many nested data structures" error')
 
     -- Verify that the instance option remains unchanged.
-    local exp_res = {foo = {bar = 1}}
-    local ok, res = pcall(json.decode, '{"foo": {"bar": 1}}')
+    exp_res = {foo = {bar = 1}}
+    ok, res = pcall(json.decode, '{"foo": {"bar": 1}}')
     test:is_deeply({ok, res}, {true, exp_res},
                    'json instance settings remain unchanged after :decode()')
 
     -- Same check for json.encode.
     local nan = 1/0
-    local ok, err = pcall(json.encode, {a = nan},
-                          {encode_invalid_numbers = false})
+    ok = pcall(json.encode, {a = nan}, {encode_invalid_numbers = false})
     assert(not ok, 'expected "number must not be NaN or Inf" error')
-    local exp_res = '{"a":inf}'
-    local ok, res = pcall(json.encode, {a = nan})
+    exp_res = '{"a":inf}'
+    ok, res = pcall(json.encode, {a = nan})
     test:is_deeply({ok, res}, {true, exp_res},
                    'json instance settings remain unchanged after :encode()')
 end)

================================================================================

Fixed several warnings in test/app-tap/http_client.test.lua with the
diff below:

================================================================================

diff --git a/test/app-tap/http_client.test.lua b/test/app-tap/http_client.test.lua
index b85b605cf..f5bfe9b2a 100755
--- a/test/app-tap/http_client.test.lua
+++ b/test/app-tap/http_client.test.lua
@@ -42,7 +42,7 @@ local function start_server(test, sock_family, sock_addr)
     test:is(server:read("*l"), "heartbeat", "server started")
     test:diag("trying to connect to %s", url)
     local r
-    for i=1,10 do
+    for _ = 1, 10 do
         r = client.get(url, merge(opts, {timeout = 0.01}))
         if r.status == 200 then
             break
@@ -82,7 +82,7 @@ local function test_http_client(test, url, opts)
         "content-length > 0")
     test:is(client.get("http://localhost:1/").status, 595, 'cannot connect')
 
-    local r = client.request('GET', url, nil, opts)
+    r = client.request('GET', url, nil, opts)
     test:is(r.status, 200, 'request')
 
     -- XXX: enable after resolving of gh-4180: httpc: redirects
@@ -120,7 +120,7 @@ end
 --
 local function test_http_client_headers_redefine(test, url, opts)
     test:plan(9)
-    local opts = table.deepcopy(opts)
+    opts = table.deepcopy(opts)
     -- Test defaults
     opts.headers = {['Connection'] = nil, ['Accept'] = nil}
     local r = client.post(url, nil, opts)
@@ -132,7 +132,7 @@ local function test_http_client_headers_redefine(test, url, opts)
     opts.headers={['Connection'] = 'close'}
     opts.keepalive_idle = 2
     opts.keepalive_interval = 1
-    local r = client.get(url, opts)
+    r = client.get(url, opts)
     test:is(r.status, 200, 'simple 200')
     test:is(r.headers['connection'], 'close', 'Redefined Connection header')
     test:is(r.headers['keep_alive'], 'timeout=2',
@@ -140,7 +140,7 @@ local function test_http_client_headers_redefine(test, url, opts)
     -- Test that user-defined Connection and Acept headers
     -- are used
     opts.headers={['Connection'] = 'Keep-Alive', ['Accept'] = 'text/html'}
-    local r = client.get(url, opts)
+    r = client.get(url, opts)
     test:is(r.status, 200, 'simple 200')
     test:is(r.headers['accept'], 'text/html', 'Redefined Accept header')
     test:is(r.headers['connection'], 'Keep-Alive', 'Redefined Connection header')
@@ -164,7 +164,7 @@ local function test_cancel_and_errinj(test, url, opts)
     local errinj = box.error.injection
     errinj.set('ERRINJ_HTTP_RESPONSE_ADD_WAIT', true)
     local topts = merge(opts, {timeout = 1200})
-    f = fiber.create(func, topts)
+    fiber.create(func, topts)
     r = ch:get()
     test:is(r.status, 200, "No hangs in errinj")
     errinj.set('ERRINJ_HTTP_RESPONSE_ADD_WAIT', false)
@@ -180,7 +180,6 @@ local function test_post_and_get(test, url, opts)
     local my_body = { key = "value" }
     local json_body = json.encode(my_body)
     local responses = {}
-    local data = {a = 'b'}
     headers['Content-Type'] = 'application/json'
     local fibers = 7
     local ch = fiber.channel(fibers)
@@ -213,7 +212,7 @@ local function test_post_and_get(test, url, opts)
         responses.absent_get = http:get(url .. 'absent', opts)
         ch:put(1)
     end)
-    for i=1,fibers do
+    for _ = 1, fibers do
         ch:get()
     end
     local r = responses.good_get
@@ -270,7 +269,6 @@ local function test_errors(test)
     test:ok(not status and string.find(json.encode(err),
                         "Unsupported protocol"),
                         "POST: exception on bad protocol")
-    local r = http:get("http://do_not_exist_8ffad33e0cb01e6a01a03d00089e71e5b2b7e9930dfcba.ru")
 end
 
 -- gh-3679 Check that opts.headers values can be strings only.
@@ -395,7 +393,7 @@ local function test_headers(test, url, opts)
     test:isnil(r.headers["very_very_very_long_headers_name1"], "no long header name")
     test:is(r.headers["very_very_very_long_headers_name"], "true", "truncated name")
     opts["max_header_name_length"] = 64
-    local r = http:get(url .. 'headers', opts)
+    r = http:get(url .. 'headers', opts)
     test:is(r.headers["very_very_very_long_headers_name1"], "true", "truncated max_header_name_length")
     opts["max_header_name_length"] = nil
 
@@ -406,13 +404,13 @@ local function test_headers(test, url, opts)
     -- "${hname}: ${hvalue}" is 8192 bytes length
     local hvalue = string.rep('x', MAX_HEADER_NAME - hname:len() - 2)
     local headers = {[hname] = hvalue}
-    local r = http:post(url, nil, merge(opts, {headers = headers}))
+    r = http:post(url, nil, merge(opts, {headers = headers}))
     test:is(r.headers[hname], hvalue, '8192 bytes header: success')
 
     -- "${hname}: ${hvalue}" is 8193 bytes length
     local exp_err = 'header is too large'
-    local hvalue = string.rep('x', MAX_HEADER_NAME - hname:len() - 1)
-    local headers = {[hname] = hvalue}
+    hvalue = string.rep('x', MAX_HEADER_NAME - hname:len() - 1)
+    headers = {[hname] = hvalue}
     local ok, err = pcall(http.post, http, url, nil,
                           merge(opts, {headers = headers}))
     test:is_deeply({ok, tostring(err)}, {false, exp_err},
@@ -425,7 +423,6 @@ local function test_special_methods(test, url, opts)
     local responses = {}
     local fibers = 7
     local ch = fiber.channel(fibers)
-    local _
     fiber.create(function()
         responses.patch_data = http:patch(url, "{\"key\":\"val\"}", opts)
         ch:put(1)
@@ -454,7 +451,7 @@ local function test_special_methods(test, url, opts)
         responses.custom_data = http:request("CUSTOM", url, nil, opts)
         ch:put(1)
     end)
-    for i = 1, fibers do
+    for _ = 1, fibers do
         ch:get()
     end
 
@@ -483,10 +480,6 @@ end
 
 local function test_concurrent(test, url, opts)
     test:plan(3)
-    local http = client.new()
-    local headers = { my_header = "1", my_header2 = "2" }
-    local my_body = { key = "value" }
-    local json_body = json.encode(my_body)
     local num_test = 10
     local num_load = 10
     local curls   = { }
@@ -497,7 +490,7 @@ local function test_concurrent(test, url, opts)
         headers["My-header" .. i] = "my-value"
     end
 
-    for i = 1, num_test do
+    for _ = 1, num_test do
         table.insert(curls, {
             url = url,
             http = client.new(),
@@ -515,7 +508,7 @@ local function test_concurrent(test, url, opts)
     -- Creating concurrent clients
     for i=1,num_test do
         local obj = curls[i]
-        for j=1,num_load do
+        for _ = 1, num_load do
             fiber.create(function()
                 local r = obj.http:post(obj.url, obj.body, merge(opts, {
                     headers = obj.headers,
@@ -540,13 +533,11 @@ local function test_concurrent(test, url, opts)
     end
     local ok_sockets_added = true
     local ok_active = true
-    local ok_timeout = true
     local ok_req = true
 
     -- Join test
     local rest = num_test
     while true do
-        local ticks = 0
         for i = 1, num_load do
             local obj = curls[i]
             -- checking that stats in concurrent are ok
@@ -582,7 +573,7 @@ local function test_concurrent(test, url, opts)
     test:ok(ok_active, "no active requests")
 end
 
-function run_tests(test, sock_family, sock_addr)
+local function run_tests(test, sock_family, sock_addr)
     test:plan(11)
     local server, url, opts = start_server(test, sock_family, sock_addr)
     test:test("http.client", test_http_client, url, opts)

================================================================================

Fixed all warnings in test/app-tap/iconv.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/iconv.test.lua b/test/app-tap/iconv.test.lua
index 6f6a04b14..b4e8e7339 100755
--- a/test/app-tap/iconv.test.lua
+++ b/test/app-tap/iconv.test.lua
@@ -3,7 +3,7 @@
 local tap   = require('tap')
 local iconv = require('iconv')
 
-test = tap.test("iconv")
+local test = tap.test("iconv")
 test:plan(11)
 
 local simple_str  = 'ascii string'
@@ -34,7 +34,7 @@ test:is(c8_1251(c1251_16(c16_16be(c16be_8(cyrillic_str)))), cyrillic_str,
         'complex multi-format conversion')
 
 -- test huge string
-huge_str = string.rep(cyrillic_str, 50)
+local huge_str = string.rep(cyrillic_str, 50)
 
 test:is(c16be_8(c8_16be(huge_str)), huge_str, "huge string")
 
@@ -42,7 +42,7 @@ local stat, err = pcall(iconv.new, 'NOT EXISTS', 'UTF-8')
 test:is(stat, false, 'error was thrown on bad encoding')
 test:ok(err:match('Invalid') ~= nil, 'correct error')
 
-local stat, err = pcall(c_ascii_8, cyrillic_str)
+stat, err = pcall(c_ascii_8, cyrillic_str)
 test:is(stat, false, 'error was thrown on sequence')
 test:ok(err:match('Incomplete multibyte sequence') ~= nil, 'correct error')
 

================================================================================

Fixed all warnings in test/app-tap/init_script.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/init_script.test.lua b/test/app-tap/init_script.test.lua
index 155f149a7..5831ffa77 100755
--- a/test/app-tap/init_script.test.lua
+++ b/test/app-tap/init_script.test.lua
@@ -9,14 +9,14 @@ box.cfg{
     log="tarantool.log"
 }
 
-yaml = require('yaml')
-fiber = require('fiber')
+local yaml = require('yaml')
+local fiber = require('fiber')
 
 if box.space.tweedledum ~= nil then
     box.space.space1:drop()
 end
 
-space = box.schema.space.create('tweedledum')
+local space = box.schema.space.create('tweedledum')
 space:create_index('primary', { type = 'hash' })
 
 print[[
@@ -24,7 +24,7 @@ print[[
 -- Access to box.cfg from init script
 --
 ]]
-t = {}
+local t = {}
 
 for k,v in pairs(box.cfg) do
     if k == 'listen' then
@@ -44,7 +44,7 @@ local function do_insert()
     space:insert{1, 2, 4, 8}
 end
 
-fiber1 = fiber.create(do_insert)
+fiber.create(do_insert)
 
 print[[
 --
@@ -71,12 +71,12 @@ print[[
 -- Check that require function(math.floor) reachable in the init script
 --
 ]]
-floor = require("math").floor
+local floor = require("math").floor
 print(floor(0.5))
 print(floor(0.9))
 print(floor(1.1))
 
-mod = require('require_mod')
+local mod = require('require_mod')
 print(mod.test(10, 15))
 --
 -- A test case for https://github.com/tarantool/tarantool/issues/53

================================================================================

Fixed all warnings in test/app-tap/inspector.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/inspector.test.lua b/test/app-tap/inspector.test.lua
index ed10020a2..cda3eda2c 100755
--- a/test/app-tap/inspector.test.lua
+++ b/test/app-tap/inspector.test.lua
@@ -1,9 +1,6 @@
 #!/usr/bin/env tarantool
 
-local socket = require('socket')
-
-test_run = require('test_run')
-inspector = test_run.new()
+local inspector = require('test_run').new()
 
 print('create instance')
 print(inspector:cmd("create server replica with rpl_master=default, script='box/box.lua'\n"))

================================================================================

Fixed a single warning in test/app-tap/json.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/json.test.lua b/test/app-tap/json.test.lua
index fadfc74ec..186d6ad46 100755
--- a/test/app-tap/json.test.lua
+++ b/test/app-tap/json.test.lua
@@ -2,7 +2,6 @@
 
 package.path = "lua/?.lua;"..package.path
 
-local ffi = require('ffi')
 local tap = require('tap')
 local common = require('serializer_test')
 

================================================================================

> diff --git a/test/app-tap/logger.test.lua b/test/app-tap/logger.test.lua
> index 492d5ea0b..6ec85d0e0 100755
> --- a/test/app-tap/logger.test.lua
> +++ b/test/app-tap/logger.test.lua

<snipped>

In addition to your changes the fix below solves several remaining
warnings in this file:

================================================================================

diff --git a/test/app-tap/logger.test.lua b/test/app-tap/logger.test.lua
index 6ec85d0e0..8f43b1fb3 100755
--- a/test/app-tap/logger.test.lua
+++ b/test/app-tap/logger.test.lua
@@ -26,7 +26,7 @@ end
 log.info(message)
 local line = file:read()
 test:is(line:sub(-message:len()), message, "message")
-s, err = pcall(json.decode, line)
+local s = pcall(json.decode, line)
 test:ok(not s, "plain")
 --
 -- gh-700: Crash on calling log.info() with formatting characters
@@ -45,7 +45,7 @@ test:is(file:read():match('I>%s+(.*)'), '{"key":"value"}', "table is handled as
 log.info({message="value"})
 test:is(file:read():match('I>%s+(.*)'), '{"message":"value"}', "table is handled as json")
 
-function help() log.info("gh-2340: %s %s", 'help') end
+local function help() log.info("gh-2340: %s %s", 'help') end
 
 xpcall(help, function(err)
     test:ok(err:match("bad argument #3"), "found error string")
@@ -56,14 +56,14 @@ file:close()
 
 test:ok(log.pid() >= 0, "pid()")
 
--- logger uses 'debug', try to set it to nil
+-- luacheck: ignore (logger uses 'debug', try to set it to nil)
 local debug = nil
 log.info("debug is nil")
 debug = require('debug')
 
 test:ok(log.info(true) == nil, 'check tarantool crash (gh-2516)')
 
-s, err = pcall(box.cfg, {log_format='json', log="syslog:identity:tarantool"})
+s = pcall(box.cfg, {log_format='json', log="syslog:identity:tarantool"})
 test:ok(not s, "check json not in syslog")
 
 box.cfg{log=filename,

================================================================================

Fixed all warnings in test/app-tap/minimal.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/minimal.test.lua b/test/app-tap/minimal.test.lua
index e44a0f6a7..8b261a03e 100755
--- a/test/app-tap/minimal.test.lua
+++ b/test/app-tap/minimal.test.lua
@@ -24,13 +24,13 @@ os.execute("tarantool ./script-args.lua 1 2 3")
 --
 -- LUA_PATH and LUA_CPATH argument handling
 --
-local script = io.open('script-path.lua', 'w')
+script = io.open('script-path.lua', 'w')
 script:write([[
 print(package.path)
 os.exit(0)
 ]])
 script:close()
-local script = io.open('script-cpath.lua', 'w')
+script = io.open('script-cpath.lua', 'w')
 script:write([[
 print(package.cpath)
 os.exit(0)

================================================================================

Fixed all warnings in test/app-tap/module_api.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/module_api.test.lua b/test/app-tap/module_api.test.lua
index a6658cc61..d7be56a9b 100755
--- a/test/app-tap/module_api.test.lua
+++ b/test/app-tap/module_api.test.lua
@@ -5,7 +5,7 @@ local fio = require('fio')
 box.cfg{log = "tarantool.log"}
 -- Use BUILDDIR passed from test-run or cwd when run w/o
 -- test-run to find test/app-tap/module_api.{so,dylib}.
-build_path = os.getenv("BUILDDIR") or '.'
+local build_path = os.getenv("BUILDDIR") or '.'
 package.cpath = fio.pathjoin(build_path, 'test/app-tap/?.so'   ) .. ';' ..
                 fio.pathjoin(build_path, 'test/app-tap/?.dylib') .. ';' ..
                 package.cpath
@@ -17,10 +17,10 @@ local function test_pushcdata(test, module)
     local gc_counter = 0;
     local ct = ffi.typeof('struct module_api_test')
     ffi.metatype(ct, {
-        __tostring = function(obj)
+        __tostring = function()
             return 'ok'
         end;
-        __gc = function(obj)
+        __gc = function()
             gc_counter = gc_counter + 1;
         end
     })
@@ -33,7 +33,7 @@ local function test_pushcdata(test, module)
     test:is(ctid, ctid2, 'checkcdata type')
     test:is(ptr, ptr2, 'checkcdata value')
     test:is(gc_counter, 0, 'pushcdata gc')
-    obj = nil
+    obj = nil -- luacheck: ignore
     collectgarbage('collect')
     test:is(gc_counter, 1, 'pushcdata gc')
 end
@@ -116,7 +116,7 @@ local function test_iscallable(test, module)
     end
 end
 
-local test = require('tap').test("module_api", function(test)
+require('tap').test("module_api", function(test)
     test:plan(24)
     local status, module = pcall(require, 'module_api')
     test:is(status, true, "module")
@@ -138,7 +138,7 @@ local test = require('tap').test("module_api", function(test)
         end
     end
 
-    local status, msg = pcall(module.check_error)
+    local _, msg = pcall(module.check_error)
     test:like(msg, 'luaT_error', 'luaT_error')
 
     test:test("pushcdata", test_pushcdata, module)

================================================================================

Fixed all warnings in test/app-tap/msgpackffi.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/msgpackffi.test.lua b/test/app-tap/msgpackffi.test.lua
index 0ee5f5edc..058b74f3d 100755
--- a/test/app-tap/msgpackffi.test.lua
+++ b/test/app-tap/msgpackffi.test.lua
@@ -4,7 +4,6 @@ package.path = "lua/?.lua;"..package.path
 
 local tap = require('tap')
 local common = require('serializer_test')
-local ffi = require('ffi')
 
 local function is_map(s)
     local b = string.byte(string.sub(s, 1, 1))
@@ -76,7 +75,7 @@ local function test_other(test, s)
     --
     local function check_depth(depth_to_try)
         local t = nil
-        for i = 1, depth_to_try do t = {t} end
+        for _ = 1, depth_to_try do t = {t} end
         t = s.decode_unchecked(s.encode(t))
         local level = 0
         while t ~= nil do level = level + 1 t = t[1] end

================================================================================

Fixed all warnings in test/app-tap/pcall.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/pcall.test.lua b/test/app-tap/pcall.test.lua
index 30163a41a..3ae16c8aa 100755
--- a/test/app-tap/pcall.test.lua
+++ b/test/app-tap/pcall.test.lua
@@ -12,7 +12,7 @@ box.cfg{
     log="tarantool.log",
     memtx_memory=107374182,
 }
-function pcalltest()
+local function pcalltest()
     local ERRMSG = "module 'some_invalid_module' not found"
     local status, msg = pcall(require, 'some_invalid_module')
     if status == false and msg ~= nil and msg:match(ERRMSG) ~= nil then
@@ -27,10 +27,10 @@ local status, msg = xpcall(pcalltest, function(msg)
 end)
 print('pcall inside xpcall:', status, msg)
 
-local status, msg = pcall(function() error('some message') end)
+status, msg = pcall(function() error('some message') end)
 print('pcall with Lua error():', status, msg:match('some message'))
 
-local status, msg = pcall(function()
+status, msg = pcall(function()
     box.error(box.error.ILLEGAL_PARAMS, 'some message')
 end)
 print('pcall with box.error():', status, msg)

================================================================================

Fixed all warnings in test/app-tap/snapshot.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/snapshot.test.lua b/test/app-tap/snapshot.test.lua
index 587f8279b..6cae662c6 100755
--- a/test/app-tap/snapshot.test.lua
+++ b/test/app-tap/snapshot.test.lua
@@ -3,7 +3,6 @@
 local math = require('math')
 local fiber = require('fiber')
 local tap = require('tap')
-local ffi = require('ffi')
 local fio = require('fio')
 
 box.cfg{ log="tarantool.log", memtx_memory=107374182}
@@ -75,18 +74,18 @@ snap_chan:get()
 test:ok(true, 'gh-695: avoid overwriting tuple data necessary for smfree()')
 
 -------------------------------------------------------------------------------
--- gh-1185: Crash in matras_touch in snapshot_daemon.test 
+-- gh-1185: Crash in matras_touch in snapshot_daemon.test
 -------------------------------------------------------------------------------
 
 local s1 = box.schema.create_space('test1', { engine = 'memtx'})
-local i1 = s1:create_index('test', { type = 'tree', parts = {1, 'unsigned'} })
+s1:create_index('test', { type = 'tree', parts = {1, 'unsigned'} })
 
 local s2 = box.schema.create_space('test2', { engine = 'memtx'})
-local i2 = s2:create_index('test', { type = 'tree', parts = {1, 'unsigned'} })
+s2:create_index('test', { type = 'tree', parts = {1, 'unsigned'} })
 
 for i = 1,1000 do s1:insert{i, i, i} end
 
-local snap_chan = fiber.channel()
+snap_chan = fiber.channel()
 fiber.create(function () box.snapshot() snap_chan:put(true) end)
 
 fiber.sleep(0)
@@ -126,11 +125,11 @@ local function gh1094()
             break
         end
     end
-    local sf, mf = pcall(box.snapshot)
-    for i, f in pairs(files) do
+    local sf = pcall(box.snapshot)
+    for _, f in pairs(files) do
         f:close()
     end
-    local ss, ms = pcall(box.snapshot)
+    local ss = pcall(box.snapshot)
     test:ok(not sf and ss, msg)
 end
 gh1094()
@@ -141,7 +140,7 @@ box.snapshot()
 box.snapshot()
 box.snapshot()
 test:ok(true, 'No crash for second snapshot w/o any changes')
-files = fio.glob(box.cfg.memtx_dir .. '/*.snap')
+local files = fio.glob(box.cfg.memtx_dir .. '/*.snap')
 table.sort(files)
 fio.unlink(files[#files])
 box.snapshot()

================================================================================

Fixed several warnings in test/app-tap/string.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/string.test.lua b/test/app-tap/string.test.lua
index 02a1a84d7..431e96899 100755
--- a/test/app-tap/string.test.lua
+++ b/test/app-tap/string.test.lua
@@ -127,9 +127,9 @@ test:test("fromhex", function(test)
     local _, err = pcall(string.fromhex, "aaa")
     test:ok(err and err:match("(even amount of chars expected," ..
                               " got odd amount)"))
-    local _, err = pcall(string.fromhex, "qq")
+    _, err = pcall(string.fromhex, "qq")
     test:ok(err and err:match("(hex string expected, got non hex chars)"))
-    local _, err = pcall(string.fromhex, 795)
+    _, err = pcall(string.fromhex, 795)
     test:ok(err and err:match("(string expected, got number)"))
 end)
 
@@ -216,10 +216,9 @@ test:test("unicode", function(test)
     test:is(s, lower_res, 'default locale lower')
     test:is(utf8.upper(''), '', 'empty string upper')
     test:is(utf8.lower(''), '', 'empty string lower')
-    local err
-    s, err = pcall(utf8.upper, true)
+    local _, err = pcall(utf8.upper, true)
     test:isnt(err:find('Usage'), nil, 'upper usage is checked')
-    s, err = pcall(utf8.lower, true)
+    _, err = pcall(utf8.lower, true)
     test:isnt(err:find('Usage'), nil, 'lower usage is checked')
 
     test:is(utf8.isupper('a'), false, 'isupper("a")')
@@ -247,9 +246,9 @@ test:test("unicode", function(test)
     test:isnil(c, 'middle of symbol offset is error')
     test:is(err, 4, 'error on 4 byte')
     test:is(utf8.len(s, 5), 4, 'start 5')
-    c, err = utf8.len(s, 6)
+    _, err = utf8.len(s, 6)
     test:is(err, 6, 'error on 6 byte')
-    c, err = utf8.len(s, 0)
+    _, err = utf8.len(s, 0)
     test:is(err, 'position is out of string', 'range is out of string')
     test:is(utf8.len(s, #s), 1, 'start from the end')
     test:is(utf8.len(s, #s + 1), 0, 'position is out of string')
@@ -262,14 +261,14 @@ test:test("unicode", function(test)
     test:is(utf8.len(s, 1, -7), 4, 'end -7')
     test:is(utf8.len(s, 2, -7), 3, '[2, -7]')
     test:is(utf8.len(s, 3, -7), 2, '[3, -7]')
-    c, err = utf8.len(s, 4, -7)
+    _, err = utf8.len(s, 4, -7)
     test:is(err, 4, '[4, -7] is error - start from the middle of symbol')
     test:is(utf8.len(s, 10, -100), 0, 'it is ok to be out of str by end pos')
     test:is(utf8.len(s, 10, -10), 0, 'it is ok to swap end and start pos')
     test:is(utf8.len(''), 0, 'empty len')
     test:is(utf8.len(s, -6, -1), 3, 'pass both negative offsets')
     test:is(utf8.len(s, 3, 3), 1, "end in the middle on the same symbol as start")
-    c, err = utf8.len('a\xF4')
+    _, err = utf8.len('a\xF4')
     test:is(err, 2, "invalid unicode in the middle of the string")
 
     local chars = {}
@@ -279,11 +278,11 @@ test:test("unicode", function(test)
         table.insert(codes, code)
     end
     test:is(table.concat(chars), s, "next and char works")
-    c, err = pcall(utf8.char, 'kek')
+    _, err = pcall(utf8.char, 'kek')
     test:isnt(err:find('bad argument'), nil, 'char usage is checked')
-    c, err = pcall(utf8.next, true)
+    _, err = pcall(utf8.next, true)
     test:isnt(err:find('Usage'), nil, 'next usage is checked')
-    c, err = pcall(utf8.next, '1234', true)
+    _, err = pcall(utf8.next, '1234', true)
     test:isnt(err:find('bad argument'), nil, 'next usage is checked')
     local offset
     offset, c = utf8.next('')
@@ -338,15 +337,15 @@ test:test("unicode", function(test)
     test:is(utf8.sub(s, -2, 2), '', 'sub [-2:2]')
     test:is(utf8.sub(s, -1, 8), '8', 'sub [-1:8]')
 
-    c, err = pcall(utf8.sub)
+    _, err = pcall(utf8.sub)
     test:isnt(err:find('Usage'), nil, 'usage is checked')
-    c, err = pcall(utf8.sub, true)
+    _, err = pcall(utf8.sub, true)
     test:isnt(err:find('Usage'), nil, 'usage is checked')
-    c, err = pcall(utf8.sub, '123')
+    _, err = pcall(utf8.sub, '123')
     test:isnt(err:find('Usage'), nil, 'usage is checked')
-    c, err = pcall(utf8.sub, '123', true)
+    _, err = pcall(utf8.sub, '123', true)
     test:isnt(err:find('bad argument'), nil, 'usage is checked')
-    c, err = pcall(utf8.sub, '123', 1, true)
+    _, err = pcall(utf8.sub, '123', 1, true)
     test:isnt(err:find('bad argument'), nil, 'usage is checked')
 
     local s1 = '☢'

================================================================================

Fixed several warnings in test/app-tap/table.test.lua with the diff
below:

================================================================================

diff --git a/test/app-tap/table.test.lua b/test/app-tap/table.test.lua
index 60c095fdf..7279b07ed 100755
--- a/test/app-tap/table.test.lua
+++ b/test/app-tap/table.test.lua
@@ -145,7 +145,7 @@ end
 
 do -- check usage of __copy metamethod
     local copy_mt = nil; copy_mt = {
-        __copy = function(self)
+        __copy = function()
             local new_self = { a = 1}
             return setmetatable(new_self, copy_mt)
         end
@@ -164,7 +164,7 @@ end
 
 do -- check usage of __copy metamethod + shallow
     local copy_mt = nil; copy_mt = {
-        __copy = function(self)
+        __copy = function()
             local new_self = { a = 1}
             return setmetatable(new_self, copy_mt)
         end
@@ -191,7 +191,7 @@ end
 
 do -- check usage of not __copy metamethod on second level + shallow
     local copy_mt = nil; copy_mt = {
-        __copy = function(self)
+        __copy = function()
             local new_self = { a = 1 }
             return setmetatable(new_self, copy_mt)
         end

================================================================================

Fixed 53/57 warnings in test/app-tap/tap.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/tap.test.lua b/test/app-tap/tap.test.lua
index e2a78f630..0e184782a 100755
--- a/test/app-tap/tap.test.lua
+++ b/test/app-tap/tap.test.lua
@@ -11,7 +11,7 @@ local tap = require "tap"
 --
 -- Create a root test
 --
-test = tap.test("root test")
+local test = tap.test("root test")
 -- Disable stack traces for this test because Tarantool test system also
 -- checks test output.
 test.trace = false
@@ -88,7 +88,7 @@ end)
 --
 -- Subtest without callbacks.
 --
-sub2 = test:test("subtest 2")
+local sub2 = test:test("subtest 2")
     sub2:plan(1)
     sub2:ok(true, 'true in subtest')
     sub2:diag('hello from subtest')

================================================================================

Fixed 23/35 warnings (including one suppressed semantic error!) in
test/app-tap/tarantoolctl.test.lua with the diff below (there are more
fixed with the Vlad's patch in his reply):

================================================================================

diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
index 4d7059559..f5638d330 100755
--- a/test/app-tap/tarantoolctl.test.lua
+++ b/test/app-tap/tarantoolctl.test.lua
@@ -4,7 +4,6 @@ local ffi      = require('ffi')
 local fio      = require('fio')
 local tap      = require('tap')
 local uuid     = require('uuid')
-local yaml     = require('yaml')
 local errno    = require('errno')
 local fiber    = require('fiber')
 local ok, test_run = pcall(require, 'test_run')
@@ -33,7 +32,7 @@ local function recursive_rmdir(path)
         end
     end
     if fio.rmdir(path) == false then
-        print(string.format('!!! failed to rmdir path "%s"', file))
+        print(string.format('!!! failed to rmdir path "%s"', path))
         print(string.format('!!! [errno %s]: %s', errno(), errno.strerror()))
     end
 end
@@ -51,7 +50,7 @@ int execvp(const char *file, char *const argv[]);
 ]]
 
 -- background checks
-tctlcfg_code = [[default_cfg = {
+local tctlcfg_code = [[default_cfg = {
     pid_file  = '.', wal_dir = '.', memtx_dir   = '.' ,
     vinyl_dir = '.', log  = '.', background = true,
 }
@@ -124,8 +123,7 @@ local function tctl_wait_stop(dir, name)
     end
 end
 
-local function tctl_command(dir, cmd, args, name)
-    local pid = nil
+local function tctl_command(dir, cmd, args)
     if not fio.stat(fio.pathjoin(dir, '.tarantoolctl')) then
         create_script(dir, '.tarantoolctl', tctlcfg_code)
     end
@@ -224,7 +222,7 @@ do
     -- bad code
     local code = [[ box.cfg{ ]]
     create_script(dir, 'bad_script.lua',  code)
-    local code = [[ box.cfg{memtx_memory = 104857600} ]]
+    code = [[ box.cfg{memtx_memory = 104857600} ]]
     create_script(dir, 'good_script.lua', code)
 
     local status, err = pcall(function()
@@ -258,9 +256,9 @@ do
     -- bad code
     local code = [[ error('help'); return 1]]
     create_script(dir, 'bad_script.lua',  code)
-    local code = [[ return 1]]
+    code = [[ return 1]]
     create_script(dir, 'ok_script.lua',  code)
-    local code = [[ box.cfg{memtx_memory = 104857600} box.once('help', function() end)]]
+    code = [[ box.cfg{memtx_memory = 104857600} box.once('help', function() end)]]
     create_script(dir, 'good_script.lua', code)
 
     local status, err = pcall(function()
@@ -330,7 +328,7 @@ do
     local function test_help(test, dir, cmd, e_stderr)
         local desc = dir and 'with config' or 'without config'
         dir = dir or './'
-        local res, stdout, stderr = run_command(dir, cmd)
+        local _, _, stderr = run_command(dir, cmd)
         if e_stderr ~= nil then
             if not test:ok(stderr:find(e_stderr), ("check stderr of '%s' %s"):format(cmd, desc)) then
                 print(("Expected to find '%s' in '%s'"):format(e_stderr, stderr))
@@ -385,7 +383,7 @@ do
         local command_base = 'tarantoolctl cat filler/00000000000000000000.xlog'
         local desc = args and "cat + " .. args or "cat"
         args = args and " " .. args or ""
-        local res, stdout, stderr = run_command(dir, command_base .. args)
+        local res, stdout = run_command(dir, command_base .. args)
         test:is(res, 0, desc .. " result")
         test:is(select(2, stdout:gsub(delim, delim)), lc, desc .. " line count")
     end
@@ -394,7 +392,7 @@ do
         local command_base = 'tarantoolctl cat filler/00000000000000000000.snap'
         local desc = args and "cat + " .. args or "cat"
         args = args and " " .. args or ""
-        local res, stdout, stderr = run_command(dir, command_base .. args)
+        local res, stdout = run_command(dir, command_base .. args)
         test:is(res, 0, desc .. " result")
         test:is(select(2, stdout:gsub(delim, delim)), lc, desc .. " line count")
     end
@@ -413,6 +411,7 @@ do
             check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system", "\n", 3)
             check_ctlcat_xlog(test_i, dir, "--from=6 --to=3 --format=json --show-system", "\n", 0)
             check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1", "\n", 3)
+            -- luacheck: ignore (it's more convenient to not breaking the line).
             check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 1 --replica 2", "\n", 3)
             check_ctlcat_xlog(test_i, dir, "--from=3 --to=6 --format=json --show-system --replica 2", "\n", 0)
             check_ctlcat_snap(test_i, dir, "--space=280", "---\n", 25)
@@ -478,10 +477,10 @@ else
             check_ok(test_i, dir, 'start', 'filler', 0)
             local lsn_before = test_run:get_lsn("remote", 1)
             test_i:is(lsn_before, 4, "check lsn before")
-            local res, stdout, stderr = run_command(dir, command_base)
+            local res = run_command(dir, command_base)
             test_i:is(res, 0, "execution result")
             test_i:is(test_run:get_lsn("remote", 1), 10, "check lsn after")
-            local res, stdout, stderr = run_command(dir, command_base)
+            res = run_command(dir, command_base)
             test_i:is(res, 0, "execution result")
             test_i:is(test_run:get_lsn("remote", 1), 16, "check lsn after")
         end)
@@ -621,7 +620,7 @@ test:test('filter_xlog', function(test)
     local tarantoolctl = dofile(TARANTOOLCTL_PATH)
 
     -- Like xlog.pairs().
-    local function gen(param, lsn)
+    local function gen(param)
         local row = param.data[param.idx]
         if row == nil then
             return

================================================================================

Fixed 6/8 warnings in test/app-tap/trigger.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/trigger.test.lua b/test/app-tap/trigger.test.lua
index a31d45e5f..6cf3fbe53 100755
--- a/test/app-tap/trigger.test.lua
+++ b/test/app-tap/trigger.test.lua
@@ -45,7 +45,7 @@ test:test("simple trigger test", function(test)
 
 
     -- Check that we've failed to delete trigger
-    local stat, err = pcall(getmetatable(trigger_list).__call, trigger_list,
+    local _, err = pcall(getmetatable(trigger_list).__call, trigger_list,
                             nil, trigger_cnt)
     test:ok(string.find(err, "is not found"), "check error")
 end)
@@ -69,18 +69,18 @@ test:test("errored trigger test", function(test)
     test:is(cnt, 1, "check simple trigger")
     -- Append errored trigger
     trigger_list(trigger_errored)
-    local status = pcall(function() trigger_list:run() end)
+    pcall(function() trigger_list:run() end)
     test:is(cnt, 2, "check simple+error trigger")
     -- Flush triggers
     table_clear(trigger_list)
     test:is(#trigger_list(), 0, "successfull flush")
     -- Append first trigger
     trigger_list(trigger_errored)
-    local status = pcall(function() trigger_list:run() end)
+    pcall(function() trigger_list:run() end)
     test:is(cnt, 2, "check error trigger")
     -- Append errored trigger
     trigger_list(trigger_cnt)
-    local status = pcall(function() trigger_list:run() end)
+    pcall(function() trigger_list:run() end)
     test:is(cnt, 2, "check error+simple trigger")
 end)
 

================================================================================

Fixed all warnings in test/app-tap/yaml.test.lua with the diff below:

================================================================================

diff --git a/test/app-tap/yaml.test.lua b/test/app-tap/yaml.test.lua
index 4669b6102..82fcb90c0 100755
--- a/test/app-tap/yaml.test.lua
+++ b/test/app-tap/yaml.test.lua
@@ -37,8 +37,6 @@ local function test_compact(test, s)
         "---\n- {'k': 'v'}\n...\n", "flow map")
     test:is(getmetatable(ss.decode(ss.encode({k = 'v'}))).__serialize, "map",
         "decoded __serialize is map")
-
-    ss = nil
 end
 
 local function test_output(test, s)
@@ -83,11 +81,11 @@ local function test_tagged(test, s)
     -- Test encoding tags.
     --
     local prefix = 'tag:tarantool.io/push,2018'
-    local ok, err = pcall(s.encode, 200, {tag_handle = true, tag_prefix = 100})
+    local _, err = pcall(s.encode, 200, {tag_handle = true, tag_prefix = 100})
     test:isnt(err:find('Usage'), nil, "encode usage")
-    ok, err = pcall(s.encode, 100, {tag_handle = 'handle'})
+    _, err = pcall(s.encode, 100, {tag_handle = 'handle'})
     test:isnt(err:find('Usage'), nil, "encode usage, no prefix")
-    ok, err = pcall(s.encode, 100, {tag_prefix = 'prefix'})
+    _, err = pcall(s.encode, 100, {tag_prefix = 'prefix'})
     test:isnt(err:find('Usage'), nil, "encode usage, no handle")
     local ret
     ret, err = s.encode(300, {tag_handle = '!push', tag_prefix = prefix})
@@ -100,11 +98,12 @@ local function test_tagged(test, s)
     --
     -- Test decoding tags.
     --
-    ok, err = pcall(s.decode)
+    _, err = pcall(s.decode)
     test:isnt(err:find('Usage'), nil, "decode usage")
-    ok, err = pcall(s.decode, false)
+    _, err = pcall(s.decode, false)
     test:isnt(err:find('Usage'), nil, "decode usage")
-    local handle, prefix = s.decode(ret, {tag_only = true})
+    local handle
+    handle, prefix = s.decode(ret, {tag_only = true})
     test:is(handle, "!print!", "handle is decoded ok")
     test:is(prefix, "tag:tarantool.io/push,2018", "prefix is decoded ok")
     local several_tags =
@@ -114,6 +113,7 @@ local function test_tagged(test, s)
 - 100
 ...
 ]]
+    local ok
     ok, err = s.decode(several_tags, {tag_only = true})
     test:is(ok, nil, "can not decode multiple tags")
     test:is(err, "can not decode multiple tags", "same")

================================================================================

OK, here are some stats before and after my changes applied on this
patch:

| State |   Before   |   After*   |
|-------|------------|------------|
| Codes |  50 (W111) |            |
|       |  10 (W112) |            |
|       | 472 (W113) | 103 (W113) |
|       |  70 (W143) |  70 (W143) |
|       |  37 (W211) |   1 (W211) |
|       |   7 (W212) |            |
|       |   7 (W213) |            |
|       |   1 (W231) |            |
|       |  22 (W311) |            |
|       |  47 (W411) |   1 (W411) |
|       |   3 (W412) |   1 (W412) |
|       |   2 (W421) |   2 (W421) |
|       |   1 (W422) |   1 (W422) |
|       |  32 (W431) |  32 (W431) |
|       |   6 (W432) |   6 (W432) |
|       |   1 (W511) |            |
|       |   1 (W614) |            |
|       |   1 (W631) |            |
|-------|------------|------------|
| Total |  770 / 0   |  217 / 0   |

*In addition to the changes I set <box>, <utf>, <jit> as globals.

I can agree with the fact that *not all* changes need to be applied, but
there are definitely useful and trivial ones above and I see no reasons
to omit and suppress the corresponding warnings.

Considering the results it looks like we can fix other sources with this
approach to reduce the amout of warnings to be suppressed by
.luacheckrc.

>  

<snipped>

> diff --git a/test/box/tree_pk.result b/test/box/tree_pk.result
> index df3c78bed..f2a4f5352 100644
> --- a/test/box/tree_pk.result
> +++ b/test/box/tree_pk.result
> @@ -153,8 +153,8 @@ test_run:cmd("setopt delimiter ';'")
>  ...
>  function crossjoin(space0, space1, limit)
>      local result = {}
> -    for state, v0 in space0:pairs() do
> -        for state, v1 in space1:pairs() do
> +    for _, v0 in space0:pairs() do
> +        for _, v1 in space1:pairs() do
>              if limit <= 0 then
>                  return result
>              end
> diff --git a/test/box/tree_pk.test.lua b/test/box/tree_pk.test.lua
> index 1190ab424..86041a642 100644
> --- a/test/box/tree_pk.test.lua
> +++ b/test/box/tree_pk.test.lua
> @@ -58,8 +58,8 @@ test_run = env.new()
>  test_run:cmd("setopt delimiter ';'")
>  function crossjoin(space0, space1, limit)
>      local result = {}
> -    for state, v0 in space0:pairs() do
> -        for state, v1 in space1:pairs() do
> +    for _, v0 in space0:pairs() do
> +        for _, v1 in space1:pairs() do
>              if limit <= 0 then
>                  return result
>              end

OK, we already discussed it in brief, but let's point it one more time:
diff based tests (and especially the corresponding results) *are not Lua
sources* but console input and output. Thereby these chunks *don't need
to be checked* via luacheckrc. It might be useful to write a separate
checker, but I see no benefits to it (since AFAIR we're going to reduce
the amount of diff-based patches, but I might be wrong).

<snipped>

> -- 
> 2.23.0
> 
> 
> -- 
> sergeyb@

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-15 21:46     ` Vladislav Shpilevoy
@ 2020-04-16 13:52       ` Igor Munkin
  0 siblings, 0 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-16 13:52 UTC (permalink / raw)
  To: Vladislav Shpilevoy; +Cc: o.piskunov, tarantool-patches

Vlad,

On 15.04.20, Vladislav Shpilevoy wrote:
> >> @@ -428,7 +428,7 @@ local public_methods = {
> >>  }
> >>  
> >>  local module_mt = {
> >> -    __serialize = function(s)
> >> +    __serialize = function()
> >>          return public_methods
> >>      end,
> >>      __index = public_methods
> > 
> > I see no reasons to leave other W212[unused argument self] occurences.
> > Here is a diff:
> > 
> > ================================================================================
> > 
> > diff --git a/src/lua/crypto.lua b/src/lua/crypto.lua
> > index c0eb0d303..6a7ee53f0 100644
> > --- a/src/lua/crypto.lua
> > +++ b/src/lua/crypto.lua
> > @@ -318,7 +318,7 @@ for class, digest in pairs(digests) do
> >      digest_api[class] = setmetatable({
> >          new = function () return digest_new(digest) end
> >      }, {
> > -        __call = function (self, str)
> > +        __call = function (_, str)
> 
> I would better avoid such changes. They make it harder to understand
> what the function takes as arguments. Luacheck in these cases basically
> dictates to us how to name variables, because nothing is removed here.
> The variable is just renamed to a less understandable name.

Well, your point also sounds rational and I agree with you since code is
written for us not for luacheck. I guess we need investigate can we
suppress globally only unused args with the name <self> but still
reports others? Otherwise we can suppress it inline. Chunk-wide
suppression can lead to masked/false-negative errors.

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-15 20:51     ` Igor Munkin
  2020-04-15 21:40       ` Vladislav Shpilevoy
@ 2020-04-17  9:07       ` Sergey Bronnikov
  1 sibling, 0 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-17  9:07 UTC (permalink / raw)
  To: Igor Munkin; +Cc: o.piskunov, tarantool-patches, Vladislav Shpilevoy

Igor,

thanks a lot for review. See my answers below.

On 23:51 Wed 15 Apr , Igor Munkin wrote:

<snipped>

> > ====================
> > 
> >     Review fixes: src/lua
> > 
> > diff --git a/src/lua/fiber.lua b/src/lua/fiber.lua
> > index 89c17f63d..692408e54 100644
> > --- a/src/lua/fiber.lua
> > +++ b/src/lua/fiber.lua
> > @@ -40,7 +40,7 @@ fiber.stall = nil
> >  
> >  local worker_next_task = nil
> >  local worker_last_task = nil
> 
> It looks like this assignment can also be omitted (anyway luacheck also
> reports it as a warning).

Kept it as is because luacheck don't warn me about it.

> > -local worker_fiber = nil
> > +local worker_fiber
> >  
> >  --
> >  -- Worker is a singleton fiber for not urgent delayed execution of
> 
> <snipped>
> 
> > diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
> > index 9105c3f23..793f47854 100644
> > --- a/src/lua/msgpackffi.lua
> > +++ b/src/lua/msgpackffi.lua
> > @@ -501,7 +501,11 @@ local ext_decoder = {
> >      -- MP_DECIMAL
> >      [1] = function(data, len) local num = ffi.new("decimal_t") builtin.decimal_unpack(data, len, num) return num end,
> 
> I guess MP_DECIMAL decoder can also be transformed to multiline function.

The same - kept it as is because luacheck don't warn me about it.

S.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-15 20:51     ` Igor Munkin
@ 2020-04-17  9:09     ` Sergey Bronnikov
  1 sibling, 0 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-17  9:09 UTC (permalink / raw)
  To: Vladislav Shpilevoy; +Cc: o.piskunov, tarantool-patches

Vladislav, thanks a lot for review and for the patch especially!
I'll squash patch with mine if you have no objectives.

On 01:29 Wed 15 Apr , Vladislav Shpilevoy wrote:
> Thanks for the patch!
>
> Consider more fixes below and on the branch in a separate commit.
> That allowed to remove some warning mutes from the luacheck
> config.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-15 20:51   ` Igor Munkin
  2020-04-15 21:46     ` Vladislav Shpilevoy
@ 2020-04-17  9:26     ` Sergey Bronnikov
  2020-04-17 12:13       ` Igor Munkin
  1 sibling, 1 reply; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-17  9:26 UTC (permalink / raw)
  To: Igor Munkin; +Cc: o.piskunov, tarantool-patches

Igor, thanks for review!
See my answers below.

On 23:51 Wed 15 Apr , Igor Munkin wrote:
> Sergey,
> 
> Thanks for the patch!
> 
> On 14.04.20, Sergey Bronnikov wrote:
> > Many warnings fixed with help from Vladislav Shpilevoy.

<snipped>

> > 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 {}
> 
> I guess you can just give t__in a proper name, e.g. args, params, etc.

Agree with you, replaced it with 'param'.

<snipped>

> I see no reasons to leave other W212[unused argument self] occurences.
> Here is a diff:

Vladislav already told me in previous review iterations that '_' is less
readable than 'self', so it was a reason why haven't fixed them. I have
found a way to supress only W212 related to 'self' and applied it in
branch.

S.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-14 23:29   ` Vladislav Shpilevoy
@ 2020-04-17 12:05     ` Igor Munkin
  2020-04-17 19:51       ` Sergey Bronnikov
  2020-04-17 19:47     ` Sergey Bronnikov
  1 sibling, 1 reply; 28+ messages in thread
From: Igor Munkin @ 2020-04-17 12:05 UTC (permalink / raw)
  To: Vladislav Shpilevoy; +Cc: o.piskunov, tarantool-patches

Vlad,

Thanks for the fixes!

On 15.04.20, Vladislav Shpilevoy wrote:
> Thanks for the patch!
> 
> Consider more fixes below and on the branch in a separate commit.
> That allowed to remove some warning mutes from the luacheck
> config.
> 
> ====================
> 
>     Review fixes: test/
> 

<snipped>

> diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
> index 4d7059559..3fda53274 100755
> --- a/test/app-tap/tarantoolctl.test.lua
> +++ b/test/app-tap/tarantoolctl.test.lua
> @@ -97,23 +97,14 @@ local function tctl_wait_start(dir, name)
>              fiber.sleep(0.01)
>          end
>          ::again::
> -        while true do
> -            local stat, nb = pcall(require('net.box').new, path, {
> -                wait_connected = true, console = true
> -            })
> -            if stat == false then
> -                fiber.sleep(0.01)
> -                goto again
> -            else
> -                break
> -            end
> -            local stat, msg = pcall(nb.eval, nb, 'require("fiber").time()')
> -            if stat == false then
> -                fiber.sleep(0.01)
> -            else
> -                break
> -            end
> +        local stat, nb = pcall(require('net.box').new, path, {

I guess you can drop nb here, since it's unused.

> +            wait_connected = true, console = true
> +        })
> +        if stat == false then
> +            fiber.sleep(0.01)
> +            goto again
>          end
> +        return
>      end
>  end
>  

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/
  2020-04-17  9:26     ` Sergey Bronnikov
@ 2020-04-17 12:13       ` Igor Munkin
  0 siblings, 0 replies; 28+ messages in thread
From: Igor Munkin @ 2020-04-17 12:13 UTC (permalink / raw)
  To: Sergey Bronnikov; +Cc: o.piskunov, tarantool-patches

Sergey,

On 17.04.20, Sergey Bronnikov wrote:
> Igor, thanks for review!
> See my answers below.
> 
> On 23:51 Wed 15 Apr , Igor Munkin wrote:
> > Sergey,
> > 
> > Thanks for the patch!
> > 

<snipped>

> > I see no reasons to leave other W212[unused argument self] occurences.
> > Here is a diff:
> 
> Vladislav already told me in previous review iterations that '_' is less
> readable than 'self', so it was a reason why haven't fixed them. I have
> found a way to supress only W212 related to 'self' and applied it in
> branch.

Nice! That's exactly what we need for this issue!

> 
> S.

-- 
Best regards,
IM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-14 23:29   ` Vladislav Shpilevoy
  2020-04-17 12:05     ` Igor Munkin
@ 2020-04-17 19:47     ` Sergey Bronnikov
  1 sibling, 0 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-17 19:47 UTC (permalink / raw)
  To: Vladislav Shpilevoy; +Cc: o.piskunov, tarantool-patches

Vladislav, thanks for review and patch!

On 01:29 Wed 15 Apr , Vladislav Shpilevoy wrote:
> Thanks for the patch!
> 
> Consider more fixes below and on the branch in a separate commit.
> That allowed to remove some warning mutes from the luacheck
> config.
> 
> ====================
> 
>     Review fixes: test/
> 
> diff --git a/test/app-tap/console_lua.test.lua b/test/app-tap/console_lua.test.lua
> index 3ed6aad97..d0e290d9c 100755
> --- a/test/app-tap/console_lua.test.lua
> +++ b/test/app-tap/console_lua.test.lua
> @@ -13,7 +13,7 @@ local CONSOLE_SOCKET = 'console-lua.sock'
>  --
>  -- Set Lua output mode.
>  local function set_lua_output(client, opts)
> -    local opts = opts or {}
> +    opts = opts or {}
>      local mode = opts.block and 'lua,block' or 'lua'
>      client:write(('\\set output %s\n'):format(mode))
>      assert(client:read(EOL), 'true' .. EOL, 'set lua output mode')
> diff --git a/test/app-tap/fail_main.test.lua b/test/app-tap/fail_main.test.lua
> index f8c45bf6f..917577f46 100755
> --- a/test/app-tap/fail_main.test.lua
> +++ b/test/app-tap/fail_main.test.lua
> @@ -16,7 +16,7 @@ function run_script(code)
>      script:close()
>      local output_file = fio.pathjoin(fio.cwd(), 'out.txt')
>      local cmd = [[/bin/sh -c 'cd "%s" && "%s" ./script.lua 0> %s 2> %s']]
> -    local code = os.execute(
> +    code = os.execute(
>          string.format(cmd, dir, tarantool_bin, output_file, output_file)
>      )
>      fio.rmtree(dir)
> diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
> index 4d7059559..3fda53274 100755
> --- a/test/app-tap/tarantoolctl.test.lua
> +++ b/test/app-tap/tarantoolctl.test.lua
> @@ -97,23 +97,14 @@ local function tctl_wait_start(dir, name)
>              fiber.sleep(0.01)
>          end
>          ::again::
> -        while true do
> -            local stat, nb = pcall(require('net.box').new, path, {
> -                wait_connected = true, console = true
> -            })
> -            if stat == false then
> -                fiber.sleep(0.01)
> -                goto again
> -            else
> -                break
> -            end
> -            local stat, msg = pcall(nb.eval, nb, 'require("fiber").time()')
> -            if stat == false then
> -                fiber.sleep(0.01)
> -            else
> -                break
> -            end
> +        local stat, nb = pcall(require('net.box').new, path, {
> +            wait_connected = true, console = true
> +        })
> +        if stat == false then
> +            fiber.sleep(0.01)
> +            goto again
>          end
> +        return
>      end
>  end
>  

-- 
sergeyb@

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/
  2020-04-17 12:05     ` Igor Munkin
@ 2020-04-17 19:51       ` Sergey Bronnikov
  0 siblings, 0 replies; 28+ messages in thread
From: Sergey Bronnikov @ 2020-04-17 19:51 UTC (permalink / raw)
  To: Igor Munkin; +Cc: o.piskunov, tarantool-patches, Vladislav Shpilevoy

Igor,

On 15:05 Fri 17 Apr , Igor Munkin wrote:

<snipped>

> > diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
> > index 4d7059559..3fda53274 100755
> > --- a/test/app-tap/tarantoolctl.test.lua
> > +++ b/test/app-tap/tarantoolctl.test.lua
> > @@ -97,23 +97,14 @@ local function tctl_wait_start(dir, name)
> >              fiber.sleep(0.01)
> >          end
> >          ::again::
> > -        while true do
> > -            local stat, nb = pcall(require('net.box').new, path, {
> > -                wait_connected = true, console = true
> > -            })
> > -            if stat == false then
> > -                fiber.sleep(0.01)
> > -                goto again
> > -            else
> > -                break
> > -            end
> > -            local stat, msg = pcall(nb.eval, nb, 'require("fiber").time()')
> > -            if stat == false then
> > -                fiber.sleep(0.01)
> > -            else
> > -                break
> > -            end
> > +        local stat, nb = pcall(require('net.box').new, path, {
> 
> I guess you can drop nb here, since it's unused.

'nb' variable has been removed and patch updated, thanks!

<snipped>

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2020-04-17 19:51 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-14  7:55 [Tarantool-patches] [PATCH v3 0/6] Add static analysis with luacheck Sergey Bronnikov
2020-04-14  7:56 ` [Tarantool-patches] [PATCH 1/6] Fix luacheck warnings in src/lua/ Sergey Bronnikov
2020-04-14 23:29   ` Vladislav Shpilevoy
2020-04-15 20:51     ` Igor Munkin
2020-04-15 21:40       ` Vladislav Shpilevoy
2020-04-17  9:07       ` Sergey Bronnikov
2020-04-17  9:09     ` Sergey Bronnikov
2020-04-15 20:51   ` Igor Munkin
2020-04-15 21:46     ` Vladislav Shpilevoy
2020-04-16 13:52       ` Igor Munkin
2020-04-17  9:26     ` Sergey Bronnikov
2020-04-17 12:13       ` Igor Munkin
2020-04-14  7:57 ` [Tarantool-patches] [PATCH 2/6] Fix luacheck warnings in test/ Sergey Bronnikov
2020-04-14 23:29   ` Vladislav Shpilevoy
2020-04-17 12:05     ` Igor Munkin
2020-04-17 19:51       ` Sergey Bronnikov
2020-04-17 19:47     ` Sergey Bronnikov
2020-04-16 13:43   ` Igor Munkin
2020-04-14  7:57 ` [Tarantool-patches] [PATCH 3/6] Fix luacheck warnings in src/box/lua/ Sergey Bronnikov
2020-04-14 23:30   ` Vladislav Shpilevoy
2020-04-14  7:58 ` [Tarantool-patches] [PATCH 4/6] Fix luacheck warnings in extra/dist/tarantoolctl.in Sergey Bronnikov
2020-04-14 23:30   ` Vladislav Shpilevoy
2020-04-15 15:35   ` Igor Munkin
2020-04-14  8:01 ` [Tarantool-patches] [PATCH 5/6] Add luacheck config Sergey Bronnikov
2020-04-14 23:30   ` Vladislav Shpilevoy
2020-04-14  8:01 ` [Tarantool-patches] [PATCH 6/6] gitlab-ci: enable static analysis with luacheck Sergey Bronnikov
2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 7/6] schema: fix index promotion to functional index Vladislav Shpilevoy
2020-04-14 23:30 ` [Tarantool-patches] [PATCH v3 8/6] schema: fix internal symbols dangling in _G Vladislav Shpilevoy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox