There are a couple of other options:
elint-file, and friends which are built-in to Emacs. elint mainly looks for undefined variables, misspellings, and wrong function calls. I found it of little use, since the byte compiler nowadays catches most (if not all) of these errors too. It's also painfully slow since it analyses all dependent libraries as well, and even worse, regularly chokes on macros. For instance, applying elint on code that makes heavy use of
pcase delivers an awful lot of false positives.
- flycheck-package provides some nice lints beyond the byte compiler and checkdoc. MELPA maintainers use it to check submitted packages as far as I know, and I myself use it in my packages to protect against formatting flaws in package headers.
Other than that, though, there's nothing on the linting table for Emacs Lisp. Particularly, we miss linters that catch for unidiomatic code, wrong API use, missing things, etc. For instance, there's nothing that tells you that you should replace references to
~/.emacs.d in your Elisp code with
user-emacs-directory or even better
locate-user-emacs-file, or warns about
defcustoms with missing