mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
74eeb411ba
Introduce a tuned .luacheckrc and scripts/lint.sh so the engine has a standing static-analysis baseline -- the tool that would have caught both bugs in the previous commit before they shipped. The config is high-signal by design: it keeps the categories that catch real defects (undefined globals/locals, unused values, unreachable code) and mutes the cosmetic ones the codebase deliberately lives with (a self/dt an interface requires but a method ignores, documented empty fall-through branches, long lines). It marks `love` mutable (games assign callbacks onto it) and teaches it LuaJIT's table.unpack. .luacheckrc is tracked via a .gitignore exception, matching how .github and .gitignore opt out of the blanket dotfile ignore. `luacheck src` now reports 7 benign warnings and 0 errors, down from 185. Also drop one dead `require` (ItemEffects loaded src.pokemon.Pokemon and never used it). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q6bFAiQyZ5jDmewsbB4LG9
44 lines
1.7 KiB
Lua
44 lines
1.7 KiB
Lua
-- Static-analysis config for `luacheck` (https://luacheck.readthedocs.io).
|
|
--
|
|
-- Run it over the engine with: luacheck src (or scripts/lint.sh)
|
|
--
|
|
-- The point is a high-signal baseline: the categories left on are the ones
|
|
-- that catch real defects -- undefined globals/locals (the class that hid a
|
|
-- `music.volume` crash: applyVolume read a `state` that was still the nil
|
|
-- global), unused values, unreachable code, redefinitions. The cosmetic
|
|
-- categories the codebase deliberately lives with (a `self`/`dt` an
|
|
-- interface requires but a given method ignores, documented empty
|
|
-- fall-through branches, the odd long line) are muted so they don't drown
|
|
-- the signal.
|
|
|
|
std = "luajit"
|
|
|
|
-- LÖVE exposes `love` as a mutable table: games assign their callbacks onto
|
|
-- it (love.wheelmoved, love.run, ...), so it is a regular global, not
|
|
-- read-only -- otherwise every callback registration reads as a violation.
|
|
globals = { "love" }
|
|
|
|
read_globals = {
|
|
"jit",
|
|
-- LuaJIT 2.1 ships table.unpack even though the bare 5.1 `table` std lacks
|
|
-- it; without this, every `table.unpack` reads as an undefined field.
|
|
table = { fields = { "unpack" } },
|
|
}
|
|
|
|
-- Vendored/native trees and the test suites have their own conventions.
|
|
exclude_files = {
|
|
"mobile/",
|
|
"tests/",
|
|
"tools/save-editor/",
|
|
}
|
|
|
|
ignore = {
|
|
"212", -- unused argument -- self/dt kept for a shared method signature
|
|
"213", -- unused loop variable -- `for _, v in` where only v is wanted
|
|
"421", -- shadowing a local -- deliberate re-use in a few tight scopes
|
|
"431", -- shadowing an upvalue
|
|
"432", -- shadowing an argument
|
|
"542", -- empty if branch -- documented fall-throughs, not gaps
|
|
"631", -- line is too long
|
|
}
|