mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-03 22:04:24 +00:00 
			
		
		
		
	Serialize VarDefDefinitionData::{parent_kind,parent_id}
This commit is contained in:
		
							parent
							
								
									79b60561d1
								
							
						
					
					
						commit
						bdb880e0a5
					
				@ -566,7 +566,7 @@ void OnIndexReference_Function(IndexFile* db,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// static
 | 
					// static
 | 
				
			||||||
const int IndexFile::kMajorVersion = 10;
 | 
					const int IndexFile::kMajorVersion = 10;
 | 
				
			||||||
const int IndexFile::kMinorVersion = 0;
 | 
					const int IndexFile::kMinorVersion = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IndexFile::IndexFile(const std::string& path,
 | 
					IndexFile::IndexFile(const std::string& path,
 | 
				
			||||||
                     const optional<std::string>& contents)
 | 
					                     const optional<std::string>& contents)
 | 
				
			||||||
@ -1455,13 +1455,13 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) {
 | 
				
			|||||||
        if (IsFunctionCallContext(decl->semanticContainer->cursor.kind)) {
 | 
					        if (IsFunctionCallContext(decl->semanticContainer->cursor.kind)) {
 | 
				
			||||||
          IndexFuncId parent_func_id =
 | 
					          IndexFuncId parent_func_id =
 | 
				
			||||||
            db->ToFuncId(decl->semanticContainer->cursor);
 | 
					            db->ToFuncId(decl->semanticContainer->cursor);
 | 
				
			||||||
          var->def.semantic_parent_kind = SymbolKind::Func;
 | 
					          var->def.parent_kind = SymbolKind::Func;
 | 
				
			||||||
          var->def.semantic_parent_id = size_t(parent_func_id);
 | 
					          var->def.parent_id = size_t(parent_func_id);
 | 
				
			||||||
        } else if (IsTypeDefinition(decl->semanticContainer)) {
 | 
					        } else if (IsTypeDefinition(decl->semanticContainer)) {
 | 
				
			||||||
          IndexTypeId parent_type_id =
 | 
					          IndexTypeId parent_type_id =
 | 
				
			||||||
              db->ToTypeId(decl->semanticContainer->cursor);
 | 
					              db->ToTypeId(decl->semanticContainer->cursor);
 | 
				
			||||||
          var->def.semantic_parent_kind = SymbolKind::Type;
 | 
					          var->def.parent_kind = SymbolKind::Type;
 | 
				
			||||||
          var->def.semantic_parent_id = size_t(parent_type_id);
 | 
					          var->def.parent_id = size_t(parent_type_id);
 | 
				
			||||||
          db->Resolve(parent_type_id)->def.vars.push_back(var_id);
 | 
					          db->Resolve(parent_type_id)->def.vars.push_back(var_id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
@ -385,8 +385,8 @@ struct VarDefDefinitionData {
 | 
				
			|||||||
  optional<TypeId> variable_type;
 | 
					  optional<TypeId> variable_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Function/type which declares this one.
 | 
					  // Function/type which declares this one.
 | 
				
			||||||
  size_t semantic_parent_id = size_t(-1);
 | 
					  size_t parent_id = size_t(-1);
 | 
				
			||||||
  SymbolKind semantic_parent_kind = SymbolKind::Invalid;
 | 
					  SymbolKind parent_kind = SymbolKind::Invalid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ClangSymbolKind kind = ClangSymbolKind::Unknown;
 | 
					  ClangSymbolKind kind = ClangSymbolKind::Unknown;
 | 
				
			||||||
  // Note a variable may have instances of both |None| and |Extern|
 | 
					  // Note a variable may have instances of both |None| and |Extern|
 | 
				
			||||||
@ -423,13 +423,15 @@ void Reflect(TVisitor& visitor,
 | 
				
			|||||||
  REFLECT_MEMBER_START();
 | 
					  REFLECT_MEMBER_START();
 | 
				
			||||||
  REFLECT_MEMBER(short_name);
 | 
					  REFLECT_MEMBER(short_name);
 | 
				
			||||||
  REFLECT_MEMBER(detailed_name);
 | 
					  REFLECT_MEMBER(detailed_name);
 | 
				
			||||||
  REFLECT_MEMBER(kind);
 | 
					 | 
				
			||||||
  REFLECT_MEMBER(storage);
 | 
					 | 
				
			||||||
  REFLECT_MEMBER(hover);
 | 
					  REFLECT_MEMBER(hover);
 | 
				
			||||||
  REFLECT_MEMBER(comments);
 | 
					  REFLECT_MEMBER(comments);
 | 
				
			||||||
  REFLECT_MEMBER(definition_spelling);
 | 
					  REFLECT_MEMBER(definition_spelling);
 | 
				
			||||||
  REFLECT_MEMBER(definition_extent);
 | 
					  REFLECT_MEMBER(definition_extent);
 | 
				
			||||||
  REFLECT_MEMBER(variable_type);
 | 
					  REFLECT_MEMBER(variable_type);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER(parent_id);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER(parent_kind);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER(kind);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER(storage);
 | 
				
			||||||
  REFLECT_MEMBER_END();
 | 
					  REFLECT_MEMBER_END();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1080,34 +1080,6 @@ struct Out_CquerySetInactiveRegion
 | 
				
			|||||||
MAKE_REFLECT_STRUCT(Out_CquerySetInactiveRegion::Params, uri, inactiveRegions);
 | 
					MAKE_REFLECT_STRUCT(Out_CquerySetInactiveRegion::Params, uri, inactiveRegions);
 | 
				
			||||||
MAKE_REFLECT_STRUCT(Out_CquerySetInactiveRegion, jsonrpc, method, params);
 | 
					MAKE_REFLECT_STRUCT(Out_CquerySetInactiveRegion, jsonrpc, method, params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Out_CqueryPublishSemanticHighlighting
 | 
					 | 
				
			||||||
    : public lsOutMessage<Out_CqueryPublishSemanticHighlighting> {
 | 
					 | 
				
			||||||
  struct Symbol {
 | 
					 | 
				
			||||||
    int stableId = 0;
 | 
					 | 
				
			||||||
    ClangSymbolKind kind;
 | 
					 | 
				
			||||||
    StorageClass storage;
 | 
					 | 
				
			||||||
    std::vector<lsRange> ranges;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  struct Params {
 | 
					 | 
				
			||||||
    lsDocumentUri uri;
 | 
					 | 
				
			||||||
    std::vector<Symbol> symbols;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  std::string method = "$cquery/publishSemanticHighlighting";
 | 
					 | 
				
			||||||
  Params params;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting::Symbol,
 | 
					 | 
				
			||||||
                    kind,
 | 
					 | 
				
			||||||
                    storage,
 | 
					 | 
				
			||||||
                    stableId,
 | 
					 | 
				
			||||||
                    ranges);
 | 
					 | 
				
			||||||
MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting::Params,
 | 
					 | 
				
			||||||
                    uri,
 | 
					 | 
				
			||||||
                    symbols);
 | 
					 | 
				
			||||||
MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting,
 | 
					 | 
				
			||||||
                    jsonrpc,
 | 
					 | 
				
			||||||
                    method,
 | 
					 | 
				
			||||||
                    params);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct Out_LocationList : public lsOutMessage<Out_LocationList> {
 | 
					struct Out_LocationList : public lsOutMessage<Out_LocationList> {
 | 
				
			||||||
  lsRequestId id;
 | 
					  lsRequestId id;
 | 
				
			||||||
  std::vector<lsLocation> result;
 | 
					  std::vector<lsLocation> result;
 | 
				
			||||||
 | 
				
			|||||||
@ -111,6 +111,7 @@ void EmitSemanticHighlighting(QueryDatabase* db,
 | 
				
			|||||||
      grouped_symbols;
 | 
					      grouped_symbols;
 | 
				
			||||||
  for (SymbolRef sym : file->def->all_symbols) {
 | 
					  for (SymbolRef sym : file->def->all_symbols) {
 | 
				
			||||||
    std::string detailed_name;
 | 
					    std::string detailed_name;
 | 
				
			||||||
 | 
					    SymbolKind parent_kind = SymbolKind::Invalid;
 | 
				
			||||||
    ClangSymbolKind kind = ClangSymbolKind::Unknown;
 | 
					    ClangSymbolKind kind = ClangSymbolKind::Unknown;
 | 
				
			||||||
    StorageClass storage = StorageClass::Invalid;
 | 
					    StorageClass storage = StorageClass::Invalid;
 | 
				
			||||||
    // This switch statement also filters out symbols that are not highlighted.
 | 
					    // This switch statement also filters out symbols that are not highlighted.
 | 
				
			||||||
@ -146,6 +147,7 @@ void EmitSemanticHighlighting(QueryDatabase* db,
 | 
				
			|||||||
        QueryVar* var = &db->vars[sym.idx.idx];
 | 
					        QueryVar* var = &db->vars[sym.idx.idx];
 | 
				
			||||||
        if (!var->def)
 | 
					        if (!var->def)
 | 
				
			||||||
          continue;  // applies to for loop
 | 
					          continue;  // applies to for loop
 | 
				
			||||||
 | 
					        parent_kind = var->def->parent_kind;
 | 
				
			||||||
        kind = var->def->kind;
 | 
					        kind = var->def->kind;
 | 
				
			||||||
        storage = var->def->storage;
 | 
					        storage = var->def->storage;
 | 
				
			||||||
        detailed_name = var->def->short_name;
 | 
					        detailed_name = var->def->short_name;
 | 
				
			||||||
@ -172,6 +174,7 @@ void EmitSemanticHighlighting(QueryDatabase* db,
 | 
				
			|||||||
        Out_CqueryPublishSemanticHighlighting::Symbol symbol;
 | 
					        Out_CqueryPublishSemanticHighlighting::Symbol symbol;
 | 
				
			||||||
        symbol.stableId =
 | 
					        symbol.stableId =
 | 
				
			||||||
            semantic_cache_for_file->GetStableId(sym.idx.kind, detailed_name);
 | 
					            semantic_cache_for_file->GetStableId(sym.idx.kind, detailed_name);
 | 
				
			||||||
 | 
					        symbol.parentKind = parent_kind;
 | 
				
			||||||
        symbol.kind = kind;
 | 
					        symbol.kind = kind;
 | 
				
			||||||
        symbol.storage = storage;
 | 
					        symbol.storage = storage;
 | 
				
			||||||
        symbol.ranges.push_back(*loc);
 | 
					        symbol.ranges.push_back(*loc);
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,36 @@ struct TimestampManager;
 | 
				
			|||||||
struct WorkingFile;
 | 
					struct WorkingFile;
 | 
				
			||||||
struct WorkingFiles;
 | 
					struct WorkingFiles;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Out_CqueryPublishSemanticHighlighting
 | 
				
			||||||
 | 
					  : public lsOutMessage<Out_CqueryPublishSemanticHighlighting> {
 | 
				
			||||||
 | 
					  struct Symbol {
 | 
				
			||||||
 | 
					    int stableId = 0;
 | 
				
			||||||
 | 
					    SymbolKind parentKind;
 | 
				
			||||||
 | 
					    ClangSymbolKind kind;
 | 
				
			||||||
 | 
					    StorageClass storage;
 | 
				
			||||||
 | 
					    std::vector<lsRange> ranges;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  struct Params {
 | 
				
			||||||
 | 
					    lsDocumentUri uri;
 | 
				
			||||||
 | 
					    std::vector<Symbol> symbols;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  std::string method = "$cquery/publishSemanticHighlighting";
 | 
				
			||||||
 | 
					  Params params;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting::Symbol,
 | 
				
			||||||
 | 
					                    stableId,
 | 
				
			||||||
 | 
					                    parentKind,
 | 
				
			||||||
 | 
					                    kind,
 | 
				
			||||||
 | 
					                    storage,
 | 
				
			||||||
 | 
					                    ranges);
 | 
				
			||||||
 | 
					MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting::Params,
 | 
				
			||||||
 | 
					                    uri,
 | 
				
			||||||
 | 
					                    symbols);
 | 
				
			||||||
 | 
					MAKE_REFLECT_STRUCT(Out_CqueryPublishSemanticHighlighting,
 | 
				
			||||||
 | 
					                    jsonrpc,
 | 
				
			||||||
 | 
					                    method,
 | 
				
			||||||
 | 
					                    params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Usage:
 | 
					// Usage:
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  struct FooHandler : MessageHandler {
 | 
					//  struct FooHandler : MessageHandler {
 | 
				
			||||||
 | 
				
			|||||||
@ -84,8 +84,8 @@ optional<QueryVar::Def> ToQuery(const IdMap& id_map, const IndexVar::Def& var) {
 | 
				
			|||||||
  result.definition_spelling = id_map.ToQuery(var.definition_spelling);
 | 
					  result.definition_spelling = id_map.ToQuery(var.definition_spelling);
 | 
				
			||||||
  result.definition_extent = id_map.ToQuery(var.definition_extent);
 | 
					  result.definition_extent = id_map.ToQuery(var.definition_extent);
 | 
				
			||||||
  result.variable_type = id_map.ToQuery(var.variable_type);
 | 
					  result.variable_type = id_map.ToQuery(var.variable_type);
 | 
				
			||||||
  result.semantic_parent_id = var.semantic_parent_id;
 | 
					  result.parent_id = var.parent_id;
 | 
				
			||||||
  result.semantic_parent_kind = var.semantic_parent_kind;
 | 
					  result.parent_kind = var.parent_kind;
 | 
				
			||||||
  result.kind = var.kind;
 | 
					  result.kind = var.kind;
 | 
				
			||||||
  result.storage = var.storage;
 | 
					  result.storage = var.storage;
 | 
				
			||||||
  return result;
 | 
					  return result;
 | 
				
			||||||
 | 
				
			|||||||
@ -185,8 +185,6 @@ void Reflect(TVisitor& visitor, IndexVar& value) {
 | 
				
			|||||||
  REFLECT_MEMBER2("usr", value.usr);
 | 
					  REFLECT_MEMBER2("usr", value.usr);
 | 
				
			||||||
  REFLECT_MEMBER2("short_name", value.def.short_name);
 | 
					  REFLECT_MEMBER2("short_name", value.def.short_name);
 | 
				
			||||||
  REFLECT_MEMBER2("detailed_name", value.def.detailed_name);
 | 
					  REFLECT_MEMBER2("detailed_name", value.def.detailed_name);
 | 
				
			||||||
  REFLECT_MEMBER2("kind", value.def.kind);
 | 
					 | 
				
			||||||
  REFLECT_MEMBER2("storage", value.def.storage);
 | 
					 | 
				
			||||||
  REFLECT_MEMBER2("hover", value.def.hover);
 | 
					  REFLECT_MEMBER2("hover", value.def.hover);
 | 
				
			||||||
  REFLECT_MEMBER2("comments", value.def.comments);
 | 
					  REFLECT_MEMBER2("comments", value.def.comments);
 | 
				
			||||||
  REFLECT_MEMBER2("declarations", value.declarations);
 | 
					  REFLECT_MEMBER2("declarations", value.declarations);
 | 
				
			||||||
@ -194,6 +192,10 @@ void Reflect(TVisitor& visitor, IndexVar& value) {
 | 
				
			|||||||
  REFLECT_MEMBER2("definition_extent", value.def.definition_extent);
 | 
					  REFLECT_MEMBER2("definition_extent", value.def.definition_extent);
 | 
				
			||||||
  REFLECT_MEMBER2("variable_type", value.def.variable_type);
 | 
					  REFLECT_MEMBER2("variable_type", value.def.variable_type);
 | 
				
			||||||
  REFLECT_MEMBER2("uses", value.uses);
 | 
					  REFLECT_MEMBER2("uses", value.uses);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER2("parent_id", value.def.parent_id);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER2("parent_kind", value.def.parent_kind);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER2("kind", value.def.kind);
 | 
				
			||||||
 | 
					  REFLECT_MEMBER2("storage", value.def.storage);
 | 
				
			||||||
  REFLECT_MEMBER_END();
 | 
					  REFLECT_MEMBER_END();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user