Don't select entire item when jumping to a project symbol

Max Brunsfeld and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

crates/project_symbols/src/project_symbols.rs | 29 ++++++++++++--------
1 file changed, 17 insertions(+), 12 deletions(-)

Detailed changes

crates/project_symbols/src/project_symbols.rs 🔗

@@ -337,7 +337,11 @@ impl ProjectSymbolsView {
                     ))
                     .boxed(),
             )
-            .with_child(Label::new(path.to_string(), style.label.clone()).boxed())
+            .with_child(
+                // Avoid styling the path differently when it is selected, since
+                // the symbol's syntax highlighting doesn't change when selected.
+                Label::new(path.to_string(), settings.theme.selector.item.label.clone()).boxed(),
+            )
             .contained()
             .with_style(style.container)
             .boxed()
@@ -372,18 +376,19 @@ impl ProjectSymbolsView {
                 cx.spawn(|workspace, mut cx| async move {
                     let buffer = buffer.await?;
                     workspace.update(&mut cx, |workspace, cx| {
-                        let start;
-                        let end;
-                        {
-                            let buffer = buffer.read(cx);
-                            start = buffer.clip_point_utf16(symbol.range.start, Bias::Left);
-                            end = buffer.clip_point_utf16(symbol.range.end, Bias::Left);
-                        }
-
-                        let editor = workspace.open_item(BufferItemHandle(buffer), cx);
-                        let editor = editor.downcast::<Editor>().unwrap();
+                        let position = buffer
+                            .read(cx)
+                            .clip_point_utf16(symbol.range.start, Bias::Left);
+                        let editor = workspace
+                            .open_item(BufferItemHandle(buffer), cx)
+                            .downcast::<Editor>()
+                            .unwrap();
                         editor.update(cx, |editor, cx| {
-                            editor.select_ranges([start..end], Some(Autoscroll::Center), cx);
+                            editor.select_ranges(
+                                [position..position],
+                                Some(Autoscroll::Center),
+                                cx,
+                            );
                         });
                     });
                     Ok::<_, anyhow::Error>(())