37 lines · cpp
1//===-- PragmaCommentHandler.cpp - find all symbols -----------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "PragmaCommentHandler.h"10#include "FindAllSymbols.h"11#include "HeaderMapCollector.h"12#include "clang/Lex/Preprocessor.h"13#include "llvm/Support/Regex.h"14 15namespace clang {16namespace find_all_symbols {17namespace {18const char IWYUPragma[] = "// IWYU pragma: private, include ";19} // namespace20 21bool PragmaCommentHandler::HandleComment(Preprocessor &PP, SourceRange Range) {22 StringRef Text =23 Lexer::getSourceText(CharSourceRange::getCharRange(Range),24 PP.getSourceManager(), PP.getLangOpts());25 size_t Pos = Text.find(IWYUPragma);26 if (Pos == StringRef::npos)27 return false;28 StringRef RemappingFilePath = Text.substr(Pos + std::strlen(IWYUPragma));29 Collector->addHeaderMapping(30 PP.getSourceManager().getFilename(Range.getBegin()),31 RemappingFilePath.trim("\"<>"));32 return false;33}34 35} // namespace find_all_symbols36} // namespace clang37