Skip to content

Commit b831786

Browse files
committed
[clang-tidy][NFC] Tweak identifier-naming options reading/writiing
1 parent f68cad9 commit b831786

File tree

2 files changed

+40
-31
lines changed

2 files changed

+40
-31
lines changed

clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -253,28 +253,25 @@ IdentifierNamingCheck::FileStyle IdentifierNamingCheck::getFileStyleFromOptions(
253253
Styles.resize(SK_Count);
254254
SmallString<64> StyleString;
255255
for (unsigned I = 0; I < SK_Count; ++I) {
256-
StyleString = StyleNames[I];
257-
size_t StyleSize = StyleString.size();
256+
size_t StyleSize = StyleNames[I].size();
257+
StyleString.assign({StyleNames[I], "HungarianPrefix"});
258258

259-
StyleString.append("HungarianPrefix");
260259
auto HPTOpt =
261260
Options.get<IdentifierNamingCheck::HungarianPrefixType>(StyleString);
262-
if (!HungarianNotation.checkOptionValid(I, StyleString) &&
263-
HPTOpt.hasValue())
261+
if (HPTOpt.hasValue() && !HungarianNotation.checkOptionValid(I))
264262
configurationDiag("invalid identifier naming option '%0'") << StyleString;
265-
StyleString.resize(StyleSize);
266263

267-
StyleString.append("IgnoredRegexp");
264+
memcpy(&StyleString[StyleSize], "IgnoredRegexp", 13);
265+
StyleString.truncate(StyleSize + 13);
268266
StringRef IgnoredRegexpStr = Options.get(StyleString, "");
269-
StyleString.resize(StyleSize);
270-
StyleString.append("Prefix");
267+
memcpy(&StyleString[StyleSize], "Prefix", 6);
268+
StyleString.truncate(StyleSize + 6);
271269
std::string Prefix(Options.get(StyleString, ""));
272270
// Fast replacement of [Pre]fix -> [Suf]fix.
273271
memcpy(&StyleString[StyleSize], "Suf", 3);
274272
std::string Postfix(Options.get(StyleString, ""));
275273
memcpy(&StyleString[StyleSize], "Case", 4);
276-
StyleString.pop_back();
277-
StyleString.pop_back();
274+
StyleString.pop_back_n(2);
278275
auto CaseOptional =
279276
Options.get<IdentifierNamingCheck::CaseType>(StyleString);
280277

@@ -311,9 +308,8 @@ std::string IdentifierNamingCheck::HungarianNotation::getDeclTypeName(
311308
if (!EOL)
312309
EOL = Begin + strlen(Begin);
313310

314-
const std::vector<const char *> PosList = {
315-
strchr(Begin, '='), strchr(Begin, ';'), strchr(Begin, ','),
316-
strchr(Begin, ')'), EOL};
311+
const char *PosList[] = {strchr(Begin, '='), strchr(Begin, ';'),
312+
strchr(Begin, ','), strchr(Begin, ')'), EOL};
317313
for (const auto &Pos : PosList) {
318314
if (Pos > Begin)
319315
EOL = std::min(EOL, Pos);
@@ -408,7 +404,7 @@ IdentifierNamingCheck::IdentifierNamingCheck(StringRef Name,
408404
IdentifierNamingCheck::~IdentifierNamingCheck() = default;
409405

410406
bool IdentifierNamingCheck::HungarianNotation::checkOptionValid(
411-
int StyleKindIndex, StringRef StyleString) const {
407+
int StyleKindIndex) const {
412408
if ((StyleKindIndex >= SK_EnumConstant) &&
413409
(StyleKindIndex <= SK_ConstantParameter))
414410
return true;
@@ -442,16 +438,21 @@ void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
442438

443439
StringRef Section = "HungarianNotation.";
444440

445-
SmallString<128> Buffer;
441+
SmallString<128> Buffer = {Section, "General."};
442+
size_t DefSize = Buffer.size();
446443
for (const auto &Opt : HNOpts) {
447-
Buffer.assign({Section, "General.", Opt});
444+
Buffer.truncate(DefSize);
445+
Buffer.append(Opt);
448446
StringRef Val = Options.get(Buffer, "");
449447
if (!Val.empty())
450448
HNOption.General[Opt] = Val.str();
451449
}
452450

451+
Buffer = {Section, "DerivedType."};
452+
DefSize = Buffer.size();
453453
for (const auto &Type : HNDerivedTypes) {
454-
Buffer.assign({Section, "DerivedType.", Type});
454+
Buffer.truncate(DefSize);
455+
Buffer.append(Type);
455456
StringRef Val = Options.get(Buffer, "");
456457
if (!Val.empty())
457458
HNOption.DerivedType[Type] = Val.str();
@@ -463,15 +464,21 @@ void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
463464
{"WideCharPrinter", "wchar_t*"},
464465
{"WideCharArray", "wchar_t[]"}};
465466

467+
Buffer = {Section, "CString."};
468+
DefSize = Buffer.size();
466469
for (const auto &CStr : HNCStrings) {
467-
Buffer.assign({Section, "CString.", CStr.first});
470+
Buffer.truncate(DefSize);
471+
Buffer.append(CStr.first);
468472
StringRef Val = Options.get(Buffer, "");
469473
if (!Val.empty())
470474
HNOption.CString[CStr.first] = Val.str();
471475
}
472476

477+
Buffer = {Section, "PrimitiveType."};
478+
DefSize = Buffer.size();
473479
for (const auto &PrimType : HungarainNotationPrimitiveTypes) {
474-
Buffer.assign({Section, "PrimitiveType.", PrimType});
480+
Buffer.truncate(DefSize);
481+
Buffer.append(PrimType);
475482
StringRef Val = Options.get(Buffer, "");
476483
if (!Val.empty()) {
477484
std::string Type = PrimType.str();
@@ -480,8 +487,11 @@ void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
480487
}
481488
}
482489

490+
Buffer = {Section, "UserDefinedType."};
491+
DefSize = Buffer.size();
483492
for (const auto &Type : HungarainNotationUserDefinedTypes) {
484-
Buffer.assign({Section, "UserDefinedType.", Type});
493+
Buffer.truncate(DefSize);
494+
Buffer.append(Type);
485495
StringRef Val = Options.get(Buffer, "");
486496
if (!Val.empty())
487497
HNOption.UserDefinedType[Type] = Val.str();
@@ -796,24 +806,23 @@ void IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
796806
for (size_t I = 0; I < SK_Count; ++I) {
797807
if (!Styles[I])
798808
continue;
799-
StyleString = StyleNames[I];
800-
size_t StyleSize = StyleString.size();
809+
size_t StyleSize = StyleNames[I].size();
810+
StyleString.assign({StyleNames[I], "HungarianPrefix"});
801811

802-
Options.store(Opts, (StyleString + "HungarianPrefix").str(),
803-
Styles[I]->HPType);
812+
Options.store(Opts, StyleString, Styles[I]->HPType);
804813

805-
StyleString.append("IgnoredRegexp");
814+
memcpy(&StyleString[StyleSize], "IgnoredRegexp", 13);
815+
StyleString.truncate(StyleSize + 13);
806816
Options.store(Opts, StyleString, Styles[I]->IgnoredRegexpStr);
807-
StyleString.resize(StyleSize);
808-
StyleString.append("Prefix");
817+
memcpy(&StyleString[StyleSize], "Prefix", 6);
818+
StyleString.truncate(StyleSize + 6);
809819
Options.store(Opts, StyleString, Styles[I]->Prefix);
810820
// Fast replacement of [Pre]fix -> [Suf]fix.
811821
memcpy(&StyleString[StyleSize], "Suf", 3);
812822
Options.store(Opts, StyleString, Styles[I]->Suffix);
813823
if (Styles[I]->Case) {
814824
memcpy(&StyleString[StyleSize], "Case", 4);
815-
StyleString.pop_back();
816-
StyleString.pop_back();
825+
StyleString.pop_back_n(2);
817826
Options.store(Opts, StyleString, *Styles[I]->Case);
818827
}
819828
}

clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck {
8989

9090
struct HungarianNotation {
9191
public:
92-
bool checkOptionValid(int StyleKindIndex, StringRef StyleString) const;
92+
bool checkOptionValid(int StyleKindIndex) const;
9393
bool isOptionEnabled(StringRef OptionKey,
9494
const llvm::StringMap<std::string> &StrMap) const;
9595
void loadDefaultConfig(

0 commit comments

Comments
 (0)