VitaNuo created this revision.
Herald added subscribers: kadircet, arphaman.
Herald added a project: All.
VitaNuo requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D152542
Files:
clang-tools-extra/clangd/Hover.cpp
clang-tools-extra/clangd/IncludeCleaner.cpp
clang-tools-extra/clangd/IncludeCleaner.h
Index: clang-tools-extra/clangd/IncludeCleaner.h
===================================================================
--- clang-tools-extra/clangd/IncludeCleaner.h
+++ clang-tools-extra/clangd/IncludeCleaner.h
@@ -74,11 +74,6 @@
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);
Index: clang-tools-extra/clangd/IncludeCleaner.cpp
===================================================================
--- clang-tools-extra/clangd/IncludeCleaner.cpp
+++ clang-tools-extra/clangd/IncludeCleaner.cpp
@@ -198,8 +198,9 @@
continue;
}
- std::string Spelling =
- spellHeader(AST, MainFile, SymbolWithMissingInclude.Providers.front());
+ std::string Spelling = include_cleaner::spellHeader(
+ {SymbolWithMissingInclude.Providers.front(),
+ AST.getPreprocessor().getHeaderSearchInfo(), MainFile});
llvm::StringRef HeaderRef{Spelling};
bool Angled = HeaderRef.starts_with("<");
@@ -334,22 +335,6 @@
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,
@@ -459,7 +444,8 @@
return {std::move(UnusedIncludes), std::move(MissingIncludes)};
}
-std::optional<Fix> removeAllUnusedIncludes(llvm::ArrayRef<Diag> UnusedIncludes) {
+std::optional<Fix>
+removeAllUnusedIncludes(llvm::ArrayRef<Diag> UnusedIncludes) {
if (UnusedIncludes.empty())
return std::nullopt;
@@ -468,8 +454,8 @@
for (const auto &Diag : UnusedIncludes) {
assert(Diag.Fixes.size() == 1 && "Expected exactly one fix.");
RemoveAll.Edits.insert(RemoveAll.Edits.end(),
- Diag.Fixes.front().Edits.begin(),
- Diag.Fixes.front().Edits.end());
+ Diag.Fixes.front().Edits.begin(),
+ Diag.Fixes.front().Edits.end());
}
// TODO(hokein): emit a suitable text for the label.
@@ -497,7 +483,7 @@
llvm::StringMap<TextEdit> Edits;
for (const auto &Diag : MissingIncludeDiags) {
assert(Diag.Fixes.size() == 1 && "Expected exactly one fix.");
- for (const auto& Edit : Diag.Fixes.front().Edits) {
+ for (const auto &Edit : Diag.Fixes.front().Edits) {
Edits.try_emplace(Edit.newText, Edit);
}
}
@@ -517,7 +503,7 @@
}
return AddAllMissing;
}
-Fix fixAll(const Fix& RemoveAllUnused, const Fix& AddAllMissing) {
+Fix fixAll(const Fix &RemoveAllUnused, const Fix &AddAllMissing) {
Fix FixAll;
FixAll.Message = "fix all includes";
@@ -526,22 +512,23 @@
for (const auto &F : AddAllMissing.Edits)
FixAll.Edits.push_back(F);
- for (const auto& A : RemoveAllUnused.Annotations)
+ for (const auto &A : RemoveAllUnused.Annotations)
FixAll.Annotations.push_back(A);
- for (const auto& A : AddAllMissing.Annotations)
+ for (const auto &A : AddAllMissing.Annotations)
FixAll.Annotations.push_back(A);
return FixAll;
}
-std::vector<Diag> generateIncludeCleanerDiagnostic(
- ParsedAST &AST, const IncludeCleanerFindings &Findings,
- llvm::StringRef Code) {
+std::vector<Diag>
+generateIncludeCleanerDiagnostic(ParsedAST &AST,
+ const IncludeCleanerFindings &Findings,
+ llvm::StringRef Code) {
std::vector<Diag> UnusedIncludes = generateUnusedIncludeDiagnostics(
AST.tuPath(), Findings.UnusedIncludes, Code);
std::optional<Fix> RemoveAllUnused = removeAllUnusedIncludes(UnusedIncludes);
- std::vector<Diag> MissingIncludeDiags = generateMissingIncludeDiagnostics(
- AST, Findings.MissingIncludes, Code);
+ std::vector<Diag> MissingIncludeDiags =
+ generateMissingIncludeDiagnostics(AST, Findings.MissingIncludes, Code);
std::optional<Fix> AddAllMissing = addAllMissingIncludes(MissingIncludeDiags);
std::optional<Fix> FixAll;
@@ -549,26 +536,23 @@
FixAll = fixAll(*RemoveAllUnused, *AddAllMissing);
auto AddBatchFix = [](const std::optional<Fix> &F, clang::clangd::Diag *Out) {
- if (!F) return;
+ if (!F)
+ return;
Out->Fixes.push_back(*F);
};
for (auto &Diag : MissingIncludeDiags) {
- AddBatchFix(MissingIncludeDiags.size() > 1
- ? AddAllMissing
- : std::nullopt,
+ AddBatchFix(MissingIncludeDiags.size() > 1 ? AddAllMissing : std::nullopt,
&Diag);
AddBatchFix(FixAll, &Diag);
}
for (auto &Diag : UnusedIncludes) {
- AddBatchFix(UnusedIncludes.size() > 1 ? RemoveAllUnused
- : std::nullopt,
+ AddBatchFix(UnusedIncludes.size() > 1 ? RemoveAllUnused : std::nullopt,
&Diag);
AddBatchFix(FixAll, &Diag);
}
auto Result = std::move(MissingIncludeDiags);
- llvm::move(UnusedIncludes,
- std::back_inserter(Result));
+ llvm::move(UnusedIncludes, std::back_inserter(Result));
return Result;
}
Index: clang-tools-extra/clangd/Hover.cpp
===================================================================
--- clang-tools-extra/clangd/Hover.cpp
+++ clang-tools-extra/clangd/Hover.cpp
@@ -18,6 +18,7 @@
#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,7 +1224,9 @@
// on local variables, etc.
return;
- HI.Provider = spellHeader(AST, SM.getFileEntryForID(SM.getMainFileID()), H);
+ HI.Provider = include_cleaner::spellHeader(
+ {H, AST.getPreprocessor().getHeaderSearchInfo(),
+ SM.getFileEntryForID(SM.getMainFileID())});
}
// FIXME: similar functions are present in FindHeaders.cpp (symbolName)
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits