Just rewriting #jinja python code generator to #libCST . So far it takes more code to do the same but it's much simpler to do the hard stuff, especially when there's a lot of conditionals.
Take annotated class field: can be generic or not, can have annotated metadata or not. Annotated metadata may be name (class or function), generic or not, or a call, and so on.
A big nuisance of libCST is indentation - it belongs to the previous node, even though we tend to think as part of the next one. For an indented language it's rather weird design decision.