| //===-- PragmaCommentHandler.cpp - find all symbols -----------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "PragmaCommentHandler.h" |
| #include "FindAllSymbols.h" |
| #include "HeaderMapCollector.h" |
| #include "clang/Lex/Preprocessor.h" |
| #include "llvm/Support/Regex.h" |
| |
| namespace clang { |
| namespace find_all_symbols { |
| namespace { |
| const char IWYUPragma[] = "// IWYU pragma: private, include "; |
| } // namespace |
| |
| bool PragmaCommentHandler::HandleComment(Preprocessor &PP, SourceRange Range) { |
| StringRef Text = |
| Lexer::getSourceText(CharSourceRange::getCharRange(Range), |
| PP.getSourceManager(), PP.getLangOpts()); |
| size_t Pos = Text.find(IWYUPragma); |
| if (Pos == StringRef::npos) |
| return false; |
| StringRef RemappingFilePath = Text.substr(Pos + std::strlen(IWYUPragma)); |
| Collector->addHeaderMapping( |
| PP.getSourceManager().getFilename(Range.getBegin()), |
| RemappingFilePath.trim("\"<>")); |
| return false; |
| } |
| |
| } // namespace find_all_symbols |
| } // namespace clang |