Randomize inlay highlight range start
This commit is contained in:
@@ -316,10 +316,10 @@ impl<'a> Iterator for InlayChunks<'a> {
|
||||
};
|
||||
let next_inlay_highlight_endpoint;
|
||||
let offset_in_inlay = self.output_offset - self.transforms.start().0;
|
||||
if let Some((style, inlay_range)) = inlay_highlight_style_and_range {
|
||||
let range = inlay_range.highlight_start..inlay_range.highlight_end;
|
||||
if let Some((style, highlight)) = inlay_highlight_style_and_range {
|
||||
let range = &highlight.range;
|
||||
if offset_in_inlay.0 < range.start {
|
||||
next_inlay_highlight_endpoint = range.start;
|
||||
next_inlay_highlight_endpoint = range.start - offset_in_inlay.0;
|
||||
} else if offset_in_inlay.0 >= range.end {
|
||||
next_inlay_highlight_endpoint = usize::MAX;
|
||||
} else {
|
||||
@@ -1711,25 +1711,28 @@ mod tests {
|
||||
.filter_map(|i| {
|
||||
let (_, inlay) = &inlays[i];
|
||||
let inlay_text_len = inlay.text.len();
|
||||
// TODO kb gen_range
|
||||
match inlay_text_len {
|
||||
0 => None,
|
||||
1 => Some(InlayHighlight {
|
||||
inlay: inlay.id,
|
||||
inlay_position: inlay.position,
|
||||
highlight_start: 0,
|
||||
highlight_end: 1,
|
||||
range: 0..1,
|
||||
}),
|
||||
n => {
|
||||
let inlay_text = inlay.text.to_string();
|
||||
let mut highlight_end = rng.gen_range(1..n);
|
||||
let mut highlight_start = rng.gen_range(0..highlight_end);
|
||||
while !inlay_text.is_char_boundary(highlight_end) {
|
||||
highlight_end += 1;
|
||||
}
|
||||
while !inlay_text.is_char_boundary(highlight_start) {
|
||||
highlight_start -= 1;
|
||||
}
|
||||
Some(InlayHighlight {
|
||||
inlay: inlay.id,
|
||||
inlay_position: inlay.position,
|
||||
highlight_start: 0,
|
||||
highlight_end,
|
||||
range: highlight_start..highlight_end,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ pub fn hover_at_inlay(editor: &mut Editor, inlay_hover: InlayHover, cx: &mut Vie
|
||||
|
||||
let hover_popover = InfoPopover {
|
||||
project: project.clone(),
|
||||
symbol_range: RangeInEditor::Inlay(inlay_hover.range),
|
||||
symbol_range: RangeInEditor::Inlay(inlay_hover.range.clone()),
|
||||
blocks: vec![inlay_hover.tooltip],
|
||||
language: None,
|
||||
rendered_content: None,
|
||||
|
||||
@@ -43,10 +43,10 @@ impl RangeInEditor {
|
||||
let point_after_start = range.start.cmp(point, &snapshot.buffer_snapshot).is_le();
|
||||
point_after_start && range.end.cmp(point, &snapshot.buffer_snapshot).is_ge()
|
||||
}
|
||||
(Self::Inlay(range), TriggerPoint::InlayHint(point, _, _)) => {
|
||||
range.inlay == point.inlay
|
||||
&& range.highlight_start.cmp(&point.highlight_end).is_le()
|
||||
&& range.highlight_end.cmp(&point.highlight_end).is_ge()
|
||||
(Self::Inlay(highlight), TriggerPoint::InlayHint(point, _, _)) => {
|
||||
highlight.inlay == point.inlay
|
||||
&& highlight.range.contains(&point.range.start)
|
||||
&& highlight.range.contains(&point.range.end)
|
||||
}
|
||||
(Self::Inlay(_), TriggerPoint::Text(_))
|
||||
| (Self::Text(_), TriggerPoint::InlayHint(_, _, _)) => false,
|
||||
@@ -66,13 +66,11 @@ pub enum GoToDefinitionLink {
|
||||
InlayHint(lsp::Location, LanguageServerId),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct InlayHighlight {
|
||||
pub inlay: InlayId,
|
||||
pub inlay_position: Anchor,
|
||||
// TODO kb turn into Range<usize>
|
||||
pub highlight_start: usize,
|
||||
pub highlight_end: usize,
|
||||
pub range: Range<usize>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -252,9 +250,8 @@ pub fn update_inlay_link_and_hover_points(
|
||||
range: InlayHighlight {
|
||||
inlay: hovered_hint.id,
|
||||
inlay_position: hovered_hint.position,
|
||||
highlight_start: extra_shift_left,
|
||||
highlight_end: hovered_hint.text.len()
|
||||
+ extra_shift_right,
|
||||
range: extra_shift_left
|
||||
..hovered_hint.text.len() + extra_shift_right,
|
||||
},
|
||||
},
|
||||
cx,
|
||||
@@ -272,13 +269,14 @@ pub fn update_inlay_link_and_hover_points(
|
||||
hovered_offset,
|
||||
)
|
||||
{
|
||||
let range = InlayHighlight {
|
||||
let highlight_start =
|
||||
(part_range.start - hint_start).0 + extra_shift_left;
|
||||
let highlight_end =
|
||||
(part_range.end - hint_start).0 + extra_shift_right;
|
||||
let highlight = InlayHighlight {
|
||||
inlay: hovered_hint.id,
|
||||
inlay_position: hovered_hint.position,
|
||||
highlight_start: (part_range.start - hint_start).0
|
||||
+ extra_shift_left,
|
||||
highlight_end: (part_range.end - hint_start).0
|
||||
+ extra_shift_right,
|
||||
range: highlight_start..highlight_end,
|
||||
};
|
||||
if let Some(tooltip) = hovered_hint_part.tooltip {
|
||||
hover_popover::hover_at_inlay(
|
||||
@@ -299,7 +297,7 @@ pub fn update_inlay_link_and_hover_points(
|
||||
kind: content.kind,
|
||||
},
|
||||
},
|
||||
range,
|
||||
range: highlight.clone(),
|
||||
},
|
||||
cx,
|
||||
);
|
||||
@@ -312,7 +310,7 @@ pub fn update_inlay_link_and_hover_points(
|
||||
update_go_to_definition_link(
|
||||
editor,
|
||||
Some(GoToDefinitionTrigger::InlayHint(
|
||||
range,
|
||||
highlight,
|
||||
location,
|
||||
language_server_id,
|
||||
)),
|
||||
@@ -433,8 +431,8 @@ pub fn show_link_definition(
|
||||
)
|
||||
})
|
||||
}
|
||||
TriggerPoint::InlayHint(trigger_source, lsp_location, server_id) => Some((
|
||||
Some(RangeInEditor::Inlay(*trigger_source)),
|
||||
TriggerPoint::InlayHint(highlight, lsp_location, server_id) => Some((
|
||||
Some(RangeInEditor::Inlay(highlight.clone())),
|
||||
vec![GoToDefinitionLink::InlayHint(
|
||||
lsp_location.clone(),
|
||||
*server_id,
|
||||
@@ -501,8 +499,8 @@ pub fn show_link_definition(
|
||||
..snapshot.anchor_after(offset_range.end),
|
||||
)
|
||||
}
|
||||
TriggerPoint::InlayHint(inlay_coordinates, _, _) => {
|
||||
RangeInEditor::Inlay(*inlay_coordinates)
|
||||
TriggerPoint::InlayHint(highlight, _, _) => {
|
||||
RangeInEditor::Inlay(highlight.clone())
|
||||
}
|
||||
});
|
||||
|
||||
@@ -513,9 +511,9 @@ pub fn show_link_definition(
|
||||
style,
|
||||
cx,
|
||||
),
|
||||
RangeInEditor::Inlay(inlay_coordinates) => this
|
||||
RangeInEditor::Inlay(highlight) => this
|
||||
.highlight_inlays::<LinkGoToDefinitionState>(
|
||||
vec![inlay_coordinates],
|
||||
vec![highlight],
|
||||
style,
|
||||
cx,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user