40ANTS-CRITIC
40ANTS-CRITIC ASDF System Details
Description: A wrapper around
LISP-CRITICwhich provides a better interface to analyzeASDFsystems and a command-line interface.Licence:
MITAuthor: Alexander Artemenko <svetlyak.40wt@gmail.com>
Homepage: https://40ants.com/40ants-critic/
Source control: GIT
Depends on: 40ants-doc, cl-ppcre, docs-config, eclector, lisp-critic, uiop
Installation
This system can be installed from Ultralisp like this:
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)If you are going to use this utility from a command line, then you might install it using Roswell:
$ ros install 40ants/40ants-critic
Installing from github 40ants/40ants-critic
To load "40ants-critic":
Load 1 ASDF system:
40ants-critic
; Loading "40ants-critic"
; compiling file "/Users/art/.roswell/local-projects/40ants/critic/src/critic.lisp" (written 20 FEB 2022 12:54:52 PM):
; wrote /Users/art/.cache/common-lisp/sbcl-2.1.11-macosx-x64/Users/art/.roswell/local-projects/40ants/critic/src/critic-tmp5GEXGEG5.fasl
; compilation finished in 0:00:00.026
[1/3] System '40ants-critic' found. Loading the system..
[2/3] Processing build-hook..
[3/3] Attempting to install the scripts in roswell/ subdirectory of the system...
Found 1 scripts: lisp-critic
/Users/art/.roswell/bin/lisp-criticAlso, you might use this checker in your CI pipeline on the GitHub.
It might check all pull-requests to ensure the code will remain clean.
To learn more about using it as a part of the GitHub workflow, read
40ants-ci-docs/index::@critic section.
Usage
This wrapper provides a simple way to analyze code of a single ASDF system.
To get some advices, use critique-asdf-system function. Difference between
this function and LISP-CRITIC:CRITIQUE-FILE function is that the latter
outputs all forms from the file even if there is no any advices.
critique-asdf-system has IGNORE and WHITELIST keyword parameters. The
arguments can be a list of strings. Each string should be a code
shown in the square brackets in the critique output. IGNORE arguments will
be ignored, while WHITELIST arguments will be the only results. You can
only supply either IGNORE or WHITELIST, not both.
(critique-asdf-system :lisp-critic :ignore '("let*-single"))
(critique-asdf-system :lisp-critic :whitelist '("let*-single" "needless-shiftf"))Also, critique-asdf-system returns a number of found problems which is useful
for CI pipelines. For example, lisp-critic script uses this number to report
that the unix command was failed:
lisp-critic reblocks-text-editor
#P"/Users/art/projects/lisp/zibaldone/src/utils/text.lisp"
**********************************************************************
(DEFUN REMOVE-HTML-TAGS (HTML-STRING)
(LET* ((RESULT
(CL-PPCRE:REGEX-REPLACE-ALL "<[^>]+>" HTML-STRING "")))
(IF (STRING= RESULT +ZERO-WIDTH-SPACE+)
RESULT
(CL-PPCRE:REGEX-REPLACE-ALL +ZERO-WIDTH-SPACE+ RESULT ""))))
----------------------------------------------------------------------
[let*-single]: There's no need for LET* here. Use LET unless you can't.
----------------------------------------------------------------------You can ignore all let*-single warnings by adding --ignore 'let*-single'
command line option or put a special comment before the top-level form:
You can ignore all let*-single warnings by adding --ignore 'let*-single'
lisp-critic --ignore 'let*-single' lisp-criticor ignore all if-no-else and needless-shiftf warnings by adding
lisp-critic --ignore 'if-no-else,needless-shiftf' lisp-criticin the command line. Alternatively you can use the short version -i
instead of --ignore.
You can whitelist let*-single warnings by adding --whitelist 'let*-single'
lisp-critic --whitelist 'let*-single' lisp-criticor whitelist if-no-else and needless-shiftf warnings by adding
lisp-critic --whitelist 'if-no-else,needless-shiftf' lisp-criticin the command line. Alternatively you can use the short version -w
instead of --whitelist.
lisp-critic -w 'let*-single' lisp-critic
lisp-critic -w 'if-no-else,needless-shiftf' lisp-criticTo ignore a top-level-form, you can put a special comment before:
;; ignore-critiques: let*-single
(defun remove-html-tags (html-string)
(let* ((result
...Such comment can enumerate a multiple comma-separated critiques names.
API
Outputs advices on how given ASDF system can be improved.
This function analyzes all lisp files of the given system and
outputs advices on how code might be improved.
NAME argument should be a string or symbol designator of ASDF system.
IGNORE argument can be a list of string. Each string should be a code
shown in the square brackets in the critique output.
WHITELIST argument can be a list of string. Each string should be a code
shown in the square brackets in the critique output.
Only IGNORE or WHITELIST can be used. Not both at the same time.
OUT argument is optional. It should be an output stream to write
advices to.
Result of the function is number of found problems.