Ensure editors context menus get at least 3 lines of height

Max Brunsfeld created

Change summary

crates/collab_ui/src/chat_panel/message_editor.rs |  5 ++---
crates/editor/src/element.rs                      | 14 ++++++++++----
crates/language/src/language.rs                   |  5 +++--
3 files changed, 15 insertions(+), 9 deletions(-)

Detailed changes

crates/collab_ui/src/chat_panel/message_editor.rs 🔗

@@ -240,8 +240,8 @@ impl MessageEditor {
                         text: format!("@{}", mat.string),
                         runs: Vec::new(),
                     },
-                    server_id: LanguageServerId(0), // TODO: Make this optional or something?
                     documentation: None,
+                    server_id: LanguageServerId(0), // TODO: Make this optional or something?
                     lsp_completion: Default::default(), // TODO: Make this optional or something?
                 })
                 .collect())
@@ -326,7 +326,6 @@ impl Render for MessageEditor {
 
         div()
             .w_full()
-            .h(px(500.))
             .px_2()
             .py_1()
             .bg(cx.theme().colors().editor_background)
@@ -360,7 +359,7 @@ mod tests {
             MessageEditor::new(
                 language_registry,
                 ChannelStore::global(cx),
-                cx.new_view(|cx| Editor::auto_height(25, cx)),
+                cx.new_view(|cx| Editor::auto_height(4, cx)),
                 cx,
             )
         });

crates/editor/src/element.rs 🔗

@@ -1177,9 +1177,9 @@ impl EditorElement {
                 list_origin.x = (cx.viewport_size().width - list_width).max(Pixels::ZERO);
             }
 
-            // if list_origin.y + list_height > text_bounds.lower_right().y {
-            //     list_origin.y -= layout.position_map.line_height + list_height;
-            // }
+            if list_origin.y + list_height > text_bounds.lower_right().y {
+                list_origin.y -= layout.position_map.line_height + list_height;
+            }
 
             cx.break_content_mask(|cx| context_menu.draw(list_origin, available_space, cx));
         }
@@ -2128,7 +2128,13 @@ impl EditorElement {
             if let Some(newest_selection_head) = newest_selection_head {
                 if (start_row..end_row).contains(&newest_selection_head.row()) {
                     if editor.context_menu_visible() {
-                        let max_height = (12. * line_height).min((bounds.size.height - line_height) / 2.);
+                        let max_height = cmp::min(
+                            12. * line_height,
+                            cmp::max(
+                                3. * line_height,
+                                (bounds.size.height - line_height) / 2.,
+                            )
+                        );
                         context_menu =
                             editor.render_context_menu(newest_selection_head, &self.style, max_height, cx);
                     }

crates/language/src/language.rs 🔗

@@ -379,10 +379,11 @@ pub trait LspAdapter: 'static + Send + Sync {
 
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub struct CodeLabel {
+    /// The text to display.
     pub text: String,
-    /// Determines the syntax highlighting for the label
+    /// Syntax highlighting runs.
     pub runs: Vec<(Range<usize>, HighlightId)>,
-    /// Which part of the label participates
+    /// The portion of the text that should be used in fuzzy filtering.
     pub filter_range: Range<usize>,
 }