Support bracket colorization (rainbow brackets) (#43172)
Deals with https://github.com/zed-industries/zed/issues/5259 Highlights brackets with different colors based on their depth. Uses existing tree-sitter queries from brackets.scm to find brackets, uses theme's accents to color them. https://github.com/user-attachments/assets/cc5f3aba-22fa-446d-9af7-ba6e772029da 1. Adds `colorize_brackets` language setting that allows, per language or globally for all languages, to configure whether Zed should color the brackets for a particular language. Disabled for all languages by default. 2. Any given language can opt-out a certain bracket pair by amending the brackets.scm like `("\"" @open "\"" @close) ` -> `(("\"" @open "\"" @close) (#set! rainbow.exclude))` 3. Brackets are using colors from theme accents, which can be overridden as ```jsonc "theme_overrides": { "One Dark": { "accents": ["#ff69b4", "#7fff00", "#ff1493", "#00ffff", "#ff8c00", "#9400d3"] } }, ``` Release Notes: - Added bracket colorization (rainbow brackets) support. Use `colorize_brackets` language setting to enable. --------- Co-authored-by: MrSubidubi <dev@bahn.sh> Co-authored-by: Lukas Wirth <lukas@zed.dev> Co-authored-by: MrSubidubi <finn@zed.dev> Co-authored-by: Lukas Wirth <me@lukaswirth.dev> Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
This commit is contained in:
co-authored by
MrSubidubi
Lukas Wirth
MrSubidubi
Lukas Wirth
Smit Barmase
parent
e6e5ccbf10
commit
7e341bcf94
@@ -18,10 +18,10 @@ use collections::{BTreeMap, Bound, HashMap, HashSet};
|
||||
use gpui::{App, Context, Entity, EntityId, EventEmitter};
|
||||
use itertools::Itertools;
|
||||
use language::{
|
||||
AutoindentMode, Buffer, BufferChunks, BufferRow, BufferSnapshot, Capability, CharClassifier,
|
||||
CharKind, CharScopeContext, Chunk, CursorShape, DiagnosticEntryRef, DiskState, File,
|
||||
IndentGuideSettings, IndentSize, Language, LanguageScope, OffsetRangeExt, OffsetUtf16, Outline,
|
||||
OutlineItem, Point, PointUtf16, Selection, TextDimension, TextObject, ToOffset as _,
|
||||
AutoindentMode, BracketMatch, Buffer, BufferChunks, BufferRow, BufferSnapshot, Capability,
|
||||
CharClassifier, CharKind, CharScopeContext, Chunk, CursorShape, DiagnosticEntryRef, DiskState,
|
||||
File, IndentGuideSettings, IndentSize, Language, LanguageScope, OffsetRangeExt, OffsetUtf16,
|
||||
Outline, OutlineItem, Point, PointUtf16, Selection, TextDimension, TextObject, ToOffset as _,
|
||||
ToPoint as _, TransactionId, TreeSitterOptions, Unclipped,
|
||||
language_settings::{LanguageSettings, language_settings},
|
||||
};
|
||||
@@ -5400,7 +5400,6 @@ impl MultiBufferSnapshot {
|
||||
{
|
||||
let range = range.start.to_offset(self)..range.end.to_offset(self);
|
||||
let mut excerpt = self.excerpt_containing(range.clone())?;
|
||||
|
||||
Some(
|
||||
excerpt
|
||||
.buffer()
|
||||
@@ -5410,15 +5409,17 @@ impl MultiBufferSnapshot {
|
||||
BufferOffset(pair.open_range.start)..BufferOffset(pair.open_range.end);
|
||||
let close_range =
|
||||
BufferOffset(pair.close_range.start)..BufferOffset(pair.close_range.end);
|
||||
if excerpt.contains_buffer_range(open_range.start..close_range.end) {
|
||||
Some((
|
||||
excerpt.map_range_from_buffer(open_range),
|
||||
excerpt.map_range_from_buffer(close_range),
|
||||
))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}),
|
||||
excerpt
|
||||
.contains_buffer_range(open_range.start..close_range.end)
|
||||
.then(|| BracketMatch {
|
||||
open_range: excerpt.map_range_from_buffer(open_range),
|
||||
close_range: excerpt.map_range_from_buffer(close_range),
|
||||
color_index: pair.color_index,
|
||||
newline_only: pair.newline_only,
|
||||
syntax_layer_depth: pair.syntax_layer_depth,
|
||||
})
|
||||
})
|
||||
.map(BracketMatch::bracket_ranges),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user