M lib/beaker.scm => lib/beaker.scm +8 -4
@@ 85,9 85,6 @@
(x** (loop (cdr x) (- (sub1 w) (pp-length x*)) d)))
(cons x* x**))))))
- (define (quasiquote? x)
- (and (pair? x) (eq? (car x) 'quasiquote)))
-
(define (expression-contains? x pred)
(cond ((pred x) #t)
((vector? x)
@@ 110,6 107,13 @@
(vector? x)
(##sys#srfi-4-vector? x)))
+ (define (quoted-constant? x)
+ (and (pair? x)
+ (or (compiler-compare (car x) 'scheme 'quote)
+ (compiler-compare (car x) 'scheme 'quasiquote))
+ (or (constant? (cadr x))
+ (quoted-constant? (cadr x)))))
+
(define (symbol-namespace sym)
(and-let* ((str (symbol->string sym))
(sep (string-index str #\#)))
@@ 152,7 156,7 @@
(warn 'missing-else x)))
(define (analyse-quote x)
- (when (constant? (cadr x))
+ (when (quoted-constant? x)
(warn 'unnecessary-quote x)))
(define (analyse-quasiquote x)
M tests/examples.scm => tests/examples.scm +7 -0
@@ 33,3 33,10 @@
;; https://todo.sr.ht/~evhan/beaker/5
(module foo ())
+
+(quote #t) ;> ("examples.scm:37" warning unnecessary-quote)
+(quote "foo") ;> ("examples.scm:38" warning unnecessary-quote)
+(quote (quote #t)) ;> ("examples.scm:39" warning unnecessary-quote)
+(quote (quasiquote #t)) ;> ("examples.scm:40" warning unnecessary-quote)
+(quote foo)
+(quote (quote foo))