I'm trying to improve the error messages for some macros and it seems
like in some cases syntax-parse cannot give a good error message and
just returns "bad syntax". The main issue I'm dealing with is when the
use does not have as many subforms as the macro requires. I think I
understand why it is hard for syntax-parse to automatically generate
the error message because it doesn't want to make error messages be
made from compound parts. But I'm not sure as a macro writer how I
tell syntax-parse the info it doesn't want to synthesize so that I can
have nice error messages when there are not enough arguments. Is this
easy to do/even possible?

My Program:

#lang racket

(require syntax/parse)

(define (parser stx)
  (with-handlers ([exn:fail? exn-message])
    (syntax-parse stx
      [(_ arg1:id arg2:id) "Matched"])))

(parser #'(foo a1)) ;; Bad error message and I want to change this
(parser #'(foo a1 a2))
(parser #'(foo a1 a2 a3))


(define (parser2 stx)
  (with-handlers ([exn:fail? exn-message])
    (syntax-parse stx
      [(_ arg1:id . arg2:id) "Matched"])))

(parser2 #'(foo a1))

Output:
/Users/endobson/tmp/tmp2.rkt:10:10: foo: bad syntax\n  in: (foo a1)"
"Matched"
"/Users/endobson/tmp/tmp2.rkt:12:21: foo: unexpected term\n  at: a3\n
in: (foo a1 a2 a3)"
"/Users/endobson/tmp/tmp2.rkt:20:11: foo: expected identifier\n  at:
()\n  in: (foo a1)"
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to