You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have been using selene in my projects lately and I think is a more strict linter in some cases, showing more errors or warnings to catch what luacheck do not.
std="neovim"exclude = [
"lua/plenary/profile/lua_profiler.lua",
"lua/plenary/profile/memory_profiler.lua",
"lua/plenary/profile/p.lua", # token `goto` detected as `parse_error`"lua/plenary/async_lib/*.lua",
]
[rules]
global_usage = "warn"deprecated = "warn"# If change for `allow` it will rely in `lua_ls` diagnostics alonemultiple_statements = "warn"incorrect_standard_library_use = "allow"# This is for cases like `string.format`, `package.config`, etc.mixed_table = "allow"unused_variable = "warn"undefined_variable = "warn"
With these two files in the root of the project, selene --display-style quiet lua/plenary --allow-warnings results in the following.
lua/plenary/async/api.lua:4:22: warning[unused_variable]: t is defined, but never used
lua/plenary/bit.lua:136:21: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:176:22: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:179:22: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:182:22: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:226:28: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:227:28: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:228:28: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:252:27: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/bit.lua:269:27: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/async/tests.lua:14:3: warning[undefined_variable]: `pending` is not defined
lua/plenary/busted.lua:5:26: warning[unused_variable]: element is defined, but never used
lua/plenary/busted.lua:13:19: error[mismatched_arg_count]: this functiontakes 1 argument but 2 arguments were supplied
lua/plenary/busted.lua:74:41: warning[shadowing]: shadowing variable `msg`
lua/plenary/busted.lua:201:30: warning[unused_variable]: func is defined, but never used
lua/plenary/busted.lua:211:1: warning[unscoped_variables]: `pending` is not declared locally, and will be available in every scope
lua/plenary/busted.lua:211:1: warning[unused_variable]: pending is defined, but never used
lua/plenary/busted.lua:214:1: warning[unscoped_variables]: `clear` is not declared locally, and will be available in every scope
lua/plenary/busted.lua:214:1: warning[unused_variable]: clear is defined, but never used
lua/plenary/profile.lua:16:24: warning[multiple_statements]: only one statement per line is allowed
lua/plenary/run.lua:5:55: warning[unused_variable]: opts is defined, but never used
Results:
1 errors
20 warnings
0 parse errors
or (info.source:sub(1, 1) =="@" andthisdir==dirname(info.source))
Note
The error shown is because in lua/plenary/busted.lua we are using the functiondirname with 1 argument.
But in the line 13, dirname(debug.getinfo(1, "Sl").source, ":h") is using 2. Unlike in line 18, dirname(info.source) is just using one as the declaration for local dirname = function(p) indicates.
If we fix that error, dirname(debug.getinfo(1, "Sl").source, ":h") -> dirname(debug.getinfo(1, "Sl").source). The command for selene with the --allow-warnings flag will result in a success exit code when linting.
Integrations
For the CI process it will be easy.
Extending the Makefile to include:
make lint-selene: selene --display-style quiet lua/plenary --allow-warnings
Motivation
I have been using selene in my projects lately and I think is a more strict linter in some cases, showing more
errorsorwarningsto catch whatluacheckdo not.Example config
In the root project.
selene.tomlneovim.ymlWith these two files in the root of the project,
selene --display-style quiet lua/plenary --allow-warningsresults in the following.plenary.nvim/lua/plenary/busted.lua
Lines 1 to 18 in 08e3019
Note
The error shown is because in
lua/plenary/busted.luawe are using the functiondirnamewith 1 argument.But in the line
13,dirname(debug.getinfo(1, "Sl").source, ":h")is using 2. Unlike in line18,dirname(info.source)is just using one as the declaration forlocal dirname = function(p)indicates.If we fix that error,
dirname(debug.getinfo(1, "Sl").source, ":h")->dirname(debug.getinfo(1, "Sl").source). The command forselenewith the--allow-warningsflag will result in asuccessexit code when linting.Integrations
For the
CIprocess it will be easy.Makefileto include:make lint-selene:selene --display-style quiet lua/plenary --allow-warningsselenejob toworkflows:Note
More about
seleneaction here