IMO there are two features which linting tools need before I can start treating them as serious "necessities" on a code base rather than "nice to haves".
lint [cosmetic | medium | serious]
- you
must select one to run the tool, and the rule defaults must be sensible. No "100 character line length" in 'medium'. That's
strictly cosmetic. Serious is for initialized and unused variables and the like - things which you might plausibly say "I'm not unhappy that broke the build because it could have indicated a bug".
lint medium --against=branch
- the linting tool should be able to intelligently compare against a baseline branch and only warn you about issues on code you have actually touched.
I do not agree that the holistic effect of having a code base "normalized" is "through the roof". I think the cost is relatively high while the benefits are relatively low. Right now at work if I run a linter against my code there are about 10,000 "issues" - the top 50 of which are completely cosmetic and I'd be remiss to invest time in fixing them.
I'm not opposed to linters on principle and I do use them, I just think that there's almost always bigger fish to fry.