This revision was automatically updated to reflect the committed changes. Closed by commit rGd1978fa4bf0d: [clangd] Deduplicate scopes in IncludeFixer queries (authored by kadircet).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95942/new/ https://reviews.llvm.org/D95942 Files: clang-tools-extra/clangd/IncludeFixer.cpp Index: clang-tools-extra/clangd/IncludeFixer.cpp =================================================================== --- clang-tools-extra/clangd/IncludeFixer.cpp +++ clang-tools-extra/clangd/IncludeFixer.cpp @@ -40,31 +40,14 @@ #include "llvm/ADT/StringSet.h" #include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" +#include <algorithm> +#include <set> +#include <string> #include <vector> namespace clang { namespace clangd { -namespace { - -// Collects contexts visited during a Sema name lookup. -class VisitedContextCollector : public VisibleDeclConsumer { -public: - void EnteredContext(DeclContext *Ctx) override { Visited.push_back(Ctx); } - - void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx, - bool InBaseClass) override {} - - std::vector<DeclContext *> takeVisitedContexts() { - return std::move(Visited); - } - -private: - std::vector<DeclContext *> Visited; -}; - -} // namespace - std::vector<Fix> IncludeFixer::fix(DiagnosticsEngine::Level DiagLevel, const clang::Diagnostic &Info) const { switch (Info.getID()) { @@ -313,17 +296,26 @@ std::vector<std::string> collectAccessibleScopes(Sema &Sem, const DeclarationNameInfo &Typo, Scope *S, Sema::LookupNameKind LookupKind) { + // Collects contexts visited during a Sema name lookup. + struct VisitedContextCollector : public VisibleDeclConsumer { + VisitedContextCollector(std::vector<std::string> &Out) : Out(Out) {} + void EnteredContext(DeclContext *Ctx) override { + if (llvm::isa<NamespaceDecl>(Ctx)) + Out.push_back(printNamespaceScope(*Ctx)); + } + void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx, + bool InBaseClass) override {} + std::vector<std::string> &Out; + }; + std::vector<std::string> Scopes; - VisitedContextCollector Collector; + Scopes.push_back(""); + VisitedContextCollector Collector(Scopes); Sem.LookupVisibleDecls(S, LookupKind, Collector, /*IncludeGlobalScope=*/false, /*LoadExternal=*/false); - - Scopes.push_back(""); - for (const auto *Ctx : Collector.takeVisitedContexts()) { - if (isa<NamespaceDecl>(Ctx)) - Scopes.push_back(printNamespaceScope(*Ctx)); - } + std::sort(Scopes.begin(), Scopes.end()); + Scopes.erase(std::unique(Scopes.begin(), Scopes.end()), Scopes.end()); return Scopes; }
Index: clang-tools-extra/clangd/IncludeFixer.cpp =================================================================== --- clang-tools-extra/clangd/IncludeFixer.cpp +++ clang-tools-extra/clangd/IncludeFixer.cpp @@ -40,31 +40,14 @@ #include "llvm/ADT/StringSet.h" #include "llvm/Support/Error.h" #include "llvm/Support/FormatVariadic.h" +#include <algorithm> +#include <set> +#include <string> #include <vector> namespace clang { namespace clangd { -namespace { - -// Collects contexts visited during a Sema name lookup. -class VisitedContextCollector : public VisibleDeclConsumer { -public: - void EnteredContext(DeclContext *Ctx) override { Visited.push_back(Ctx); } - - void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx, - bool InBaseClass) override {} - - std::vector<DeclContext *> takeVisitedContexts() { - return std::move(Visited); - } - -private: - std::vector<DeclContext *> Visited; -}; - -} // namespace - std::vector<Fix> IncludeFixer::fix(DiagnosticsEngine::Level DiagLevel, const clang::Diagnostic &Info) const { switch (Info.getID()) { @@ -313,17 +296,26 @@ std::vector<std::string> collectAccessibleScopes(Sema &Sem, const DeclarationNameInfo &Typo, Scope *S, Sema::LookupNameKind LookupKind) { + // Collects contexts visited during a Sema name lookup. + struct VisitedContextCollector : public VisibleDeclConsumer { + VisitedContextCollector(std::vector<std::string> &Out) : Out(Out) {} + void EnteredContext(DeclContext *Ctx) override { + if (llvm::isa<NamespaceDecl>(Ctx)) + Out.push_back(printNamespaceScope(*Ctx)); + } + void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx, + bool InBaseClass) override {} + std::vector<std::string> &Out; + }; + std::vector<std::string> Scopes; - VisitedContextCollector Collector; + Scopes.push_back(""); + VisitedContextCollector Collector(Scopes); Sem.LookupVisibleDecls(S, LookupKind, Collector, /*IncludeGlobalScope=*/false, /*LoadExternal=*/false); - - Scopes.push_back(""); - for (const auto *Ctx : Collector.takeVisitedContexts()) { - if (isa<NamespaceDecl>(Ctx)) - Scopes.push_back(printNamespaceScope(*Ctx)); - } + std::sort(Scopes.begin(), Scopes.end()); + Scopes.erase(std::unique(Scopes.begin(), Scopes.end()), Scopes.end()); return Scopes; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits