diff --git a/crates/editor/src/bracket_colorization.rs b/crates/editor/src/bracket_colorization.rs index 6077b2f159cd4d3eba8dce835adcd4450b3c1c67..89234066fea0532959ba5626ac1baf6fa0908582 100644 --- a/crates/editor/src/bracket_colorization.rs +++ b/crates/editor/src/bracket_colorization.rs @@ -1,6 +1,6 @@ -use crate::{Editor, RangeToAnchorExt}; +use crate::Editor; +use collections::HashMap; use gpui::{Context, HighlightStyle}; -use itertools::Itertools; use language::language_settings; use ui::{ActiveTheme, utils::ensure_minimum_contrast}; @@ -13,23 +13,18 @@ impl Editor { } let multi_buffer_snapshot = self.buffer().read(cx).snapshot(cx); - let bracket_matches = self - .visible_excerpts(cx) - .into_iter() - .filter_map(|(excerpt_id, (buffer, _, buffer_range))| { + let bracket_matches = self.visible_excerpts(cx).into_iter().fold( + HashMap::default(), + |mut acc, (excerpt_id, (buffer, _, buffer_range))| { let buffer_snapshot = buffer.read(cx).snapshot(); - let colorize_brackets = language_settings::language_settings( + if language_settings::language_settings( buffer_snapshot.language().map(|language| language.name()), buffer_snapshot.file(), cx, ) - .colorize_brackets; - if !colorize_brackets { - return None; - } - - Some( - buffer_snapshot + .colorize_brackets + { + for (depth, open_range, close_range) in buffer_snapshot .bracket_ranges(buffer_range.start..buffer_range.end) .into_iter() .filter_map(|pair| { @@ -53,16 +48,22 @@ impl Editor { multi_buffer_close_range, )) }) - .collect::>(), - ) - }) - .flatten() - .into_group_map_by(|&(depth, ..)| depth); + { + let ranges = acc.entry(depth).or_insert_with(Vec::new); + ranges.push(open_range); + ranges.push(close_range); + } + } + + acc + }, + ); if invalidate { self.clear_highlights::(cx); } + // todo! can we skip the re-highlighting entirely, if it's not adding anything on top? let editor_background = cx.theme().colors().editor_background; for (depth, bracket_highlights) in bracket_matches { let bracket_color = cx.theme().accents().color_for_index(depth as u32); @@ -74,15 +75,7 @@ impl Editor { self.highlight_text_key::( depth, - bracket_highlights - .into_iter() - .flat_map(|(_, open, close)| { - [ - open.to_anchors(&multi_buffer_snapshot), - close.to_anchors(&multi_buffer_snapshot), - ] - }) - .collect(), + bracket_highlights, style, cx, );