From b1366e215e6ba0718cff3873940a5e9e513b709c Mon Sep 17 00:00:00 2001 From: Kyle Edwards Date: Sat, 3 Dec 2022 13:56:56 -0500 Subject: clang-tidy module: fix offset issue with last string concat operand --- .../StringConcatenationUseCmstrcatCheck.cxx | 3 +- ...ake-string-concatenation-use-cmstrcat-fixit.cxx | 4 + ...ke-string-concatenation-use-cmstrcat-stdout.txt | 93 ++++++++++++---------- .../cmake-string-concatenation-use-cmstrcat.cxx | 4 + 4 files changed, 62 insertions(+), 42 deletions(-) (limited to 'Utilities') diff --git a/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx b/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx index df14c83ad9..e282d23d9b 100644 --- a/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx +++ b/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx @@ -156,7 +156,8 @@ void StringConcatenationUseCmstrcatCheck::issueCorrection( ExprNode = *It; StringRef LastToken = Lexer::getSourceText( - CharSourceRange::getTokenRange(ExprNode->getArg(1)->getSourceRange()), + CharSourceRange::getTokenRange( + ExprNode->getArg(1)->getSourceRange().getEnd()), Result.Context->getSourceManager(), Result.Context->getLangOpts()); FixIts.push_back(FixItHint::CreateInsertion( ExprNode->getEndLoc().getLocWithOffset(LastToken.str().size()), ")")); diff --git a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx index 79aecd4ccb..dd1e6c4e89 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx @@ -1,4 +1,5 @@ #include +#include template std::string cmStrCat(Args&&... args) @@ -24,6 +25,9 @@ void test1() concat = cmStrCat(concat, " and this is a string literal"); concat = cmStrCat(concat, 'o'); concat = cmStrCat(concat, b, " and this is a string literal ", 'o', b); + + std::pair p; + concat = cmStrCat(p.first, p.second); } // No correction needed diff --git a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt index 3cfdef82b3..83b8d83d8f 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt @@ -1,113 +1,124 @@ -cmake-string-concatenation-use-cmstrcat.cxx:16:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:17:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = a + b; ^ ~ cmStrCat( , ) -cmake-string-concatenation-use-cmstrcat.cxx:16:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:16:14: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:17:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:17:14: note: FIX-IT applied suggested code changes concat = a + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:16:17: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:17:17: note: FIX-IT applied suggested code changes concat = a + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:17:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:18:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = a + " and this is a string literal"; ^ ~ cmStrCat( , ) -cmake-string-concatenation-use-cmstrcat.cxx:17:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:17:14: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:18:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:18:14: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal"; ^ -cmake-string-concatenation-use-cmstrcat.cxx:17:47: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:18:47: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal"; ^ -cmake-string-concatenation-use-cmstrcat.cxx:18:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:19:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = a + 'O'; ^ ~ cmStrCat( , ) -cmake-string-concatenation-use-cmstrcat.cxx:18:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:18:14: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:19:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:19:14: note: FIX-IT applied suggested code changes concat = a + 'O'; ^ -cmake-string-concatenation-use-cmstrcat.cxx:18:19: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:19:19: note: FIX-IT applied suggested code changes concat = a + 'O'; ^ -cmake-string-concatenation-use-cmstrcat.cxx:19:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:20:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = "This is a string literal" + b; ^ ~ cmStrCat( , ) -cmake-string-concatenation-use-cmstrcat.cxx:19:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:19:39: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:20:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:20:39: note: FIX-IT applied suggested code changes concat = "This is a string literal" + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:19:42: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:20:42: note: FIX-IT applied suggested code changes concat = "This is a string literal" + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:20:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:21:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = 'O' + a; ^ ~ cmStrCat( , ) -cmake-string-concatenation-use-cmstrcat.cxx:20:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:20:16: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:21:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:21:16: note: FIX-IT applied suggested code changes concat = 'O' + a; ^ -cmake-string-concatenation-use-cmstrcat.cxx:20:19: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:21:19: note: FIX-IT applied suggested code changes concat = 'O' + a; ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:22:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] concat = a + " and this is a string literal" + 'O' + b; ^ ~ ~ ~ cmStrCat( , , , ) -cmake-string-concatenation-use-cmstrcat.cxx:21:12: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:21:14: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:14: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal" + 'O' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:48: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:48: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal" + 'O' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:54: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:54: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal" + 'O' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:57: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:57: note: FIX-IT applied suggested code changes concat = a + " and this is a string literal" + 'O' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:23:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:24:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] concat += b; ^~ = cmStrCat(concat, ) -cmake-string-concatenation-use-cmstrcat.cxx:23:10: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:23:14: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:24:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:24:14: note: FIX-IT applied suggested code changes concat += b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:24:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:25:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] concat += " and this is a string literal"; ^~ = cmStrCat(concat, ) -cmake-string-concatenation-use-cmstrcat.cxx:24:10: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:24:44: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:25:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:25:44: note: FIX-IT applied suggested code changes concat += " and this is a string literal"; ^ -cmake-string-concatenation-use-cmstrcat.cxx:25:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:26:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] concat += 'o'; ^~ = cmStrCat(concat, ) -cmake-string-concatenation-use-cmstrcat.cxx:25:10: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:25:16: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:26:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:26:16: note: FIX-IT applied suggested code changes concat += 'o'; ^ -cmake-string-concatenation-use-cmstrcat.cxx:26:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] +cmake-string-concatenation-use-cmstrcat.cxx:27:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] concat += b + " and this is a string literal " + 'o' + b; ^~ ~ ~ ~ = cmStrCat(concat, , , , ) -cmake-string-concatenation-use-cmstrcat.cxx:26:10: note: FIX-IT applied suggested code changes -cmake-string-concatenation-use-cmstrcat.cxx:26:15: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:27:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:27:15: note: FIX-IT applied suggested code changes concat += b + " and this is a string literal " + 'o' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:26:50: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:27:50: note: FIX-IT applied suggested code changes concat += b + " and this is a string literal " + 'o' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:26:56: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:27:56: note: FIX-IT applied suggested code changes concat += b + " and this is a string literal " + 'o' + b; ^ -cmake-string-concatenation-use-cmstrcat.cxx:26:59: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:27:59: note: FIX-IT applied suggested code changes concat += b + " and this is a string literal " + 'o' + b; ^ +cmake-string-concatenation-use-cmstrcat.cxx:30:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] + concat = p.first + p.second; + ^ ~ + cmStrCat( , ) +cmake-string-concatenation-use-cmstrcat.cxx:30:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:30:20: note: FIX-IT applied suggested code changes + concat = p.first + p.second; + ^ +cmake-string-concatenation-use-cmstrcat.cxx:30:30: note: FIX-IT applied suggested code changes + concat = p.first + p.second; + ^ diff --git a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx index 13a20ac2a6..b088ca3f52 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx @@ -1,4 +1,5 @@ #include +#include template std::string cmStrCat(Args&&... args) @@ -24,6 +25,9 @@ void test1() concat += " and this is a string literal"; concat += 'o'; concat += b + " and this is a string literal " + 'o' + b; + + std::pair p; + concat = p.first + p.second; } // No correction needed -- cgit v1.2.1