Prevent whitespace from rendering inside inlay hints (#6312)

* fix spaces and nbsps showing in inlay hints

* remove origin

* virtual tab + fix unneeded clone

* update virtual tab determining location

* fix clippy lint
pull/2883/head
Thomas Schollenberger 2 years ago committed by GitHub
parent aae8f72e2e
commit 2a27d1b505
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -287,9 +287,11 @@ pub fn render_text<'t>(
style_span.0 style_span.0
}; };
let virt = grapheme.is_virtual();
renderer.draw_grapheme( renderer.draw_grapheme(
grapheme.grapheme, grapheme.grapheme,
grapheme_style, grapheme_style,
virt,
&mut last_line_indent_level, &mut last_line_indent_level,
&mut is_in_indent_area, &mut is_in_indent_area,
pos, pos,
@ -313,6 +315,7 @@ pub struct TextRenderer<'a> {
pub nbsp: String, pub nbsp: String,
pub space: String, pub space: String,
pub tab: String, pub tab: String,
pub virtual_tab: String,
pub indent_width: u16, pub indent_width: u16,
pub starting_indent: usize, pub starting_indent: usize,
pub draw_indent_guides: bool, pub draw_indent_guides: bool,
@ -342,6 +345,7 @@ impl<'a> TextRenderer<'a> {
} else { } else {
" ".repeat(tab_width) " ".repeat(tab_width)
}; };
let virtual_tab = " ".repeat(tab_width);
let newline = if ws_render.newline() == WhitespaceRenderValue::All { let newline = if ws_render.newline() == WhitespaceRenderValue::All {
ws_chars.newline.into() ws_chars.newline.into()
} else { } else {
@ -370,6 +374,7 @@ impl<'a> TextRenderer<'a> {
nbsp, nbsp,
space, space,
tab, tab,
virtual_tab,
whitespace_style: theme.get("ui.virtual.whitespace"), whitespace_style: theme.get("ui.virtual.whitespace"),
indent_width, indent_width,
starting_indent: col_offset / indent_width as usize starting_indent: col_offset / indent_width as usize
@ -392,6 +397,7 @@ impl<'a> TextRenderer<'a> {
&mut self, &mut self,
grapheme: Grapheme, grapheme: Grapheme,
mut style: Style, mut style: Style,
is_virtual: bool,
last_indent_level: &mut usize, last_indent_level: &mut usize,
is_in_indent_area: &mut bool, is_in_indent_area: &mut bool,
position: Position, position: Position,
@ -405,14 +411,21 @@ impl<'a> TextRenderer<'a> {
} }
let width = grapheme.width(); let width = grapheme.width();
let space = if is_virtual { " " } else { &self.space };
let nbsp = if is_virtual { " " } else { &self.nbsp };
let tab = if is_virtual {
&self.virtual_tab
} else {
&self.tab
};
let grapheme = match grapheme { let grapheme = match grapheme {
Grapheme::Tab { width } => { Grapheme::Tab { width } => {
let grapheme_tab_width = char_to_byte_idx(&self.tab, width); let grapheme_tab_width = char_to_byte_idx(tab, width);
&self.tab[..grapheme_tab_width] &tab[..grapheme_tab_width]
} }
// TODO special rendering for other whitespaces? // TODO special rendering for other whitespaces?
Grapheme::Other { ref g } if g == " " => &self.space, Grapheme::Other { ref g } if g == " " => space,
Grapheme::Other { ref g } if g == "\u{00A0}" => &self.nbsp, Grapheme::Other { ref g } if g == "\u{00A0}" => nbsp,
Grapheme::Other { ref g } => g, Grapheme::Other { ref g } => g,
Grapheme::Newline => &self.newline, Grapheme::Newline => &self.newline,
}; };

Loading…
Cancel
Save