Using clang-tidy to fix compiler errors


clang-tidy can not only be used to improve code, but also to make it work in
the first place.

Taking an example from

    template<typename T, typename U, int N>
    struct X {
      void f(T* t) {
        t->f0<U>(); // expected-error{{use 'template' keyword to treat 'f0'
as a dependent template name}}

Clang-tidy is capable of fixing that error.
However it's not possible to fix it without running any other checks?!
e.g. this works fine: clang-tidy --checks="*" test.cpp -fix-errors
but it performs all sorts of other changes.

The best approach seems to be to pick some checker that doesn't find
anything in order to fix only errors ?!

Alexander Lanin

I suggest filing a bug in the tracker.



Hi Alexander,

clang-tidy runs the frontend first, so if the frontend detects errors it
will report them as well.

There is a feature in the frontend itself that tries to fix bugs, e.g.
s"foo.method()"/"foo->method()" fixits can be emitted.

I think that is closer to what you want and might be a better place to
request that feature.

Best Regards

Done, thanks.


I think the usual way to do this is to disable checks and then select the ones you need. It’s not a bug, it’s a feature.


I think there’s some confusion here.

I think Alex doesn’t want to run any checks - just wants the clang diagnostic fixits applied - they can get this behavior by running clang-tidy with some checks enabled, but there’s no “run clang-tidy with no checks, just with clangs actual errors/fixits”.

I think maybe Alex should be running clang -fixit ? That might be how you get “clang-tidy without any tidy checks” behavior.