forked from OSchip/llvm-project
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
//===-- 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
|