s-lint
Ensure code quality using Luacheck linting and StyLua formatting. Covers common warnings, style rules, and auto-formatting. Use when checking code quality, fixing style issues, or preparing code for r
Files1
View on GitHubSKILL.md.claude/skills/s-lint/SKILL.md
GitHubLinting WoW Addons
Guidance for code quality and formatting. Call the MCP tools directly (using-mechanic).
Related Commands
- c-lint - Lint and format workflow
- c-review - Full code review (includes lint)
- c-audit - Security, complexity, deprecation and dead-code analysis (not part of lint)
MCP Tools
| Task | MCP Tool |
|---|---|
| Lint | addon.lint(addon="MyAddon") (read-only) |
| Check formatting only | addon.format(addon="MyAddon", check=true) (read-only in effect) |
| Format (rewrites files) | addon.format(addon="MyAddon") |
addon.lint and addon.format run in the addon folder, so the addon's .luacheckrc / stylua.toml apply. If the tools are missing, tools.status reports it (mech setup installs them for the user). Security, complexity and dead-code analysis live in the analyzers: s-audit, s-clean.
Workflow
addon.format(check=true)to see what would change; thenaddon.formatif the diff is only style.addon.lint; fix real problems (undefined globals are usually typos or missingread_globals).- Re-run
addon.lintto confirm. Do not reformat whole files you are not otherwise changing.
Common Luacheck warnings
| Code | Meaning | Fix |
|---|---|---|
| W111 | Setting undefined global | Fix the typo or declare it in globals |
| W112 | Mutating undefined global | Same as W111 |
| W113 | Accessing undefined global | Check the API exists; add to read_globals |
| W211 | Unused local variable | Remove it or prefix with _ |
| W212 | Unused argument | Prefix with _ (for example _event) |
| W213 | Unused loop variable | Prefix with _ |
| W311 | Value assigned but never used | Remove the assignment or use the value |
| W431 | Shadowing upvalue | Rename the local |
Configuration in this repository
- The root
.luacheckrcis the central config:std = "lua51",max_line_length = 120,codes = true, plus the WoW, Ace3 and FenUI globals. CI runsluacheck "!Mechanic/" "Mechanic/" --config .luacheckrc. _TemplateAddon/TemplateAddon/.luacheckrcis a standalone per-addon starting point (std = "lua51",max_line_length = 160, ignores W212/W213,Libs/excluded). Per-addon configs list their ownglobals(addon table, SavedVariables) andread_globals(WoW API, libraries).std = "lua51"is required: addon Lua is 5.1, sogoto,bit32and//are errors.- There is no
stylua.tomlin this repository, so StyLua uses its defaults, which match this code style: tabs, 4-wide, 120 columns,AutoPreferDoublequotes,call_parentheses = "Always", Unix line endings. Add astylua.tomlto an addon only to deviate from them. Libs/(third-party and vendored libraries) must stay excluded from both tools.
Best practices
- Lint before commit.
- Keep
read_globalshonest: add only APIs you actually call, and prefer modernC_APIs (api-patterns). - Prefix intentionally unused variables with
_. - Treat lint as necessary, not sufficient: it proves nothing about in-game behaviour.