Linters and codeformatters are my favourite kinds of tool because they promote consistency, uncover complexity, and save teams from nonsense issues.
The other thing about a linter is that it seems like one of those problems that seems easy on the surface but has a potentially huge amount of complexity as soon as you think about it. This RubyConf by Kyle d’Oliveira discusses RuboCop, the most popular linter for Ruby.
Kyle briefly talks about how his organisation uses RuboCop, then does a short dive into how RuboCop implements its rules using abstract syntax trees, depth first searching, and other techniques. This talk is perfect if you feel like diving deep, just for a little bit.