From 7dc9a088bc90f91227047c6dd073c256e0133b9c Mon Sep 17 00:00:00 2001 From: Kasper Arnklit Frandsen Date: Thu, 10 Apr 2025 14:03:46 +0100 Subject: [PATCH] Add fuzzy filtering to the script filtering --- editor/plugins/script_editor_plugin.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index a47a9689970..44ae4cc356f 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -37,6 +37,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" @@ -2281,10 +2282,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]); } }