Allow whitespace in include directives. This allows statements like: # include "foo.h" To be processed by gn check. Bug: gn:37 Change-Id: I89d506863d03b360fc0ec9f42101d984107dd979 Reviewed-on: https://gn-review.googlesource.com/c/3601 Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/tools/gn/c_include_iterator.cc b/tools/gn/c_include_iterator.cc index 9f4f070..0c5476d 100644 --- a/tools/gn/c_include_iterator.cc +++ b/tools/gn/c_include_iterator.cc
@@ -62,15 +62,20 @@ IncludeType ExtractInclude(const base::StringPiece& line, base::StringPiece* path, int* begin_char) { - static const char kInclude[] = "#include"; + static const char kInclude[] = "include"; static const size_t kIncludeLen = arraysize(kInclude) - 1; // No null. - static const char kImport[] = "#import"; + static const char kImport[] = "import"; static const size_t kImportLen = arraysize(kImport) - 1; // No null. base::StringPiece trimmed = TrimLeadingWhitespace(line); if (trimmed.empty()) return INCLUDE_NONE; + if (trimmed[0] != '#') + return INCLUDE_NONE; + + trimmed = TrimLeadingWhitespace(trimmed.substr(1)); + base::StringPiece contents; if (base::StartsWith(trimmed, base::StringPiece(kInclude, kIncludeLen), base::CompareCase::SENSITIVE))
diff --git a/tools/gn/c_include_iterator_unittest.cc b/tools/gn/c_include_iterator_unittest.cc index ef44263..a88537c 100644 --- a/tools/gn/c_include_iterator_unittest.cc +++ b/tools/gn/c_include_iterator_unittest.cc
@@ -159,3 +159,20 @@ EXPECT_TRUE(iter.GetNextIncludeString(&contents, &range)); EXPECT_EQ("foo/bar.h", contents); } + +// Tests that spaces between the hash and directive are ignored. +TEST(CIncludeIterator, SpacesAfterHash) { + std::string buffer("# include \"foo/bar.h\"\n"); + + InputFile file(SourceFile("//foo.cc")); + file.SetContents(buffer); + + base::StringPiece contents; + LocationRange range; + + CIncludeIterator iter(&file); + EXPECT_TRUE(iter.GetNextIncludeString(&contents, &range)); + EXPECT_EQ("foo/bar.h", contents); + + EXPECT_FALSE(iter.GetNextIncludeString(&contents, &range)); +}