Browse Source

Fix LSP completion crashing on sceneless scripts

(cherry picked from commit 6db17a523e3747c489747d52de62790d9148d25d)
Francois Belair 4 years ago
parent
commit
9d0e0fe783
1 changed files with 15 additions and 13 deletions
  1. 15 13
      modules/gdscript/language_server/gdscript_workspace.cpp

+ 15 - 13
modules/gdscript/language_server/gdscript_workspace.cpp

@@ -445,22 +445,24 @@ void GDScriptWorkspace::completion(const lsp::CompletionParams &p_params, List<S
 
 
 		Array stack;
 		Array stack;
 		Node *current = nullptr;
 		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));
+		if (owner_scene_node) {
+			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;
+			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);
 		String code = parser->get_text_for_completion(p_params.position);