Fix resolve status conversion

Kirill Bulatov created

Change summary

crates/editor/src/display_map.rs           |   4 
crates/editor/src/display_map/block_map.rs |   4 
crates/editor/src/display_map/fold_map.rs  |   4 
crates/editor/src/display_map/inlay_map.rs | 116 ++++++++++++------------
crates/editor/src/display_map/tab_map.rs   |   4 
crates/editor/src/display_map/wrap_map.rs  |   4 
crates/editor/src/editor.rs                |   3 
crates/project/src/lsp_command.rs          |   4 
crates/project/src/project.rs              |   2 
9 files changed, 72 insertions(+), 73 deletions(-)

Detailed changes

crates/editor/src/display_map.rs 🔗

@@ -471,14 +471,14 @@ impl DisplaySnapshot {
         &self,
         display_rows: Range<u32>,
         language_aware: bool,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> DisplayChunks<'_> {
         self.block_snapshot.chunks(
             display_rows,
             language_aware,
             Some(&self.text_highlights),
-            inlay_highlight_style,
+            hint_highlight_style,
             suggestion_highlight_style,
         )
     }

crates/editor/src/display_map/block_map.rs 🔗

@@ -589,7 +589,7 @@ impl BlockSnapshot {
         rows: Range<u32>,
         language_aware: bool,
         text_highlights: Option<&'a TextHighlights>,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> BlockChunks<'a> {
         let max_output_row = cmp::min(rows.end, self.transforms.summary().output_rows);
@@ -623,7 +623,7 @@ impl BlockSnapshot {
                 input_start..input_end,
                 language_aware,
                 text_highlights,
-                inlay_highlight_style,
+                hint_highlight_style,
                 suggestion_highlight_style,
             ),
             input_chunk: Default::default(),

crates/editor/src/display_map/fold_map.rs 🔗

@@ -652,7 +652,7 @@ impl FoldSnapshot {
         range: Range<FoldOffset>,
         language_aware: bool,
         text_highlights: Option<&'a TextHighlights>,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> FoldChunks<'a> {
         let mut transform_cursor = self.transforms.cursor::<(FoldOffset, InlayOffset)>();
@@ -675,7 +675,7 @@ impl FoldSnapshot {
                 inlay_start..inlay_end,
                 language_aware,
                 text_highlights,
-                inlay_highlight_style,
+                hint_highlight_style,
                 suggestion_highlight_style,
             ),
             inlay_chunk: None,

crates/editor/src/display_map/inlay_map.rs 🔗

@@ -997,74 +997,74 @@ impl InlaySnapshot {
         range: Range<InlayOffset>,
         language_aware: bool,
         text_highlights: Option<&'a TextHighlights>,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> InlayChunks<'a> {
         let mut cursor = self.transforms.cursor::<(InlayOffset, usize)>();
         cursor.seek(&range.start, Bias::Right, &());
 
-        let empty_text_highlights = TextHighlights::default();
-        let text_highlights = text_highlights.unwrap_or_else(|| &empty_text_highlights);
-
         let mut highlight_endpoints = Vec::new();
-        if !text_highlights.is_empty() {
-            while cursor.start().0 < range.end {
-                let transform_start = self
-                    .buffer
-                    .anchor_after(self.to_buffer_offset(cmp::max(range.start, cursor.start().0)));
-                let transform_start = self.to_inlay_offset(transform_start.to_offset(&self.buffer));
-
-                let transform_end = {
-                    let overshoot = InlayOffset(range.end.0 - cursor.start().0 .0);
-                    self.buffer.anchor_before(self.to_buffer_offset(cmp::min(
-                        cursor.end(&()).0,
-                        cursor.start().0 + overshoot,
-                    )))
-                };
-                let transform_end = self.to_inlay_offset(transform_end.to_offset(&self.buffer));
-
-                for (tag, text_highlights) in text_highlights.iter() {
-                    let style = text_highlights.0;
-                    let ranges = &text_highlights.1;
-
-                    let start_ix = match ranges.binary_search_by(|probe| {
-                        let cmp = self
-                            .document_to_inlay_range(probe)
-                            .end
-                            .cmp(&transform_start);
-                        if cmp.is_gt() {
-                            cmp::Ordering::Greater
-                        } else {
-                            cmp::Ordering::Less
-                        }
-                    }) {
-                        Ok(i) | Err(i) => i,
+        if let Some(text_highlights) = text_highlights {
+            if !text_highlights.is_empty() {
+                while cursor.start().0 < range.end {
+                    let transform_start = self.buffer.anchor_after(
+                        self.to_buffer_offset(cmp::max(range.start, cursor.start().0)),
+                    );
+                    let transform_start =
+                        self.to_inlay_offset(transform_start.to_offset(&self.buffer));
+
+                    let transform_end = {
+                        let overshoot = InlayOffset(range.end.0 - cursor.start().0 .0);
+                        self.buffer.anchor_before(self.to_buffer_offset(cmp::min(
+                            cursor.end(&()).0,
+                            cursor.start().0 + overshoot,
+                        )))
                     };
-                    for range in &ranges[start_ix..] {
-                        let range = self.document_to_inlay_range(range);
-                        if range.start.cmp(&transform_end).is_ge() {
-                            break;
-                        }
+                    let transform_end = self.to_inlay_offset(transform_end.to_offset(&self.buffer));
+
+                    for (tag, text_highlights) in text_highlights.iter() {
+                        let style = text_highlights.0;
+                        let ranges = &text_highlights.1;
+
+                        let start_ix = match ranges.binary_search_by(|probe| {
+                            let cmp = self
+                                .document_to_inlay_range(probe)
+                                .end
+                                .cmp(&transform_start);
+                            if cmp.is_gt() {
+                                cmp::Ordering::Greater
+                            } else {
+                                cmp::Ordering::Less
+                            }
+                        }) {
+                            Ok(i) | Err(i) => i,
+                        };
+                        for range in &ranges[start_ix..] {
+                            let range = self.document_to_inlay_range(range);
+                            if range.start.cmp(&transform_end).is_ge() {
+                                break;
+                            }
 
-                        highlight_endpoints.push(HighlightEndpoint {
-                            offset: range.start,
-                            is_start: true,
-                            tag: *tag,
-                            style,
-                        });
-                        highlight_endpoints.push(HighlightEndpoint {
-                            offset: range.end,
-                            is_start: false,
-                            tag: *tag,
-                            style,
-                        });
+                            highlight_endpoints.push(HighlightEndpoint {
+                                offset: range.start,
+                                is_start: true,
+                                tag: *tag,
+                                style,
+                            });
+                            highlight_endpoints.push(HighlightEndpoint {
+                                offset: range.end,
+                                is_start: false,
+                                tag: *tag,
+                                style,
+                            });
+                        }
                     }
-                }
 
-                cursor.next(&());
+                    cursor.next(&());
+                }
+                highlight_endpoints.sort();
+                cursor.seek(&range.start, Bias::Right, &());
             }
-            highlight_endpoints.sort();
-            cursor.seek(&range.start, Bias::Right, &());
         }
 
         let buffer_range = self.to_buffer_offset(range.start)..self.to_buffer_offset(range.end);
@@ -1078,7 +1078,7 @@ impl InlaySnapshot {
             buffer_chunk: None,
             output_offset: range.start,
             max_output_offset: range.end,
-            hint_highlight_style: inlay_highlight_style,
+            hint_highlight_style,
             suggestion_highlight_style,
             highlight_endpoints: highlight_endpoints.into_iter().peekable(),
             active_highlights: Default::default(),

crates/editor/src/display_map/tab_map.rs 🔗

@@ -224,7 +224,7 @@ impl TabSnapshot {
         range: Range<TabPoint>,
         language_aware: bool,
         text_highlights: Option<&'a TextHighlights>,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> TabChunks<'a> {
         let (input_start, expanded_char_column, to_next_stop) =
@@ -246,7 +246,7 @@ impl TabSnapshot {
                 input_start..input_end,
                 language_aware,
                 text_highlights,
-                inlay_highlight_style,
+                hint_highlight_style,
                 suggestion_highlight_style,
             ),
             input_column,

crates/editor/src/display_map/wrap_map.rs 🔗

@@ -576,7 +576,7 @@ impl WrapSnapshot {
         rows: Range<u32>,
         language_aware: bool,
         text_highlights: Option<&'a TextHighlights>,
-        inlay_highlight_style: Option<HighlightStyle>,
+        hint_highlight_style: Option<HighlightStyle>,
         suggestion_highlight_style: Option<HighlightStyle>,
     ) -> WrapChunks<'a> {
         let output_start = WrapPoint::new(rows.start, 0);
@@ -595,7 +595,7 @@ impl WrapSnapshot {
                 input_start..input_end,
                 language_aware,
                 text_highlights,
-                inlay_highlight_style,
+                hint_highlight_style,
                 suggestion_highlight_style,
             ),
             input_chunk: Default::default(),

crates/editor/src/editor.rs 🔗

@@ -4882,7 +4882,6 @@ impl Editor {
                             if let Some(clipboard_selection) = clipboard_selections.get(ix) {
                                 let end_offset = start_offset + clipboard_selection.len;
                                 to_insert = &clipboard_text[start_offset..end_offset];
-                                dbg!(start_offset, end_offset, &clipboard_text, &to_insert);
                                 entire_line = clipboard_selection.is_entire_line;
                                 start_offset = end_offset + 1;
                                 original_indent_column =
@@ -7586,7 +7585,7 @@ impl Editor {
 
                 let right_position = right_position.clone();
                 ranges[start_ix..].iter().take_while(move |range| {
-                    document_to_inlay_range(range, &display_snapshot)
+                    document_to_inlay_range(range, display_snapshot)
                         .start
                         .cmp(&right_position)
                         .is_le()

crates/project/src/lsp_command.rs 🔗

@@ -1935,8 +1935,9 @@ impl InlayHints {
 
     pub fn project_to_proto_hint(response_hint: InlayHint, cx: &AppContext) -> proto::InlayHint {
         let (state, lsp_resolve_state) = match response_hint.resolve_state {
+            ResolveState::Resolved => (0, None),
             ResolveState::CanResolve(server_id, resolve_data) => (
-                0,
+                1,
                 resolve_data
                     .map(|json_data| {
                         serde_json::to_string(&json_data)
@@ -1947,7 +1948,6 @@ impl InlayHints {
                         value,
                     }),
             ),
-            ResolveState::Resolved => (1, None),
             ResolveState::Resolving => (2, None),
         };
         let resolve_state = Some(proto::ResolveState {

crates/project/src/project.rs 🔗

@@ -5091,7 +5091,7 @@ impl Project {
                         InlayHints::proto_to_project_hint(resolved_hint, &project, &mut cx)
                             .await
                             .map(Some)
-                            .context("inlay hints proto response conversion")
+                            .context("inlay hints proto resolve response conversion")
                     }
                     None => Ok(None),
                 }