Skip to content

Commit 1b0fcf1

Browse files
authored
[clang-tidy][NFC] Replace usages of DeclSpec::TQ with Qualifiers::TQ (#113295)
This patch improves, but doens't fully resolve the layering violation, which stems from relying on Sema. There's one function that needs to convert enumerator to a string (`buildQualifier` in `FixItHintUtils.cpp`), but `Qualifiers::TQ` doesn't offer such function. Even more, the set of enumerators is not complete compared to `DeclSpec::TQ`, so I'm afraid that this would be a functional change.
1 parent 8536c2e commit 1b0fcf1

File tree

7 files changed

+24
-21
lines changed

7 files changed

+24
-21
lines changed

clang-tools-extra/clang-tidy/misc/ConstCorrectnessCheck.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,25 +172,25 @@ void ConstCorrectnessCheck::check(const MatchFinder::MatchResult &Result) {
172172

173173
using namespace utils::fixit;
174174
if (VC == VariableCategory::Value && TransformValues) {
175-
Diag << addQualifierToVarDecl(*Variable, *Result.Context,
176-
DeclSpec::TQ_const, QualifierTarget::Value,
175+
Diag << addQualifierToVarDecl(*Variable, *Result.Context, Qualifiers::Const,
176+
QualifierTarget::Value,
177177
QualifierPolicy::Right);
178178
// FIXME: Add '{}' for default initialization if no user-defined default
179179
// constructor exists and there is no initializer.
180180
return;
181181
}
182182

183183
if (VC == VariableCategory::Reference && TransformReferences) {
184-
Diag << addQualifierToVarDecl(*Variable, *Result.Context,
185-
DeclSpec::TQ_const, QualifierTarget::Value,
184+
Diag << addQualifierToVarDecl(*Variable, *Result.Context, Qualifiers::Const,
185+
QualifierTarget::Value,
186186
QualifierPolicy::Right);
187187
return;
188188
}
189189

190190
if (VC == VariableCategory::Pointer) {
191191
if (WarnPointersAsValues && TransformPointersAsValues) {
192192
Diag << addQualifierToVarDecl(*Variable, *Result.Context,
193-
DeclSpec::TQ_const, QualifierTarget::Value,
193+
Qualifiers::Const, QualifierTarget::Value,
194194
QualifierPolicy::Right);
195195
}
196196
return;

clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ bool ForRangeCopyCheck::handleConstValueCopy(const VarDecl &LoopVar,
9191
<< utils::fixit::changeVarDeclToReference(LoopVar, Context);
9292
if (!LoopVar.getType().isConstQualified()) {
9393
if (std::optional<FixItHint> Fix = utils::fixit::addQualifierToVarDecl(
94-
LoopVar, Context, DeclSpec::TQ::TQ_const))
94+
LoopVar, Context, Qualifiers::Const))
9595
Diagnostic << *Fix;
9696
}
9797
return true;
@@ -129,7 +129,7 @@ bool ForRangeCopyCheck::handleCopyIsOnlyConstReferenced(
129129
"making it a const reference");
130130

131131
if (std::optional<FixItHint> Fix = utils::fixit::addQualifierToVarDecl(
132-
LoopVar, Context, DeclSpec::TQ::TQ_const))
132+
LoopVar, Context, Qualifiers::Const))
133133
Diag << *Fix << utils::fixit::changeVarDeclToReference(LoopVar, Context);
134134

135135
return true;

clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void recordFixes(const VarDecl &Var, ASTContext &Context,
3636
Diagnostic << utils::fixit::changeVarDeclToReference(Var, Context);
3737
if (!Var.getType().isLocalConstQualified()) {
3838
if (std::optional<FixItHint> Fix = utils::fixit::addQualifierToVarDecl(
39-
Var, Context, DeclSpec::TQ::TQ_const))
39+
Var, Context, Qualifiers::Const))
4040
Diagnostic << *Fix;
4141
}
4242
}

clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ void UnnecessaryValueParamCheck::handleConstRefFix(const FunctionDecl &Function,
172172
// declaration.
173173
if (!CurrentParam.getType().getCanonicalType().isConstQualified()) {
174174
if (std::optional<FixItHint> Fix = utils::fixit::addQualifierToVarDecl(
175-
CurrentParam, Context, DeclSpec::TQ::TQ_const))
175+
CurrentParam, Context, Qualifiers::Const))
176176
Diag << *Fix;
177177
}
178178
}

clang-tools-extra/clang-tidy/utils/FixItHintUtils.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "clang/AST/ASTContext.h"
1212
#include "clang/AST/ExprCXX.h"
1313
#include "clang/AST/Type.h"
14+
#include "clang/Sema/DeclSpec.h"
1415
#include "clang/Tooling/FixIt.h"
1516
#include <optional>
1617

