Skip to content

Commit

Permalink
[clangd] Revert to older include spelling approach.
Browse files Browse the repository at this point in the history
  • Loading branch information
VitaNuo committed Jun 5, 2023
1 parent 3581e6b commit cd5fcea
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
5 changes: 1 addition & 4 deletions clang-tools-extra/clangd/Hover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#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"
Expand Down Expand Up @@ -1223,9 +1222,7 @@ void maybeAddSymbolProviders(ParsedAST &AST, HoverInfo &HI,
// 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)
Expand Down
22 changes: 19 additions & 3 deletions clang-tools-extra/clangd/IncludeCleaner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,9 @@ std::vector<Diag> generateMissingIncludeDiagnostics(
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.,
Expand Down Expand Up @@ -334,6 +334,22 @@ convertIncludes(const SourceManager &SM,
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,
Expand Down
5 changes: 5 additions & 0 deletions clang-tools-extra/clangd/IncludeCleaner.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ include_cleaner::Includes
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);

Expand Down

0 comments on commit cd5fcea

Please sign in to comment.