[clang][diagnostics] Refactor warn_doc_function_method_decl_mismatch to use enum_select (#181769)

Related: https://github.com/llvm/llvm-project/issues/123121

This patch refactors the `warn_doc_function_method_decl_mismatch`
diagnostic to use `enum_select` instead of `select`. This gets rid of
magic numbers in its caller and improves readability.
This commit is contained in:
Ayokunle Amodu 2026-02-21 20:42:41 -07:00 committed by GitHub
parent d5b9417497
commit 76af74004e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 13 deletions

View File

@ -77,7 +77,9 @@ def warn_doc_param_not_attached_to_a_function_decl : Warning<
InGroup<Documentation>, DefaultIgnore;
def warn_doc_function_method_decl_mismatch : Warning<
"'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' "
"'%select{\\|@}0%enum_select<CallableKind>{"
"%Function{function}|%FunctionGroup{functiongroup}|"
"%Method{method}|%MethodGroup{methodgroup}|%Callback{callback}}1' "
"command should be used in a comment attached to "
"%select{a function|a function|an Objective-C method|an Objective-C method|"
"a pointer to function}2 declaration">,

View File

@ -100,32 +100,30 @@ void Sema::checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment) {
if (!Info->IsFunctionDeclarationCommand)
return;
unsigned DiagSelect;
std::optional<unsigned> DiagSelect;
switch (Comment->getCommandID()) {
case CommandTraits::KCI_function:
DiagSelect = (!isAnyFunctionDecl() && !isFunctionTemplateDecl())? 1 : 0;
if (!isAnyFunctionDecl() && !isFunctionTemplateDecl())
DiagSelect = diag::CallableKind::Function;
break;
case CommandTraits::KCI_functiongroup:
DiagSelect = (!isAnyFunctionDecl() && !isFunctionTemplateDecl())? 2 : 0;
if (!isAnyFunctionDecl() && !isFunctionTemplateDecl())
DiagSelect = diag::CallableKind::FunctionGroup;
break;
case CommandTraits::KCI_method:
DiagSelect = !isObjCMethodDecl() ? 3 : 0;
DiagSelect = diag::CallableKind::Method;
break;
case CommandTraits::KCI_methodgroup:
DiagSelect = !isObjCMethodDecl() ? 4 : 0;
DiagSelect = diag::CallableKind::MethodGroup;
break;
case CommandTraits::KCI_callback:
DiagSelect = !isFunctionPointerVarDecl() ? 5 : 0;
break;
default:
DiagSelect = 0;
DiagSelect = diag::CallableKind::Callback;
break;
}
if (DiagSelect)
Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch)
<< Comment->getCommandMarker()
<< (DiagSelect-1) << (DiagSelect-1)
<< Comment->getSourceRange();
<< Comment->getCommandMarker() << (*DiagSelect) << (*DiagSelect)
<< Comment->getSourceRange();
}
void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {