// the find
mgechev/revive
🔥 ~6x faster, stricter, configurable, extensible, and beautiful drop-in replacement for golint
revive is a Go linter that started as a faster, configurable replacement for golint and has since grown into a full static analysis framework with ~100 rules. It's aimed at Go teams that find golangci-lint's revive integration sufficient for CI but want more control over which rules fire and at what severity.
The per-rule configuration is genuinely good — you can set severity, arguments, and file-level excludes per rule in one TOML file, which beats golint's all-or-nothing approach. The extensibility story is real: implementing a custom rule is just satisfying a two-method interface, and the revivelib package lets you embed the engine in your own tooling without forking. Rule coverage has grown well beyond golint — things like datarace spotting, defer gotcha detection, cognitive complexity limits, and enforce-map-style are rules you'd otherwise need separate tools for. The comment directive system (`//revive:disable:cyclomatic High complexity score but easy to understand`) with optional enforcement that you *must* document why you're disabling is a nice touch most linters skip.
The 'typed' rules — the ones that actually need type information — have a known breakage on GitHub Actions and trimpath builds due to GOROOT/GOPATH resolution; this is a real gap that's been open since at least issue #1277 with no clean fix. Custom formatters can't be loaded as plugins on anything other than Linux (and even there it's broken), so if you need a custom output format you're either forking or re-implementing the CLI. The docs are long but thin on nuance: the rule descriptions tell you *what* a rule does but rarely why you'd want it or what false-positive rate to expect. golangci-lint is the dominant way most teams consume revive, which means you're often debugging two layers of configuration TOML that interact in non-obvious ways.