Make folds tab aware

This commit is contained in:
Mikayla Maki 2023-03-17 17:12:24 -07:00
parent c39b4ac229
commit 5a3d5dff42
2 changed files with 20 additions and 13 deletions

View file

@ -24,6 +24,8 @@ pub use block_map::{
BlockDisposition, BlockId, BlockProperties, BlockStyle, RenderBlock, TransformBlock, BlockDisposition, BlockId, BlockProperties, BlockStyle, RenderBlock, TransformBlock,
}; };
use self::tab_map::TabSnapshot;
#[derive(Copy, Clone, Debug, PartialEq, Eq)] #[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum FoldStatus { pub enum FoldStatus {
Folded, Folded,
@ -249,7 +251,7 @@ pub struct DisplaySnapshot {
folds_snapshot: fold_map::FoldSnapshot, folds_snapshot: fold_map::FoldSnapshot,
tabs_snapshot: tab_map::TabSnapshot, tabs_snapshot: tab_map::TabSnapshot,
wraps_snapshot: wrap_map::WrapSnapshot, wraps_snapshot: wrap_map::WrapSnapshot,
pub blocks_snapshot: block_map::BlockSnapshot, blocks_snapshot: block_map::BlockSnapshot,
text_highlights: TextHighlights, text_highlights: TextHighlights,
clip_at_line_ends: bool, clip_at_line_ends: bool,
} }
@ -599,17 +601,22 @@ impl DisplaySnapshot {
let chars = buffer.chars_at(Point::new(range.start.row, 0)); let chars = buffer.chars_at(Point::new(range.start.row, 0));
let mut is_blank = false; let mut is_blank = false;
let mut indent_size = 0; let indent_size = TabSnapshot::expand_tabs(
for c in chars { chars.take_while(|c| {
// TODO: Handle tab expansion here if *c == ' ' || *c == '\t' {
if c == ' ' { true
indent_size += 1; } else {
} else { if *c == '\n' {
is_blank = c == '\n'; is_blank = true;
break; }
} false
} }
(indent_size, is_blank) }),
buffer.line_len(buffer_row) as usize, // Never collapse
self.tabs_snapshot.tab_size,
);
(indent_size as u32, is_blank)
} }
pub fn line_len(&self, row: u32) -> u32 { pub fn line_len(&self, row: u32) -> u32 {

View file

@ -679,7 +679,7 @@ fn test_fold(cx: &mut gpui::MutableAppContext) {
" "
.unindent(), .unindent(),
); );
dbg!("SECOND FOLD");
view.fold(&Fold, cx); view.fold(&Fold, cx);
assert_eq!( assert_eq!(
view.display_text(cx), view.display_text(cx),