Browse Source

Namespace: improve indexer and don't trace bases in $ccls/member

pull/522/head
Fangrui Song 6 years ago
parent
commit
7b19c87485
  1. 13
      src/indexer.cc
  2. 4
      src/messages/ccls_member.cc

13
src/indexer.cc

@ -719,8 +719,17 @@ public:
// spell, extent, comments use OrigD while most others use adjusted |D|. // spell, extent, comments use OrigD while most others use adjusted |D|.
const Decl *OrigD = ASTNode.OrigD; const Decl *OrigD = ASTNode.OrigD;
const DeclContext *SemDC = OrigD->getDeclContext(); const DeclContext *SemDC = OrigD->getDeclContext()->getRedeclContext();
const DeclContext *LexDC = ASTNode.ContainerDC; const DeclContext *LexDC = ASTNode.ContainerDC->getRedeclContext();
{
const NamespaceDecl *ND;
while ((ND = dyn_cast<NamespaceDecl>(cast<Decl>(SemDC))) &&
ND->isAnonymousNamespace())
SemDC = ND->getDeclContext()->getRedeclContext();
while ((ND = dyn_cast<NamespaceDecl>(cast<Decl>(LexDC))) &&
ND->isAnonymousNamespace())
LexDC = ND->getDeclContext()->getRedeclContext();
}
Role role = static_cast<Role>(Roles); Role role = static_cast<Role>(Roles);
db->language = LanguageId((int)db->language | (int)GetDeclLanguage(D)); db->language = LanguageId((int)db->language | (int)GetDeclLanguage(D));

4
src/messages/ccls_member.cc

@ -133,7 +133,9 @@ bool Expand(MessageHandler *m, Out_CclsMember::Entry *entry,
type = stack.back(); type = stack.back();
stack.pop_back(); stack.pop_back();
const auto *def = type->AnyDef(); const auto *def = type->AnyDef();
if (!def) continue; if (!def)
continue;
if (def->kind != lsSymbolKind::Namespace)
for (Usr usr : def->bases) { for (Usr usr : def->bases) {
auto &type1 = m->db->Type(usr); auto &type1 = m->db->Type(usr);
if (type1.def.size()) { if (type1.def.size()) {

Loading…
Cancel
Save