@@ -71,15 +72,17 @@ static std::optional<FixItHint> fixIfNotDangerous(SourceLocation Loc,
7172

7273
// Build a string that can be emitted as FixIt with either a space in before
7374
// or after the qualifier, either ' const' or 'const '.
74-
static std::string buildQualifier(DeclSpec::TQ Qualifier,
75+
static std::string buildQualifier(Qualifiers::TQ Qualifier,
7576
bool WhitespaceBefore = false) {
7677
if (WhitespaceBefore)
77-
return (llvm::Twine(' ') + DeclSpec::getSpecifierName(Qualifier)).str();
78-
return (llvm::Twine(DeclSpec::getSpecifierName(Qualifier)) + " ").str();
78+
return (llvm::Twine(' ') + Qualifiers::fromCVRMask(Qualifier).getAsString())
79+
.str();
80+
return (llvm::Twine(Qualifiers::fromCVRMask(Qualifier).getAsString()) + " ")
81+
.str();
7982
}
8083

8184
static std::optional<FixItHint> changeValue(const VarDecl &Var,
82-
DeclSpec::TQ Qualifier,
85+
Qualifiers::TQ Qualifier,
8386
QualifierTarget QualTarget,
8487
QualifierPolicy QualPolicy,
8588
const ASTContext &Context) {
@@ -99,7 +102,7 @@ static std::optional<FixItHint> changeValue(const VarDecl &Var,
99102
}
100103

101104
static std::optional<FixItHint> changePointerItself(const VarDecl &Var,
102-
DeclSpec::TQ Qualifier,
105+
Qualifiers::TQ Qualifier,
103106
const ASTContext &Context) {
104107
if (locDangerous(Var.getLocation()))
105108
return std::nullopt;
@@ -112,7 +115,7 @@ static std::optional<FixItHint> changePointerItself(const VarDecl &Var,
112115
}
113116

114117
static std::optional<FixItHint>
115-
changePointer(const VarDecl &Var, DeclSpec::TQ Qualifier, const Type *Pointee,
118+
changePointer(const VarDecl &Var, Qualifiers::TQ Qualifier, const Type *Pointee,
116119
QualifierTarget QualTarget, QualifierPolicy QualPolicy,
117120
const ASTContext &Context) {
118121
// The pointer itself shall be marked as `const`. This is always to the right
@@ -163,7 +166,7 @@ changePointer(const VarDecl &Var, DeclSpec::TQ Qualifier, const Type *Pointee,
163166
}
164167

165168
static std::optional<FixItHint>
166-
changeReferencee(const VarDecl &Var, DeclSpec::TQ Qualifier, QualType Pointee,
169+
changeReferencee(const VarDecl &Var, Qualifiers::TQ Qualifier, QualType Pointee,
167170
QualifierTarget QualTarget, QualifierPolicy QualPolicy,
168171
const ASTContext &Context) {
169172
if (QualPolicy == QualifierPolicy::Left && isValueType(Pointee))
@@ -183,7 +186,7 @@ changeReferencee(const VarDecl &Var, DeclSpec::TQ Qualifier, QualType Pointee,
183186

184187
std::optional<FixItHint> addQualifierToVarDecl(const VarDecl &Var,
185188
const ASTContext &Context,
186-
DeclSpec::TQ Qualifier,
189+
Qualifiers::TQ Qualifier,
187190
QualifierTarget QualTarget,
188191
QualifierPolicy QualPolicy) {
189192
assert((QualPolicy == QualifierPolicy::Left ||

clang-tools-extra/clang-tidy/utils/FixItHintUtils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
#include "clang/AST/ASTContext.h"
1313
#include "clang/AST/Decl.h"
14-
#include "clang/Sema/DeclSpec.h"
14+
#include "clang/AST/Type.h"
1515
#include <optional>
1616

1717
namespace clang::tidy::utils::fixit {
@@ -41,7 +41,7 @@ enum class QualifierTarget {
4141
/// Requires that `Var` is isolated in written code like in `int foo = 42;`.
4242
std::optional<FixItHint>
4343
addQualifierToVarDecl(const VarDecl &Var, const ASTContext &Context,
44-
DeclSpec::TQ Qualifier,
44+
Qualifiers::TQ Qualifier,
4545
QualifierTarget QualTarget = QualifierTarget::Pointee,
4646
QualifierPolicy QualPolicy = QualifierPolicy::Left);
4747

clang-tools-extra/unittests/clang-tidy/AddConstTest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ class ConstTransform : public ClangTidyCheck {
2727
void check(const MatchFinder::MatchResult &Result) override {
2828
const auto *D = Result.Nodes.getNodeAs<VarDecl>("var");
2929
using utils::fixit::addQualifierToVarDecl;
30-
std::optional<FixItHint> Fix = addQualifierToVarDecl(
31-
*D, *Result.Context, DeclSpec::TQ::TQ_const, CT, CP);
30+
std::optional<FixItHint> Fix =
31+
addQualifierToVarDecl(*D, *Result.Context, Qualifiers::Const, CT, CP);
3232
auto Diag = diag(D->getBeginLoc(), "doing const transformation");
3333
if (Fix)
3434
Diag << *Fix;

0 commit comments

Comments
 (0)