@@ -156,7 +156,12 @@ const LSP::DocumentSymbol *GDScriptWorkspace::get_native_symbol(const String &p_
156
156
}
157
157
}
158
158
}
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
+ }
160
165
}
161
166
162
167
return nullptr ;
@@ -343,20 +348,32 @@ Error GDScriptWorkspace::initialize() {
343
348
class_symbol.children .push_back (symbol);
344
349
}
345
350
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 );
352
360
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];
355
363
356
364
LSP::DocumentSymbol symbol;
357
365
symbol.name = data.name ;
358
366
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
+ }
360
377
361
378
String params = " " ;
362
379
bool arg_default_value_started = false ;
0 commit comments