71 lines
3.1 KiB
EmacsLisp
71 lines
3.1 KiB
EmacsLisp
;;; flycheck-guile --- Checker for guile using guild -*- lexical-binding: t; -*-
|
|
|
|
;; NOTE: This checker was initially borrowed from guile-studio:
|
|
;; https://git.elephly.net/software/guile-studio.git
|
|
|
|
(defvar flycheck-guile-warnings
|
|
'(;"unsupported-warning" ; warn about unknown warning types
|
|
"unused-variable" ; report unused variables
|
|
"unused-toplevel" ; report unused local top-level variables
|
|
;"shadowed-toplevel" ; report shadowed top-level variables
|
|
"unbound-variable" ; report possibly unbound variables
|
|
"macro-use-before-definition" ; report possibly mis-use of macros before they are defined
|
|
"arity-mismatch" ; report procedure arity mismatches (wrong number of arguments)
|
|
"duplicate-case-datum" ; report a duplicate datum in a case expression
|
|
"bad-case-datum" ; report a case datum that cannot be meaningfully compared using `eqv?'
|
|
"format" ; report wrong number of arguments to `format'
|
|
)
|
|
"A list of warnings to enable for `guild compile'.
|
|
|
|
The value of this variable is a list of strings, where each string names a
|
|
supported warning type.
|
|
|
|
The list of supported warning types can be found by running
|
|
`guild compile -W help'.")
|
|
|
|
(flycheck-define-checker guile
|
|
"A Guile syntax checker using `guild compile'."
|
|
:command ("guild" "compile" "--to=cps"
|
|
(option-list "-W" flycheck-guile-warnings)
|
|
(option-list "-L" geiser-guile-load-path list expand-file-name)
|
|
source)
|
|
:predicate
|
|
(lambda ()
|
|
(and (boundp 'geiser-impl--implementation)
|
|
(eq geiser-impl--implementation 'guile)))
|
|
:verify
|
|
(lambda (checker)
|
|
(let ((geiser-impl (bound-and-true-p geiser-impl--implementation)))
|
|
(list
|
|
(flycheck-verification-result-new
|
|
:label "Geiser Implementation"
|
|
:message (cond
|
|
((eq geiser-impl 'guile) "Guile")
|
|
(geiser-impl (format "Other: %s" geiser-impl))
|
|
(t "Geiser not active"))
|
|
:face (cond
|
|
((or (eq geiser-impl 'guile)) 'success)
|
|
(t '(bold error)))))))
|
|
:error-patterns
|
|
((warning
|
|
line-start
|
|
(file-name) ":" line ":" column ": warning:" (message) line-end)
|
|
(error
|
|
line-start
|
|
"ice-9/boot-9.scm:" (+ digit) ":" (+ digit) ":" (+ (any space "\n"))
|
|
"In procedure raise-exception:" (+ (any space "\n"))
|
|
"In procedure " (id (+ (not ":"))) ":" (+ (any space "\n"))
|
|
(file-name) ":" line ":" column ":" (message (+? anything)) (* space) string-end)
|
|
(error
|
|
line-start
|
|
"ice-9/boot-9.scm:" (+ digit) ":" (+ digit) ":" (+ (any space "\n"))
|
|
"In procedure raise-exception:" (+ (any space "\n"))
|
|
(id (+ (not ":"))) ":" (+ (any space "\n"))
|
|
(file-name) ":" line ":" column ":" (message (+? anything)) (* space) string-end)
|
|
(error
|
|
line-start
|
|
(file-name) ":" line ":" column ":" (message (+? anything)) (* space) string-end)
|
|
)
|
|
:modes (scheme-mode geiser-mode))
|
|
|
|
(add-to-list 'flycheck-checkers 'guile)
|