Fix LSP parsing get_node only from the scene root
(cherry picked from commit 03f8fa9f62
)
This commit is contained in:
parent
b3c555504f
commit
1f0fa16a15
1 changed files with 22 additions and 1 deletions
|
@ -514,8 +514,29 @@ void GDScriptWorkspace::completion(const lsp::CompletionParams &p_params, List<S
|
|||
|
||||
if (const ExtendGDScriptParser *parser = get_parse_result(path)) {
|
||||
Node *owner_scene_node = _get_owner_scene_node(path);
|
||||
|
||||
Array stack;
|
||||
Node *current = nullptr;
|
||||
stack.push_back(owner_scene_node);
|
||||
|
||||
while (!stack.empty()) {
|
||||
current = stack.pop_back();
|
||||
Ref<GDScript> script = current->get_script();
|
||||
if (script.is_valid() && script->get_path() == path) {
|
||||
break;
|
||||
}
|
||||
for (int i = 0; i < current->get_child_count(); ++i) {
|
||||
stack.push_back(current->get_child(i));
|
||||
}
|
||||
}
|
||||
|
||||
Ref<GDScript> script = current->get_script();
|
||||
if (!script.is_valid() || script->get_path() != path) {
|
||||
current = owner_scene_node;
|
||||
}
|
||||
|
||||
String code = parser->get_text_for_completion(p_params.position);
|
||||
GDScriptLanguage::get_singleton()->complete_code(code, path, owner_scene_node, r_options, forced, call_hint);
|
||||
GDScriptLanguage::get_singleton()->complete_code(code, path, current, r_options, forced, call_hint);
|
||||
if (owner_scene_node) {
|
||||
memdelete(owner_scene_node);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue