summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/language_server/gdscript_text_document.cpp
diff options
context:
space:
mode:
authorGeequlim <geequlim@gmail.com>2019-06-25 12:12:41 +0800
committergeequlim <geequlim@gmail.com>2019-08-11 13:30:15 +0800
commitb2f02317fabe284220c74c21229e4cad6ab74e93 (patch)
tree71817f93ffe84e92eed24accf2420bdfc41a2679 /modules/gdscript/language_server/gdscript_text_document.cpp
parent76c9e4ceb73b02bd95ab0512e27229516208dc60 (diff)
downloadredot-engine-b2f02317fabe284220c74c21229e4cad6ab74e93.tar.gz
Improve symbol resolve for inner classes
Only level one inner classes would be resolved currently but it sould cover most real world use case Improve documation parseing for const values Improve documation format for native symbols
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) {