//===-- 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