carlosgalvezp added inline comments.

================
Comment at: clang-tools-extra/clang-tidy/google/AvoidCStyleCastsCheck.cpp:99-106
+  CharSourceRange ReplaceRange;
+  if (isa<CStyleCastExpr>(CastExpr))
+    ReplaceRange = CharSourceRange::getCharRange(
+        CastExpr->getLParenLoc(),
+        CastExpr->getSubExprAsWritten()->getBeginLoc());
+  else if (isa<CXXFunctionalCastExpr>(CastExpr))
+    ReplaceRange = CharSourceRange::getCharRange(CastExpr->getBeginLoc(),
----------------
salman-javed-nz wrote:
> The majority of `checkExpr()`'s contents are common to both types, 
> `CStyleCastExpr` and `CXXFunctionalCastExpr`.
> Only the `ReplaceRange = CharSourceRange::getCharRange...` and the 
> `DestTypeString = Lexer::getSourceText...` parts change depending on the Expr 
> type.
> 
> What about breaking those two assignments out into their own functions, 
> rather than templating the entire `checkExpr()` function?
> 
> For example, (note: untested code)
> 
> ```lang=cpp
> clang::CharSourceRange GetReplaceRange(const CStyleCastExpr *CastExpr) {
>   return CharSourceRange::getCharRange(
>       CastExpr->getLParenLoc(), 
> CastExpr->getSubExprAsWritten()->getBeginLoc());
> }
> 
> clang::CharSourceRange GetReplaceRange(const CXXFunctionalCastExpr *CastExpr) 
> {
>   return CharSourceRange::getCharRange(CastExpr->getBeginLoc(),
>                                        CastExpr->getLParenLoc());
> }
> 
> ...
> 
> CharSourceRange ReplaceRange =
>       isa<CStyleCastExpr>(CastExpr)
>           ? GetReplaceRange(dyn_cast<const CStyleCastExpr>(CastExpr))
>           : GetReplaceRange(dyn_cast<const CXXFunctionalCastExpr>(CastExpr));
> ```
> 
> Would something like that work?
Thanks for the suggestion, much cleaner! I've made `CastExpr` become a 
`ExplicitCastExpr` instead (which is common base to both cast classes) to be 
able to handle only one object.


================
Comment at: 
clang-tools-extra/test/clang-tidy/checkers/google-readability-casting.cpp:335
+  const char *str = "foo";
+  auto s = S(str);
+}
----------------
salman-javed-nz wrote:
> Is a test to check `new int(x)` worth including? I see that the cpplint guys 
> explicitly filter it out of their results.
Sure, even though I think technically it's not a cast. At least it's not shown 
as such in the AST.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114427/new/

https://reviews.llvm.org/D114427

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to