Author: Viktoriia Bakalova Date: 2023-06-05T15:18:28Z New Revision: cd5fcea6d4c70a7328ca9538c9098d9f5af69682
URL: https://github.com/llvm/llvm-project/commit/cd5fcea6d4c70a7328ca9538c9098d9f5af69682 DIFF: https://github.com/llvm/llvm-project/commit/cd5fcea6d4c70a7328ca9538c9098d9f5af69682.diff LOG: [clangd] Revert to older include spelling approach. Added: Modified: clang-tools-extra/clangd/Hover.cpp clang-tools-extra/clangd/IncludeCleaner.cpp clang-tools-extra/clangd/IncludeCleaner.h Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp index 80303267b31a0..d1f6f3a7b06c0 100644 --- a/clang-tools-extra/clangd/Hover.cpp +++ b/clang-tools-extra/clangd/Hover.cpp @@ -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" @@ -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) diff --git a/clang-tools-extra/clangd/IncludeCleaner.cpp b/clang-tools-extra/clangd/IncludeCleaner.cpp index c9d32a00fc15f..fa30592e75807 100644 --- a/clang-tools-extra/clangd/IncludeCleaner.cpp +++ b/clang-tools-extra/clangd/IncludeCleaner.cpp @@ -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., @@ -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, diff --git a/clang-tools-extra/clangd/IncludeCleaner.h b/clang-tools-extra/clangd/IncludeCleaner.h index c4051b30ca317..675c05a53d5f8 100644 --- a/clang-tools-extra/clangd/IncludeCleaner.h +++ b/clang-tools-extra/clangd/IncludeCleaner.h @@ -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); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits