Revert "[Tooling/Inclusion] Handle std::get symbol."
authorCaroline Tice <cmtice@google.com>
Thu, 23 Feb 2023 23:10:36 +0000 (15:10 -0800)
committerCaroline Tice <cmtice@google.com>
Thu, 23 Feb 2023 23:18:17 +0000 (15:18 -0800)
This reverts commit cbcb3eef70def3509bdffd4fe1ebfb6422afeaa2.

Causing many clangd test breakages, similar to:

error: no matching constructor for initialization of 'llvm::SmallVector<clang::tooling::stdlib::Header>'
                : llvm::SmallVector<clang::tooling::stdlib::Header>(
                  ^

clang-tools-extra/clangd/index/CanonicalIncludes.cpp
clang/include/clang/Tooling/Inclusions/StandardLibrary.h
clang/lib/Tooling/Inclusions/Stdlib/StandardLibrary.cpp
clang/lib/Tooling/Inclusions/Stdlib/StdSpecialSymbolMap.inc
clang/unittests/Tooling/StandardLibraryTest.cpp

index 4311eb9..0c61a7b 100644 (file)
@@ -717,8 +717,7 @@ llvm::StringRef CanonicalIncludes::mapSymbol(llvm::StringRef Scope,
   if (Scope == "std::" && Name == "move")
     return "<utility>";
   if (auto StdSym = tooling::stdlib::Symbol::named(Scope, Name, Lang))
-    if (auto Header = StdSym->header())
-      return Header->name();
+    return StdSym->header().name();
   return "";
 }
 
index a39ceb5..9d45d84 100644 (file)
@@ -81,7 +81,7 @@ public:
   llvm::StringRef name() const;
   llvm::StringRef qualifiedName() const;
   // The preferred header for this symbol (e.g. the suggested insertion).
-  std::optional<Header> header() const;
+  Header header() const;
   // Some symbols may be provided by multiple headers.
   llvm::SmallVector<Header> headers() const;
 
index cfcb955..416b531 100644 (file)
@@ -14,7 +14,6 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Casting.h"
-#include <optional>
 
 namespace clang {
 namespace tooling {
@@ -121,8 +120,7 @@ static int initialize(Lang Language) {
     }
     Mapping->SymbolNames[SymIndex] = {
         QName.data(), NSLen, static_cast<unsigned int>(QName.size() - NSLen)};
-    if (!HeaderName.empty())
-       Mapping->SymbolHeaderIDs[SymIndex].push_back(AddHeader(HeaderName));
+    Mapping->SymbolHeaderIDs[SymIndex].push_back(AddHeader(HeaderName));
 
     NSSymbolMap &NSSymbols = AddNS(QName.take_front(NSLen));
     NSSymbols.try_emplace(QName.drop_front(NSLen), SymIndex);
@@ -207,11 +205,8 @@ std::optional<Symbol> Symbol::named(llvm::StringRef Scope, llvm::StringRef Name,
   }
   return std::nullopt;
 }
-std::optional<Header> Symbol::header() const {
-  const auto& Headers = getMappingPerLang(Language)->SymbolHeaderIDs[ID];
-  if (Headers.empty())
-    return std::nullopt;
-  return Header(Headers.front(), Language);
+Header Symbol::header() const {
+  return Header(getMappingPerLang(Language)->SymbolHeaderIDs[ID][0], Language);
 }
 llvm::SmallVector<Header> Symbol::headers() const {
   llvm::SmallVector<Header> Results;
index c9632be..3d2ea91 100644 (file)
@@ -218,8 +218,3 @@ SYMBOL(ssize, std::, <string_view>)
 SYMBOL(ssize, std::, <unordered_map>)
 SYMBOL(ssize, std::, <unordered_set>)
 SYMBOL(ssize, std::, <vector>)
-
-// std::get has a few variants for different types (tuple, array, pair etc)
-// which is tricky to disambiguate without type information.
-// Don't set any header for it, as it comes with the type header.
-SYMBOL(get, std::, /*no headers*/)
index 6d90bbd..47d064b 100644 (file)
@@ -58,9 +58,6 @@ TEST(StdlibTest, All) {
   EXPECT_EQ(Vector->header(), *VectorH);
   EXPECT_THAT(Vector->headers(), ElementsAre(*VectorH));
 
-  EXPECT_TRUE(stdlib::Symbol::named("std::", "get"));
-  EXPECT_FALSE(stdlib::Symbol::named("std::", "get")->header());
-
   EXPECT_THAT(stdlib::Symbol::named("std::", "basic_iostream")->headers(),
               ElementsAre(stdlib::Header::named("<istream>"),
                           stdlib::Header::named("<iostream>"),