================
@@ -0,0 +1,34 @@
+//===--- UseEnumClassCheck.cpp - clang-tidy 
-------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "UseEnumClassCheck.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang::tidy::modernize {
+
+void UseEnumClassCheck::registerMatchers(MatchFinder *Finder) {
+  Finder->addMatcher(
+      traverse(TK_AsIs,
+               enumDecl(unless(isScoped()), unless(hasParent(recordDecl()))))
+          .bind("unscoped_enum"),
+      this);
+}
+
+void UseEnumClassCheck::check(const MatchFinder::MatchResult &Result) {
+  const auto *UnscopedEnum = Result.Nodes.getNodeAs<EnumDecl>("unscoped_enum");
+
+  diag(UnscopedEnum->getLocation(),
+       "enum %0 is unscoped, use enum class instead")
+      << UnscopedEnum;
+  diag(UnscopedEnum->getLocation(), "insert 'class'", DiagnosticIDs::Note)
+      << FixItHint::CreateInsertion(UnscopedEnum->getLocation(), "class ");
----------------
aaronpuchert wrote:

The point is that fix-it hints on notes are not applied automatically, they are 
just suggestions that might require follow-up fixes. But fix-it hints on uses 
sound good to me as well. I've never used `-export-fixes` and 
`clang-apply-replacements` in practice, but it should do the job in this case. 
(Since uses can be in many translation units, we can't apply fixes immediately.)

So I'd agree to drop this or migrate uses as well.

https://github.com/llvm/llvm-project/pull/138282
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to