mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 13:37:06 +04:00
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
This commit is contained in:
parent
aae8f72e2e
commit
2a27d1b505
@ -287,9 +287,11 @@ pub fn render_text<'t>(
|
||||
style_span.0
|
||||
};
|
||||
|
||||
let virt = grapheme.is_virtual();
|
||||
renderer.draw_grapheme(
|
||||
grapheme.grapheme,
|
||||
grapheme_style,
|
||||
virt,
|
||||
&mut last_line_indent_level,
|
||||
&mut is_in_indent_area,
|
||||
pos,
|
||||
@ -313,6 +315,7 @@ pub struct TextRenderer<'a> {
|
||||
pub nbsp: String,
|
||||
pub space: String,
|
||||
pub tab: String,
|
||||
pub virtual_tab: String,
|
||||
pub indent_width: u16,
|
||||
pub starting_indent: usize,
|
||||
pub draw_indent_guides: bool,
|
||||
@ -342,6 +345,7 @@ pub fn new(
|
||||
} else {
|
||||
" ".repeat(tab_width)
|
||||
};
|
||||
let virtual_tab = " ".repeat(tab_width);
|
||||
let newline = if ws_render.newline() == WhitespaceRenderValue::All {
|
||||
ws_chars.newline.into()
|
||||
} else {
|
||||
@ -370,6 +374,7 @@ pub fn new(
|
||||
nbsp,
|
||||
space,
|
||||
tab,
|
||||
virtual_tab,
|
||||
whitespace_style: theme.get("ui.virtual.whitespace"),
|
||||
indent_width,
|
||||
starting_indent: col_offset / indent_width as usize
|
||||
@ -392,6 +397,7 @@ pub fn draw_grapheme(
|
||||
&mut self,
|
||||
grapheme: Grapheme,
|
||||
mut style: Style,
|
||||
is_virtual: bool,
|
||||
last_indent_level: &mut usize,
|
||||
is_in_indent_area: &mut bool,
|
||||
position: Position,
|
||||
@ -405,14 +411,21 @@ pub fn draw_grapheme(
|
||||
}
|
||||
|
||||
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 {
|
||||
Grapheme::Tab { width } => {
|
||||
let grapheme_tab_width = char_to_byte_idx(&self.tab, width);
|
||||
&self.tab[..grapheme_tab_width]
|
||||
let grapheme_tab_width = char_to_byte_idx(tab, width);
|
||||
&tab[..grapheme_tab_width]
|
||||
}
|
||||
// TODO special rendering for other whitespaces?
|
||||
Grapheme::Other { ref g } if g == " " => &self.space,
|
||||
Grapheme::Other { ref g } if g == "\u{00A0}" => &self.nbsp,
|
||||
Grapheme::Other { ref g } if g == " " => space,
|
||||
Grapheme::Other { ref g } if g == "\u{00A0}" => nbsp,
|
||||
Grapheme::Other { ref g } => g,
|
||||
Grapheme::Newline => &self.newline,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user