I ran into the same thing building a semantic diff for a DSL compiler — text diff would report noise on every whitespace or reorder change, but the meaningful question is "which fields changed type, which statements were added or removed." Once you're operating on the AST the signal-to-noise ratio is completely different.
Mine is token based: https://replicated.wiki/blog/img/difflet.png
The set of git tools itself, very much in development: https://github.com/gritzko/git-dogs