[clang-tidy] Ignore blank spaces between cast's ")" and its sub expr.

Summary:
Before the change:

`auto i = (Enum) 5;` => `auto i = static_cast<Enum>( 5);`

After the change:

`auto i = (Enum) 5;` => `auto i = static_cast<Enum>(5);`

Reviewers: alexfh

Reviewed By: alexfh

Subscribers: JDevlieghere, xazax.hun, cfe-commits

Differential Revision: https://reviews.llvm.org/D31700

llvm-svn: 307812
This commit is contained in:
Haojian Wu 2017-07-12 16:38:59 +00:00
parent 6f92d2dd24
commit a9a1b403bc
2 changed files with 31 additions and 5 deletions

View File

@ -58,10 +58,9 @@ static bool pointedUnqualifiedTypesAreEqual(QualType T1, QualType T2) {
void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) { void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
const auto *CastExpr = Result.Nodes.getNodeAs<CStyleCastExpr>("cast"); const auto *CastExpr = Result.Nodes.getNodeAs<CStyleCastExpr>("cast");
auto ParenRange = CharSourceRange::getTokenRange(CastExpr->getLParenLoc(),
CastExpr->getRParenLoc());
// Ignore casts in macros. // Ignore casts in macros.
if (ParenRange.getBegin().isMacroID() || ParenRange.getEnd().isMacroID()) if (CastExpr->getExprLoc().isMacroID())
return; return;
// Casting to void is an idiomatic way to mute "unused variable" and similar // Casting to void is an idiomatic way to mute "unused variable" and similar
@ -82,6 +81,9 @@ void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
const QualType SourceType = SourceTypeAsWritten.getCanonicalType(); const QualType SourceType = SourceTypeAsWritten.getCanonicalType();
const QualType DestType = DestTypeAsWritten.getCanonicalType(); const QualType DestType = DestTypeAsWritten.getCanonicalType();
auto ReplaceRange = CharSourceRange::getCharRange(
CastExpr->getLParenLoc(), CastExpr->getSubExprAsWritten()->getLocStart());
bool FnToFnCast = bool FnToFnCast =
isFunction(SourceTypeAsWritten) && isFunction(DestTypeAsWritten); isFunction(SourceTypeAsWritten) && isFunction(DestTypeAsWritten);
@ -92,7 +94,7 @@ void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
// pointer/reference types. // pointer/reference types.
if (SourceTypeAsWritten == DestTypeAsWritten) { if (SourceTypeAsWritten == DestTypeAsWritten) {
diag(CastExpr->getLocStart(), "redundant cast to the same type") diag(CastExpr->getLocStart(), "redundant cast to the same type")
<< FixItHint::CreateRemoval(ParenRange); << FixItHint::CreateRemoval(ReplaceRange);
return; return;
} }
} }
@ -136,7 +138,7 @@ void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
getLangOpts()), getLangOpts()),
")"); ")");
} }
Diag << FixItHint::CreateReplacement(ParenRange, CastText); Diag << FixItHint::CreateReplacement(ReplaceRange, CastText);
}; };
auto ReplaceWithNamedCast = [&](StringRef CastType) { auto ReplaceWithNamedCast = [&](StringRef CastType) {
Diag << CastType; Diag << CastType;

View File

@ -85,6 +85,22 @@ void f(int a, double b, const char *cpc, const void *cpv, X *pX) {
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [ // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [
// CHECK-FIXES: b1 = (const int&)b; // CHECK-FIXES: b1 = (const int&)b;
b1 = (int) b;
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast {{.*}}
// CHECK-FIXES: b1 = static_cast<int>(b);
b1 = (int) b;
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast {{.*}}
// CHECK-FIXES: b1 = static_cast<int>(b);
b1 = (int) (b);
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast {{.*}}
// CHECK-FIXES: b1 = static_cast<int>(b);
b1 = (int) (b);
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast {{.*}}
// CHECK-FIXES: b1 = static_cast<int>(b);
Y *pB = (Y*)pX; Y *pB = (Y*)pX;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [ // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [
Y &rB = (Y&)*pX; Y &rB = (Y&)*pX;
@ -114,6 +130,14 @@ void f(int a, double b, const char *cpc, const void *cpv, X *pX) {
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant cast to the same type // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant cast to the same type
// CHECK-FIXES: {{^}} e = e; // CHECK-FIXES: {{^}} e = e;
e = (Enum) e;
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant cast to the same type
// CHECK-FIXES: {{^}} e = e;
e = (Enum) (e);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant cast to the same type
// CHECK-FIXES: {{^}} e = (e);
static const int kZero = 0; static const int kZero = 0;
(int)kZero; (int)kZero;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: redundant cast to the same type // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: redundant cast to the same type