[clang-tools-extra] Add check 'modernize-use-enum-class' (PR #138282)
Baranov Victor via cfe-commits
cfe-commits at lists.llvm.org
Mon May 5 08:47:27 PDT 2025
================
@@ -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 ");
----------------
vbvictor wrote:
Yes, fix-it _on notes_ are allowed to break code but to my understanding using _notes_ mean "We try to provide you fix its that work most of the time, but there are corner cases that may break your code and we can't do anything about it". But in this case, addiction of `class` keyword without any attempts to fix other code sounds like "We break your code almost everytime".
By breaking I mean that `enum class` values can not be used without that `enum` class name, so any usages of values from transformed `enum` may fail instantly, consider adding `class` in `enum A` in this example https://godbolt.org/z/ajaf1PsM7
https://github.com/llvm/llvm-project/pull/138282
More information about the cfe-commits
mailing list