mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-03 22:04:24 +00:00 
			
		
		
		
	Better template specialization
This commit is contained in:
		
							parent
							
								
									dc1c72ce30
								
							
						
					
					
						commit
						b7ce3dd60a
					
				@ -1701,14 +1701,6 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) {
 | 
				
			|||||||
      switch (decl->entityInfo->templateKind) {
 | 
					      switch (decl->entityInfo->templateKind) {
 | 
				
			||||||
      default:
 | 
					      default:
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case CXIdxEntity_Template: {
 | 
					 | 
				
			||||||
        TemplateVisitorData data;
 | 
					 | 
				
			||||||
        data.db = db;
 | 
					 | 
				
			||||||
        data.container = decl_cursor;
 | 
					 | 
				
			||||||
        data.param = param;
 | 
					 | 
				
			||||||
        decl_cursor.VisitChildren(&TemplateVisitor, &data);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      case CXIdxEntity_TemplateSpecialization:
 | 
					      case CXIdxEntity_TemplateSpecialization:
 | 
				
			||||||
      case CXIdxEntity_TemplatePartialSpecialization: {
 | 
					      case CXIdxEntity_TemplatePartialSpecialization: {
 | 
				
			||||||
        // TODO Use a different dimension
 | 
					        // TODO Use a different dimension
 | 
				
			||||||
@ -1733,6 +1725,14 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        origin->derived.push_back(type_id);
 | 
					        origin->derived.push_back(type_id);
 | 
				
			||||||
        type->def.parents.push_back(origin_id);
 | 
					        type->def.parents.push_back(origin_id);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					        // fallthrough
 | 
				
			||||||
 | 
					      case CXIdxEntity_Template: {
 | 
				
			||||||
 | 
					        TemplateVisitorData data;
 | 
				
			||||||
 | 
					        data.db = db;
 | 
				
			||||||
 | 
					        data.container = decl_cursor;
 | 
				
			||||||
 | 
					        data.param = param;
 | 
				
			||||||
 | 
					        decl_cursor.VisitChildren(&TemplateVisitor, &data);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
@ -187,7 +187,10 @@ std::vector<QueryLocation> GetUsesOfSymbol(QueryDatabase* db,
 | 
				
			|||||||
  switch (symbol.kind) {
 | 
					  switch (symbol.kind) {
 | 
				
			||||||
    case SymbolKind::Type: {
 | 
					    case SymbolKind::Type: {
 | 
				
			||||||
      QueryType& type = db->types[symbol.idx];
 | 
					      QueryType& type = db->types[symbol.idx];
 | 
				
			||||||
      return type.uses;
 | 
					      std::vector<QueryLocation> ret = type.uses;
 | 
				
			||||||
 | 
					      if (include_decl && type.def)
 | 
				
			||||||
 | 
					        ret.push_back(*type.def->definition_spelling);
 | 
				
			||||||
 | 
					      return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SymbolKind::Func: {
 | 
					    case SymbolKind::Func: {
 | 
				
			||||||
      // TODO: the vector allocation could be avoided.
 | 
					      // TODO: the vector allocation could be avoided.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user