11 #include "clang/Lex/Token.h" 20 : Inserter(Inserter) {}
24 const Token &IncludeToken, StringRef FileNameRef,
25 bool IsAngled, CharSourceRange FileNameRange,
27 StringRef , StringRef ,
28 const Module * )
override {
29 Inserter->AddInclude(FileNameRef, IsAngled, HashLocation,
30 IncludeToken.getEndLoc());
38 const LangOptions &LangOpts,
40 : SourceMgr(SourceMgr), LangOpts(LangOpts), Style(Style) {}
45 return llvm::make_unique<IncludeInserterCallback>(
this);
48 llvm::Optional<FixItHint>
53 if (!InsertedHeaders[FileID].insert(Header).second)
56 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
59 IncludeSorterByFile.insert(std::make_pair(
61 llvm::make_unique<IncludeSorter>(
62 &SourceMgr, &LangOpts, FileID,
63 SourceMgr.getFilename(SourceMgr.getLocForStartOfFile(FileID)),
66 return IncludeSorterByFile[FileID]->CreateIncludeInsertion(Header, IsAngled);
69 void IncludeInserter::AddInclude(StringRef FileName,
bool IsAngled,
70 SourceLocation HashLocation,
71 SourceLocation EndLocation) {
72 FileID FileID = SourceMgr.getFileID(HashLocation);
73 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
74 IncludeSorterByFile.insert(std::make_pair(
75 FileID, llvm::make_unique<IncludeSorter>(
76 &SourceMgr, &LangOpts, FileID,
77 SourceMgr.getFilename(HashLocation), Style)));
79 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.