summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/language_server/gdscript_text_document.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gdscript/language_server/gdscript_text_document.cpp')
-rw-r--r--modules/gdscript/language_server/gdscript_text_document.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/modules/gdscript/language_server/gdscript_text_document.cpp b/modules/gdscript/language_server/gdscript_text_document.cpp
index a5211fb0f1..cb42e31644 100644
--- a/modules/gdscript/language_server/gdscript_text_document.cpp
+++ b/modules/gdscript/language_server/gdscript_text_document.cpp
@@ -88,7 +88,7 @@ void GDScriptTextDocument::initialize() {
while (name) {
const lsp::DocumentSymbol *symbol = members.get(*name);
- lsp::CompletionItem item = symbol->make_completion_item(false);
+ lsp::CompletionItem item = symbol->make_completion_item();
item.data = JOIN_SYMBOLS(String(*class_ptr), *name);
native_member_completions.push_back(item.to_json());
@@ -171,7 +171,7 @@ Array GDScriptTextDocument::completion(const Dictionary &p_params) {
break;
}
- arr[i] = item.to_json(true);
+ arr[i] = item.to_json();
i++;
}
} else if (GDScriptLanguageProtocol::get_singleton()->is_smart_resolve_enabled()) {
@@ -211,12 +211,18 @@ Dictionary GDScriptTextDocument::resolve(const Dictionary &p_params) {
} else if (data.get_type() == Variant::STRING) {
String query = data;
- int seperator_pos = query.find_last(".");
- if (seperator_pos >= 0 && seperator_pos < query.length() - 1) {
- String class_ = query.substr(0, seperator_pos);
+ Vector<String> param_symbols = query.split(SYMBOL_SEPERATOR, false);
+
+ if (param_symbols.size() >= 2) {
+
+ String class_ = param_symbols[0];
StringName class_name = class_;
- String member_name = query.substr(seperator_pos + 1, query.length());
+ String member_name = param_symbols[param_symbols.size() - 1];
+ String inner_class_name;
+ if (param_symbols.size() >= 3) {
+ inner_class_name = param_symbols[1];
+ }
if (const ClassMembers *members = GDScriptLanguageProtocol::get_singleton()->get_workspace().native_members.getptr(class_name)) {
if (const lsp::DocumentSymbol *const *member = members->getptr(member_name)) {
@@ -226,7 +232,7 @@ Dictionary GDScriptTextDocument::resolve(const Dictionary &p_params) {
if (!symbol) {
if (const Map<String, ExtendGDScriptParser *>::Element *E = GDScriptLanguageProtocol::get_singleton()->get_workspace().scripts.find(class_name)) {
- symbol = E->get()->get_member_symbol(member_name);
+ symbol = E->get()->get_member_symbol(member_name, inner_class_name);
}
}
}
@@ -248,7 +254,7 @@ Dictionary GDScriptTextDocument::resolve(const Dictionary &p_params) {
}
}
- return item.to_json();
+ return item.to_json(true);
}
Array GDScriptTextDocument::foldingRange(const Dictionary &p_params) {