Ah, interesting. I completely abandoned diff style updates in favour of AST substitution, but that was only possible because my tradeoffs are different to yours.
I'm building a bot that's building itself, so it doesn't have to support large legacy code bases with different languages.