Fix LSP completion crashing on scene-less scripts
This commit is contained in:
parent
18c5d862e4
commit
070d634966
2 changed files with 22 additions and 16 deletions
|
@ -431,9 +431,13 @@ void GDScriptTextDocument::sync_script_content(const String &p_path, const Strin
|
|||
GDScriptLanguageProtocol::get_singleton()->get_workspace()->parse_script(path, p_content);
|
||||
|
||||
EditorFileSystem::get_singleton()->update_file(path);
|
||||
Ref<GDScript> script = ResourceLoader::load(path);
|
||||
script->load_source_code(path);
|
||||
script->reload(true);
|
||||
Error error;
|
||||
Ref<GDScript> script = ResourceLoader::load(path, "", ResourceFormatLoader::CACHE_MODE_REUSE, &error);
|
||||
if (error == OK) {
|
||||
if (script->load_source_code(path) == OK) {
|
||||
script->reload(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GDScriptTextDocument::show_native_symbol_in_editor(const String &p_symbol_id) {
|
||||
|
|
|
@ -523,22 +523,24 @@ void GDScriptWorkspace::completion(const lsp::CompletionParams &p_params, List<S
|
|||
|
||||
Array stack;
|
||||
Node *current = nullptr;
|
||||
stack.push_back(owner_scene_node);
|
||||
if (owner_scene_node != nullptr) {
|
||||
stack.push_back(owner_scene_node);
|
||||
|
||||
while (!stack.is_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));
|
||||
}
|
||||
}
|
||||
|
||||
while (!stack.is_empty()) {
|
||||
current = stack.pop_back();
|
||||
Ref<GDScript> script = current->get_script();
|
||||
if (script.is_valid() && script->get_path() == path) {
|
||||
break;
|
||||
if (!script.is_valid() || script->get_path() != path) {
|
||||
current = owner_scene_node;
|
||||
}
|
||||
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);
|
||||
|
|
Loading…
Reference in a new issue