diff --git a/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx b/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx index 4fd9c7f03e..c18644ec64 100644 --- a/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx +++ b/Utilities/ClangTidyModule/StringConcatenationUseCmstrcatCheck.cxx @@ -126,6 +126,10 @@ void StringConcatenationUseCmstrcatCheck::check( void StringConcatenationUseCmstrcatCheck::issueCorrection( ExprChain const& Chain, MatchFinder::MatchResult const& Result) { + if (Chain.second.size() < 2) { + return; + } + std::vector FixIts; CXXOperatorCallExpr const* ExprNode; std::vector::const_iterator It = 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 dd1e6c4e89..39773172dd 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-fixit.cxx @@ -14,20 +14,18 @@ std::string concat; // Correction needed void test1() { - concat = cmStrCat(a, b); - concat = cmStrCat(a, " and this is a string literal"); - concat = cmStrCat(a, 'O'); - concat = cmStrCat("This is a string literal", b); - concat = cmStrCat('O', a); concat = cmStrCat(a, " and this is a string literal", 'O', b); - concat = cmStrCat(concat, b); - concat = cmStrCat(concat, " and this is a string literal"); - concat = cmStrCat(concat, 'o'); + concat = cmStrCat(concat, a, a); + concat = cmStrCat(concat, " and this is a string literal", a); + concat = cmStrCat(concat, b, 'o', a); concat = cmStrCat(concat, b, " and this is a string literal ", 'o', b); + if (true) + concat = cmStrCat(concat, a, b); + std::pair p; - concat = cmStrCat(p.first, p.second); + concat = cmStrCat(p.first, p.second, a); } // No correction needed @@ -37,4 +35,17 @@ void test2() a = "This is a string literal"; a = 'X'; cmStrCat(a, b); + + concat = a + b; + concat = a + " and this is a string literal"; + concat = a + 'O'; + concat = "This is a string literal" + b; + concat = 'O' + a; + concat += b; + + std::pair p; + concat = p.first + p.second; + + if (true) + concat += a; } 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 749ad45bf6..7db54b24b7 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat-stdout.txt @@ -1,124 +1,95 @@ cmake-string-concatenation-use-cmstrcat.cxx:17:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 17 | concat = a + b; - | ^ ~ - | 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 - 17 | concat = a + b; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:17:17: note: FIX-IT applied suggested code changes - 17 | concat = a + b; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:18:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 18 | concat = a + " and this is a string literal"; - | ^ ~ - | 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 - 18 | concat = a + " and this is a string literal"; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:18:47: note: FIX-IT applied suggested code changes - 18 | concat = a + " and this is a string literal"; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:19:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 19 | concat = a + 'O'; - | ^ ~ - | cmStrCat( , ) -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 - 19 | concat = a + 'O'; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:19:19: note: FIX-IT applied suggested code changes - 19 | concat = a + 'O'; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:20:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 20 | concat = "This is a string literal" + b; - | ^ ~ - | cmStrCat( , ) -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 - 20 | concat = "This is a string literal" + b; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:20:42: note: FIX-IT applied suggested code changes - 20 | concat = "This is a string literal" + b; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 21 | concat = 'O' + a; - | ^ ~ - | cmStrCat( , ) -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 - 21 | concat = 'O' + a; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:21:19: note: FIX-IT applied suggested code changes - 21 | concat = 'O' + a; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:22:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] - 22 | concat = a + " and this is a string literal" + 'O' + b; + 17 | concat = a + " and this is a string literal" + 'O' + b; | ^ ~ ~ ~ | cmStrCat( , , , ) -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 - 22 | concat = a + " and this is a string literal" + 'O' + b; +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 + 17 | concat = a + " and this is a string literal" + 'O' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:22:48: note: FIX-IT applied suggested code changes - 22 | concat = a + " and this is a string literal" + 'O' + b; +cmake-string-concatenation-use-cmstrcat.cxx:17:48: note: FIX-IT applied suggested code changes + 17 | concat = a + " and this is a string literal" + 'O' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:22:54: note: FIX-IT applied suggested code changes - 22 | concat = a + " and this is a string literal" + 'O' + b; +cmake-string-concatenation-use-cmstrcat.cxx:17:54: note: FIX-IT applied suggested code changes + 17 | concat = a + " and this is a string literal" + 'O' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:22:57: note: FIX-IT applied suggested code changes - 22 | concat = a + " and this is a string literal" + 'O' + b; +cmake-string-concatenation-use-cmstrcat.cxx:17:57: note: FIX-IT applied suggested code changes + 17 | concat = a + " and this is a string literal" + 'O' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:24:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] - 24 | concat += b; - | ^~ - | = cmStrCat(concat, ) -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 - 24 | concat += b; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:25:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] - 25 | concat += " and this is a string literal"; - | ^~ - | = cmStrCat(concat, ) -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 - 25 | concat += " and this is a string literal"; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:26:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] - 26 | concat += 'o'; - | ^~ - | = cmStrCat(concat, ) -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 - 26 | concat += 'o'; - | ^ -cmake-string-concatenation-use-cmstrcat.cxx:27:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] - 27 | concat += b + " and this is a string literal " + 'o' + b; +cmake-string-concatenation-use-cmstrcat.cxx:19:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] + 19 | concat += a + a; + | ^~ ~ + | = cmStrCat(concat, , ) +cmake-string-concatenation-use-cmstrcat.cxx:19:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:19:15: note: FIX-IT applied suggested code changes + 19 | concat += a + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:19:18: note: FIX-IT applied suggested code changes + 19 | concat += a + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:20:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] + 20 | concat += " and this is a string literal" + a; + | ^~ ~ + | = cmStrCat(concat, , ) +cmake-string-concatenation-use-cmstrcat.cxx:20:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:20:45: note: FIX-IT applied suggested code changes + 20 | concat += " and this is a string literal" + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:20:48: note: FIX-IT applied suggested code changes + 20 | concat += " and this is a string literal" + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:21:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] + 21 | concat += b + 'o' + a; + | ^~ ~ ~ + | = cmStrCat(concat, , , ) +cmake-string-concatenation-use-cmstrcat.cxx:21:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:21:15: note: FIX-IT applied suggested code changes + 21 | concat += b + 'o' + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:21:21: note: FIX-IT applied suggested code changes + 21 | concat += b + 'o' + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:21:24: note: FIX-IT applied suggested code changes + 21 | concat += b + 'o' + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:22:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] + 22 | concat += b + " and this is a string literal " + 'o' + b; | ^~ ~ ~ ~ | = cmStrCat(concat, , , , ) -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 - 27 | concat += b + " and this is a string literal " + 'o' + b; +cmake-string-concatenation-use-cmstrcat.cxx:22:10: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:22:15: note: FIX-IT applied suggested code changes + 22 | concat += b + " and this is a string literal " + 'o' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:27:50: note: FIX-IT applied suggested code changes - 27 | concat += b + " and this is a string literal " + 'o' + b; +cmake-string-concatenation-use-cmstrcat.cxx:22:50: note: FIX-IT applied suggested code changes + 22 | concat += b + " and this is a string literal " + 'o' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:27:56: note: FIX-IT applied suggested code changes - 27 | concat += b + " and this is a string literal " + 'o' + b; +cmake-string-concatenation-use-cmstrcat.cxx:22:56: note: FIX-IT applied suggested code changes + 22 | concat += b + " and this is a string literal " + 'o' + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:27:59: note: FIX-IT applied suggested code changes - 27 | concat += b + " and this is a string literal " + 'o' + b; +cmake-string-concatenation-use-cmstrcat.cxx:22:59: note: FIX-IT applied suggested code changes + 22 | 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] - 30 | 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 - 30 | concat = p.first + p.second; +cmake-string-concatenation-use-cmstrcat.cxx:25:12: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat] + 25 | concat += a + b; + | ^~ ~ + | = cmStrCat(concat, , ) +cmake-string-concatenation-use-cmstrcat.cxx:25:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:25:17: note: FIX-IT applied suggested code changes + 25 | concat += a + b; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:25:20: note: FIX-IT applied suggested code changes + 25 | concat += a + b; | ^ -cmake-string-concatenation-use-cmstrcat.cxx:30:30: note: FIX-IT applied suggested code changes - 30 | concat = p.first + p.second; - | ^ +cmake-string-concatenation-use-cmstrcat.cxx:28:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat] + 28 | concat = p.first + p.second + a; + | ^ ~ ~ + | cmStrCat( , , ) +cmake-string-concatenation-use-cmstrcat.cxx:28:12: note: FIX-IT applied suggested code changes +cmake-string-concatenation-use-cmstrcat.cxx:28:20: note: FIX-IT applied suggested code changes + 28 | concat = p.first + p.second + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:28:31: note: FIX-IT applied suggested code changes + 28 | concat = p.first + p.second + a; + | ^ +cmake-string-concatenation-use-cmstrcat.cxx:28:34: note: FIX-IT applied suggested code changes + 28 | concat = p.first + p.second + a; + | ^ diff --git a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx index b088ca3f52..c0fe8306d9 100644 --- a/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx +++ b/Utilities/ClangTidyModule/Tests/cmake-string-concatenation-use-cmstrcat.cxx @@ -14,20 +14,18 @@ std::string concat; // Correction needed void test1() { - concat = a + b; - concat = a + " and this is a string literal"; - concat = a + 'O'; - concat = "This is a string literal" + b; - concat = 'O' + a; concat = a + " and this is a string literal" + 'O' + b; - concat += b; - concat += " and this is a string literal"; - concat += 'o'; + concat += a + a; + concat += " and this is a string literal" + a; + concat += b + 'o' + a; concat += b + " and this is a string literal " + 'o' + b; + if (true) + concat += a + b; + std::pair p; - concat = p.first + p.second; + concat = p.first + p.second + a; } // No correction needed @@ -37,4 +35,17 @@ void test2() a = "This is a string literal"; a = 'X'; cmStrCat(a, b); + + concat = a + b; + concat = a + " and this is a string literal"; + concat = a + 'O'; + concat = "This is a string literal" + b; + concat = 'O' + a; + concat += b; + + std::pair p; + concat = p.first + p.second; + + if (true) + concat += a; }