From e892c239558620120f862d744365c481b137800e Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 26 Jan 2018 18:20:17 -0800 Subject: [PATCH] Change declaration to declarations in IndexVar --- src/indexer.cc | 5 ++--- src/indexer.h | 4 ++-- src/query.cc | 2 +- src/query_utils.cc | 15 ++++++++------- src/serializer.cc | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/indexer.cc b/src/indexer.cc index 188bbf97..fb842148 100644 --- a/src/indexer.cc +++ b/src/indexer.cc @@ -561,7 +561,7 @@ void OnIndexReference_Function(IndexFile* db, } // namespace // static -int IndexFile::kCurrentVersion = 9; +int IndexFile::kCurrentVersion = 10; IndexFile::IndexFile(const std::string& path, const optional& contents) @@ -1431,8 +1431,7 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) { var->def.definition_spelling = decl_spell; var->def.definition_extent = decl_cursor.get_extent(); } else { - var->def.declaration = decl_spell; - UniqueAdd(var->uses, decl_spell); + var->def.declarations.push_back(decl_spell); } AddDeclInitializerUsages(db, decl_cursor); diff --git a/src/indexer.h b/src/indexer.h index 48cb8384..4fa78593 100644 --- a/src/indexer.h +++ b/src/indexer.h @@ -373,7 +373,7 @@ struct VarDefDefinitionData { ClangStorageClass storage = ClangStorageClass::SC_Invalid; optional hover; optional comments; - optional declaration; + std::vector declarations; // TODO: definitions should be a list of ranges, since there can be more // than one - when?? optional definition_spelling; @@ -397,7 +397,7 @@ struct VarDefDefinitionData { const VarDefDefinitionData& other) const { return short_name == other.short_name && detailed_name == other.detailed_name && hover == other.hover && - declaration == other.declaration && + declarations.size() == other.declarations.size() && definition_spelling == other.definition_spelling && definition_extent == other.definition_extent && variable_type == other.variable_type && diff --git a/src/query.cc b/src/query.cc index d6794691..2bee6508 100644 --- a/src/query.cc +++ b/src/query.cc @@ -83,7 +83,7 @@ optional ToQuery(const IdMap& id_map, const IndexVar::Def& var) { result.storage = var.storage; result.hover = var.hover; result.comments = var.comments; - result.declaration = id_map.ToQuery(var.declaration); + result.declarations = id_map.ToQuery(var.declarations); result.definition_spelling = id_map.ToQuery(var.definition_spelling); result.definition_extent = id_map.ToQuery(var.definition_extent); result.variable_type = id_map.ToQuery(var.variable_type); diff --git a/src/query_utils.cc b/src/query_utils.cc index bff75622..8d848230 100644 --- a/src/query_utils.cc +++ b/src/query_utils.cc @@ -203,8 +203,12 @@ std::vector GetUsesOfSymbol(QueryDatabase* db, case SymbolKind::Var: { QueryVar& var = db->vars[symbol.idx]; std::vector ret = var.uses; - if (include_decl && var.def && var.def->definition_spelling) - ret.push_back(*var.def->definition_spelling); + if (include_decl && var.def) { + if (var.def->definition_spelling) + ret.push_back(*var.def->definition_spelling); + ret.insert(ret.end(), var.def->declarations.begin(), + var.def->declarations.end()); + } return ret; } case SymbolKind::File: @@ -239,11 +243,8 @@ std::vector GetDeclarationsOfSymbolForGotoDefinition( } case SymbolKind::Var: { QueryVar& var = db->vars[symbol.idx]; - if (var.def) { - optional declaration = var.def->declaration; - if (declaration) - return {*declaration}; - } + if (var.def) + return var.def->declarations; break; } default: diff --git a/src/serializer.cc b/src/serializer.cc index 44c6a924..47c52971 100644 --- a/src/serializer.cc +++ b/src/serializer.cc @@ -189,7 +189,7 @@ void Reflect(TVisitor& visitor, IndexVar& value) { REFLECT_MEMBER2("storage", value.def.storage); REFLECT_MEMBER2("hover", value.def.hover); REFLECT_MEMBER2("comments", value.def.comments); - REFLECT_MEMBER2("declaration", value.def.declaration); + REFLECT_MEMBER2("declarations", value.def.declarations); REFLECT_MEMBER2("definition_spelling", value.def.definition_spelling); REFLECT_MEMBER2("definition_extent", value.def.definition_extent); REFLECT_MEMBER2("variable_type", value.def.variable_type);