Cursor with defaults, I guess mostly `cursor-small`. Typically I write and adjust function names or signatures and let tab-complete draft the code and propagate refactors.
It does mix up Crystal and Ruby, but the compiler catches it.
That matches my experience, so I guess it may be a decent experience for someone new to the language and a bit more frustrating for someone more experienced on it (like me).
You should keep a log of all the failures and then have an LLM form a patch-doc that fixes the Crystal codegen behavior in context. Your failure rate will go way way down.