Or see the list of project sponsors.
Documentation | 🥺 |
Docstrings | 🥺 |
Tests | 😀 |
Examples | 😀 |
RepositoryActivity | 🥺 |
CI | 😀 |
A few weeks ago, I've reviewed the sblint
- a tool to check code quality in terms of warnings from the SBCL compiler. Lisp-critic
is another kind of beast. It checks the code quality in terms of common patterns and idioms.
For example, it outputs warning when there is only one subform inside the progn
or if you are setting global variables in the function definition:
POFTHEDAY> (lisp-critic:critique
(progn
(format t "Hello World!")))
----------------------------------
Why do you think you need a PROGN?
----------------------------------
POFTHEDAY> (lisp-critic:critique
(defun start-server ()
(setf *server*
(listen-on :port 8080))
(values)))
----------------------------------------------------
GLOBALS!! Don't use global variables, i.e., *SERVER*
----------------------------------------------------
Lisp-critic
operates on patterns. There are 109 built-in patterns and you can define more:
POFTHEDAY> (length (lisp-critic:get-pattern-names))
109
POFTHEDAY> (rutils:take 10
(lisp-critic:get-pattern-names))
(LISP-CRITIC::?-FOR-PREDICATE
LISP-CRITIC::ADD-ZERO
LISP-CRITIC::APPEND-LIST-LIST
LISP-CRITIC::APPEND-LIST-LOOP
LISP-CRITIC::APPEND-LIST-RECURSION
LISP-CRITIC::APPEND-LIST2-LIST
LISP-CRITIC::APPLY-FOR-FUNCALL
LISP-CRITIC::CAR-CDR
LISP-CRITIC::CONCATENATE-LIST
LISP-CRITIC::COND->OR)
Also, you can use lisp-critic:critique-file
to analyze all top-level forms in a file.
It would be nice to:
declaim
could be used for this purpose?Probably adding an integration with SLIME or SLY would also be a good idea.
This way you'll be able to hit some shortcuts to receive recommendations from Lisp Critic, or it could happen when you are evaluating a top-level form.