Skip to content

Commit 2b21fc5

Browse files
SimplyDannyAaronBallman
authored andcommitted
Allow newline characters as separators for checks in Clang-Tidy configurations
This is a fix for llvm#53737. In addition to commas, newline characters are considered as separators of checks.
1 parent 1da2c5b commit 2b21fc5

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

clang-tools-extra/clang-tidy/GlobList.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ static bool consumeNegativeIndicator(StringRef &GlobList) {
2727
// Converts first glob from the comma-separated list of globs to Regex and
2828
// removes it and the trailing comma from the GlobList.
2929
static llvm::Regex consumeGlob(StringRef &GlobList) {
30-
StringRef UntrimmedGlob = GlobList.substr(0, GlobList.find(','));
30+
StringRef UntrimmedGlob = GlobList.substr(0, GlobList.find_first_of(",\n"));
3131
StringRef Glob = UntrimmedGlob.trim();
3232
GlobList = GlobList.substr(UntrimmedGlob.size() + 1);
3333
SmallString<128> RegexText("^");
@@ -44,7 +44,7 @@ static llvm::Regex consumeGlob(StringRef &GlobList) {
4444
}
4545

4646
GlobList::GlobList(StringRef Globs, bool KeepNegativeGlobs /* =true */) {
47-
Items.reserve(Globs.count(',') + 1);
47+
Items.reserve(Globs.count(',') + Globs.count('\n') + 1);
4848
do {
4949
GlobListItem Item;
5050
Item.IsPositive = !consumeNegativeIndicator(Globs);

clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ TEST(ParseConfiguration, ValidConfiguration) {
8686
EXPECT_EQ("some.user", *Options->User);
8787
}
8888

89+
TEST(ParseConfiguration, ChecksSeparatedByNewlines) {
90+
auto MemoryBuffer = llvm::MemoryBufferRef("Checks: |\n"
91+
" -*,misc-*\n"
92+
" llvm-*\n"
93+
" -clang-*,\n"
94+
" google-*",
95+
"Options");
96+
97+
auto Options = parseConfiguration(MemoryBuffer);
98+
99+
EXPECT_TRUE(!!Options);
100+
EXPECT_EQ("-*,misc-*\nllvm-*\n-clang-*,\ngoogle-*\n", *Options->Checks);
101+
}
102+
89103
TEST(ParseConfiguration, MergeConfigurations) {
90104
llvm::ErrorOr<ClangTidyOptions> Options1 =
91105
parseConfiguration(llvm::MemoryBufferRef(R"(

clang-tools-extra/unittests/clang-tidy/GlobListTest.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,18 @@ TYPED_TEST(GlobListTest, Complex) {
104104
EXPECT_TRUE(Filter.contains("asdfqwEasdf"));
105105
}
106106

107+
TYPED_TEST(GlobListTest, NewlineCharactersAsSeparators) {
108+
TypeParam Filter("a* \n b,\n-c*,dd");
109+
110+
EXPECT_FALSE(Filter.contains(""));
111+
EXPECT_TRUE(Filter.contains("aaa"));
112+
EXPECT_TRUE(Filter.contains("b"));
113+
EXPECT_FALSE(Filter.contains("c"));
114+
EXPECT_FALSE(Filter.contains("ccc"));
115+
EXPECT_FALSE(Filter.contains("d"));
116+
EXPECT_TRUE(Filter.contains("dd"));
117+
EXPECT_FALSE(Filter.contains("ddd"));
118+
}
119+
107120
} // namespace tidy
108121
} // namespace clang

0 commit comments

Comments
 (0)