forked from OSchip/llvm-project
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
//===-- PragmaCommentHandler.cpp - find all symbols -----------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#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
|