diff --git a/collects/racket/private/misc.rkt b/collects/racket/private/misc.rkt index 26aba931c1..938da11c82 100644 --- a/collects/racket/private/misc.rkt +++ b/collects/racket/private/misc.rkt @@ -26,10 +26,10 @@ ([(sexpr) (syntax->datum user-stx)] [(msg) (if (pair? sexpr) - (format "~.s did not match pattern ~.s" - sexpr (cons (car sexpr) 'pattern)) + (format "use does not match pattern: ~.s" + (cons (car sexpr) 'pattern)) (if (symbol? sexpr) - (format "must be used in a pattern ~.s" + (format "use does not match pattern: ~.s" (cons sexpr 'pattern)) (error 'internal-error "something bad happened")))]) diff --git a/collects/scribblings/reference/stx-patterns.scrbl b/collects/scribblings/reference/stx-patterns.scrbl index e3641fe452..62b29fdb90 100644 --- a/collects/scribblings/reference/stx-patterns.scrbl +++ b/collects/scribblings/reference/stx-patterns.scrbl @@ -469,7 +469,9 @@ Equivalent to (syntax-rules () [(id . pattern) template])) ] -} + +but with syntax errors potentially phrased in terms of +@racket[pattern].} @defidform[...]{ diff --git a/collects/tests/racket/stx.rktl b/collects/tests/racket/stx.rktl index ebb92f87cc..deb76e0020 100644 --- a/collects/tests/racket/stx.rktl +++ b/collects/tests/racket/stx.rktl @@ -1456,6 +1456,27 @@ (get-output-bytes s)) exn:fail?) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; define-syntax-rule + +(define-syntax-rule (a-rule-pattern x [y z]) + (list 'x 'y 'z)) + +(test '(1 2 3) 'a-rule (a-rule-pattern 1 [2 3])) +(test '(1 2 3) 'a-rule (a-rule-pattern 1 . ([2 3]))) +(test '(1 2 3) 'a-rule (a-rule-pattern 1 [2 . (3)])) +(syntax-test #'a-rule-pattern) +(syntax-test #'(a-rule-pattern 1 2 3)) +(syntax-test #'(a-rule-pattern 1 . 2)) +(syntax-test #'(a-rule-pattern . 1)) +(syntax-test #'(a-rule-pattern 1 [2 3] 4)) + +(let ([no-match? (lambda (exn) + (regexp-match? #"does not match pattern" (exn-message exn)))]) + (error-test #'a-rule-pattern no-match?) + (error-test #'(a-rule-pattern) no-match?) + (error-test #'(a-rule-pattern 1) no-match?)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs)