|
12 | 12 |
|
13 | 13 | #include "llvm/ADT/StringExtras.h"
|
14 | 14 | #include "llvm/ADT/SmallVector.h"
|
15 |
| -#include "llvm/Support/ErrorHandling.h" |
16 |
| -#include "llvm/Support/Regex.h" |
17 | 15 | #include "llvm/Support/raw_ostream.h"
|
18 | 16 | #include <cctype>
|
19 | 17 |
|
@@ -98,26 +96,21 @@ std::string llvm::convertToSnakeFromCamelCase(StringRef input) {
|
98 | 96 | if (input.empty())
|
99 | 97 | return "";
|
100 | 98 |
|
101 |
| - llvm::Regex trailingCap = llvm::Regex("([A-Z]+)([A-Z][a-z])"); |
102 |
| - llvm::Regex leadingCap = llvm::Regex("([a-z0-9])([A-Z])"); |
103 |
| - |
104 |
| - std::string curr = input.str(); |
105 |
| - std::string prev = input.str(); |
106 |
| - size_t iters = 0; |
107 |
| - do { |
108 |
| - prev = curr; |
109 |
| - curr = trailingCap.sub("\\1_\\2", prev); |
110 |
| - curr = leadingCap.sub("\\1_\\2", curr); |
111 |
| - } while (curr != prev && ++iters < input.size()); |
112 |
| - |
113 |
| - if (iters == input.size()) |
114 |
| - llvm::report_fatal_error( |
115 |
| - input + Twine(" couldn't be converted to snake case after ") + |
116 |
| - Twine(iters) + Twine("iterations.")); |
117 |
| - |
118 |
| - std::transform(curr.begin(), curr.end(), curr.begin(), |
| 99 | + std::string snakeCase; |
| 100 | + snakeCase.reserve(input.size()); |
| 101 | + auto check = [&input](size_t j, std::function<bool(int)> check) { |
| 102 | + return j < input.size() ? check(input[j]) : false; |
| 103 | + }; |
| 104 | + for (size_t i = 0; i < input.size(); ++i) { |
| 105 | + snakeCase.push_back(input[i]); |
| 106 | + if (check(i, isupper) && check(i + 1, isupper) && check(i + 2, islower)) |
| 107 | + snakeCase.push_back('_'); |
| 108 | + if ((check(i, islower) || check(i, isdigit)) && check(i + 1, isupper)) |
| 109 | + snakeCase.push_back('_'); |
| 110 | + } |
| 111 | + std::transform(snakeCase.begin(), snakeCase.end(), snakeCase.begin(), |
119 | 112 | [](unsigned char c) { return std::tolower(c); });
|
120 |
| - return curr; |
| 113 | + return snakeCase; |
121 | 114 | }
|
122 | 115 |
|
123 | 116 | std::string llvm::convertToCamelFromSnakeCase(StringRef input,
|
|
0 commit comments