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

This commit is contained in:
Fangrui Song 2018-10-09 22:29:51 -07:00
parent d98965d8d9
commit 56c70ad1fd
2 changed files with 20 additions and 9 deletions

View File

@ -719,8 +719,17 @@ public:
// spell, extent, comments use OrigD while most others use adjusted |D|.
const Decl *OrigD = ASTNode.OrigD;
const DeclContext *SemDC = OrigD->getDeclContext();
const DeclContext *LexDC = ASTNode.ContainerDC;
const DeclContext *SemDC = OrigD->getDeclContext()->getRedeclContext();
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);
db->language = LanguageId((int)db->language | (int)GetDeclLanguage(D));

View File

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