From f1f4c5b10b934402acdfa279782a93cbe4403740 Mon Sep 17 00:00:00 2001 From: stmSi Date: Tue, 7 Mar 2023 02:49:14 +0630 Subject: [PATCH] Fix `Find in Files` Search Results cannot open builtin script --- editor/plugins/script_editor_plugin.cpp | 65 +++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index a584d357cd3..49c815526b7 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -3586,7 +3586,72 @@ void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_numb shader_editor->get_shader_editor(res)->goto_line_selection(line_number - 1, begin, end); return; } else if (fpath.get_extension() == "tscn") { + Ref f = FileAccess::open(fpath, FileAccess::READ); + bool is_script_found = false; + + // Starting from top of the tscn file. + int scr_start_line = 1; + + String scr_header = "[sub_resource type=\"GDScript\" id=\""; + String scr_id = ""; + String line = ""; + + int l = 0; + + while (!f->eof_reached()) { + line = f->get_line(); + l++; + + if (!line.begins_with(scr_header)) { + continue; + } + + // Found the end of the script. + scr_id = line.get_slice(scr_header, 1); + scr_id = scr_id.get_slice("\"", 0); + + scr_start_line = l + 1; + int scr_line_count = 0; + + do { + line = f->get_line(); + l++; + String strline = line.strip_edges(); + + if (strline.ends_with("\"") && !strline.ends_with("\\\"")) { + // Found the end of script. + break; + } + scr_line_count++; + + } while (!f->eof_reached()); + + if (line_number > scr_start_line + scr_line_count) { + // Find in another built-in GDScript. + continue; + } + + // Real line number of the built-in script. + line_number = line_number - scr_start_line; + + is_script_found = true; + break; + } + EditorNode::get_singleton()->load_scene(fpath); + + if (is_script_found && !scr_id.is_empty()) { + Ref