| Index: tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| diff --git a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| index 9bcf3c120514c75c6b9e53b61888ff7065ee9855..333687fb6cfda3cdeffad20c2e4ce5ee729d13ed 100644
|
| --- a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| +++ b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| @@ -33,6 +33,7 @@
|
| #include "clang/Tooling/Tooling.h"
|
| #include "llvm/Support/CommandLine.h"
|
| #include "llvm/Support/TargetSelect.h"
|
| +#include "tools/clang/rewrite_to_chrome_style/Renamer.h"
|
|
|
| using namespace clang::ast_matchers;
|
| using clang::tooling::CommonOptionsParser;
|
| @@ -50,45 +51,10 @@ constexpr char kBlinkFieldPrefix[] = "m_";
|
| constexpr char kBlinkStaticMemberPrefix[] = "s_";
|
|
|
| bool GetNameForDecl(const clang::FunctionDecl& decl, std::string& name) {
|
| - name = decl.getNameAsString();
|
| - name[0] = clang::toUppercase(name[0]);
|
| + name = IdentifierToCamelCase(decl.getName());
|
| return true;
|
| }
|
|
|
| -// Helper to convert from a camelCaseName to camel_case_name. It uses some
|
| -// heuristics to try to handle acronyms in camel case names correctly.
|
| -std::string CamelCaseToUnderscoreCase(StringRef input) {
|
| - std::string output;
|
| - bool needs_underscore = false;
|
| - bool was_lowercase = false;
|
| - bool was_uppercase = false;
|
| - // Iterate in reverse to minimize the amount of backtracking.
|
| - for (const unsigned char* i = input.bytes_end() - 1; i >= input.bytes_begin();
|
| - --i) {
|
| - char c = *i;
|
| - bool is_lowercase = clang::isLowercase(c);
|
| - bool is_uppercase = clang::isUppercase(c);
|
| - c = clang::toLowercase(c);
|
| - // Transitioning from upper to lower case requires an underscore. This is
|
| - // needed to handle names with acronyms, e.g. handledHTTPRequest needs a '_'
|
| - // in 'dH'. This is a complement to the non-acronym case further down.
|
| - if (needs_underscore || (was_uppercase && is_lowercase)) {
|
| - output += '_';
|
| - needs_underscore = false;
|
| - }
|
| - output += c;
|
| - // Handles the non-acronym case: transitioning from lower to upper case
|
| - // requires an underscore when emitting the next character, e.g. didLoad
|
| - // needs a '_' in 'dL'.
|
| - if (i != input.bytes_end() - 1 && was_lowercase && is_uppercase)
|
| - needs_underscore = true;
|
| - was_lowercase = is_lowercase;
|
| - was_uppercase = is_uppercase;
|
| - }
|
| - std::reverse(output.begin(), output.end());
|
| - return output;
|
| -}
|
| -
|
| bool GetNameForDecl(const clang::FieldDecl& decl, std::string& name) {
|
| StringRef original_name = decl.getName();
|
| // Blink style field names are prefixed with `m_`. If this prefix isn't
|
| @@ -96,7 +62,7 @@ bool GetNameForDecl(const clang::FieldDecl& decl, std::string& name) {
|
| if (original_name.size() < strlen(kBlinkFieldPrefix) ||
|
| !original_name.startswith(kBlinkFieldPrefix))
|
| return false;
|
| - name = CamelCaseToUnderscoreCase(
|
| + name = IdentifierToUnderscoreCase(
|
| original_name.substr(strlen(kBlinkFieldPrefix)));
|
| // The few examples I could find used struct-style naming with no `_` suffix
|
| // for unions.
|
| @@ -162,10 +128,9 @@ bool GetNameForDecl(const clang::VarDecl& decl, std::string& name) {
|
| clang::isUppercase(original_name[1]))
|
| return false;
|
| name = 'k';
|
| - name.append(original_name.data(), original_name.size());
|
| - name[1] = clang::toUppercase(name[1]);
|
| + name += IdentifierToCamelCase(original_name);
|
| } else {
|
| - name = CamelCaseToUnderscoreCase(original_name);
|
| + name = IdentifierToUnderscoreCase(original_name);
|
| }
|
|
|
| if (decl.isStaticDataMember()) {
|
|
|