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