[clang-tools-extra] 12cb540 - [clang-tidy][NFC] Replace many instances of std::string where a StringRef would suffice.
Nathan James via cfe-commits
cfe-commits at lists.llvm.org
Mon May 9 04:01:57 PDT 2022
Author: Nathan James
Date: 2022-05-09T12:01:46+01:00
New Revision: 12cb540529e41d12cf27d2e716a384b6692563a8
URL: https://github.com/llvm/llvm-project/commit/12cb540529e41d12cf27d2e716a384b6692563a8
DIFF: https://github.com/llvm/llvm-project/commit/12cb540529e41d12cf27d2e716a384b6692563a8.diff
LOG: [clang-tidy][NFC] Replace many instances of std::string where a StringRef would suffice.
There's many instances in clang tidy checks where owning strings are used when we already have a stable string from the options, so using a StringRef makes much more sense.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D124341
Added:
Modified:
clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
clang-tools-extra/clang-tidy/ClangTidyCheck.h
clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h
clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.cpp
clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h
clang-tools-extra/clang-tidy/android/ComparisonInTempFailureRetryCheck.h
clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp
clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.h
clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.h
clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.h
clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.h
clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp
clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h
clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.cpp
clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.h
clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp
clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.h
clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.h
clang-tools-extra/clang-tidy/bugprone/SuspiciousMissingCommaCheck.cpp
clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.cpp
clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.h
clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp
clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp
clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h
clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h
clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h
clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.cpp
clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.h
clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h
clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h
clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.h
clang-tools-extra/clang-tidy/google/IntegerTypesCheck.h
clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h
clang-tools-extra/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h
clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.h
clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.h
clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h
clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.cpp
clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.h
clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.h
clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.cpp
clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.h
clang-tools-extra/clang-tidy/performance/NoAutomaticMoveCheck.h
clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp
clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h
clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp
clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.h
clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.cpp
clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.h
clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp
clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.h
clang-tools-extra/clang-tidy/utils/Matchers.h
clang-tools-extra/clang-tidy/utils/OptionsUtils.cpp
clang-tools-extra/clang-tidy/utils/OptionsUtils.h
clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.cpp
clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.h
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
index 10a30c39f232f..e315318a655fd 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
@@ -48,14 +48,14 @@ void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) {
ClangTidyCheck::OptionsView::OptionsView(
StringRef CheckName, const ClangTidyOptions::OptionMap &CheckOptions,
ClangTidyContext *Context)
- : NamePrefix(CheckName.str() + "."), CheckOptions(CheckOptions),
+ : NamePrefix((CheckName + ".").str()), CheckOptions(CheckOptions),
Context(Context) {}
-llvm::Optional<std::string>
+llvm::Optional<StringRef>
ClangTidyCheck::OptionsView::get(StringRef LocalName) const {
- const auto &Iter = CheckOptions.find(NamePrefix + LocalName.str());
+ const auto &Iter = CheckOptions.find((NamePrefix + LocalName).str());
if (Iter != CheckOptions.end())
- return Iter->getValue().Value;
+ return StringRef(Iter->getValue().Value);
return None;
}
@@ -63,7 +63,7 @@ static ClangTidyOptions::OptionMap::const_iterator
findPriorityOption(const ClangTidyOptions::OptionMap &Options, StringRef NamePrefix,
StringRef LocalName) {
auto IterLocal = Options.find((NamePrefix + LocalName).str());
- auto IterGlobal = Options.find(LocalName.str());
+ auto IterGlobal = Options.find(LocalName);
if (IterLocal == Options.end())
return IterGlobal;
if (IterGlobal == Options.end())
@@ -73,11 +73,11 @@ findPriorityOption(const ClangTidyOptions::OptionMap &Options, StringRef NamePre
return IterGlobal;
}
-llvm::Optional<std::string>
+llvm::Optional<StringRef>
ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName) const {
auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName);
if (Iter != CheckOptions.end())
- return Iter->getValue().Value;
+ return StringRef(Iter->getValue().Value);
return None;
}
@@ -97,7 +97,7 @@ static Optional<bool> getAsBool(StringRef Value,
template <>
llvm::Optional<bool>
ClangTidyCheck::OptionsView::get<bool>(StringRef LocalName) const {
- if (llvm::Optional<std::string> ValueOr = get(LocalName)) {
+ if (llvm::Optional<StringRef> ValueOr = get(LocalName)) {
if (auto Result = getAsBool(*ValueOr, NamePrefix + LocalName))
return Result;
diagnoseBadBooleanOption(NamePrefix + LocalName, *ValueOr);
@@ -120,7 +120,7 @@ ClangTidyCheck::OptionsView::getLocalOrGlobal<bool>(StringRef LocalName) const {
void ClangTidyCheck::OptionsView::store(ClangTidyOptions::OptionMap &Options,
StringRef LocalName,
StringRef Value) const {
- Options[NamePrefix + LocalName.str()] = Value;
+ Options[(NamePrefix + LocalName).str()] = Value;
}
void ClangTidyCheck::OptionsView::storeInt(ClangTidyOptions::OptionMap &Options,
@@ -167,10 +167,9 @@ llvm::Optional<int64_t> ClangTidyCheck::OptionsView::getEnumInt(
}
}
if (EditDistance < 3)
- diagnoseBadEnumOption(Iter->getKey().str(), Iter->getValue().Value,
- Closest);
+ diagnoseBadEnumOption(Iter->getKey(), Iter->getValue().Value, Closest);
else
- diagnoseBadEnumOption(Iter->getKey().str(), Iter->getValue().Value);
+ diagnoseBadEnumOption(Iter->getKey(), Iter->getValue().Value);
return None;
}
@@ -203,18 +202,15 @@ void ClangTidyCheck::OptionsView::diagnoseBadEnumOption(
Diag << 3 << Suggestion;
}
-std::string ClangTidyCheck::OptionsView::get(StringRef LocalName,
- StringRef Default) const {
- if (llvm::Optional<std::string> Val = get(LocalName))
- return std::move(*Val);
- return Default.str();
+StringRef ClangTidyCheck::OptionsView::get(StringRef LocalName,
+ StringRef Default) const {
+ return get(LocalName).getValueOr(Default);
}
-std::string
+
+StringRef
ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName,
StringRef Default) const {
- if (llvm::Optional<std::string> Val = getLocalOrGlobal(LocalName))
- return std::move(*Val);
- return Default.str();
+ return getLocalOrGlobal(LocalName).getValueOr(Default);
}
} // namespace tidy
} // namespace clang
diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h
index 33f84a15b8441..77e41990b1da4 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h
@@ -155,14 +155,14 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback {
/// Reads the option with the check-local name \p LocalName from the
/// ``CheckOptions``. If the corresponding key is not present, return
/// ``None``.
- llvm::Optional<std::string> get(StringRef LocalName) const;
+ llvm::Optional<StringRef> get(StringRef LocalName) const;
/// Read a named option from the ``Context``.
///
/// Reads the option with the check-local name \p LocalName from the
/// ``CheckOptions``. If the corresponding key is not present, returns
/// \p Default.
- std::string get(StringRef LocalName, StringRef Default) const;
+ StringRef get(StringRef LocalName, StringRef Default) const;
/// Read a named option from the ``Context``.
///
@@ -170,7 +170,7 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback {
/// global ``CheckOptions``. Gets local option first. If local is not
/// present, falls back to get global option. If global option is not
/// present either, return ``None``.
- llvm::Optional<std::string> getLocalOrGlobal(StringRef LocalName) const;
+ llvm::Optional<StringRef> getLocalOrGlobal(StringRef LocalName) const;
/// Read a named option from the ``Context``.
///
@@ -178,7 +178,7 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback {
/// global ``CheckOptions``. Gets local option first. If local is not
/// present, falls back to get global option. If global option is not
/// present either, returns \p Default.
- std::string getLocalOrGlobal(StringRef LocalName, StringRef Default) const;
+ StringRef getLocalOrGlobal(StringRef LocalName, StringRef Default) const;
/// Read a named option from the ``Context`` and parse it as an
/// integral type ``T``.
@@ -192,7 +192,7 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback {
template <typename T>
std::enable_if_t<std::is_integral<T>::value, llvm::Optional<T>>
get(StringRef LocalName) const {
- if (llvm::Optional<std::string> Value = get(LocalName)) {
+ if (llvm::Optional<StringRef> Value = get(LocalName)) {
T Result{};
if (!StringRef(*Value).getAsInteger(10, Result))
return Result;
@@ -229,7 +229,7 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback {
template <typename T>
std::enable_if_t<std::is_integral<T>::value, llvm::Optional<T>>
getLocalOrGlobal(StringRef LocalName) const {
- llvm::Optional<std::string> ValueOr = get(LocalName);
+ llvm::Optional<StringRef> ValueOr = get(LocalName);
bool IsGlobal = false;
if (!ValueOr) {
IsGlobal = true;
diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
index 4ac76d0242ec1..19e68975945e5 100644
--- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
+++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
@@ -34,8 +34,7 @@ StringFindStartswithCheck::StringFindStartswithCheck(StringRef Name,
void StringFindStartswithCheck::registerMatchers(MatchFinder *Finder) {
auto ZeroLiteral = integerLiteral(equals(0));
- auto StringClassMatcher = cxxRecordDecl(hasAnyName(SmallVector<StringRef, 4>(
- StringLikeClasses.begin(), StringLikeClasses.end())));
+ auto StringClassMatcher = cxxRecordDecl(hasAnyName(StringLikeClasses));
auto StringType = hasUnqualifiedDesugaredType(
recordType(hasDeclaration(StringClassMatcher)));
diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h
index 2bb20f78b68ce..39dd594e42429 100644
--- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h
+++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.h
@@ -35,9 +35,9 @@ class StringFindStartswithCheck : public ClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
private:
- const std::vector<std::string> StringLikeClasses;
+ const std::vector<StringRef> StringLikeClasses;
utils::IncludeInserter IncludeInserter;
- const std::string AbseilStringsMatchHeader;
+ const StringRef AbseilStringsMatchHeader;
};
} // namespace abseil
diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.cpp b/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.cpp
index 964826a3bd615..b3bc3821dbd58 100644
--- a/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.cpp
@@ -40,10 +40,9 @@ static const char DefaultStringLikeClasses[] = "::std::basic_string;"
static const char DefaultAbseilStringsMatchHeader[] = "absl/strings/match.h";
static transformer::RewriteRuleWith<std::string>
-makeRewriteRule(const std::vector<std::string> &StringLikeClassNames,
+makeRewriteRule(ArrayRef<StringRef> StringLikeClassNames,
StringRef AbseilStringsMatchHeader) {
- auto StringLikeClass = cxxRecordDecl(hasAnyName(SmallVector<StringRef, 4>(
- StringLikeClassNames.begin(), StringLikeClassNames.end())));
+ auto StringLikeClass = cxxRecordDecl(hasAnyName(StringLikeClassNames));
auto StringType =
hasUnqualifiedDesugaredType(recordType(hasDeclaration(StringLikeClass)));
auto CharStarType =
diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h b/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h
index a021dcdb74a92..4d4be1630427f 100644
--- a/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h
+++ b/clang-tools-extra/clang-tidy/abseil/StringFindStrContainsCheck.h
@@ -28,8 +28,8 @@ class StringFindStrContainsCheck : public utils::TransformerClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
private:
- const std::vector<std::string> StringLikeClassesOption;
- const std::string AbseilStringsMatchHeaderOption;
+ const std::vector<StringRef> StringLikeClassesOption;
+ const StringRef AbseilStringsMatchHeaderOption;
};
} // namespace abseil
diff --git a/clang-tools-extra/clang-tidy/android/ComparisonInTempFailureRetryCheck.h b/clang-tools-extra/clang-tidy/android/ComparisonInTempFailureRetryCheck.h
index 7b000ab2f54f6..2c45f2248678d 100644
--- a/clang-tools-extra/clang-tidy/android/ComparisonInTempFailureRetryCheck.h
+++ b/clang-tools-extra/clang-tidy/android/ComparisonInTempFailureRetryCheck.h
@@ -31,7 +31,7 @@ class ComparisonInTempFailureRetryCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string RawRetryList;
+ const StringRef RawRetryList;
SmallVector<StringRef, 5> RetryMacros;
};
diff --git a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp
index eba6b29f56af9..74e08ed957d72 100644
--- a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.cpp
@@ -78,8 +78,8 @@ AssertSideEffectCheck::AssertSideEffectCheck(StringRef Name,
: ClangTidyCheck(Name, Context),
CheckFunctionCalls(Options.get("CheckFunctionCalls", false)),
RawAssertList(Options.get("AssertMacros", "assert,NSAssert,NSCAssert")),
- IgnoredFunctions(utils::options::parseStringList(
- "__builtin_expect;" + Options.get("IgnoredFunctions", ""))) {
+ IgnoredFunctions(utils::options::parseListPair(
+ "__builtin_expect;", Options.get("IgnoredFunctions", ""))) {
StringRef(RawAssertList).split(AssertMacros, ",", -1, false);
}
diff --git a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.h b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.h
index c240f362e71e6..6b5dcf015ba62 100644
--- a/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/AssertSideEffectCheck.h
@@ -40,9 +40,9 @@ class AssertSideEffectCheck : public ClangTidyCheck {
private:
const bool CheckFunctionCalls;
- const std::string RawAssertList;
+ const StringRef RawAssertList;
SmallVector<StringRef, 5> AssertMacros;
- const std::vector<std::string> IgnoredFunctions;
+ const std::vector<StringRef> IgnoredFunctions;
};
} // namespace bugprone
diff --git a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
index ae91533a7c9e2..914430cf38397 100644
--- a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
@@ -94,9 +94,7 @@ DanglingHandleCheck::DanglingHandleCheck(StringRef Name,
HandleClasses(utils::options::parseStringList(Options.get(
"HandleClasses",
"std::basic_string_view;std::experimental::basic_string_view"))),
- IsAHandle(cxxRecordDecl(hasAnyName(std::vector<StringRef>(
- HandleClasses.begin(), HandleClasses.end())))
- .bind("handle")) {}
+ IsAHandle(cxxRecordDecl(hasAnyName(HandleClasses)).bind("handle")) {}
void DanglingHandleCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "HandleClasses",
diff --git a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.h b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.h
index 650522d99f3db..35625a4653ccb 100644
--- a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.h
@@ -31,7 +31,7 @@ class DanglingHandleCheck : public ClangTidyCheck {
void registerMatchersForVariables(ast_matchers::MatchFinder *Finder);
void registerMatchersForReturn(ast_matchers::MatchFinder *Finder);
- const std::vector<std::string> HandleClasses;
+ const std::vector<StringRef> HandleClasses;
const ast_matchers::internal::Matcher<RecordDecl> IsAHandle;
};
diff --git a/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.h b/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.h
index f06b2d036386f..06c2f2acbbc86 100644
--- a/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.h
@@ -36,7 +36,7 @@ class DynamicStaticInitializersCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string RawStringHeaderFileExtensions;
+ const StringRef RawStringHeaderFileExtensions;
utils::FileExtensionsSet HeaderFileExtensions;
};
diff --git a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
index 3c479d2b192e7..89c24ce7dd457 100644
--- a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
@@ -1552,7 +1552,7 @@ static bool isIgnoredParameter(const TheCheck &Check, const ParmVarDecl *Node) {
LLVM_DEBUG(llvm::dbgs() << "\tType name is '" << NodeTypeName << "'\n");
if (!NodeTypeName.empty()) {
if (llvm::any_of(Check.IgnoredParameterTypeSuffixes,
- [NodeTypeName](const std::string &E) {
+ [NodeTypeName](StringRef E) {
return !E.empty() && NodeTypeName.endswith(E);
})) {
LLVM_DEBUG(llvm::dbgs() << "\tType suffix ignored.\n");
diff --git a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.h b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.h
index a1fade5277f00..d3f860d3ef3bf 100644
--- a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.h
@@ -33,11 +33,11 @@ class EasilySwappableParametersCheck : public ClangTidyCheck {
const std::size_t MinimumLength;
/// The parameter names (as written in the source text) to be ignored.
- const std::vector<std::string> IgnoredParameterNames;
+ const std::vector<StringRef> IgnoredParameterNames;
/// The parameter typename suffixes (as written in the source code) to be
/// ignored.
- const std::vector<std::string> IgnoredParameterTypeSuffixes;
+ const std::vector<StringRef> IgnoredParameterTypeSuffixes;
/// Whether to consider
diff erently qualified versions of the same type
/// mixable.
diff --git a/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp
index 4bf841648f948..9a53f2bade77a 100644
--- a/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp
@@ -109,7 +109,7 @@ static std::string getNonReservedFixup(std::string Name) {
static Optional<RenamerClangTidyCheck::FailureInfo>
getFailureInfoImpl(StringRef Name, bool IsInGlobalNamespace,
const LangOptions &LangOpts, bool Invert,
- ArrayRef<std::string> AllowedIdentifiers) {
+ ArrayRef<StringRef> AllowedIdentifiers) {
assert(!Name.empty());
if (llvm::is_contained(AllowedIdentifiers, Name))
return None;
diff --git a/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h b/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h
index dc1206b5901b2..f5a508f2f7986 100644
--- a/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h
@@ -32,7 +32,7 @@ namespace bugprone {
/// http://clang.llvm.org/extra/clang-tidy/checks/bugprone-reserved-identifier.html
class ReservedIdentifierCheck final : public RenamerClangTidyCheck {
const bool Invert;
- const std::vector<std::string> AllowedIdentifiers;
+ const std::vector<StringRef> AllowedIdentifiers;
public:
ReservedIdentifierCheck(StringRef Name, ClangTidyContext *Context);
diff --git a/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.cpp
index e9d97383cd61e..ed64429ef4ef3 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.cpp
@@ -20,12 +20,6 @@ namespace bugprone {
static constexpr int UnsignedASCIIUpperBound = 127;
-static Matcher<TypedefDecl> hasAnyListedName(const std::string &Names) {
- const std::vector<std::string> NameList =
- utils::options::parseStringList(Names);
- return hasAnyName(std::vector<StringRef>(NameList.begin(), NameList.end()));
-}
-
SignedCharMisuseCheck::SignedCharMisuseCheck(StringRef Name,
ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
@@ -46,8 +40,8 @@ BindableMatcher<clang::Stmt> SignedCharMisuseCheck::charCastExpression(
// We can ignore typedefs which are some kind of integer types
// (e.g. typedef char sal_Int8). In this case, we don't need to
// worry about the misinterpretation of char values.
- const auto IntTypedef = qualType(
- hasDeclaration(typedefDecl(hasAnyListedName(CharTypdefsToIgnoreList))));
+ const auto IntTypedef = qualType(hasDeclaration(typedefDecl(
+ hasAnyName(utils::options::parseStringList(CharTypdefsToIgnoreList)))));
auto CharTypeExpr = expr();
if (IsSigned) {
diff --git a/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.h b/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.h
index 84d3bbbf4e764..7712c7f1c83ae 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/SignedCharMisuseCheck.h
@@ -37,7 +37,7 @@ class SignedCharMisuseCheck : public ClangTidyCheck {
const ast_matchers::internal::Matcher<clang::QualType> &IntegerType,
const std::string &CastBindName) const;
- const std::string CharTypdefsToIgnoreList;
+ const StringRef CharTypdefsToIgnoreList;
const bool DiagnoseSignedUnsignedCharComparisons;
};
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp
index b55b282c41aa4..cf3e17ec413b1 100644
--- a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.cpp
@@ -27,7 +27,7 @@ const char DefaultStringNames[] =
"::std::basic_string;::std::basic_string_view";
static std::vector<StringRef>
-removeNamespaces(const std::vector<std::string> &Names) {
+removeNamespaces(const std::vector<StringRef> &Names) {
std::vector<StringRef> Result;
Result.reserve(Names.size());
for (StringRef Name : Names) {
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.h b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.h
index d4877fbaa2351..fbd0959615c8d 100644
--- a/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/StringConstructorCheck.h
@@ -33,7 +33,7 @@ class StringConstructorCheck : public ClangTidyCheck {
const bool IsStringviewNullptrCheckEnabled;
const bool WarnOnLargeLength;
const unsigned int LargeLengthThreshold;
- std::vector<std::string> StringNames;
+ std::vector<StringRef> StringNames;
};
} // namespace bugprone
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.h b/clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.h
index 674292da1ee85..a3851c44a569b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.h
@@ -46,8 +46,8 @@ class SuspiciousIncludeCheck : public ClangTidyCheck {
utils::FileExtensionsSet ImplementationFileExtensions;
private:
- const std::string RawStringHeaderFileExtensions;
- const std::string RawStringImplementationFileExtensions;
+ const StringRef RawStringHeaderFileExtensions;
+ const StringRef RawStringImplementationFileExtensions;
};
} // namespace bugprone
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMissingCommaCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMissingCommaCheck.cpp
index 092809eaa906a..1cd5508ce5578 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousMissingCommaCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousMissingCommaCheck.cpp
@@ -73,7 +73,7 @@ SuspiciousMissingCommaCheck::SuspiciousMissingCommaCheck(
StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
SizeThreshold(Options.get("SizeThreshold", 5U)),
- RatioThreshold(std::stod(Options.get("RatioThreshold", ".2"))),
+ RatioThreshold(std::stod(Options.get("RatioThreshold", ".2").str())),
MaxConcatenatedTokens(Options.get("MaxConcatenatedTokens", 5U)) {}
void SuspiciousMissingCommaCheck::storeOptions(
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.cpp
index 8542f631a2e47..aec5a4d06bd15 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.cpp
@@ -91,15 +91,12 @@ void SuspiciousStringCompareCheck::registerMatchers(MatchFinder *Finder) {
// Add the list of known string compare-like functions and add user-defined
// functions.
- std::vector<std::string> FunctionNames = utils::options::parseStringList(
- (llvm::Twine(KnownStringCompareFunctions) + StringCompareLikeFunctions)
- .str());
+ std::vector<StringRef> FunctionNames = utils::options::parseListPair(
+ KnownStringCompareFunctions, StringCompareLikeFunctions);
// Match a call to a string compare functions.
const auto FunctionCompareDecl =
- functionDecl(hasAnyName(std::vector<StringRef>(FunctionNames.begin(),
- FunctionNames.end())))
- .bind("decl");
+ functionDecl(hasAnyName(FunctionNames)).bind("decl");
const auto DirectStringCompareCallExpr =
callExpr(hasDeclaration(FunctionCompareDecl)).bind("call");
const auto MacroStringCompareCallExpr = conditionalOperator(anyOf(
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.h b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.h
index d0cda51c320c1..0d82b6751e2a0 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringCompareCheck.h
@@ -29,7 +29,7 @@ class SuspiciousStringCompareCheck : public ClangTidyCheck {
private:
const bool WarnOnImplicitComparison;
const bool WarnOnLogicalNotComparison;
- const std::string StringCompareLikeFunctions;
+ const StringRef StringCompareLikeFunctions;
};
} // namespace bugprone
diff --git a/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp
index d49fd63f005d4..616155dc35c2e 100644
--- a/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp
@@ -138,8 +138,7 @@ void UnusedReturnValueCheck::registerMatchers(MatchFinder *Finder) {
callExpr(callee(functionDecl(
// Don't match void overloads of checked functions.
unless(returns(voidType())),
- isInstantiatedFrom(hasAnyName(
- std::vector<StringRef>(FunVec.begin(), FunVec.end()))))))
+ isInstantiatedFrom(hasAnyName(FunVec)))))
.bind("match"))));
auto UnusedInCompoundStmt =
diff --git a/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp b/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp
index cb03ad896b6e4..8e6acea290826 100644
--- a/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.cpp
@@ -30,10 +30,6 @@ AST_MATCHER(CXXRecordDecl, isTriviallyDefaultConstructible) {
AST_MATCHER(CXXRecordDecl, isTriviallyCopyable) {
return Node.hasTrivialCopyAssignment() && Node.hasTrivialCopyConstructor();
}
-AST_MATCHER_P(NamedDecl, hasAnyNameStdString, std::vector<std::string>,
- String) {
- return ast_matchers::internal::HasNameMatcher(String).matchesNode(Node);
-}
} // namespace
static const char BuiltinMemSet[] = "::std::memset;"
@@ -56,19 +52,6 @@ static constexpr llvm::StringRef ComparisonOperators[] = {
"operator==", "operator!=", "operator<",
"operator>", "operator<=", "operator>="};
-static std::vector<std::string> parseStringListPair(StringRef LHS,
- StringRef RHS) {
- if (LHS.empty()) {
- if (RHS.empty())
- return {};
- return utils::options::parseStringList(RHS);
- }
- if (RHS.empty())
- return utils::options::parseStringList(LHS);
- llvm::SmallString<512> Buffer;
- return utils::options::parseStringList((LHS + RHS).toStringRef(Buffer));
-}
-
NonTrivialTypesLibcMemoryCallsCheck::NonTrivialTypesLibcMemoryCallsCheck(
StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
@@ -104,21 +87,21 @@ void NonTrivialTypesLibcMemoryCallsCheck::registerMatchers(
};
Finder->addMatcher(
- callExpr(callee(namedDecl(hasAnyNameStdString(
- parseStringListPair(BuiltinMemSet, MemSetNames)))),
+ callExpr(callee(namedDecl(hasAnyName(
+ utils::options::parseListPair(BuiltinMemSet, MemSetNames)))),
ArgChecker(unless(isTriviallyDefaultConstructible()),
expr(integerLiteral(equals(0)))))
.bind("lazyConstruct"),
this);
Finder->addMatcher(
- callExpr(callee(namedDecl(hasAnyNameStdString(
- parseStringListPair(BuiltinMemCpy, MemCpyNames)))),
+ callExpr(callee(namedDecl(hasAnyName(
+ utils::options::parseListPair(BuiltinMemCpy, MemCpyNames)))),
ArgChecker(unless(isTriviallyCopyable()), IsStructPointer()))
.bind("lazyCopy"),
this);
Finder->addMatcher(
- callExpr(callee(namedDecl(hasAnyNameStdString(
- parseStringListPair(BuiltinMemCmp, MemCmpNames)))),
+ callExpr(callee(namedDecl(hasAnyName(
+ utils::options::parseListPair(BuiltinMemCmp, MemCmpNames)))),
ArgChecker(hasMethod(hasAnyName(ComparisonOperators)),
IsStructPointer()))
.bind("lazyCompare"),
diff --git a/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h b/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h
index e132de0c31407..76b376e3c6a74 100644
--- a/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h
+++ b/clang-tools-extra/clang-tidy/cert/NonTrivialTypesLibcMemoryCallsCheck.h
@@ -32,9 +32,9 @@ class NonTrivialTypesLibcMemoryCallsCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string MemSetNames;
- const std::string MemCpyNames;
- const std::string MemCmpNames;
+ const StringRef MemSetNames;
+ const StringRef MemCpyNames;
+ const StringRef MemCmpNames;
};
} // namespace cert
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h
index 0f778104ce398..492758240392e 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.h
@@ -32,7 +32,7 @@ class InitVariablesCheck : public ClangTidyCheck {
private:
utils::IncludeInserter IncludeInserter;
- const std::string MathHeader;
+ const StringRef MathHeader;
};
} // namespace cppcoreguidelines
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
index 99965c9e5bb98..d73a90197937f 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.cpp
@@ -24,13 +24,6 @@ using namespace clang::ast_matchers;
namespace clang {
namespace tidy {
namespace cppcoreguidelines {
-namespace {
-auto hasAnyListedName(const std::string &Names) {
- const std::vector<std::string> NameList =
- utils::options::parseStringList(Names);
- return hasAnyName(std::vector<StringRef>(NameList.begin(), NameList.end()));
-}
-} // namespace
NarrowingConversionsCheck::NarrowingConversionsCheck(StringRef Name,
ClangTidyContext *Context)
@@ -79,8 +72,8 @@ void NarrowingConversionsCheck::registerMatchers(MatchFinder *Finder) {
// We may want to exclude other types from the checks, such as `size_type`
// and `
diff erence_type`. These are often used to count elements, represented
// in 64 bits and assigned to `int`. Rarely are people counting >2B elements.
- const auto IsConversionFromIgnoredType =
- hasType(namedDecl(hasAnyListedName(IgnoreConversionFromTypes)));
+ const auto IsConversionFromIgnoredType = hasType(namedDecl(
+ hasAnyName(utils::options::parseStringList(IgnoreConversionFromTypes))));
// `IsConversionFromIgnoredType` will ignore narrowing calls from those types,
// but not expressions that are promoted to an ignored type as a result of a
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h
index 36ced698e869f..7930e658f3a7f 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/NarrowingConversionsCheck.h
@@ -102,7 +102,7 @@ class NarrowingConversionsCheck : public ClangTidyCheck {
const bool WarnOnFloatingPointNarrowingConversion;
const bool WarnWithinTemplateInstantiation;
const bool WarnOnEquivalentBitWidth;
- const std::string IgnoreConversionFromTypes;
+ const StringRef IgnoreConversionFromTypes;
const bool PedanticMode;
};
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.cpp
index d502ddf50e84f..d7cf6525b1a36 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.cpp
@@ -22,14 +22,6 @@ namespace clang {
namespace tidy {
namespace cppcoreguidelines {
-namespace {
-Matcher<FunctionDecl> hasAnyListedName(const std::string &FunctionNames) {
- const std::vector<std::string> NameList =
- utils::options::parseStringList(FunctionNames);
- return hasAnyName(std::vector<StringRef>(NameList.begin(), NameList.end()));
-}
-} // namespace
-
void NoMallocCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "Allocations", AllocList);
Options.store(Opts, "Reallocations", ReallocList);
@@ -38,19 +30,22 @@ void NoMallocCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
void NoMallocCheck::registerMatchers(MatchFinder *Finder) {
// Registering malloc, will suggest RAII.
- Finder->addMatcher(callExpr(callee(functionDecl(hasAnyListedName(AllocList))))
+ Finder->addMatcher(callExpr(callee(functionDecl(hasAnyName(
+ utils::options::parseStringList(AllocList)))))
.bind("allocation"),
this);
// Registering realloc calls, suggest std::vector or std::string.
Finder->addMatcher(
- callExpr(callee(functionDecl(hasAnyListedName(ReallocList))))
+ callExpr(callee(functionDecl(
+ hasAnyName(utils::options::parseStringList((ReallocList))))))
.bind("realloc"),
this);
// Registering free calls, will suggest RAII instead.
Finder->addMatcher(
- callExpr(callee(functionDecl(hasAnyListedName(DeallocList))))
+ callExpr(callee(functionDecl(
+ hasAnyName(utils::options::parseStringList((DeallocList))))))
.bind("free"),
this);
}
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.h
index 6be01923ce851..87348b1d4bda6 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/NoMallocCheck.h
@@ -47,13 +47,13 @@ class NoMallocCheck : public ClangTidyCheck {
private:
/// Semicolon-separated list of fully qualified names of memory allocation
/// functions the check warns about. Defaults to `::malloc;::calloc`.
- const std::string AllocList;
+ const StringRef AllocList;
/// Semicolon-separated list of fully qualified names of memory reallocation
/// functions the check warns about. Defaults to `::realloc`.
- const std::string ReallocList;
+ const StringRef ReallocList;
/// Semicolon-separated list of fully qualified names of memory deallocation
/// functions the check warns about. Defaults to `::free`.
- const std::string DeallocList;
+ const StringRef DeallocList;
};
} // namespace cppcoreguidelines
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
index b87c33dd10bda..b93bce2ffcb5a 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
@@ -21,16 +21,6 @@ namespace clang {
namespace tidy {
namespace cppcoreguidelines {
-// FIXME: Copied from 'NoMallocCheck.cpp'. Has to be refactored into 'util' or
-// something like that.
-namespace {
-Matcher<FunctionDecl> hasAnyListedName(const std::string &FunctionNames) {
- const std::vector<std::string> NameList =
- utils::options::parseStringList(FunctionNames);
- return hasAnyName(std::vector<StringRef>(NameList.begin(), NameList.end()));
-}
-} // namespace
-
void OwningMemoryCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "LegacyResourceProducers", LegacyResourceProducers);
Options.store(Opts, "LegacyResourceConsumers", LegacyResourceConsumers);
@@ -42,9 +32,10 @@ void OwningMemoryCheck::registerMatchers(MatchFinder *Finder) {
const auto OwnerDecl = typeAliasTemplateDecl(hasName("::gsl::owner"));
const auto IsOwnerType = hasType(OwnerDecl);
- const auto LegacyCreatorFunctions = hasAnyListedName(LegacyResourceProducers);
+ const auto LegacyCreatorFunctions =
+ hasAnyName(utils::options::parseStringList(LegacyResourceProducers));
const auto LegacyConsumerFunctions =
- hasAnyListedName(LegacyResourceConsumers);
+ hasAnyName(utils::options::parseStringList(LegacyResourceConsumers));
// Legacy functions that are use for resource management but cannot be
// updated to use `gsl::owner<>`, like standard C memory management.
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h
index bac16bb6e1b09..29bb3452cc77f 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.h
@@ -52,10 +52,10 @@ class OwningMemoryCheck : public ClangTidyCheck {
/// List of old C-style functions that create resources.
/// Defaults to
/// `::malloc;::aligned_alloc;::realloc;::calloc;::fopen;::freopen;::tmpfile`.
- const std::string LegacyResourceProducers;
+ const StringRef LegacyResourceProducers;
/// List of old C-style functions that consume or release resources.
/// Defaults to `::free;::realloc;::freopen;::fclose`.
- const std::string LegacyResourceConsumers;
+ const StringRef LegacyResourceConsumers;
};
} // namespace cppcoreguidelines
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h
index 04a51b93a04c5..654f41111d0ab 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.h
@@ -22,7 +22,7 @@ namespace cppcoreguidelines {
/// For the user-facing documentation see:
/// http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-pro-bounds-constant-array-index.html
class ProBoundsConstantArrayIndexCheck : public ClangTidyCheck {
- const std::string GslHeader;
+ const StringRef GslHeader;
utils::IncludeInserter Inserter;
public:
diff --git a/clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.h b/clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.h
index 801d362aa5094..2cabc8941fa49 100644
--- a/clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.h
+++ b/clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.h
@@ -38,7 +38,7 @@ class GlobalNamesInHeadersCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string RawStringHeaderFileExtensions;
+ const StringRef RawStringHeaderFileExtensions;
utils::FileExtensionsSet HeaderFileExtensions;
};
diff --git a/clang-tools-extra/clang-tidy/google/IntegerTypesCheck.h b/clang-tools-extra/clang-tidy/google/IntegerTypesCheck.h
index 5b2d2f501c91a..e7c66b246223c 100644
--- a/clang-tools-extra/clang-tidy/google/IntegerTypesCheck.h
+++ b/clang-tools-extra/clang-tidy/google/IntegerTypesCheck.h
@@ -39,9 +39,9 @@ class IntegerTypesCheck : public ClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Options) override;
private:
- const std::string UnsignedTypePrefix;
- const std::string SignedTypePrefix;
- const std::string TypeSuffix;
+ const StringRef UnsignedTypePrefix;
+ const StringRef SignedTypePrefix;
+ const StringRef TypeSuffix;
std::unique_ptr<IdentifierTable> IdentTable;
};
diff --git a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h b/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
index 22110215a5efe..1471d96180593 100644
--- a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
+++ b/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
@@ -44,7 +44,7 @@ class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string RawStringHeaderFileExtensions;
+ const StringRef RawStringHeaderFileExtensions;
utils::FileExtensionsSet HeaderFileExtensions;
};
diff --git a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
index 239b7d1c1d923..ce327f9d3f26b 100644
--- a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
+++ b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h
@@ -43,7 +43,7 @@ class DefinitionsInHeadersCheck : public ClangTidyCheck {
private:
const bool UseHeaderFileExtension;
- const std::string RawStringHeaderFileExtensions;
+ const StringRef RawStringHeaderFileExtensions;
utils::FileExtensionsSet HeaderFileExtensions;
};
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
index 8b288efd1b043..79390ca5e6174 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
@@ -177,7 +177,7 @@ class DependencyFinderASTVisitor
class DeclFinderASTVisitor
: public clang::RecursiveASTVisitor<DeclFinderASTVisitor> {
public:
- DeclFinderASTVisitor(const std::string &Name,
+ DeclFinderASTVisitor(const StringRef &Name,
const StmtGeneratedVarNameMap *GeneratedDecls)
: Name(Name), GeneratedDecls(GeneratedDecls), Found(false) {}
diff --git a/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h b/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h
index ca12d77341625..6c9bc790bd99e 100644
--- a/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.h
@@ -47,8 +47,8 @@ class MakeSmartPtrCheck : public ClangTidyCheck {
private:
utils::IncludeInserter Inserter;
- const std::string MakeSmartPtrFunctionHeader;
- const std::string MakeSmartPtrFunctionName;
+ const StringRef MakeSmartPtrFunctionHeader;
+ const StringRef MakeSmartPtrFunctionName;
const bool IgnoreMacros;
const bool IgnoreDefaultInitialization;
diff --git a/clang-tools-extra/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h b/clang-tools-extra/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h
index 818b6aa270fda..652dced086220 100644
--- a/clang-tools-extra/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/ReplaceDisallowCopyAndAssignMacroCheck.h
@@ -49,10 +49,10 @@ class ReplaceDisallowCopyAndAssignMacroCheck : public ClangTidyCheck {
Preprocessor *ModuleExpanderPP) override;
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
- const std::string &getMacroName() const { return MacroName; }
+ const StringRef &getMacroName() const { return MacroName; }
private:
- const std::string MacroName;
+ const StringRef MacroName;
};
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
index 8ddcf3ddf694d..e1db4e04f53f7 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
@@ -50,15 +50,14 @@ void UseEmplaceCheck::registerMatchers(MatchFinder *Finder) {
// + match for emplace calls that should be replaced with insertion
auto CallPushBack = cxxMemberCallExpr(
hasDeclaration(functionDecl(hasName("push_back"))),
- on(hasType(cxxRecordDecl(hasAnyName(SmallVector<StringRef, 5>(
- ContainersWithPushBack.begin(), ContainersWithPushBack.end()))))));
+ on(hasType(cxxRecordDecl(hasAnyName(ContainersWithPushBack)))));
// We can't replace push_backs of smart pointer because
// if emplacement fails (f.e. bad_alloc in vector) we will have leak of
// passed pointer because smart pointer won't be constructed
// (and destructed) as in push_back case.
- auto IsCtorOfSmartPtr = hasDeclaration(cxxConstructorDecl(ofClass(hasAnyName(
- SmallVector<StringRef, 5>(SmartPointers.begin(), SmartPointers.end())))));
+ auto IsCtorOfSmartPtr =
+ hasDeclaration(cxxConstructorDecl(ofClass(hasAnyName(SmartPointers))));
// Bitfields binds only to consts and emplace_back take it by universal ref.
auto BitFieldAsArgument = hasAnyArgument(
@@ -91,19 +90,16 @@ void UseEmplaceCheck::registerMatchers(MatchFinder *Finder) {
auto HasConstructExpr = has(ignoringImplicit(SoughtConstructExpr));
auto MakeTuple = ignoringImplicit(
- callExpr(
- callee(expr(ignoringImplicit(declRefExpr(
- unless(hasExplicitTemplateArgs()),
- to(functionDecl(hasAnyName(SmallVector<StringRef, 2>(
- TupleMakeFunctions.begin(), TupleMakeFunctions.end())))))))))
+ callExpr(callee(expr(ignoringImplicit(declRefExpr(
+ unless(hasExplicitTemplateArgs()),
+ to(functionDecl(hasAnyName(TupleMakeFunctions))))))))
.bind("make"));
// make_something can return type convertible to container's element type.
// Allow the conversion only on containers of pairs.
auto MakeTupleCtor = ignoringImplicit(cxxConstructExpr(
has(materializeTemporaryExpr(MakeTuple)),
- hasDeclaration(cxxConstructorDecl(ofClass(hasAnyName(
- SmallVector<StringRef, 2>(TupleTypes.begin(), TupleTypes.end())))))));
+ hasDeclaration(cxxConstructorDecl(ofClass(hasAnyName(TupleTypes))))));
auto SoughtParam = materializeTemporaryExpr(
anyOf(has(MakeTuple), has(MakeTupleCtor),
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.h b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.h
index 6f34bc5b6d77f..096f4e0164cc1 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.h
@@ -36,10 +36,10 @@ class UseEmplaceCheck : public ClangTidyCheck {
private:
const bool IgnoreImplicitConstructors;
- const std::vector<std::string> ContainersWithPushBack;
- const std::vector<std::string> SmartPointers;
- const std::vector<std::string> TupleTypes;
- const std::vector<std::string> TupleMakeFunctions;
+ const std::vector<StringRef> ContainersWithPushBack;
+ const std::vector<StringRef> SmartPointers;
+ const std::vector<StringRef> TupleTypes;
+ const std::vector<StringRef> TupleMakeFunctions;
};
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp
index f992e9de37f53..1b2a80d11d9ca 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp
@@ -131,7 +131,7 @@ void UseNodiscardCheck::check(const MatchFinder::MatchResult &Result) {
// 1. A const member function which returns a variable which is ignored
// but performs some external I/O operation and the return value could be
// ignored.
- Diag << FixItHint::CreateInsertion(RetLoc, NoDiscardMacro + " ");
+ Diag << FixItHint::CreateInsertion(RetLoc, (NoDiscardMacro + " ").str());
}
bool UseNodiscardCheck::isLanguageVersionSupported(
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.h b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.h
index 8c2872e7f5154..89262f796fc9b 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.h
@@ -40,7 +40,7 @@ class UseNodiscardCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string NoDiscardMacro;
+ const StringRef NoDiscardMacro;
};
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
index 0043eb0dab9a4..6cc6b0ff6aa47 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
@@ -89,12 +89,10 @@ void UseNoexceptCheck::check(const MatchFinder::MatchResult &Result) {
bool IsNoThrow = FnTy->isNothrow();
StringRef ReplacementStr =
- IsNoThrow
- ? NoexceptMacro.empty() ? "noexcept" : NoexceptMacro.c_str()
- : NoexceptMacro.empty()
- ? (DtorOrOperatorDel || UseNoexceptFalse) ? "noexcept(false)"
- : ""
- : "";
+ IsNoThrow ? NoexceptMacro.empty() ? "noexcept" : NoexceptMacro
+ : NoexceptMacro.empty()
+ ? (DtorOrOperatorDel || UseNoexceptFalse) ? "noexcept(false)" : ""
+ : "";
FixItHint FixIt;
if ((IsNoThrow || NoexceptMacro.empty()) && CRange.isValid())
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h b/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
index b87d3e629ff69..acaac5ca020ea 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
@@ -40,7 +40,7 @@ class UseNoexceptCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string NoexceptMacro;
+ const StringRef NoexceptMacro;
const bool UseNoexceptFalse;
};
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h b/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h
index 0c7f73ff85376..1776763546b8b 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h
@@ -28,7 +28,7 @@ class UseNullptrCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- const std::string NullMacrosStr;
+ const StringRef NullMacrosStr;
SmallVector<StringRef, 1> NullMacros;
};
diff --git a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
index 63c6f6b8e7aa5..c78fd7f14a404 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
@@ -141,7 +141,7 @@ void UseOverrideCheck::check(const MatchFinder::MatchResult &Result) {
// Add 'override' on inline declarations that don't already have it.
if (!HasFinal && !HasOverride) {
SourceLocation InsertLoc;
- std::string ReplacementText = OverrideSpelling + " ";
+ std::string ReplacementText = (OverrideSpelling + " ").str();
SourceLocation MethodLoc = Method->getLocation();
for (Token T : Tokens) {
@@ -171,7 +171,7 @@ void UseOverrideCheck::check(const MatchFinder::MatchResult &Result) {
// end of the declaration of the function, but prefer to put it on the
// same line as the declaration if the beginning brace for the start of
// the body falls on the next line.
- ReplacementText = " " + OverrideSpelling;
+ ReplacementText = (" " + OverrideSpelling).str();
auto *LastTokenIter = std::prev(Tokens.end());
// When try statement is used instead of compound statement as
// method body - insert override keyword before it.
@@ -192,14 +192,14 @@ void UseOverrideCheck::check(const MatchFinder::MatchResult &Result) {
InsertLoc = Tokens[Tokens.size() - 2].getLocation();
// Check if we need to insert a space.
if ((Tokens[Tokens.size() - 2].getFlags() & Token::LeadingSpace) == 0)
- ReplacementText = " " + OverrideSpelling + " ";
+ ReplacementText = (" " + OverrideSpelling + " ").str();
} else if (getText(Tokens.back(), Sources) == "ABSTRACT")
InsertLoc = Tokens.back().getLocation();
}
if (!InsertLoc.isValid()) {
InsertLoc = FileRange.getEnd();
- ReplacementText = " " + OverrideSpelling;
+ ReplacementText = (" " + OverrideSpelling).str();
}
// If the override macro has been specified just ensure it exists,
diff --git a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
index abb4815967bfc..3671bab0dda29 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
@@ -30,8 +30,8 @@ class UseOverrideCheck : public ClangTidyCheck {
private:
const bool IgnoreDestructors;
const bool AllowOverrideAndFinal;
- const std::string OverrideSpelling;
- const std::string FinalSpelling;
+ const StringRef OverrideSpelling;
+ const StringRef FinalSpelling;
};
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.cpp b/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.cpp
index 35b5bb826f57d..4e69ac974c7b3 100644
--- a/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.cpp
@@ -51,14 +51,9 @@ ForbiddenSubclassingCheck::ForbiddenSubclassingCheck(
void ForbiddenSubclassingCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
objcInterfaceDecl(
- isDerivedFrom(
- objcInterfaceDecl(
- hasAnyName(
- std::vector<StringRef>(
- ForbiddenSuperClassNames.begin(),
- ForbiddenSuperClassNames.end())))
- .bind("superclass")))
- .bind("subclass"),
+ isDerivedFrom(objcInterfaceDecl(hasAnyName(ForbiddenSuperClassNames))
+ .bind("superclass")))
+ .bind("subclass"),
this);
}
diff --git a/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.h b/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.h
index 27be9c9463bca..cd07625018ac0 100644
--- a/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.h
+++ b/clang-tools-extra/clang-tidy/objc/ForbiddenSubclassingCheck.h
@@ -11,7 +11,6 @@
#include "../ClangTidyCheck.h"
#include "llvm/ADT/StringRef.h"
-#include <string>
#include <vector>
namespace clang {
@@ -34,7 +33,7 @@ class ForbiddenSubclassingCheck : public ClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Options) override;
private:
- const std::vector<std::string> ForbiddenSuperClassNames;
+ const std::vector<StringRef> ForbiddenSuperClassNames;
};
} // namespace objc
diff --git a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
index 0b329668adc21..6d74aa0a9be13 100644
--- a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
@@ -71,11 +71,9 @@ void FasterStringFindCheck::registerMatchers(MatchFinder *Finder) {
callee(functionDecl(StringFindFunctions).bind("func")),
anyOf(argumentCountIs(1), argumentCountIs(2)),
hasArgument(0, SingleChar),
- on(expr(
- hasType(hasUnqualifiedDesugaredType(recordType(hasDeclaration(
- recordDecl(hasAnyName(SmallVector<StringRef, 4>(
- StringLikeClasses.begin(), StringLikeClasses.end()))))))),
- unless(hasSubstitutedType())))),
+ on(expr(hasType(hasUnqualifiedDesugaredType(recordType(hasDeclaration(
+ recordDecl(hasAnyName(StringLikeClasses)))))),
+ unless(hasSubstitutedType())))),
this);
}
diff --git a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
index 71a45705f1e81..d7f4c73e50519 100644
--- a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
@@ -35,7 +35,7 @@ class FasterStringFindCheck : public ClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
private:
- const std::vector<std::string> StringLikeClasses;
+ const std::vector<StringRef> StringLikeClasses;
};
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.h b/clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.h
index 71f662ba55445..216b209786403 100644
--- a/clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.h
@@ -42,7 +42,7 @@ class ForRangeCopyCheck : public ClangTidyCheck {
ASTContext &Context);
const bool WarnOnAllAutoCopies;
- const std::vector<std::string> AllowedTypes;
+ const std::vector<StringRef> AllowedTypes;
};
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.cpp b/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.cpp
index e8c895e683c4e..d98df11b3f126 100644
--- a/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.cpp
@@ -159,8 +159,7 @@ void InefficientVectorOperationCheck::addMatcher(
}
void InefficientVectorOperationCheck::registerMatchers(MatchFinder *Finder) {
- const auto VectorDecl = cxxRecordDecl(hasAnyName(SmallVector<StringRef, 5>(
- VectorLikeClasses.begin(), VectorLikeClasses.end())));
+ const auto VectorDecl = cxxRecordDecl(hasAnyName(VectorLikeClasses));
const auto AppendMethodDecl =
cxxMethodDecl(hasAnyName("push_back", "emplace_back"));
addMatcher(VectorDecl, VectorVarDeclName, VectorVarDeclStmtName,
diff --git a/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.h b/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.h
index cebe199a5acda..9664ffa2ac7d0 100644
--- a/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/InefficientVectorOperationCheck.h
@@ -38,7 +38,7 @@ class InefficientVectorOperationCheck : public ClangTidyCheck {
StringRef VarDeclName, StringRef VarDeclStmtName,
const ast_matchers::DeclarationMatcher &AppendMethodDecl,
StringRef AppendCallName, ast_matchers::MatchFinder *Finder);
- const std::vector<std::string> VectorLikeClasses;
+ const std::vector<StringRef> VectorLikeClasses;
// If true, also check inefficient operations for proto repeated fields.
bool EnableProto;
diff --git a/clang-tools-extra/clang-tidy/performance/NoAutomaticMoveCheck.h b/clang-tools-extra/clang-tidy/performance/NoAutomaticMoveCheck.h
index 037a34eeb9468..3215e5d5c67b8 100644
--- a/clang-tools-extra/clang-tidy/performance/NoAutomaticMoveCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/NoAutomaticMoveCheck.h
@@ -29,7 +29,7 @@ class NoAutomaticMoveCheck : public ClangTidyCheck {
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
private:
- const std::vector<std::string> AllowedTypes;
+ const std::vector<StringRef> AllowedTypes;
};
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp
index c1514aed88f70..fae6cd132d1ab 100644
--- a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp
+++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp
@@ -76,7 +76,7 @@ void recordRemoval(const DeclStmt &Stmt, ASTContext &Context,
}
AST_MATCHER_FUNCTION_P(StatementMatcher, isConstRefReturningMethodCall,
- std::vector<std::string>, ExcludedContainerTypes) {
+ std::vector<StringRef>, ExcludedContainerTypes) {
// Match method call expressions where the `this` argument is only used as
// const, this will be checked in `check()` part. This returned const
// reference is highly likely to outlive the local const reference of the
@@ -110,7 +110,7 @@ AST_MATCHER_FUNCTION(StatementMatcher, isConstRefReturningFunctionCall) {
}
AST_MATCHER_FUNCTION_P(StatementMatcher, initializerReturnsReferenceToConst,
- std::vector<std::string>, ExcludedContainerTypes) {
+ std::vector<StringRef>, ExcludedContainerTypes) {
auto OldVarDeclRef =
declRefExpr(to(varDecl(hasLocalStorage()).bind(OldVarDeclId)));
return expr(
@@ -135,7 +135,7 @@ AST_MATCHER_FUNCTION_P(StatementMatcher, initializerReturnsReferenceToConst,
// object arg or variable that is referenced is immutable as well.
static bool isInitializingVariableImmutable(
const VarDecl &InitializingVar, const Stmt &BlockStmt, ASTContext &Context,
- const std::vector<std::string> &ExcludedContainerTypes) {
+ const std::vector<StringRef> &ExcludedContainerTypes) {
if (!isOnlyUsedAsConst(InitializingVar, BlockStmt, Context))
return false;
diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h
index d81a89aa3e559..97df7e9ca9202 100644
--- a/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h
+++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.h
@@ -42,8 +42,8 @@ class UnnecessaryCopyInitialization : public ClangTidyCheck {
void handleCopyFromLocalVar(const VarDecl &NewVar, const VarDecl &OldVar,
const Stmt &BlockStmt, const DeclStmt &Stmt,
bool IssueFix, ASTContext &Context);
- const std::vector<std::string> AllowedTypes;
- const std::vector<std::string> ExcludedContainerTypes;
+ const std::vector<StringRef> AllowedTypes;
+ const std::vector<StringRef> ExcludedContainerTypes;
};
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h b/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h
index a84079e7da229..df4c546c77308 100644
--- a/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.h
@@ -42,7 +42,7 @@ class UnnecessaryValueParamCheck : public ClangTidyCheck {
llvm::DenseMap<const FunctionDecl *, FunctionParmMutationAnalyzer>
MutationAnalyzers;
utils::IncludeInserter Inserter;
- const std::vector<std::string> AllowedTypes;
+ const std::vector<StringRef> AllowedTypes;
};
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 8cede1b2c17b5..0c6e73b3446e0 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -265,7 +265,7 @@ IdentifierNamingCheck::FileStyle IdentifierNamingCheck::getFileStyleFromOptions(
StyleString.resize(StyleSize);
StyleString.append("IgnoredRegexp");
- std::string IgnoredRegexpStr = Options.get(StyleString, "");
+ StringRef IgnoredRegexpStr = Options.get(StyleString, "");
StyleString.resize(StyleSize);
StyleString.append("Prefix");
std::string Prefix(Options.get(StyleString, ""));
@@ -281,7 +281,7 @@ IdentifierNamingCheck::FileStyle IdentifierNamingCheck::getFileStyleFromOptions(
if (CaseOptional || !Prefix.empty() || !Postfix.empty() ||
!IgnoredRegexpStr.empty() || HPTOpt)
Styles[I].emplace(std::move(CaseOptional), std::move(Prefix),
- std::move(Postfix), std::move(IgnoredRegexpStr),
+ std::move(Postfix), IgnoredRegexpStr.str(),
HPTOpt.getValueOr(IdentifierNamingCheck::HPT_Off));
}
bool IgnoreMainLike = Options.get("IgnoreMainLikeFunctions", false);
@@ -445,16 +445,16 @@ void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
SmallString<128> Buffer;
for (const auto &Opt : HNOpts) {
Buffer.assign({Section, "General.", Opt});
- std::string Val = Options.get(Buffer, "");
+ StringRef Val = Options.get(Buffer, "");
if (!Val.empty())
- HNOption.General[Opt] = std::move(Val);
+ HNOption.General[Opt] = Val.str();
}
for (const auto &Type : HNDerivedTypes) {
Buffer.assign({Section, "DerivedType.", Type});
- std::string Val = Options.get(Buffer, "");
+ StringRef Val = Options.get(Buffer, "");
if (!Val.empty())
- HNOption.DerivedType[Type] = std::move(Val);
+ HNOption.DerivedType[Type] = Val.str();
}
static constexpr std::pair<StringRef, StringRef> HNCStrings[] = {
@@ -465,26 +465,26 @@ void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
for (const auto &CStr : HNCStrings) {
Buffer.assign({Section, "CString.", CStr.first});
- std::string Val = Options.get(Buffer, "");
+ StringRef Val = Options.get(Buffer, "");
if (!Val.empty())
- HNOption.CString[CStr.first] = std::move(Val);
+ HNOption.CString[CStr.first] = Val.str();
}
for (const auto &PrimType : HungarainNotationPrimitiveTypes) {
Buffer.assign({Section, "PrimitiveType.", PrimType});
- std::string Val = Options.get(Buffer, "");
+ StringRef Val = Options.get(Buffer, "");
if (!Val.empty()) {
std::string Type = PrimType.str();
std::replace(Type.begin(), Type.end(), '-', ' ');
- HNOption.PrimitiveType[Type] = std::move(Val);
+ HNOption.PrimitiveType[Type] = Val.str();
}
}
for (const auto &Type : HungarainNotationUserDefinedTypes) {
Buffer.assign({Section, "UserDefinedType.", Type});
- std::string Val = Options.get(Buffer, "");
+ StringRef Val = Options.get(Buffer, "");
if (!Val.empty())
- HNOption.UserDefinedType[Type] = std::move(Val);
+ HNOption.UserDefinedType[Type] = Val.str();
}
}
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
index 01809c016ad01..dcad7f8834273 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -198,7 +198,7 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck {
mutable llvm::StringMap<FileStyle> NamingStylesCache;
FileStyle *MainFileStyle;
ClangTidyContext *Context;
- const std::string CheckName;
+ const StringRef CheckName;
const bool GetConfigPerFile;
const bool IgnoreFailedSplit;
HungarianNotation HungarianNotation;
diff --git a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp
index 3d8a0b7b3970a..0209071af87f4 100644
--- a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.cpp
@@ -72,16 +72,20 @@ MagicNumbersCheck::MagicNumbersCheck(StringRef Name, ClangTidyContext *Context)
RawIgnoredFloatingPointValues(Options.get(
"IgnoredFloatingPointValues", DefaultIgnoredFloatingPointValues)) {
// Process the set of ignored integer values.
- const std::vector<std::string> IgnoredIntegerValuesInput =
+ const std::vector<StringRef> IgnoredIntegerValuesInput =
utils::options::parseStringList(RawIgnoredIntegerValues);
IgnoredIntegerValues.resize(IgnoredIntegerValuesInput.size());
llvm::transform(IgnoredIntegerValuesInput, IgnoredIntegerValues.begin(),
- [](const std::string &Value) { return std::stoll(Value); });
+ [](StringRef Value) {
+ int64_t Res;
+ Value.getAsInteger(10, Res);
+ return Res;
+ });
llvm::sort(IgnoredIntegerValues);
if (!IgnoreAllFloatingPointValues) {
// Process the set of ignored floating point values.
- const std::vector<std::string> IgnoredFloatingPointValuesInput =
+ const std::vector<StringRef> IgnoredFloatingPointValuesInput =
utils::options::parseStringList(RawIgnoredFloatingPointValues);
IgnoredFloatingPointValues.reserve(IgnoredFloatingPointValuesInput.size());
IgnoredDoublePointValues.reserve(IgnoredFloatingPointValuesInput.size());
diff --git a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.h b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.h
index 9612fd7ec6aab..a5d289456ec80 100644
--- a/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/MagicNumbersCheck.h
@@ -86,8 +86,8 @@ class MagicNumbersCheck : public ClangTidyCheck {
const bool IgnoreAllFloatingPointValues;
const bool IgnoreBitFieldsWidths;
const bool IgnorePowersOf2IntegerValues;
- const std::string RawIgnoredIntegerValues;
- const std::string RawIgnoredFloatingPointValues;
+ const StringRef RawIgnoredIntegerValues;
+ const StringRef RawIgnoredFloatingPointValues;
constexpr static unsigned SensibleNumberOfMagicValueExceptions = 16;
diff --git a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
index 7a37630433fed..a6e71e6afae55 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
@@ -21,20 +21,13 @@ namespace readability {
const char DefaultStringNames[] =
"::std::basic_string_view;::std::basic_string";
-static ast_matchers::internal::Matcher<NamedDecl>
-hasAnyNameStdString(std::vector<std::string> Names) {
- return ast_matchers::internal::Matcher<NamedDecl>(
- new ast_matchers::internal::HasNameMatcher(std::move(Names)));
-}
-
-static std::vector<std::string>
-removeNamespaces(const std::vector<std::string> &Names) {
- std::vector<std::string> Result;
+static std::vector<StringRef> removeNamespaces(ArrayRef<StringRef> Names) {
+ std::vector<StringRef> Result;
Result.reserve(Names.size());
- for (const std::string &Name : Names) {
- std::string::size_type ColonPos = Name.rfind(':');
+ for (StringRef Name : Names) {
+ StringRef::size_type ColonPos = Name.rfind(':');
Result.push_back(
- Name.substr(ColonPos == std::string::npos ? 0 : ColonPos + 1));
+ Name.drop_front(ColonPos == StringRef::npos ? 0 : ColonPos + 1));
}
return Result;
}
@@ -72,9 +65,8 @@ void RedundantStringInitCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
}
void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) {
- const auto HasStringTypeName = hasAnyNameStdString(StringNames);
- const auto HasStringCtorName =
- hasAnyNameStdString(removeNamespaces(StringNames));
+ const auto HasStringTypeName = hasAnyName(StringNames);
+ const auto HasStringCtorName = hasAnyName(removeNamespaces(StringNames));
// Match string constructor.
const auto StringConstructorExpr = expr(
diff --git a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
index bf694fdc0ba19..e3c09a006b5ba 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.h
@@ -29,7 +29,7 @@ class RedundantStringInitCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- std::vector<std::string> StringNames;
+ std::vector<StringRef> StringNames;
};
} // namespace readability
diff --git a/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.cpp b/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.cpp
index 36294cd0e9b82..d77b4368527c5 100644
--- a/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.cpp
@@ -28,8 +28,7 @@ SimplifySubscriptExprCheck::SimplifySubscriptExprCheck(
void SimplifySubscriptExprCheck::registerMatchers(MatchFinder *Finder) {
const auto TypesMatcher = hasUnqualifiedDesugaredType(
- recordType(hasDeclaration(cxxRecordDecl(hasAnyName(
- llvm::SmallVector<StringRef, 8>(Types.begin(), Types.end()))))));
+ recordType(hasDeclaration(cxxRecordDecl(hasAnyName(Types)))));
Finder->addMatcher(
arraySubscriptExpr(hasBase(
diff --git a/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.h b/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.h
index 6caaf49de2a3d..5c83df6601d71 100644
--- a/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/SimplifySubscriptExprCheck.h
@@ -33,7 +33,7 @@ class SimplifySubscriptExprCheck : public ClangTidyCheck {
}
private:
- const std::vector<std::string> Types;
+ const std::vector<StringRef> Types;
};
} // namespace readability
diff --git a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index ac6bda3ff09ff..d7066fa6ca1c5 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -526,12 +526,13 @@ SuspiciousCallArgumentCheck::SuspiciousCallArgumentCheck(
GetBoundOpt(H, BoundKind::SimilarAbove)));
}
- for (const std::string &Abbreviation : optutils::parseStringList(
+ for (StringRef Abbreviation : optutils::parseStringList(
Options.get("Abbreviations", DefaultAbbreviations))) {
- auto KeyAndValue = StringRef{Abbreviation}.split("=");
+ auto KeyAndValue = Abbreviation.split("=");
+ llvm::errs() << "'" << Abbreviation << "'\n";
assert(!KeyAndValue.first.empty() && !KeyAndValue.second.empty());
AbbreviationDictionary.insert(
- std::make_pair(KeyAndValue.first.str(), KeyAndValue.second.str()));
+ std::make_pair(KeyAndValue.first, KeyAndValue.second.str()));
}
}
@@ -573,7 +574,8 @@ void SuspiciousCallArgumentCheck::storeOptions(
Abbreviations.emplace_back(EqualSignJoined.str());
}
Options.store(Opts, "Abbreviations",
- optutils::serializeStringList(Abbreviations));
+ optutils::serializeStringList(std::vector<StringRef>(
+ Abbreviations.begin(), Abbreviations.end())));
}
bool SuspiciousCallArgumentCheck::isHeuristicEnabled(Heuristic H) const {
diff --git a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp
index badbf2a0d96f4..0b1f3ddbe0c2f 100644
--- a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.cpp
@@ -87,18 +87,18 @@ llvm::Optional<SourceRange> getMacroAwareSourceRange(SourceRange Loc,
llvm::Optional<std::string>
getNewSuffix(llvm::StringRef OldSuffix,
- const std::vector<std::string> &NewSuffixes) {
+ const std::vector<StringRef> &NewSuffixes) {
// If there is no config, just uppercase the entirety of the suffix.
if (NewSuffixes.empty())
return OldSuffix.upper();
// Else, find matching suffix, case-*insensitive*ly.
- auto NewSuffix = llvm::find_if(
- NewSuffixes, [OldSuffix](const std::string &PotentialNewSuffix) {
+ auto NewSuffix =
+ llvm::find_if(NewSuffixes, [OldSuffix](StringRef PotentialNewSuffix) {
return OldSuffix.equals_insensitive(PotentialNewSuffix);
});
// Have a match, return it.
if (NewSuffix != NewSuffixes.end())
- return *NewSuffix;
+ return NewSuffix->str();
// Nope, I guess we have to keep it as-is.
return llvm::None;
}
@@ -106,7 +106,7 @@ getNewSuffix(llvm::StringRef OldSuffix,
template <typename LiteralType>
llvm::Optional<NewSuffix>
shouldReplaceLiteralSuffix(const Expr &Literal,
- const std::vector<std::string> &NewSuffixes,
+ const std::vector<StringRef> &NewSuffixes,
const SourceManager &SM, const LangOptions &LO) {
NewSuffix ReplacementDsc;
diff --git a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.h b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.h
index 1f6e6e6fd572c..802993ade8479 100644
--- a/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/UppercaseLiteralSuffixCheck.h
@@ -36,7 +36,7 @@ class UppercaseLiteralSuffixCheck : public ClangTidyCheck {
template <typename LiteralType>
bool checkBoundMatch(const ast_matchers::MatchFinder::MatchResult &Result);
- const std::vector<std::string> NewSuffixes;
+ const std::vector<StringRef> NewSuffixes;
const bool IgnoreMacros;
};
diff --git a/clang-tools-extra/clang-tidy/utils/Matchers.h b/clang-tools-extra/clang-tidy/utils/Matchers.h
index 469ce4a9c4a4c..ad9e25f201edb 100644
--- a/clang-tools-extra/clang-tidy/utils/Matchers.h
+++ b/clang-tools-extra/clang-tidy/utils/Matchers.h
@@ -55,7 +55,7 @@ AST_MATCHER_FUNCTION(ast_matchers::TypeMatcher, isPointerToConst) {
class MatchesAnyListedNameMatcher
: public ast_matchers::internal::MatcherInterface<NamedDecl> {
public:
- explicit MatchesAnyListedNameMatcher(llvm::ArrayRef<std::string> NameList) {
+ explicit MatchesAnyListedNameMatcher(llvm::ArrayRef<StringRef> NameList) {
std::transform(
NameList.begin(), NameList.end(), std::back_inserter(NameMatchers),
[](const llvm::StringRef Name) { return NameMatcher(Name); });
@@ -116,7 +116,7 @@ class MatchesAnyListedNameMatcher
// expressions. If a regular expression contains starts ':' the NamedDecl's
// qualified name will be used for matching, otherwise its name will be used.
inline ::clang::ast_matchers::internal::Matcher<NamedDecl>
-matchesAnyListedName(llvm::ArrayRef<std::string> NameList) {
+matchesAnyListedName(llvm::ArrayRef<StringRef> NameList) {
return ::clang::ast_matchers::internal::makeMatcher(
new MatchesAnyListedNameMatcher(NameList));
}
diff --git a/clang-tools-extra/clang-tidy/utils/OptionsUtils.cpp b/clang-tools-extra/clang-tidy/utils/OptionsUtils.cpp
index 25677fa464070..b443aac7eeaf8 100644
--- a/clang-tools-extra/clang-tidy/utils/OptionsUtils.cpp
+++ b/clang-tools-extra/clang-tidy/utils/OptionsUtils.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "OptionsUtils.h"
+#include "llvm/ADT/StringExtras.h"
namespace clang {
namespace tidy {
@@ -15,19 +16,50 @@ namespace options {
static const char StringsDelimiter[] = ";";
-std::vector<std::string> parseStringList(StringRef Option) {
- SmallVector<StringRef, 4> Names;
- Option.split(Names, StringsDelimiter);
- std::vector<std::string> Result;
- for (StringRef &Name : Names) {
- Name = Name.trim();
- if (!Name.empty())
- Result.emplace_back(Name);
+std::vector<StringRef> parseStringList(StringRef Option) {
+ Option = Option.trim().trim(StringsDelimiter);
+ if (Option.empty())
+ return {};
+ std::vector<StringRef> Result;
+ Result.reserve(Option.count(StringsDelimiter) + 1);
+ StringRef Cur;
+ while (std::tie(Cur, Option) = Option.split(StringsDelimiter),
+ !Option.empty()) {
+ Cur = Cur.trim();
+ if (!Cur.empty())
+ Result.push_back(Cur);
}
+ Cur = Cur.trim();
+ if (!Cur.empty())
+ Result.push_back(Cur);
return Result;
}
-std::string serializeStringList(ArrayRef<std::string> Strings) {
+std::vector<StringRef> parseListPair(StringRef L, StringRef R) {
+ L = L.trim().trim(StringsDelimiter);
+ if (L.empty())
+ return parseStringList(R);
+ R = R.trim().trim(StringsDelimiter);
+ if (R.empty())
+ return parseStringList(L);
+ std::vector<StringRef> Result;
+ Result.reserve(2 + L.count(StringsDelimiter) + R.count(StringsDelimiter));
+ for (StringRef Option : {L, R}) {
+ StringRef Cur;
+ while (std::tie(Cur, Option) = Option.split(StringsDelimiter),
+ !Option.empty()) {
+ Cur = Cur.trim();
+ if (!Cur.empty())
+ Result.push_back(Cur);
+ }
+ Cur = Cur.trim();
+ if (!Cur.empty())
+ Result.push_back(Cur);
+ }
+ return Result;
+}
+
+std::string serializeStringList(ArrayRef<StringRef> Strings) {
return llvm::join(Strings, StringsDelimiter);
}
diff --git a/clang-tools-extra/clang-tidy/utils/OptionsUtils.h b/clang-tools-extra/clang-tidy/utils/OptionsUtils.h
index 5f837473d2312..9c36d71fe0ead 100644
--- a/clang-tools-extra/clang-tidy/utils/OptionsUtils.h
+++ b/clang-tools-extra/clang-tidy/utils/OptionsUtils.h
@@ -9,7 +9,9 @@
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_OPTIONUTILS_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_OPTIONUTILS_H
-#include "../ClangTidy.h"
+#include "clang/Basic/LLVM.h"
+#include <string>
+#include <vector>
namespace clang {
namespace tidy {
@@ -17,11 +19,13 @@ namespace utils {
namespace options {
/// Parse a semicolon separated list of strings.
-std::vector<std::string> parseStringList(StringRef Option);
+std::vector<StringRef> parseStringList(StringRef Option);
+
+std::vector<StringRef> parseListPair(StringRef L, StringRef R);
/// Serialize a sequence of names that can be parsed by
/// ``parseStringList``.
-std::string serializeStringList(ArrayRef<std::string> Strings);
+std::string serializeStringList(ArrayRef<StringRef> Strings);
} // namespace options
} // namespace utils
diff --git a/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.cpp b/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.cpp
index fa822c3dd8b7c..88fd926158093 100644
--- a/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.cpp
@@ -20,7 +20,7 @@ namespace clang {
namespace tidy {
namespace zircon {
-AST_MATCHER_P(CXXRecordDecl, matchesAnyName, ArrayRef<std::string>, Names) {
+AST_MATCHER_P(CXXRecordDecl, matchesAnyName, ArrayRef<StringRef>, Names) {
std::string QualifiedName = Node.getQualifiedNameAsString();
return llvm::any_of(Names,
[&](StringRef Name) { return QualifiedName == Name; });
diff --git a/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.h b/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.h
index 1243dad838dfa..cd2ab3e4f4b10 100644
--- a/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.h
+++ b/clang-tools-extra/clang-tidy/zircon/TemporaryObjectsCheck.h
@@ -31,7 +31,7 @@ class TemporaryObjectsCheck : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
private:
- std::vector<std::string> Names;
+ std::vector<StringRef> Names;
};
} // namespace zircon
More information about the cfe-commits
mailing list