From ae12c80dcab11225e9f1fda5184d83c7329ae30b Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Sat, 14 Feb 2026 10:31:30 +0200 Subject: [PATCH] Revert proejct search on type (#49163) Reverts the whole "project search on type" set of PRs until we figure out better ways to deal with flickering between search results appearing. Release Notes: - N/A --- assets/settings/default.json | 5 -- crates/editor/src/editor_settings.rs | 7 -- crates/search/src/buffer_search.rs | 93 --------------------------- crates/search/src/project_search.rs | 65 ++++--------------- crates/settings_content/src/editor.rs | 8 --- crates/settings_ui/src/page_data.rs | 48 +------------- docs/src/reference/all-settings.md | 18 ++---- 7 files changed, 20 insertions(+), 224 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index c3ffa8c0410b4872443dad8c5da261eb2edd3455..ae8b320678d98b2388524c243f702353f0e0d4b5 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -667,11 +667,6 @@ "regex": false, // Whether to center the cursor on each search match when navigating. "center_on_match": false, - // Whether to search on input in project search. - "search_on_input": false, - // Debounce time in milliseconds for search on input in project search. - // Set to 0 to disable debouncing. - "search_on_input_debounce_ms": 200, }, // When to populate a new search's query based on the text under the cursor. // This setting can take the following three values: diff --git a/crates/editor/src/editor_settings.rs b/crates/editor/src/editor_settings.rs index 97df9fdfcd5c7740751131240265fa9e9a2e6cb5..47210a7561f4a3ebbddb994f00afcaff9158254d 100644 --- a/crates/editor/src/editor_settings.rs +++ b/crates/editor/src/editor_settings.rs @@ -175,11 +175,6 @@ pub struct SearchSettings { pub regex: bool, /// Whether to center the cursor on each search match when navigating. pub center_on_match: bool, - /// Whether to search on input in project search. - pub search_on_input: bool, - /// Debounce time in milliseconds for search on input in project search. - /// Set to 0 to disable debouncing. - pub search_on_input_debounce_ms: u64, } impl EditorSettings { @@ -276,8 +271,6 @@ impl Settings for EditorSettings { include_ignored: search.include_ignored.unwrap(), regex: search.regex.unwrap(), center_on_match: search.center_on_match.unwrap(), - search_on_input: search.search_on_input.unwrap(), - search_on_input_debounce_ms: search.search_on_input_debounce_ms.unwrap(), }, auto_signature_help: editor.auto_signature_help.unwrap(), show_signature_help_after_edits: editor.show_signature_help_after_edits.unwrap(), diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index e9c9725b53e29a3336c10f57889ed90310f7fa6d..25cbb4ef4cdb65128adee25b93d33409b9df57f9 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -3421,8 +3421,6 @@ mod tests { include_ignored: false, regex: false, center_on_match: false, - search_on_input: false, - search_on_input_debounce_ms: 0, }, cx, ); @@ -3486,8 +3484,6 @@ mod tests { include_ignored: false, regex: false, center_on_match: false, - search_on_input: false, - search_on_input_debounce_ms: 0, }, cx, ); @@ -3526,8 +3522,6 @@ mod tests { include_ignored: false, regex: false, center_on_match: false, - search_on_input: false, - search_on_input_debounce_ms: 0, }, cx, ); @@ -3610,96 +3604,9 @@ mod tests { include_ignored: Some(search_settings.include_ignored), regex: Some(search_settings.regex), center_on_match: Some(search_settings.center_on_match), - search_on_input: Some(search_settings.search_on_input), - search_on_input_debounce_ms: Some( - search_settings.search_on_input_debounce_ms, - ), }); }); }); }); } - #[gpui::test] - async fn test_search_on_input_setting(cx: &mut TestAppContext) { - let (editor, search_bar, cx) = init_test(cx); - - update_search_settings( - SearchSettings { - button: true, - whole_word: false, - case_sensitive: false, - include_ignored: false, - regex: false, - center_on_match: false, - search_on_input: false, - search_on_input_debounce_ms: 0, - }, - cx, - ); - - search_bar.update_in(cx, |search_bar, window, cx| { - search_bar.show(window, cx); - search_bar.query_editor.update(cx, |query_editor, cx| { - query_editor.buffer().update(cx, |buffer, cx| { - buffer.edit( - [(MultiBufferOffset(0)..MultiBufferOffset(0), "expression")], - None, - cx, - ); - }); - }); - }); - - cx.background_executor.run_until_parked(); - - editor.update_in(cx, |editor, window, cx| { - let highlights = editor.all_text_background_highlights(window, cx); - assert!( - highlights.is_empty(), - "No highlights should appear when search_on_input is false" - ); - }); - - update_search_settings( - SearchSettings { - button: true, - whole_word: false, - case_sensitive: false, - include_ignored: false, - regex: false, - center_on_match: false, - search_on_input: true, - search_on_input_debounce_ms: 0, - }, - cx, - ); - - search_bar.update_in(cx, |search_bar, window, cx| { - search_bar.dismiss(&Dismiss, window, cx); - search_bar.show(window, cx); - }); - - search_bar - .update_in(cx, |search_bar, window, cx| { - search_bar.search("expression", None, true, window, cx) - }) - .await - .unwrap(); - - editor.update_in(cx, |editor, window, cx| { - let highlights = display_points_of(editor.all_text_background_highlights(window, cx)); - assert_eq!( - highlights.len(), - 2, - "Should find 2 matches for 'expression' when search_on_input is true" - ); - assert_eq!( - highlights, - &[ - DisplayPoint::new(DisplayRow(0), 10)..DisplayPoint::new(DisplayRow(0), 20), - DisplayPoint::new(DisplayRow(1), 9)..DisplayPoint::new(DisplayRow(1), 19), - ] - ); - }); - } } diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 4587f0837056dd68d82f74209b755e51db89e2b3..7c85077c488371e611fdadf0baf7ee94f49fe511 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -39,7 +39,6 @@ use std::{ ops::{Not, Range}, pin::pin, sync::Arc, - time::Duration, }; use ui::{ CommonAnimationExt, IconButtonShape, KeyBinding, Toggleable, Tooltip, prelude::*, @@ -271,7 +270,6 @@ pub struct ProjectSearchView { included_opened_only: bool, regex_language: Option>, results_collapsed: bool, - current_search_on_input: Task<()>, _subscriptions: Vec, } @@ -871,43 +869,15 @@ impl ProjectSearchView { // Subscribe to query_editor in order to reraise editor events for workspace item activation purposes subscriptions.push( cx.subscribe(&query_editor, |this, _, event: &EditorEvent, cx| { - if let EditorEvent::Edited { .. } = event { - if EditorSettings::get_global(cx).use_smartcase_search { - let query = this.search_query_text(cx); - if !query.is_empty() - && this.search_options.contains(SearchOptions::CASE_SENSITIVE) - != contains_uppercase(&query) - { - this.toggle_search_option(SearchOptions::CASE_SENSITIVE, cx); - } - } - - let search_settings = &EditorSettings::get_global(cx).search; - if search_settings.search_on_input { - if this.query_editor.read(cx).is_empty(cx) { - this.current_search_on_input = Task::ready(()); - this.entity.update(cx, |model, cx| { - model.pending_search = None; - model.match_ranges.clear(); - model.excerpts.update(cx, |excerpts, cx| excerpts.clear(cx)); - model.no_results = None; - model.limit_reached = false; - cx.notify(); - }); - } else { - let debounce = search_settings.search_on_input_debounce_ms; - this.current_search_on_input = cx.spawn(async move |this, cx| { - if debounce > 0 { - cx.background_executor() - .timer(Duration::from_millis(debounce)) - .await; - } - this.update(cx, |this, cx| { - this.search(cx); - }) - .ok(); - }); - } + if let EditorEvent::Edited { .. } = event + && EditorSettings::get_global(cx).use_smartcase_search + { + let query = this.search_query_text(cx); + if !query.is_empty() + && this.search_options.contains(SearchOptions::CASE_SENSITIVE) + != contains_uppercase(&query) + { + this.toggle_search_option(SearchOptions::CASE_SENSITIVE, cx); } } cx.emit(ViewEvent::EditorEvent(event.clone())) @@ -1028,7 +998,6 @@ impl ProjectSearchView { included_opened_only: false, regex_language: None, results_collapsed: false, - current_search_on_input: Task::ready(()), _subscriptions: subscriptions, }; @@ -1560,11 +1529,7 @@ impl ProjectSearchView { editor.scroll(Point::default(), Some(Axis::Vertical), window, cx); } }); - let should_auto_focus = !EditorSettings::get_global(cx).search.search_on_input; - if is_new_search - && self.query_editor.focus_handle(cx).is_focused(window) - && should_auto_focus - { + if is_new_search && self.query_editor.focus_handle(cx).is_focused(window) { self.focus_results_editor(window, cx); } } @@ -1627,13 +1592,9 @@ impl ProjectSearchView { v_flex() .gap_1() .child( - Label::new(if EditorSettings::get_global(cx).search.search_on_input { - "Start typing to search. For more options:" - } else { - "Hit enter to search. For more options:" - }) - .color(Color::Muted) - .mb_2(), + Label::new("Hit enter to search. For more options:") + .color(Color::Muted) + .mb_2(), ) .child( Button::new("filter-paths", "Include/exclude specific paths") diff --git a/crates/settings_content/src/editor.rs b/crates/settings_content/src/editor.rs index 88616e065e31be916b05e81ebef7cb005c0eac13..4d824e85e0e2ee020f48cdddb530bf494b2ce800 100644 --- a/crates/settings_content/src/editor.rs +++ b/crates/settings_content/src/editor.rs @@ -828,14 +828,6 @@ pub struct SearchSettingsContent { pub regex: Option, /// Whether to center the cursor on each search match when navigating. pub center_on_match: Option, - /// Whether to search on input in project search. - pub search_on_input: Option, - /// Debounce time in milliseconds for search on input in project search. - /// - /// Set to 0 to disable debouncing. - /// - /// Default: 200 - pub search_on_input_debounce_ms: Option, } #[with_fallible_options] diff --git a/crates/settings_ui/src/page_data.rs b/crates/settings_ui/src/page_data.rs index b594c21cfc59e653724475693c1f81676f449747..738eff917bc57a7a2543f9c31494af02883299d1 100644 --- a/crates/settings_ui/src/page_data.rs +++ b/crates/settings_ui/src/page_data.rs @@ -2999,7 +2999,7 @@ fn languages_and_tools_page(cx: &App) -> SettingsPage { } fn search_and_files_page() -> SettingsPage { - fn search_section() -> [SettingsPageItem; 11] { + fn search_section() -> [SettingsPageItem; 9] { [ SettingsPageItem::SectionHeader("Search"), SettingsPageItem::SettingItem(SettingItem { @@ -3133,52 +3133,6 @@ fn search_and_files_page() -> SettingsPage { metadata: None, files: USER, }), - SettingsPageItem::SettingItem(SettingItem { - title: "Search on Input", - description: "Whether to search on input in project search.", - field: Box::new(SettingField { - json_path: Some("editor.search.search_on_input"), - pick: |settings_content| { - settings_content - .editor - .search - .as_ref() - .and_then(|search| search.search_on_input.as_ref()) - }, - write: |settings_content, value| { - settings_content - .editor - .search - .get_or_insert_default() - .search_on_input = value; - }, - }), - metadata: None, - files: USER, - }), - SettingsPageItem::SettingItem(SettingItem { - title: "Search on Input Debounce", - description: "Debounce time in milliseconds for search on input (set to 0 to disable debouncing).", - field: Box::new(SettingField { - json_path: Some("editor.search.search_on_input_debounce_ms"), - pick: |settings_content| { - settings_content - .editor - .search - .as_ref() - .and_then(|search| search.search_on_input_debounce_ms.as_ref()) - }, - write: |settings_content, value| { - settings_content - .editor - .search - .get_or_insert_default() - .search_on_input_debounce_ms = value; - }, - }), - metadata: None, - files: USER, - }), SettingsPageItem::SettingItem(SettingItem { title: "Seed Search Query From Cursor", description: "When to populate a new search's query based on the text under the cursor.", diff --git a/docs/src/reference/all-settings.md b/docs/src/reference/all-settings.md index f47006a5b904b5999f29c6657d63dc2b4c47a76a..4aaf979993802da20d0b1a0f43d1a1323008611c 100644 --- a/docs/src/reference/all-settings.md +++ b/docs/src/reference/all-settings.md @@ -3270,18 +3270,6 @@ Non-negative `integer` values - Setting: `regex` - Default: `false` -### Search On Input - -- Description: Whether to search on input in project search. -- Setting: `search_on_input` -- Default: `false` - -### Search On Input Debounce Ms - -- Description: Debounce time in milliseconds for search on input in project search. Set to 0 to disable debouncing. -- Setting: `search_on_input_debounce_ms` -- Default: `200` - ### Center On Match - Description: Whether to center the cursor on each search match when navigating. @@ -3294,6 +3282,12 @@ Non-negative `integer` values - Setting: `search_wrap` - Default: `true` +## Center on Match + +- Description: If `center_on_match` is enabled, the editor will center the cursor on the current match when searching. +- Setting: `center_on_match` +- Default: `false` + ## Seed Search Query From Cursor - Description: When to populate a new search's query based on the text under the cursor.