[PATCH] D31700: [clang-tidy] Ignore blank spaces between cast's ")" and its sub expr.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 12 08:14:05 PDT 2017
hokein updated this revision to Diff 106219.
hokein marked an inline comment as done.
hokein added a comment.
Herald added subscribers: xazax.hun, JDevlieghere.
Support more cases.
https://reviews.llvm.org/D31700
Files:
clang-tidy/google/AvoidCStyleCastsCheck.cpp
test/clang-tidy/google-readability-casting.cpp
Index: test/clang-tidy/google-readability-casting.cpp
===================================================================
--- test/clang-tidy/google-readability-casting.cpp
+++ test/clang-tidy/google-readability-casting.cpp
@@ -85,6 +85,22 @@
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [
// 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;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: {{.*}}; use static_cast/const_cast/reinterpret_cast [
Y &rB = (Y&)*pX;
@@ -114,6 +130,14 @@
// 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;
+
+ e = (Enum) (e);
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: redundant cast to the same type
+ // CHECK-FIXES: {{^}} e = (e);
+
static const int kZero = 0;
(int)kZero;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: redundant cast to the same type
Index: clang-tidy/google/AvoidCStyleCastsCheck.cpp
===================================================================
--- clang-tidy/google/AvoidCStyleCastsCheck.cpp
+++ clang-tidy/google/AvoidCStyleCastsCheck.cpp
@@ -58,10 +58,9 @@
void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
const auto *CastExpr = Result.Nodes.getNodeAs<CStyleCastExpr>("cast");
- auto ParenRange = CharSourceRange::getTokenRange(CastExpr->getLParenLoc(),
- CastExpr->getRParenLoc());
+
// Ignore casts in macros.
- if (ParenRange.getBegin().isMacroID() || ParenRange.getEnd().isMacroID())
+ if (CastExpr->getExprLoc().isMacroID())
return;
// Casting to void is an idiomatic way to mute "unused variable" and similar
@@ -82,6 +81,9 @@
const QualType SourceType = SourceTypeAsWritten.getCanonicalType();
const QualType DestType = DestTypeAsWritten.getCanonicalType();
+ auto ReplaceRange = CharSourceRange::getCharRange(
+ CastExpr->getLParenLoc(), CastExpr->getSubExprAsWritten()->getLocStart());
+
bool FnToFnCast =
isFunction(SourceTypeAsWritten) && isFunction(DestTypeAsWritten);
@@ -92,7 +94,7 @@
// pointer/reference types.
if (SourceTypeAsWritten == DestTypeAsWritten) {
diag(CastExpr->getLocStart(), "redundant cast to the same type")
- << FixItHint::CreateRemoval(ParenRange);
+ << FixItHint::CreateRemoval(ReplaceRange);
return;
}
}
@@ -136,7 +138,7 @@
getLangOpts()),
")");
}
- Diag << FixItHint::CreateReplacement(ParenRange, CastText);
+ Diag << FixItHint::CreateReplacement(ReplaceRange, CastText);
};
auto ReplaceWithNamedCast = [&](StringRef CastType) {
Diag << CastType;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31700.106219.patch
Type: text/x-patch
Size: 3468 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170712/68261483/attachment-0001.bin>
More information about the cfe-commits
mailing list