1 //===-- PragmaCommentHandler.cpp - find all symbols -----------------------===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "PragmaCommentHandler.h"
10 #include "FindAllSymbols.h"
11 #include "HeaderMapCollector.h"
12 #include "clang/Lex/Preprocessor.h"
13 #include "llvm/Support/Regex.h"
16 namespace find_all_symbols
{
18 const char IWYUPragma
[] = "// IWYU pragma: private, include ";
21 bool PragmaCommentHandler::HandleComment(Preprocessor
&PP
, SourceRange Range
) {
23 Lexer::getSourceText(CharSourceRange::getCharRange(Range
),
24 PP
.getSourceManager(), PP
.getLangOpts());
25 size_t Pos
= Text
.find(IWYUPragma
);
26 if (Pos
== StringRef::npos
)
28 StringRef RemappingFilePath
= Text
.substr(Pos
+ std::strlen(IWYUPragma
));
29 Collector
->addHeaderMapping(
30 PP
.getSourceManager().getFilename(Range
.getBegin()),
31 RemappingFilePath
.trim("\"<>"));
35 } // namespace find_all_symbols