I am confused by the fact that when people use ODS to define a new Op, the following code is real common.
def Toy_Op<string name, list<Trait> traits = [] >:
Op<Toy_Dialect, name, !listconcat<traits, [Toy_Interface]>>{}
I guss that it dose’nt matter if it’s a real trait type when tablegen generate Op declaraction.