Revert proejct search on type (#49163)

Kirill Bulatov created

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

Change summary

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(-)

Detailed changes

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:

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(),

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),
-                ]
-            );
-        });
-    }
 }

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<Arc<Language>>,
     results_collapsed: bool,
-    current_search_on_input: Task<()>,
     _subscriptions: Vec<Subscription>,
 }
 
@@ -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")

crates/settings_content/src/editor.rs 🔗

@@ -828,14 +828,6 @@ pub struct SearchSettingsContent {
     pub regex: Option<bool>,
     /// Whether to center the cursor on each search match when navigating.
     pub center_on_match: Option<bool>,
-    /// Whether to search on input in project search.
-    pub search_on_input: Option<bool>,
-    /// 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<u64>,
 }
 
 #[with_fallible_options]

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.",

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.