Author: ibiryukov Date: Mon Nov 26 07:29:14 2018 New Revision: 347560 URL: http://llvm.org/viewvc/llvm-project?rev=347560&view=rev Log: [clangd] Collect and store expected types in the index
Summary: And add a hidden option to control whether the types are collected. For experiments, will be removed when expected types implementation is stabilized. The index size is almost unchanged, e.g. the YAML index for all clangd sources increased from 53MB to 54MB. Reviewers: ioeric, sammccall Reviewed By: sammccall Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D52274 Modified: clang-tools-extra/trunk/clangd/index/Index.h clang-tools-extra/trunk/clangd/index/Serialization.cpp clang-tools-extra/trunk/clangd/index/SymbolCollector.cpp clang-tools-extra/trunk/clangd/index/YAMLSerialization.cpp Modified: clang-tools-extra/trunk/clangd/index/Index.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.h?rev=347560&r1=347559&r2=347560&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Index.h (original) +++ clang-tools-extra/trunk/clangd/index/Index.h Mon Nov 26 07:29:14 2018 @@ -10,6 +10,7 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_INDEX_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_INDEX_H +#include "ExpectedTypes.h" #include "clang/Index/IndexSymbol.h" #include "clang/Lex/Lexer.h" #include "llvm/ADT/DenseMap.h" @@ -242,6 +243,10 @@ struct Symbol { /// e.g. return type of a function, or type of a variable. llvm::StringRef ReturnType; + /// Raw representation of the OpaqueType of the symbol, used for scoring + /// purposes. + llvm::StringRef Type; + struct IncludeHeaderWithReferences { IncludeHeaderWithReferences() = default; @@ -300,6 +305,7 @@ template <typename Callback> void visitS CB(S.CompletionSnippetSuffix); CB(S.Documentation); CB(S.ReturnType); + CB(S.Type); auto RawCharPointerCB = [&CB](const char *&P) { llvm::StringRef S(P); CB(S); Modified: clang-tools-extra/trunk/clangd/index/Serialization.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Serialization.cpp?rev=347560&r1=347559&r2=347560&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Serialization.cpp (original) +++ clang-tools-extra/trunk/clangd/index/Serialization.cpp Mon Nov 26 07:29:14 2018 @@ -264,6 +264,7 @@ void writeSymbol(const Symbol &Sym, cons writeVar(Strings.index(Sym.CompletionSnippetSuffix), OS); writeVar(Strings.index(Sym.Documentation), OS); writeVar(Strings.index(Sym.ReturnType), OS); + writeVar(Strings.index(Sym.Type), OS); auto WriteInclude = [&](const Symbol::IncludeHeaderWithReferences &Include) { writeVar(Strings.index(Include.IncludeHeader), OS); @@ -290,6 +291,7 @@ Symbol readSymbol(Reader &Data, ArrayRef Sym.CompletionSnippetSuffix = Data.consumeString(Strings); Sym.Documentation = Data.consumeString(Strings); Sym.ReturnType = Data.consumeString(Strings); + Sym.Type = Data.consumeString(Strings); Sym.IncludeHeaders.resize(Data.consumeVar()); for (auto &I : Sym.IncludeHeaders) { I.IncludeHeader = Data.consumeString(Strings); @@ -339,7 +341,7 @@ std::pair<SymbolID, std::vector<Ref>> re // The current versioning scheme is simple - non-current versions are rejected. // If you make a breaking change, bump this version number to invalidate stored // data. Later we may want to support some backward compatibility. -constexpr static uint32_t Version = 7; +constexpr static uint32_t Version = 8; Expected<IndexFileIn> readRIFF(StringRef Data) { auto RIFF = riff::readFile(Data); Modified: clang-tools-extra/trunk/clangd/index/SymbolCollector.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/SymbolCollector.cpp?rev=347560&r1=347559&r2=347560&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/SymbolCollector.cpp (original) +++ clang-tools-extra/trunk/clangd/index/SymbolCollector.cpp Mon Nov 26 07:29:14 2018 @@ -587,6 +587,11 @@ const Symbol *SymbolCollector::addDeclar if (!Include.empty()) S.IncludeHeaders.emplace_back(Include, 1); + if (S.Flags & Symbol::IndexedForCodeCompletion) { + if (auto T = OpaqueType::fromCompletionResult(*ASTCtx, SymbolCompletion)) + S.Type = T->raw(); + } + S.Origin = Opts.Origin; if (ND.getAvailability() == AR_Deprecated) S.Flags |= Symbol::Deprecated; Modified: clang-tools-extra/trunk/clangd/index/YAMLSerialization.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/YAMLSerialization.cpp?rev=347560&r1=347559&r2=347560&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/YAMLSerialization.cpp (original) +++ clang-tools-extra/trunk/clangd/index/YAMLSerialization.cpp Mon Nov 26 07:29:14 2018 @@ -197,6 +197,7 @@ template <> struct MappingTraits<Symbol> IO.mapOptional("CompletionSnippetSuffix", Sym.CompletionSnippetSuffix); IO.mapOptional("Documentation", Sym.Documentation); IO.mapOptional("ReturnType", Sym.ReturnType); + IO.mapOptional("Type", Sym.Type); IO.mapOptional("IncludeHeaders", Sym.IncludeHeaders); } }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits