[Tarantool-patches] [PATCH v4 5/10] Fix luacheck warnings in src/box/lua/
Sergey Bronnikov
sergeyb at tarantool.org
Thu May 7 13:32:55 MSK 2020
Igor,
thanks for review!
I have corrected patches according to your comments.
On 01:54 Fri 24 Apr , Igor Munkin wrote:
> Sergey,
>
> Thanks for the patch! Please consider the comments I left below.
>
> On 21.04.20, sergeyb at tarantool.org wrote:
> > From: Sergey Bronnikov <sergeyb at tarantool.org>
> >
> > Closes #4681
> >
> > Reviewed-by: Vladislav Shpilevoy <v.shpilevoy at tarantool.org>
> > Co-authored-by: Vladislav Shpilevoy <v.shpilevoy at tarantool.org>
> > ---
> > .luacheckrc | 8 ++++++++
> > src/box/lua/console.lua | 6 +++---
> > src/box/lua/feedback_daemon.lua | 2 +-
> > src/box/lua/key_def.lua | 2 +-
> > src/box/lua/load_cfg.lua | 25 +++++++++++------------
> > src/box/lua/net_box.lua | 26 ++++++++----------------
> > src/box/lua/schema.lua | 35 ++++++++++++++++-----------------
> > src/box/lua/tuple.lua | 8 +++-----
> > src/box/lua/upgrade.lua | 19 +++++++++---------
> > 9 files changed, 62 insertions(+), 69 deletions(-)
> >
> > diff --git a/.luacheckrc b/.luacheckrc
> > index 60aedc842..64692b27c 100644
> > --- a/.luacheckrc
> > +++ b/.luacheckrc
> > @@ -25,7 +25,15 @@ exclude_files = {
> > ".git/**/*.lua",
> > }
> >
> > +files["**/*.lua"] = {
> > + globals = {"box", "_TARANTOOL", "help", "tutorial"},
> > + ignore = {"212/self", "122"}
> > +}
>
> Well, I can't figure out why these global suppressions are set in this
> patch.
> By the way these suppressions don't work for extra/dist/tarantoolctl.in.
I'll move these globals to a patch specific to src/lua/.
> Furthermore, IMHO, global suppression for (W122)[Setting a read-only
> field of a global variable] is a bad practice.
requested by Vladislav in [1] (comment 5):
"This error is actually ridiculous in such a language as Lua.
Can we ignore it globally? The same for error 122."
[1] https://lists.tarantool.org/pipermail/tarantool-patches/2020-April/015404.html
> > files["extra/dist/tarantoolctl.in"] = {ignore = {"212/self", "122", "431"}}
> > files["src/lua/swim.lua"] = {ignore = {"431"}}
> > files["src/lua/fio.lua"] = {ignore = {"231"}}
> > files["src/lua/init.lua"] = {globals = {"dostring"}}
> > +files["src/box/lua/console.lua"] = {ignore = {"212"}}
>
> What is the reason to fix 3 (W211)[Unused local variable] warnings, but
> leave and suppress 9 (W212)[Unused argument] warnings (at the same time
> you fix this type of warnings in load_cfg.lua)?
>
> > +files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
>
> It's a single empty branch warning, why it can't be fixed / suppressed
> inline? Here is the diff:
I thought we don't want to use inline supressions at all.
Well, applied patch below on a branch.
> ================================================================================
>
> diff --git a/.luacheckrc b/.luacheckrc
> index 64692b27c..0c1f85766 100644
> --- a/.luacheckrc
> +++ b/.luacheckrc
> @@ -29,11 +29,11 @@ files["**/*.lua"] = {
> globals = {"box", "_TARANTOOL", "help", "tutorial"},
> ignore = {"212/self", "122"}
> }
> +
> files["extra/dist/tarantoolctl.in"] = {ignore = {"212/self", "122", "431"}}
> files["src/lua/swim.lua"] = {ignore = {"431"}}
> files["src/lua/fio.lua"] = {ignore = {"231"}}
> files["src/lua/init.lua"] = {globals = {"dostring"}}
> files["src/box/lua/console.lua"] = {ignore = {"212"}}
> -files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
> files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
> files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
> diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
> index 0926c7380..38c128e85 100644
> --- a/src/box/lua/load_cfg.lua
> +++ b/src/box/lua/load_cfg.lua
> @@ -414,7 +414,7 @@ local function prepare_cfg(cfg, default_cfg, template_cfg, modify_cfg, prefix)
> elseif v == "" or v == nil then
> -- "" and NULL = ffi.cast('void *', 0) set option to default value
> v = default_cfg[k]
> - elseif template_cfg[k] == 'any' then
> + elseif template_cfg[k] == 'any' then -- luacheck: ignore
> -- any type is ok
> elseif type(template_cfg[k]) == 'table' then
> if type(v) ~= 'table' then
>
> ================================================================================
>
> > +files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
>
> Again, I see suppressed (W212)[Unused argument] warnings *but*:
> * they are well localized
> * most of them will *never* be fixed and should be commented and
> protected from inquisitive persons
> * others can be fixed with a trivial changes
>
> Here is the diff:
Applied, thanks!
> ================================================================================
>
> diff --git a/.luacheckrc b/.luacheckrc
> index 64692b27c..b05260d29 100644
> --- a/.luacheckrc
> +++ b/.luacheckrc
> @@ -35,5 +35,5 @@ files["src/lua/fio.lua"] = {ignore = {"231"}}
> files["src/lua/init.lua"] = {globals = {"dostring"}}
> files["src/box/lua/console.lua"] = {ignore = {"212"}}
> files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
> -files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
> +files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411"}}
> files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
> diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua
> index 1e351bb31..8b3802749 100644
> --- a/src/box/lua/net_box.lua
> +++ b/src/box/lua/net_box.lua
> @@ -56,18 +56,18 @@ local E_PROC_LUA = box.error.PROC_LUA
> -- utility tables
> local is_final_state = {closed = 1, error = 1}
>
> -local function decode_nil(raw_data, raw_data_end)
> +local function decode_nil(raw_data, raw_data_end) -- luacheck: no unused args
> return nil, raw_data_end
> end
> local function decode_data(raw_data)
> local response, raw_end = decode(raw_data)
> return response[IPROTO_DATA_KEY], raw_end
> end
> -local function decode_tuple(raw_data, raw_data_end, format)
> +local function decode_tuple(raw_data, raw_data_end, format) -- luacheck: no unused args
> local response, raw_end = internal.decode_select(raw_data, nil, format)
> return response[1], raw_end
> end
> -local function decode_get(raw_data, raw_data_end, format)
> +local function decode_get(raw_data, raw_data_end, format) -- luacheck: no unused args
> local body, raw_end = internal.decode_select(raw_data, nil, format)
> if body[2] then
> return nil, raw_end, box.error.MORE_THAN_ONE_TUPLE
> @@ -110,7 +110,7 @@ local method_encoder = {
> max = internal.encode_select,
> count = internal.encode_call,
> -- inject raw data into connection, used by console and tests
> - inject = function(buf, id, bytes)
> + inject = function(buf, id, bytes) -- luacheck: no unused args
> local ptr = buf:reserve(#bytes)
> ffi.copy(ptr, bytes, #bytes)
> buf.wpos = ptr + #bytes
> @@ -176,7 +176,7 @@ end
> -- Default action on push during a synchronous request -
> -- ignore.
> --
> -local function on_push_sync_default(...) end
> +local function on_push_sync_default() end
>
> --
> -- Basically, *transport* is a TCP connection speaking one of
> @@ -1216,7 +1216,7 @@ function remote_methods:execute(query, parameters, sql_opts, netbox_opts)
> sql_opts or {})
> end
>
> -function remote_methods:prepare(query, parameters, sql_opts, netbox_opts)
> +function remote_methods:prepare(query, parameters, sql_opts, netbox_opts) -- luacheck: no unused args
> check_remote_arg(self, "prepare")
> if type(query) ~= "string" then
> box.error(box.error.SQL_PREPARE, "expected string as SQL statement")
> @@ -1581,7 +1581,7 @@ this_module.self = {
> timeout = function(self) return self end,
> wait_connected = function(self) return true end,
> is_connected = function(self) return true end,
> - call = function(_box, proc_name, args, opts)
> + call = function(_box, proc_name, args)
> check_remote_arg(_box, 'call')
> check_call_args(args)
> args = args or {}
> @@ -1598,7 +1598,7 @@ this_module.self = {
> return handle_eval_result(pcall(proc, unpack(args)))
> end
> end,
> - eval = function(_box, expr, args, opts)
> + eval = function(_box, expr, args)
> check_remote_arg(_box, 'eval')
> check_eval_args(args)
> args = args or {}
>
> ================================================================================
>
> Moreover a single (W231)[Local variable is set but never accessed]
> warning is also supressed (but you fixed others in this file). Here is
> the diff:
Applied, thanks!
> ================================================================================
>
> diff --git a/.luacheckrc b/.luacheckrc
> index 64692b27c..b23ebfc60 100644
> --- a/.luacheckrc
> +++ b/.luacheckrc
> @@ -35,5 +35,5 @@ files["src/lua/fio.lua"] = {ignore = {"231"}}
> files["src/lua/init.lua"] = {globals = {"dostring"}}
> files["src/box/lua/console.lua"] = {ignore = {"212"}}
> files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
> -files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
> +files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "411", "212"}}
> files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
> diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua
> index 1e351bb31..bcfec92bc 100644
> --- a/src/box/lua/net_box.lua
> +++ b/src/box/lua/net_box.lua
> @@ -749,13 +749,12 @@ local function create_transport(host, port, user, password, callback,
> return iproto_schema_sm()
> end
> encode_auth(send_buf, new_request_id(), user, password, salt)
> - local err, hdr, body_rpos, body_end = send_and_recv_iproto()
> + local err, hdr, body_rpos = send_and_recv_iproto()
> if err then
> return error_sm(err, hdr)
> end
> if hdr[IPROTO_STATUS_KEY] ~= 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
> set_state('fetch_schema')
>
> ================================================================================
>
> > +files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
>
> Again, it's a single empty branch warning, that can be suppressed
> inline. Here is the diff:
Applied, thanks!
> ================================================================================
>
> diff --git a/.luacheckrc b/.luacheckrc
> index 64692b27c..fa715fded 100644
> --- a/.luacheckrc
> +++ b/.luacheckrc
> @@ -36,4 +36,4 @@ files["src/lua/init.lua"] = {globals = {"dostring"}}
> files["src/box/lua/console.lua"] = {ignore = {"212"}}
> files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
> files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
> -files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
> +files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "212"}}
> diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
> index de47b807e..5fad272ab 100644
> --- a/src/box/lua/schema.lua
> +++ b/src/box/lua/schema.lua
> @@ -259,7 +259,7 @@ local function check_param_table(table, template)
> if template[k] == nil then
> box.error(box.error.ILLEGAL_PARAMS,
> "unexpected option '" .. k .. "'")
> - elseif template[k] == 'any' then
> + elseif template[k] == 'any' then -- luacheck: ignore
> -- any type is ok
> elseif (string.find(template[k], ',') == nil) then
> -- one type
>
> ================================================================================
>
> And the following simple diff fixes all remaining (W212)[Unused
> argument] warnings reported for schema.lua:
Applied.
> ================================================================================
>
> diff --git a/.luacheckrc b/.luacheckrc
> index 64692b27c..bfe144f64 100644
> --- a/.luacheckrc
> +++ b/.luacheckrc
> @@ -36,4 +36,4 @@ files["src/lua/init.lua"] = {globals = {"dostring"}}
> files["src/box/lua/console.lua"] = {ignore = {"212"}}
> files["src/box/lua/load_cfg.lua"] = {ignore = {"542"}}
> files["src/box/lua/net_box.lua"] = {ignore = {"431", "432", "231", "411", "212"}}
> -files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542", "212"}}
> +files["src/box/lua/schema.lua"] = {ignore = {"431", "432", "542"}}
> diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
> index de47b807e..537443eeb 100644
> --- a/src/box/lua/schema.lua
> +++ b/src/box/lua/schema.lua
> @@ -1229,12 +1229,12 @@ end
>
> local iterator_t = ffi.typeof('struct iterator')
> ffi.metatype(iterator_t, {
> - __tostring = function(iterator)
> + __tostring = function()
> return "<iterator state>"
> end;
> })
>
> -local iterator_gen = function(param, state)
> +local iterator_gen = function(param, state) -- luacheck: no unused args
> --[[
> index:pairs() mostly conforms to the Lua for-in loop conventions and
> tries to follow the best practices of Lua community.
> @@ -1268,7 +1268,7 @@ local iterator_gen = function(param, state)
> end
> end
>
> -local iterator_gen_luac = function(param, state)
> +local iterator_gen_luac = function(param, state) -- luacheck: no unused args
> local tuple = internal.iterator_next(state)
> if tuple ~= nil then
> return state, tuple -- new state, value
> @@ -1773,9 +1773,9 @@ local function wrap_schema_object_mt(name)
> __pairs = global_mt.__pairs
> }
> local mt_mt = {}
> - mt_mt.__newindex = function(t, k, v)
> + mt_mt.__newindex = function(self, k, v)
> mt_mt.__newindex = nil
> - mt.__index = function(t, k)
> + mt.__index = function(self, k)
> return mt[k] or box.schema[name][k]
> end
> rawset(mt, k, v)
> @@ -2484,7 +2484,7 @@ local function revoke(uid, name, privilege, object_type, object_name, options)
> end
> end
>
> -local function drop(uid, opts)
> +local function drop(uid)
> -- recursive delete of user data
> local _vpriv = box.space[box.schema.VPRIV_ID]
> local spaces = box.space[box.schema.VSPACE_ID].index.owner:select{uid}
> @@ -2563,7 +2563,7 @@ box.schema.user.drop = function(name, opts)
> box.error(box.error.DROP_USER, name,
> "the user is active in the current session")
> end
> - return drop(uid, opts)
> + return drop(uid)
> end
> if not opts.if_exists then
> box.error(box.error.NO_SUCH_USER, name)
>
> ================================================================================
>
> <snipped>
>
> > 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
>
> <snipped>
>
> > @@ -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)
>
> Please adjust the corresponding comment.
>
> > state_cond:broadcast()
> > if state == 'error' or state == 'error_reconnect' or
> > state == 'closed' then
>
> <snipped>
>
> > @@ -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
> > diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
> > index 85fcca562..de47b807e 100644
> > --- a/src/box/lua/schema.lua
> > +++ b/src/box/lua/schema.lua
>
> <snipped>
>
> > @@ -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
>
> You can simply move it down to its initialization.
Done
> > -- Path doesn't require resolve.
> > if type(path) == 'number' then
> > idx = path
>
<snipped>
More information about the Tarantool-patches
mailing list