Skip to content

Commit 9b22b41

Browse files
committed
Merge pull request godotengine#105087 from HolonProduction/lsp-annotations
LSP: Extract annotations from `EditorHelp`
2 parents b7dcb1f + 76c852f commit 9b22b41

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

modules/gdscript/language_server/gdscript_workspace.cpp

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)