From 76c852f6053112fb790f3ec60613fa8026284307 Mon Sep 17 00:00:00 2001 From: HolonProduction Date: Sun, 6 Apr 2025 13:10:06 +0200 Subject: [PATCH] LSP: Extract annotations from `EditorHelp` --- .../language_server/gdscript_workspace.cpp | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/modules/gdscript/language_server/gdscript_workspace.cpp b/modules/gdscript/language_server/gdscript_workspace.cpp index fb7beef3211..383ab378180 100644 --- a/modules/gdscript/language_server/gdscript_workspace.cpp +++ b/modules/gdscript/language_server/gdscript_workspace.cpp @@ -156,7 +156,12 @@ const LSP::DocumentSymbol *GDScriptWorkspace::get_native_symbol(const String &p_ } } } - class_name = ClassDB::get_parent_class(class_name); + // Might contain pseudo classes like @GDScript that only exist in documentation. + if (ClassDB::class_exists(class_name)) { + class_name = ClassDB::get_parent_class(class_name); + } else { + break; + } } return nullptr; @@ -343,20 +348,32 @@ Error GDScriptWorkspace::initialize() { class_symbol.children.push_back(symbol); } - Vector methods_signals; - methods_signals.append_array(class_data.constructors); - methods_signals.append_array(class_data.methods); - methods_signals.append_array(class_data.operators); - const int signal_start_idx = methods_signals.size(); - methods_signals.append_array(class_data.signals); + Vector method_likes; + method_likes.append_array(class_data.methods); + method_likes.append_array(class_data.annotations); + const int constructors_start_idx = method_likes.size(); + method_likes.append_array(class_data.constructors); + const int operator_start_idx = method_likes.size(); + method_likes.append_array(class_data.operators); + const int signal_start_idx = method_likes.size(); + method_likes.append_array(class_data.signals); - for (int i = 0; i < methods_signals.size(); i++) { - const DocData::MethodDoc &data = methods_signals[i]; + for (int i = 0; i < method_likes.size(); i++) { + const DocData::MethodDoc &data = method_likes[i]; LSP::DocumentSymbol symbol; symbol.name = data.name; symbol.native_class = class_name; - symbol.kind = i >= signal_start_idx ? LSP::SymbolKind::Event : LSP::SymbolKind::Method; + + if (i >= signal_start_idx) { + symbol.kind = LSP::SymbolKind::Event; + } else if (i >= operator_start_idx) { + symbol.kind = LSP::SymbolKind::Operator; + } else if (i >= constructors_start_idx) { + symbol.kind = LSP::SymbolKind::Constructor; + } else { + symbol.kind = LSP::SymbolKind::Method; + } String params = ""; bool arg_default_value_started = false;