hokein created this revision. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay, ioeric, ilya-biryukov.
This would save us some memory and disk space: - Dex usage (269 MB vs 278 MB) - Disk (73 MB vs 76 MB) It would save more when we index the main file symbol. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D56314 Files: clangd/index/Index.h clangd/index/SymbolCollector.cpp unittests/clangd/SymbolCollectorTests.cpp Index: unittests/clangd/SymbolCollectorTests.cpp =================================================================== --- unittests/clangd/SymbolCollectorTests.cpp +++ unittests/clangd/SymbolCollectorTests.cpp @@ -655,10 +655,18 @@ void Foo::ssf() {} )"; runSymbolCollector(Header, Main); - EXPECT_THAT(Symbols, - UnorderedElementsAre(QName("Foo"), QName("Foo::f"), - QName("Foo::g"), QName("Foo::sf"), - QName("Foo::ssf"), QName("Foo::x"))); + EXPECT_THAT(Symbols, UnorderedElementsAre( + QName("Foo"), + AllOf(QName("Foo::f"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::g"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::sf"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::ssf"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::x"), Doc(""), ReturnType(""), + ForCodeCompletion(false)))); } TEST_F(SymbolCollectorTest, Scopes) { Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -531,6 +531,18 @@ getTokenLocation(Loc, SM, Opts, ASTCtx->getLangOpts(), FileURI)) S.CanonicalDeclaration = *DeclLoc; + S.Origin = Opts.Origin; + if (ND.getAvailability() == AR_Deprecated) + S.Flags |= Symbol::Deprecated; + + auto Insert = [this](const Symbol& S) { + Symbols.insert(S); + return Symbols.find(S.ID); + }; + + if (!(S.Flags & Symbol::IndexedForCodeCompletion)) + return Insert(S); + // Add completion info. // FIXME: we may want to choose a different redecl, or combine from several. assert(ASTCtx && PP.get() && "ASTContext and Preprocessor must be set."); @@ -569,12 +581,7 @@ if (TypeStorage) S.Type = TypeStorage->raw(); } - - S.Origin = Opts.Origin; - if (ND.getAvailability() == AR_Deprecated) - S.Flags |= Symbol::Deprecated; - Symbols.insert(S); - return Symbols.find(S.ID); + return Insert(S); } void SymbolCollector::addDefinition(const NamedDecl &ND, Index: clangd/index/Index.h =================================================================== --- clangd/index/Index.h +++ clangd/index/Index.h @@ -229,6 +229,9 @@ None = 0, /// Whether or not this symbol is meant to be used for the code completion. /// See also isIndexedForCodeCompletion(). + /// Note that we don't store completion information (signature, snippet, + /// documentation, type, inclues, etc) if the symbol is not indexed for code + /// completion. IndexedForCodeCompletion = 1 << 0, /// Indicates if the symbol is deprecated. Deprecated = 1 << 1,
Index: unittests/clangd/SymbolCollectorTests.cpp =================================================================== --- unittests/clangd/SymbolCollectorTests.cpp +++ unittests/clangd/SymbolCollectorTests.cpp @@ -655,10 +655,18 @@ void Foo::ssf() {} )"; runSymbolCollector(Header, Main); - EXPECT_THAT(Symbols, - UnorderedElementsAre(QName("Foo"), QName("Foo::f"), - QName("Foo::g"), QName("Foo::sf"), - QName("Foo::ssf"), QName("Foo::x"))); + EXPECT_THAT(Symbols, UnorderedElementsAre( + QName("Foo"), + AllOf(QName("Foo::f"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::g"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::sf"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::ssf"), Doc(""), ReturnType(""), + ForCodeCompletion(false)), + AllOf(QName("Foo::x"), Doc(""), ReturnType(""), + ForCodeCompletion(false)))); } TEST_F(SymbolCollectorTest, Scopes) { Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -531,6 +531,18 @@ getTokenLocation(Loc, SM, Opts, ASTCtx->getLangOpts(), FileURI)) S.CanonicalDeclaration = *DeclLoc; + S.Origin = Opts.Origin; + if (ND.getAvailability() == AR_Deprecated) + S.Flags |= Symbol::Deprecated; + + auto Insert = [this](const Symbol& S) { + Symbols.insert(S); + return Symbols.find(S.ID); + }; + + if (!(S.Flags & Symbol::IndexedForCodeCompletion)) + return Insert(S); + // Add completion info. // FIXME: we may want to choose a different redecl, or combine from several. assert(ASTCtx && PP.get() && "ASTContext and Preprocessor must be set."); @@ -569,12 +581,7 @@ if (TypeStorage) S.Type = TypeStorage->raw(); } - - S.Origin = Opts.Origin; - if (ND.getAvailability() == AR_Deprecated) - S.Flags |= Symbol::Deprecated; - Symbols.insert(S); - return Symbols.find(S.ID); + return Insert(S); } void SymbolCollector::addDefinition(const NamedDecl &ND, Index: clangd/index/Index.h =================================================================== --- clangd/index/Index.h +++ clangd/index/Index.h @@ -229,6 +229,9 @@ None = 0, /// Whether or not this symbol is meant to be used for the code completion. /// See also isIndexedForCodeCompletion(). + /// Note that we don't store completion information (signature, snippet, + /// documentation, type, inclues, etc) if the symbol is not indexed for code + /// completion. IndexedForCodeCompletion = 1 << 0, /// Indicates if the symbol is deprecated. Deprecated = 1 << 1,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits