Decorator macros are currently hardcoded to only work with a single decorator:
if (isinstance(tree, ClassDef)
and len(tree.decorator_list) == 1
and type(tree.decorator_list) is Name
and tree.decorator_list.id in module.decorator_registry):
because I was lazy when i was getting it done and just wanted to hack something together. Ideally, we would have proper decorator stacking semantics for our macros, allowing multiple decorator macros or decorator macros mixed with normal decorators.
This is mostly done. There are some unresolved questions about what the semantics should be, like in case classes where the @case macro generates a list of class declarations. If you stack something like
class Cons(x, xs): pass
class Nil(): pass
Should @decorator1 be applied to all of the generated classes? Or should this be disallowed? Anyways, the current behavior disallows this.