Bogdanp / racket-review

A linter for Racket.
BSD 3-Clause "New" or "Revised" License
41 stars 4 forks source link
linter racket

racket-review

GitHub Actions status

a screenshot of racket-review being used inside Emacs

racket-review performs surface-level linting of individual Racket modules with the intent of finding issues as quickly as it can. It does not expand the programs it lints, so there may be cases where it is wrong, but, in practice, it performs reasonably well on #lang racket{,/base} programs.

It currently reports the following issues:

Setup

$ raco pkg install review

Usage

$ raco review filename.rkt

To tell the linter to ignore an entire module, add a comment like

#|review: ignore|#

to the source file. To tell it to ignore a particular line, end that line with one of the following comments:

;; noqa
;; lint: ignore
;; review: ignore

Adding Custom Rules

Note: this protocol is currently experimental and subject to change. If you use it in your own packages, please let me know.

A package may declare its own linting rules by providing a review-exts definition in its top-level info.rkt file. Each review-exts definition is a list of triples, where the first value is an absolute module path, the second is the name of a predicate procedure provided by that module, and the third is the name of a linting procedure provided by that module.

Both the predicate and the linting procedure must take a single syntax object as argument. The linting procedure is called on a piece of syntax whenever the predicate procedure returns #t.

For an example, see this package.

Emacs/flycheck support

Add the following snippet to your init.el to define a Flycheck checker for racket-review:

(flycheck-define-checker racket-review
  "check racket source code using racket-review"
  :command ("raco" "review" source)
  :error-patterns
  ((error line-start (file-name) ":" line ":" column ":error:" (message) line-end)
   (warning line-start (file-name) ":" line ":" column ":warning:" (message) line-end))
  :modes racket-mode)

(add-to-list 'flycheck-checkers 'racket-review)

Or install the Emacs plugin from the elisp directory:

(cd elisp && make install)

Prior work

License

racket-review is licensed under the 3-Clause BSD license.