11 #include "clang/Lex/Token.h"
20 : Inserter(Inserter) {}
24 const Token & IncludeToken,
25 StringRef FileNameRef,
bool IsAngled,
26 CharSourceRange FileNameRange,
28 StringRef , StringRef ,
29 const Module * )
override {
30 Inserter->AddInclude(FileNameRef, IsAngled, HashLocation,
31 IncludeToken.getEndLoc());
41 : SourceMgr(SourceMgr), LangOpts(LangOpts), Style(Style) {}
46 return llvm::make_unique<IncludeInserterCallback>(
this);
49 llvm::Optional<FixItHint>
54 if (!InsertedHeaders[FileID].insert(Header).second)
57 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
60 IncludeSorterByFile.insert(std::make_pair(
62 llvm::make_unique<IncludeSorter>(
63 &SourceMgr, &LangOpts, FileID,
64 SourceMgr.getFilename(SourceMgr.getLocForStartOfFile(FileID)),
67 return IncludeSorterByFile[FileID]->CreateIncludeInsertion(Header, IsAngled);
70 void IncludeInserter::AddInclude(StringRef FileName,
bool IsAngled,
71 SourceLocation HashLocation,
72 SourceLocation EndLocation) {
73 FileID FileID = SourceMgr.getFileID(HashLocation);
74 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
75 IncludeSorterByFile.insert(std::make_pair(
76 FileID, llvm::make_unique<IncludeSorter>(
77 &SourceMgr, &LangOpts, FileID,
78 SourceMgr.getFilename(HashLocation), Style)));
80 IncludeSorterByFile[FileID]->AddInclude(FileName, IsAngled, HashLocation,
std::unique_ptr< PPCallbacks > CreatePPCallbacks()
Create PPCallbacks for registration with the compiler's preprocessor.
IncludeStyle
Supported include styles.
IncludeInserterCallback(IncludeInserter *Inserter)
bool IsAngled
true if this was an include with angle brackets
void InclusionDirective(SourceLocation HashLocation, const Token &IncludeToken, StringRef FileNameRef, bool IsAngled, CharSourceRange FileNameRange, const FileEntry *, StringRef, StringRef, const Module *) override
IncludeInserter(const SourceManager &SourceMgr, const LangOptions &LangOpts, IncludeSorter::IncludeStyle Style)
Produces fixes to insert specified includes to source files, if not yet present.
llvm::Optional< FixItHint > CreateIncludeInsertion(FileID FileID, llvm::StringRef Header, bool IsAngled)
Creates a Header inclusion directive fixit.