mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-04 14:17:07 +00:00 
			
		
		
		
	Better bases/derived
This commit is contained in:
		
							parent
							
								
									af54645e5e
								
							
						
					
					
						commit
						873e6d0411
					
				@ -729,14 +729,23 @@ public:
 | 
				
			|||||||
    switch (D->getKind()) {
 | 
					    switch (D->getKind()) {
 | 
				
			||||||
    case Decl::Namespace:
 | 
					    case Decl::Namespace:
 | 
				
			||||||
      type->def.kind = lsSymbolKind::Namespace;
 | 
					      type->def.kind = lsSymbolKind::Namespace;
 | 
				
			||||||
 | 
					      if (OrigD->isFirstDecl()) {
 | 
				
			||||||
 | 
					        auto *ND = cast<NamespaceDecl>(OrigD);
 | 
				
			||||||
 | 
					        auto *ND1 = cast<Decl>(ND->getParent());
 | 
				
			||||||
 | 
					        if (isa<NamespaceDecl>(ND1)) {
 | 
				
			||||||
 | 
					          Usr usr1 = GetUsr(ND1);
 | 
				
			||||||
 | 
					          type->def.bases.push_back(usr1);
 | 
				
			||||||
 | 
					          db->ToType(usr1).derived.push_back(usr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    case Decl::NamespaceAlias: {
 | 
					    case Decl::NamespaceAlias: {
 | 
				
			||||||
      type->def.kind = lsSymbolKind::TypeAlias;
 | 
					      type->def.kind = lsSymbolKind::TypeAlias;
 | 
				
			||||||
      auto* NAD = cast<NamespaceAliasDecl>(D);
 | 
					      auto *NAD = cast<NamespaceAliasDecl>(D);
 | 
				
			||||||
      if (const NamespaceDecl* ND = NAD->getNamespace()) {
 | 
					      if (const NamespaceDecl *ND = NAD->getNamespace()) {
 | 
				
			||||||
        Usr usr1 = GetUsr(ND);
 | 
					        Usr usr1 = GetUsr(ND);
 | 
				
			||||||
        if (db->usr2type.count(usr1))
 | 
					        type->def.alias_of = usr1;
 | 
				
			||||||
          type->def.alias_of = usr1;
 | 
					        (void)db->ToType(usr1);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -786,11 +795,8 @@ public:
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (BaseD) {
 | 
					            if (BaseD) {
 | 
				
			||||||
              Usr usr1 = GetUsr(BaseD);
 | 
					              Usr usr1 = GetUsr(BaseD);
 | 
				
			||||||
              auto it = db->usr2type.find(usr1);
 | 
					              type->def.bases.push_back(usr1);
 | 
				
			||||||
              if (it != db->usr2type.end()) {
 | 
					              db->ToType(usr1).derived.push_back(usr);
 | 
				
			||||||
                type->def.bases.push_back(usr1);
 | 
					 | 
				
			||||||
                it->second.derived.push_back(usr);
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -831,11 +837,8 @@ public:
 | 
				
			|||||||
            D1 = RD->getInstantiatedFromMemberClass();
 | 
					            D1 = RD->getInstantiatedFromMemberClass();
 | 
				
			||||||
          if (D1) {
 | 
					          if (D1) {
 | 
				
			||||||
            Usr usr1 = GetUsr(D1);
 | 
					            Usr usr1 = GetUsr(D1);
 | 
				
			||||||
            auto it = db->usr2type.find(usr1);
 | 
					            type->def.bases.push_back(usr1);
 | 
				
			||||||
            if (it != db->usr2type.end()) {
 | 
					            db->ToType(usr1).derived.push_back(usr);
 | 
				
			||||||
              type->def.bases.push_back(usr1);
 | 
					 | 
				
			||||||
              it->second.derived.push_back(usr);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -871,11 +874,8 @@ public:
 | 
				
			|||||||
          Ctx->getOverriddenMethods(ND, OverDecls);
 | 
					          Ctx->getOverriddenMethods(ND, OverDecls);
 | 
				
			||||||
          for (const auto* ND1 : OverDecls) {
 | 
					          for (const auto* ND1 : OverDecls) {
 | 
				
			||||||
            Usr usr1 = GetUsr(ND1);
 | 
					            Usr usr1 = GetUsr(ND1);
 | 
				
			||||||
            auto it = db->usr2func.find(usr1);
 | 
					            func->def.bases.push_back(usr1);
 | 
				
			||||||
            if (it != db->usr2func.end()) {
 | 
					            db->ToFunc(usr1).derived.push_back(usr);
 | 
				
			||||||
              func->def.bases.push_back(usr1);
 | 
					 | 
				
			||||||
              it->second.derived.push_back(usr);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user