Allow comments with '#' in dynamic AST Matchers

Summary: This is necessary for clang-query to be able to handle comments.

Reviewers: aaron.ballman

Reviewed By: aaron.ballman

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D52751

llvm-svn: 343665
This commit is contained in:
Stephen Kelly 2018-10-03 07:56:43 +00:00
parent 42668a4d03
commit 7c787b8adf
2 changed files with 21 additions and 2 deletions

View File

@ -110,6 +110,10 @@ private:
}
switch (Code[0]) {
case '#':
Result.Kind = TokenInfo::TK_Eof;
Result.Text = "";
return Result;
case ',':
Result.Kind = TokenInfo::TK_Comma;
Result.Text = Code.substr(0, 1);

View File

@ -148,8 +148,8 @@ TEST(ParserTest, ParseMatcher) {
const uint64_t ExpectedBar = Sema.expectMatcher("Bar");
const uint64_t ExpectedBaz = Sema.expectMatcher("Baz");
Sema.parse(" Foo ( Bar ( 17), Baz( \n \"B A,Z\") ) .bind( \"Yo!\") ");
for (size_t i = 0, e = Sema.Errors.size(); i != e; ++i) {
EXPECT_EQ("", Sema.Errors[i]);
for (const auto &E : Sema.Errors) {
EXPECT_EQ("", E);
}
EXPECT_NE(ExpectedFoo, ExpectedBar);
@ -181,6 +181,21 @@ TEST(ParserTest, ParseMatcher) {
EXPECT_EQ("Yo!", Foo.BoundID);
}
TEST(ParserTest, ParseComment) {
MockSema Sema;
const uint64_t ExpectedFoo = Sema.expectMatcher("Foo");
Sema.parse(" Foo() # Bar() ");
for (const auto &E : Sema.Errors) {
EXPECT_EQ("", E);
}
EXPECT_EQ(1ULL, Sema.Matchers.size());
Sema.parse("Foo(#) ");
EXPECT_EQ("1:4: Error parsing matcher. Found end-of-code while looking for ')'.", Sema.Errors[1]);
}
using ast_matchers::internal::Matcher;
Parser::NamedValueMap getTestNamedValues() {