PiotrZSL added a comment.
Consider extending this check to suport also std::ends, maybe name it
performance-avoid-endl-ends.
================
Comment at: clang-tools-extra/clang-tidy/performance/DontUseEndlCheck.cpp:26
+ callee(cxxMethodDecl(ofClass(
+ hasAnyName("::std::basic_ostream", "::std::basic_iostream")))),
+ hasDescendant(
----------------
unnecessary limit... (in my project we use custom stream class for logging).
```
Finder->addMatcher(cxxOperatorCallExpr(unless(isExpansionInSystemHeader()),
hasOverloadedOperatorName("<<"),
unless(isMacroExpansion()),
hasRHS(ignoringImplicit(declRefExpr(to(namedDecl(hasAnyName("endl",
"ends")).bind("decl"))).bind("expr")))
```
something like this should be sufficient...
If you do not plan to remove restriction for basic_ostream, make it
configurable.
And other problem is that some << operators does not need to be methods, they
can be functions, in such case you may run into issues, but you could just read
of type from expr... instead processing argument, or class.
Like ```cxxOperatorCallExpr(hasType(references(cxxRecordDecl(....```
================
Comment at: clang-tools-extra/clang-tidy/performance/DontUseEndlCheck.cpp:44
+ Diag << FixItHint::CreateReplacement(
+ CharSourceRange::getCharRange(EndlCall->getSourceRange()), "'\\n'");
+}
----------------
AMS21 wrote:
> This doesn't quite work and I'm not sure why or what would work. Any help
> would be appreciated.
>
> Report for this like
> ```cpp
> std::cout << std::endl;
> ```
> looks like this:
> ```
> std::cout << std::endl;
> ^~~~~
> '\n'
> ```
>
> So the start location is correct but the end is not.
Use getTokenRange
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148318/new/
https://reviews.llvm.org/D148318
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits