Shamefile – Enforce docs for linter bypasses
Forces teams to document NOLINT suppressions before tech debt accumulates.
A linter for undocumented linter warnings.
Forces devs to justify NOLINT comments before tech debt goes silent.
Backend developers, tech leads, open source maintainers
eslint · clippy · sonarqube
- WTF are you doin' bro? - "You are right! ^^ ..."
And at that moment I realise I've just irrevocably, regrettably lost 2 minutes of my life. Shame on you, Claude!
That's why I dedicated 2 months of my life to automate the thing (you know, I'm a programmer, hopeless case).
Humans were actually the original NOLINT-slappers, AI just does it at scale now. So I built a linter for linting other linter warnings to fight my colleagues' laziness and my own (mostly). Maybe you just caught a lag from the number of "lint" words but the idea is simple. Imagine a yaml file. Now add an entry to it:
- location: ./the-file.rs token: '// NOLINT' why: 'the reason'
Do you know what this NOLINT is? You don't? It's a suppression that you added 2 years ago. You don't remember? That's why you need shamefile. :)Whoever's fault it is. Yours or the linter's. It doesn't matter. Document it, make sure you understand the code, get a review of your new entry in shamefile.yaml and let CI verify it. With shamefile your CI won't let any undocumented linter warning pass. Anymore. Instead of educating the business on why docs are important, you'll say: "quality tools won't let my code pass".
I've observed a noticeable difference in AI agents' behaviour. During the pre-commit phase, reasoning models can "rethink" adding a new shame entry. Not so easy now Claude, huh?
This is an early useable stage tool. We've been using it in prod for almost a month with my team and I'm using it in all my 3 OSS projects. Looking for feedback and contributors (adding new languages = good first issue ;))
Repo: https://github.com/BKDDFS/shamefile
Please tell me whether you'd use it or what I should change/add to make it usable for you. Also vote: shame me or shamefile sync, personality or matching the binary name?
Forces teams to document NOLINT suppressions before tech debt accumulates.
Lints repo structure and JSONPath values where ESLint and Clippy stop.
ESLint for system design: catch architecture violations in CI before code review becomes bottleneck.
Clean-room Rust implementation runs 20x faster than ShellCheck with compatible output.
Yet another Lua linter when selene and luacheck already exist.
import-linter with automatic config generation and LLM fix suggestions.