As someone who does IDEs for the living, I am extremely excited about this approach to meta programming. It feels like it solves most important of the problems macros are typically used for, more elegantly (access to static types, not just syntax), and without macro problems (IDEs just work, you can step into generated code, etc).
And the solution, at its core, is very simple and pragmatic: first class support for the code generation in the build system, such that libraries you use can run codegen on your code. That’s how you get “tooling for free”: this mostly exists outside of the language definition, so simple tools might be completely agnostic of the codegen aspects, and still get correct results. Although you do need some notion of partial classes or equivalent on the language side.