Lua Language Guide¶
linthis uses luacheck for linting and stylua for formatting Lua code.
Supported File Extensions¶
.lua
Required Tools¶
Linter: luacheck¶
# Via LuaRocks
luarocks install luacheck
# macOS via Homebrew
brew install luacheck
# Verify installation
luacheck --version
Formatter: stylua¶
# Via Cargo
cargo install stylua
# macOS via Homebrew
brew install stylua
# Verify installation
stylua --version
Configuration¶
Basic Example¶
# .linthis/config.toml
[lua]
max_complexity = 15
excludes = ["vendor/**", "*.min.lua"]
Disable Specific Rules¶
[lua.rules]
disable = [
"W211", # Unused variable
"W212" # Unused argument
]
Custom Rules¶
[[rules.custom]]
code = "lua/no-global"
pattern = "^[a-zA-Z_][a-zA-Z0-9_]*\\s*="
message = "Avoid implicit globals - use 'local'"
severity = "warning"
languages = ["lua"]
[[rules.custom]]
code = "lua/no-print"
pattern = "\\bprint\\s*\\("
message = "Use logging instead of print()"
severity = "info"
languages = ["lua"]
CLI Usage¶
# Check Lua files only
linthis -c --lang lua
# Format Lua files only
linthis -f --lang lua
Luacheck Configuration¶
Create .luacheckrc:
std = "lua51+luajit"
codes = true
globals = {
"vim", -- Neovim globals
"awesome", -- AwesomeWM
}
ignore = {
"212", -- Unused argument
"213", -- Unused loop variable
}
max_line_length = 120
StyLua Configuration¶
Create .stylua.toml:
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferDouble"
call_parentheses = "Always"
Common Issues¶
Luacheck not found¶
Warning: No lua linter available for lua files
Install: luarocks install luacheck
Neovim/game engine globals¶
Configure globals in .luacheckrc:
-- For Neovim
globals = { "vim" }
-- For Love2D
globals = { "love" }
-- For Corona SDK
globals = { "display", "Runtime", "system" }
Vendor/third-party code¶
Add to excludes:
[lua]
excludes = ["vendor/**", "lib/**"]
Best Practices¶
- Use local: Always use
localfor variables - Configure globals: Declare framework globals in
.luacheckrc - Consistent style: Use StyLua for consistent formatting
- Module pattern: Use proper module patterns for clean code