mirror of
https://github.com/MaskRay/ccls.git
synced 2025-01-19 12:05:50 +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