#include "Selection.h"
#include "SourceCode.h"
#include "clang-include-cleaner/Analysis.h"
-#include "clang-include-cleaner/IncludeSpeller.h"
#include "clang-include-cleaner/Types.h"
#include "index/SymbolCollector.h"
#include "support/Logger.h"
// on local variables, etc.
return;
- HI.Provider = include_cleaner::spellHeader(
- {H, AST.getPreprocessor().getHeaderSearchInfo(),
- SM.getFileEntryForID(SM.getMainFileID())});
+ HI.Provider = spellHeader(AST, SM.getFileEntryForID(SM.getMainFileID()), H);
}
// FIXME: similar functions are present in FindHeaders.cpp (symbolName)
continue;
}
- std::string Spelling = include_cleaner::spellHeader(
- {SymbolWithMissingInclude.Providers.front(),
- AST.getPreprocessor().getHeaderSearchInfo(), MainFile});
+ std::string Spelling =
+ spellHeader(AST, MainFile, SymbolWithMissingInclude.Providers.front());
+
llvm::StringRef HeaderRef{Spelling};
bool Angled = HeaderRef.starts_with("<");
// We might suggest insertion of an existing include in edge cases, e.g.,
return ConvertedIncludes;
}
+std::string spellHeader(ParsedAST &AST, const FileEntry *MainFile,
+ include_cleaner::Header Provider) {
+ if (Provider.kind() == include_cleaner::Header::Physical) {
+ if (auto CanonicalPath =
+ getCanonicalPath(Provider.physical()->getLastRef(),
+ AST.getSourceManager().getFileManager())) {
+ std::string SpelledHeader =
+ llvm::cantFail(URI::includeSpelling(URI::create(*CanonicalPath)));
+ if (!SpelledHeader.empty())
+ return SpelledHeader;
+ }
+ }
+ return include_cleaner::spellHeader(
+ {Provider, AST.getPreprocessor().getHeaderSearchInfo(), MainFile});
+}
+
std::vector<const Inclusion *>
getUnused(ParsedAST &AST,
const llvm::DenseSet<IncludeStructure::HeaderID> &ReferencedFiles,
convertIncludes(const SourceManager &SM,
const llvm::ArrayRef<Inclusion> Includes);
+/// Determines the header spelling of an include-cleaner header
+/// representation. The spelling contains the ""<> characters.
+std::string spellHeader(ParsedAST &AST, const FileEntry *MainFile,
+ include_cleaner::Header Provider);
+
std::vector<include_cleaner::SymbolReference>
collectMacroReferences(ParsedAST &AST);