Existing macro systems force programmers to make a choice between clarity of specification and robustness. If they choose clarity, they must forgo validating significant parts of the specification and thus produce low-quality language extensions. If they choose robustness, they must write in a style that mingles the implementation with the specification and therefore obscures the latter. This paper introduces a new language for writing macros. With the new macro system, programmers naturally write robust language extensions using easy-to-understand specifications. The system translates these specifications into validators that detect misuses--including violations of context-sensitive constraints-and automatically synthesize appropriate feedback, eliminating the need for ad hoc validation code. Categories and Subject Descriptors D.3.3 [Programming Languages]: Language Constructs and Features General Terms Design, Languages