mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
clang-tidy: not suggest cmStrCat for short appends and concats
We rely, that standard library have really effective `+=` and `+` operators for `std::string` with any paired arguments: `std::string`, `const char *` and `char`. So, that change just blocks `c = a + b` and `c += a` replacements, but still replaces the `c = a + b + d` and `c += a + b` and longer (with more `+` operators).
This commit is contained in:
@@ -126,6 +126,10 @@ void StringConcatenationUseCmstrcatCheck::check(
|
|||||||
void StringConcatenationUseCmstrcatCheck::issueCorrection(
|
void StringConcatenationUseCmstrcatCheck::issueCorrection(
|
||||||
ExprChain const& Chain, MatchFinder::MatchResult const& Result)
|
ExprChain const& Chain, MatchFinder::MatchResult const& Result)
|
||||||
{
|
{
|
||||||
|
if (Chain.second.size() < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<FixItHint> FixIts;
|
std::vector<FixItHint> FixIts;
|
||||||
CXXOperatorCallExpr const* ExprNode;
|
CXXOperatorCallExpr const* ExprNode;
|
||||||
std::vector<clang::CXXOperatorCallExpr const*>::const_iterator It =
|
std::vector<clang::CXXOperatorCallExpr const*>::const_iterator It =
|
||||||
|
|||||||
@@ -14,20 +14,18 @@ std::string concat;
|
|||||||
// Correction needed
|
// Correction needed
|
||||||
void test1()
|
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(a, " and this is a string literal", 'O', b);
|
||||||
|
|
||||||
concat = cmStrCat(concat, b);
|
concat = cmStrCat(concat, a, a);
|
||||||
concat = cmStrCat(concat, " and this is a string literal");
|
concat = cmStrCat(concat, " and this is a string literal", a);
|
||||||
concat = cmStrCat(concat, 'o');
|
concat = cmStrCat(concat, b, 'o', a);
|
||||||
concat = cmStrCat(concat, b, " and this is a string literal ", 'o', b);
|
concat = cmStrCat(concat, b, " and this is a string literal ", 'o', b);
|
||||||
|
|
||||||
|
if (true)
|
||||||
|
concat = cmStrCat(concat, a, b);
|
||||||
|
|
||||||
std::pair<std::string, std::string> p;
|
std::pair<std::string, std::string> p;
|
||||||
concat = cmStrCat(p.first, p.second);
|
concat = cmStrCat(p.first, p.second, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
// No correction needed
|
// No correction needed
|
||||||
@@ -37,4 +35,17 @@ void test2()
|
|||||||
a = "This is a string literal";
|
a = "This is a string literal";
|
||||||
a = 'X';
|
a = 'X';
|
||||||
cmStrCat(a, b);
|
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<std::string, std::string> p;
|
||||||
|
concat = p.first + p.second;
|
||||||
|
|
||||||
|
if (true)
|
||||||
|
concat += a;
|
||||||
}
|
}
|
||||||
|
|||||||
+81
-110
@@ -1,124 +1,95 @@
|
|||||||
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:17:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat]
|
||||||
17 | concat = a + b;
|
17 | concat = a + " and this is a string literal" + 'O' + 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;
|
|
||||||
| ^ ~ ~ ~
|
| ^ ~ ~ ~
|
||||||
| cmStrCat( , , , )
|
| cmStrCat( , , , )
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:22:12: 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:22:14: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:17:14: note: FIX-IT applied suggested code changes
|
||||||
22 | concat = a + " and this is a string literal" + 'O' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:17:48: note: FIX-IT applied suggested code changes
|
||||||
22 | concat = a + " and this is a string literal" + 'O' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:17:54: note: FIX-IT applied suggested code changes
|
||||||
22 | concat = a + " and this is a string literal" + 'O' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:17:57: note: FIX-IT applied suggested code changes
|
||||||
22 | concat = a + " and this is a string literal" + 'O' + b;
|
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]
|
cmake-string-concatenation-use-cmstrcat.cxx:19:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat]
|
||||||
24 | concat += b;
|
19 | concat += a + a;
|
||||||
| ^~
|
| ^~ ~
|
||||||
| = cmStrCat(concat, )
|
| = cmStrCat(concat, , )
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:24:10: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:19:10: note: FIX-IT applied suggested code changes
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:24:14: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:19:15: note: FIX-IT applied suggested code changes
|
||||||
24 | concat += b;
|
19 | concat += a + a;
|
||||||
| ^
|
| ^
|
||||||
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:19:18: note: FIX-IT applied suggested code changes
|
||||||
25 | concat += " and this is a string literal";
|
19 | concat += a + a;
|
||||||
| ^~
|
| ^
|
||||||
| = cmStrCat(concat, )
|
cmake-string-concatenation-use-cmstrcat.cxx:20:10: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat]
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:25:10: note: FIX-IT applied suggested code changes
|
20 | concat += " and this is a string literal" + a;
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:25:44: note: FIX-IT applied suggested code changes
|
| ^~ ~
|
||||||
25 | concat += " and this is a string literal";
|
| = cmStrCat(concat, , )
|
||||||
| ^
|
cmake-string-concatenation-use-cmstrcat.cxx:20:10: note: FIX-IT applied suggested code changes
|
||||||
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:20:45: note: FIX-IT applied suggested code changes
|
||||||
26 | concat += 'o';
|
20 | concat += " and this is a string literal" + a;
|
||||||
| ^~
|
| ^
|
||||||
| = cmStrCat(concat, )
|
cmake-string-concatenation-use-cmstrcat.cxx:20:48: note: FIX-IT applied suggested code changes
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:26:10: note: FIX-IT applied suggested code changes
|
20 | concat += " and this is a string literal" + a;
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:26:16: note: FIX-IT applied suggested code changes
|
| ^
|
||||||
26 | concat += 'o';
|
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;
|
||||||
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;
|
| = 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, , , , )
|
| = cmStrCat(concat, , , , )
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:27:10: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:22:10: note: FIX-IT applied suggested code changes
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:27:15: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:22:15: note: FIX-IT applied suggested code changes
|
||||||
27 | concat += b + " and this is a string literal " + 'o' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:22:50: note: FIX-IT applied suggested code changes
|
||||||
27 | concat += b + " and this is a string literal " + 'o' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:22:56: note: FIX-IT applied suggested code changes
|
||||||
27 | concat += b + " and this is a string literal " + 'o' + b;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:22:59: note: FIX-IT applied suggested code changes
|
||||||
27 | concat += b + " and this is a string literal " + 'o' + b;
|
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]
|
cmake-string-concatenation-use-cmstrcat.cxx:25:12: warning: use cmStrCat() instead of string append [cmake-string-concatenation-use-cmstrcat]
|
||||||
30 | concat = p.first + p.second;
|
25 | concat += a + b;
|
||||||
| ^ ~
|
| ^~ ~
|
||||||
| cmStrCat( , )
|
| = cmStrCat(concat, , )
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:30:12: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:25:12: note: FIX-IT applied suggested code changes
|
||||||
cmake-string-concatenation-use-cmstrcat.cxx:30:20: note: FIX-IT applied suggested code changes
|
cmake-string-concatenation-use-cmstrcat.cxx:25:17: note: FIX-IT applied suggested code changes
|
||||||
30 | concat = p.first + p.second;
|
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
|
cmake-string-concatenation-use-cmstrcat.cxx:28:12: warning: use cmStrCat() instead of string concatenation [cmake-string-concatenation-use-cmstrcat]
|
||||||
30 | concat = p.first + p.second;
|
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;
|
||||||
|
| ^
|
||||||
|
|||||||
@@ -14,20 +14,18 @@ std::string concat;
|
|||||||
// Correction needed
|
// Correction needed
|
||||||
void test1()
|
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 = a + " and this is a string literal" + 'O' + b;
|
||||||
|
|
||||||
concat += b;
|
concat += a + a;
|
||||||
concat += " and this is a string literal";
|
concat += " and this is a string literal" + a;
|
||||||
concat += 'o';
|
concat += b + 'o' + a;
|
||||||
concat += b + " and this is a string literal " + 'o' + b;
|
concat += b + " and this is a string literal " + 'o' + b;
|
||||||
|
|
||||||
|
if (true)
|
||||||
|
concat += a + b;
|
||||||
|
|
||||||
std::pair<std::string, std::string> p;
|
std::pair<std::string, std::string> p;
|
||||||
concat = p.first + p.second;
|
concat = p.first + p.second + a;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No correction needed
|
// No correction needed
|
||||||
@@ -37,4 +35,17 @@ void test2()
|
|||||||
a = "This is a string literal";
|
a = "This is a string literal";
|
||||||
a = 'X';
|
a = 'X';
|
||||||
cmStrCat(a, b);
|
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<std::string, std::string> p;
|
||||||
|
concat = p.first + p.second;
|
||||||
|
|
||||||
|
if (true)
|
||||||
|
concat += a;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user