Implementing clang-tidy check to prefer scoped enumerations


As my first contribution to LLVM I would like to implement a clang-tidy check that enforces the usage of scoped enumerations based on the C++ Core Guidelines. I already submitted a review and now I am working on the changes based on the feedback.

I think I addressed most of the feedback, but I have some difficulties to figure out when an unscoped enum cannot be changed to scoped enumerations. A good example for this is already mentioned in the review: when any of the decls or the usages (except the ones that are properly qualified by the enum name) are in a macro.

I think another example for the unfixable case might be if any of the decls or the usages are in a source from where the diagnostics are emitted, i.e.: filtered out with header-filter or line-filter arguments. Can I somehow extract that information within a derived class of ClangTidyCheck? I think the ClangTidiyCheck::Context member variable holds that information, but it doesn’t expose that member nor the necessary information to the derived classes.

To sum up, my questions are:

  1. Can I somehow check from a derived ClangTidyCheck if the current location is going to be filtered out?

  2. If the answer for the previous question is no, then how should I handle this situation?

  3. Do you know any other case where the decls/usages shouldn’t be fixed?

Thanks for the help,