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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits