@@ -156,7 +156,12 @@ const LSP::DocumentSymbol *GDScriptWorkspace::get_native_symbol(const String &p_
156156 }
157157 }
158158 }
159- class_name = ClassDB::get_parent_class (class_name);
159+ // Might contain pseudo classes like @GDScript that only exist in documentation.
160+ if (ClassDB::class_exists (class_name)) {
161+ class_name = ClassDB::get_parent_class (class_name);
162+ } else {
163+ break ;
164+ }
160165 }
161166
162167 return nullptr ;
@@ -343,20 +348,32 @@ Error GDScriptWorkspace::initialize() {
343348 class_symbol.children .push_back (symbol);
344349 }
345350
346- Vector<DocData::MethodDoc> methods_signals;
347- methods_signals.append_array (class_data.constructors );
348- methods_signals.append_array (class_data.methods );
349- methods_signals.append_array (class_data.operators );
350- const int signal_start_idx = methods_signals.size ();
351- methods_signals.append_array (class_data.signals );
351+ Vector<DocData::MethodDoc> method_likes;
352+ method_likes.append_array (class_data.methods );
353+ method_likes.append_array (class_data.annotations );
354+ const int constructors_start_idx = method_likes.size ();
355+ method_likes.append_array (class_data.constructors );
356+ const int operator_start_idx = method_likes.size ();
357+ method_likes.append_array (class_data.operators );
358+ const int signal_start_idx = method_likes.size ();
359+ method_likes.append_array (class_data.signals );
352360
353- for (int i = 0 ; i < methods_signals .size (); i++) {
354- const DocData::MethodDoc &data = methods_signals [i];
361+ for (int i = 0 ; i < method_likes .size (); i++) {
362+ const DocData::MethodDoc &data = method_likes [i];
355363
356364 LSP::DocumentSymbol symbol;
357365 symbol.name = data.name ;
358366 symbol.native_class = class_name;
359- symbol.kind = i >= signal_start_idx ? LSP::SymbolKind::Event : LSP::SymbolKind::Method;
367+
368+ if (i >= signal_start_idx) {
369+ symbol.kind = LSP::SymbolKind::Event;
370+ } else if (i >= operator_start_idx) {
371+ symbol.kind = LSP::SymbolKind::Operator;
372+ } else if (i >= constructors_start_idx) {
373+ symbol.kind = LSP::SymbolKind::Constructor;
374+ } else {
375+ symbol.kind = LSP::SymbolKind::Method;
376+ }
360377
361378 String params = " " ;
362379 bool arg_default_value_started = false ;
0 commit comments