-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[clang][diagnostics] Refactor "warn_doc_api_container_decl_mismatch" to use enum_select #146433
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang][diagnostics] Refactor "warn_doc_api_container_decl_mismatch" to use enum_select #146433
Conversation
|
@llvm/pr-subscribers-clang Author: Ayokunle Amodu (ayokunle321) ChangesRelated: #123121 This patch refactors the Full diff: https://github.com/llvm/llvm-project/pull/146433.diff 2 Files Affected:
diff --git a/clang/include/clang/Basic/DiagnosticCommentKinds.td b/clang/include/clang/Basic/DiagnosticCommentKinds.td
index 1122ace3027d8..ded3eabc5a5ff 100644
--- a/clang/include/clang/Basic/DiagnosticCommentKinds.td
+++ b/clang/include/clang/Basic/DiagnosticCommentKinds.td
@@ -84,7 +84,8 @@ def warn_doc_function_method_decl_mismatch : Warning<
InGroup<Documentation>, DefaultIgnore;
def warn_doc_api_container_decl_mismatch : Warning<
- "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' "
+ "'%select{\\|@}0%enum_select<DeclContainerKind>{%Class{class}"
+ "|%Interface{interface}|%Protocol{protocol}|%Struct{struct}|%Union{union}}1' "
"command should not be used in a comment attached to a "
"non-%select{class|interface|protocol|struct|union}2 declaration">,
InGroup<Documentation>, DefaultIgnore;
diff --git a/clang/lib/AST/CommentSema.cpp b/clang/lib/AST/CommentSema.cpp
index fb745fc560d2f..bd227f852435e 100644
--- a/clang/lib/AST/CommentSema.cpp
+++ b/clang/lib/AST/CommentSema.cpp
@@ -132,39 +132,42 @@ void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {
const CommandInfo *Info = Traits.getCommandInfo(Comment->getCommandID());
if (!Info->IsRecordLikeDeclarationCommand)
return;
- unsigned DiagSelect;
+ std::optional<unsigned> DiagSelect;
switch (Comment->getCommandID()) {
case CommandTraits::KCI_class:
- DiagSelect =
- (!isClassOrStructOrTagTypedefDecl() && !isClassTemplateDecl()) ? 1
- : 0;
+ if (!isClassOrStructOrTagTypedefDecl() && !isClassTemplateDecl())
+ DiagSelect = diag::DeclContainerKind::Class;
+
// Allow @class command on @interface declarations.
// FIXME. Currently, \class and @class are indistinguishable. So,
// \class is also allowed on an @interface declaration
if (DiagSelect && Comment->getCommandMarker() && isObjCInterfaceDecl())
- DiagSelect = 0;
+ DiagSelect = std::nullopt;
break;
case CommandTraits::KCI_interface:
- DiagSelect = !isObjCInterfaceDecl() ? 2 : 0;
+ if (!isObjCInterfaceDecl())
+ DiagSelect = diag::DeclContainerKind::Interface;
break;
case CommandTraits::KCI_protocol:
- DiagSelect = !isObjCProtocolDecl() ? 3 : 0;
+ if (!isObjCProtocolDecl())
+ DiagSelect = diag::DeclContainerKind::Protocol;
break;
case CommandTraits::KCI_struct:
- DiagSelect = !isClassOrStructOrTagTypedefDecl() ? 4 : 0;
+ if (!isClassOrStructOrTagTypedefDecl())
+ DiagSelect = diag::DeclContainerKind::Struct;
break;
case CommandTraits::KCI_union:
- DiagSelect = !isUnionDecl() ? 5 : 0;
+ if (!isUnionDecl())
+ DiagSelect = diag::DeclContainerKind::Union;
break;
default:
- DiagSelect = 0;
+ DiagSelect = std::nullopt;
break;
}
if (DiagSelect)
Diag(Comment->getLocation(), diag::warn_doc_api_container_decl_mismatch)
- << Comment->getCommandMarker()
- << (DiagSelect-1) << (DiagSelect-1)
- << Comment->getSourceRange();
+ << Comment->getCommandMarker() << (*DiagSelect) << (*DiagSelect)
+ << Comment->getSourceRange();
}
void Sema::checkContainerDecl(const BlockCommandComment *Comment) {
|
|
|
cor3ntin
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks. will you need us to merge that for you?
Yes please |
|
Can we merge this with private email address? |
Community policy is to have public email addresses: https://llvm.org/docs/DeveloperPolicy.html#email-addresses |
14104ff to
6df6bf4
Compare
|
I reset head by 1 and committed with a public email. Is it good now? @cor3ntin @zwuis @erichkeane |
Related: #123121
This patch refactors the
warn_doc_api_container_decl_mismatchdiagnostic to use enum_select instead of select. This gets rid of magic numbers and improves readability in the caller site.