The main problem with libclang is actually that it puts another abstraction on top of the AST that nobody really had time to maintain.
That's not made better by the amount of work changing libclang requires just due to its backwards compatibility promises.