Writing small linters using mini parsers: https://blog.acolyer.org/2016/05/31/how-to-build-static-checking-systems-using-orders-of-magnitude-less-code/ (interesting approach, but they must have corner cases)
miniblog.
Related Posts
It's well known that certain compiler optimisations matter way more than others (e.g. inlining).
Is there a similar principle for linters? I find red squiggles under unused/undefined variables the single most useful check.
I used to think gradual type systems (mypy, flow, typed racket) were the sweet spot. They're super-powered linters that help with refactoring, but you can run the code at any point.
In a statically typed PL, you need the whole codebase to be well typed before you can run tests.
GitHub is adding an API that will allow linters to automatically fix your code for you: https://blog.github.com/changelog/2018-05-23-request-actions-on-checks/
I suppose it's the next logical step, but it will be lovely when I can apply compiler fixits from the comfort of a PR :)
