File tree Expand file tree Collapse file tree 2 files changed +12
-11
lines changed Expand file tree Collapse file tree 2 files changed +12
-11
lines changed Original file line number Diff line number Diff line change 12
12
13
13
#include " llvm/ADT/StringExtras.h"
14
14
#include " llvm/ADT/SmallVector.h"
15
+ #include " llvm/Support/Regex.h"
15
16
#include " llvm/Support/raw_ostream.h"
16
17
#include < cctype>
17
18
@@ -96,18 +97,13 @@ std::string llvm::convertToSnakeFromCamelCase(StringRef input) {
96
97
if (input.empty ())
97
98
return " " ;
98
99
99
- std::string snakeCase;
100
- snakeCase.reserve (input.size ());
101
- for (char c : input) {
102
- if (!std::isupper (c)) {
103
- snakeCase.push_back (c);
104
- continue ;
105
- }
106
-
107
- if (!snakeCase.empty () && snakeCase.back () != ' _' )
108
- snakeCase.push_back (' _' );
109
- snakeCase.push_back (llvm::toLower (c));
100
+ std::string snakeCase = input.str ();
101
+ for (int i = 0 ; i < 10 ; ++i) {
102
+ snakeCase = llvm::Regex (" ([A-Z]+)([A-Z][a-z])" ).sub (" \\ 1_\\ 2" , snakeCase);
103
+ snakeCase = llvm::Regex (" ([a-z0-9])([A-Z])" ).sub (" \\ 1_\\ 2" , snakeCase);
110
104
}
105
+ std::transform (snakeCase.begin (), snakeCase.end (), snakeCase.begin (),
106
+ [](unsigned char c) { return std::tolower (c); });
111
107
return snakeCase;
112
108
}
113
109
Original file line number Diff line number Diff line change @@ -184,6 +184,11 @@ TEST(StringExtrasTest, ConvertToSnakeFromCamelCase) {
184
184
185
185
testConvertToSnakeCase (" OpName" , " op_name" );
186
186
testConvertToSnakeCase (" opName" , " op_name" );
187
+ testConvertToSnakeCase (" OPName" , " op_name" );
188
+ testConvertToSnakeCase (" opNAME" , " op_name" );
189
+ testConvertToSnakeCase (" opNAMe" , " op_na_me" );
190
+ testConvertToSnakeCase (" opnameE" , " opname_e" );
191
+ testConvertToSnakeCase (" OPNameOPName" , " op_name_op_name" );
187
192
testConvertToSnakeCase (" _OpName" , " _op_name" );
188
193
testConvertToSnakeCase (" Op_Name" , " op_name" );
189
194
testConvertToSnakeCase (" " , " " );
You can’t perform that action at this time.
0 commit comments