diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index f5c2c94294..90cf4199c6 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -38,6 +38,7 @@ #include "core/io/resource_loader.h" #include "core/os/keyboard.h" #include "core/os/os.h" +#include "core/string/fuzzy_search.h" #include "core/version.h" #include "editor/code_editor.h" #include "editor/debugger/editor_debugger_node.h" @@ -2322,10 +2323,24 @@ void ScriptEditor::_update_script_names() { } Vector<_ScriptEditorItemData> sedata_filtered; - for (int i = 0; i < sedata.size(); i++) { - String filter = filter_scripts->get_text(); - if (filter.is_empty() || filter.is_subsequence_ofn(sedata[i].name)) { - sedata_filtered.push_back(sedata[i]); + + String filter = filter_scripts->get_text(); + + if (filter.is_empty()) { + sedata_filtered = sedata; + } else { + PackedStringArray search_names; + for (int i = 0; i < sedata.size(); i++) { + search_names.append(sedata[i].name); + } + + Vector results; + FuzzySearch fuzzy; + fuzzy.set_query(filter, false); + fuzzy.search_all(search_names, results); + + for (const FuzzySearchResult &res : results) { + sedata_filtered.push_back(sedata[res.original_index]); } }