Skip to content

Commit

Permalink
[wip] feat(fmt): format buffer groups (#1780)
Browse files Browse the repository at this point in the history
* fmt groups

* reset to init start group functionality & use where needed

* expand test case

* [wip] feat(fmt): intermediate chunk struct (#1831)

* wip: use a struct for managing an intermediate representation

* cleanup visit function definition

* fix import statements

* restrict temp bufs to the current line restriction and simplify visit contract

* consistent ordering of parameters in chunk operations

* fix up using list formatting for multiline support

* convert to second iteration of write_chunk_separated

Co-authored-by: Julian Popescu <[email protected]>
  • Loading branch information
rkrasiuk and jpopesculian committed Jun 8, 2022
1 parent 880ea82 commit 3038c98
Show file tree
Hide file tree
Showing 19 changed files with 1,262 additions and 815 deletions.
76 changes: 18 additions & 58 deletions fmt/src/comments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,6 @@ impl CommentWithMetadata {
pub fn is_prefix(&self) -> bool {
matches!(self.position, CommentPosition::Prefix)
}
pub fn needs_newline(&self) -> bool {
self.is_line() || self.is_prefix()
}
pub fn is_before(&self, byte: usize) -> bool {
self.loc.start() < byte
}
Expand Down Expand Up @@ -159,70 +156,33 @@ impl Comments {
Self { prefixes, postfixes }
}

pub(crate) fn pop_prefix(&mut self, byte: usize) -> Option<CommentWithMetadata> {
if self.prefixes.last()?.is_before(byte) {
Some(self.prefixes.pop().unwrap())
} else {
None
}
}

pub(crate) fn peek_prefix(&mut self, byte: usize) -> Option<&CommentWithMetadata> {
self.prefixes.last().and_then(
|comment| {
if comment.is_before(byte) {
Some(comment)
} else {
None
}
},
)
}

pub(crate) fn pop_postfix(&mut self, byte: usize) -> Option<CommentWithMetadata> {
if self.postfixes.last()?.is_before(byte) {
Some(self.postfixes.pop().unwrap())
} else {
None
}
}

pub(crate) fn get_comments_before(&self, byte: usize) -> Vec<&CommentWithMetadata> {
let mut out = self
.prefixes
.iter()
.rev()
.take_while(|comment| comment.is_before(byte))
.chain(self.prefixes.iter().rev().take_while(|comment| comment.is_before(byte)))
.collect::<Vec<_>>();
out.sort_by_key(|comment| comment.loc.start());
out
}

pub(crate) fn remove_comments_before(&mut self, byte: usize) -> Vec<CommentWithMetadata> {
let mut out = self.prefixes.split_off(
pub(crate) fn remove_prefixes_before(&mut self, byte: usize) -> Vec<CommentWithMetadata> {
let mut prefixes = self.prefixes.split_off(
self.prefixes
.iter()
.find_position(|comment| comment.is_before(byte))
.map(|(idx, _)| idx)
.unwrap_or_else(|| self.prefixes.len()),
);
out.append(
&mut self.postfixes.split_off(
self.postfixes
.iter()
.find_position(|comment| comment.is_before(byte))
.map(|(idx, _)| idx)
.unwrap_or_else(|| self.postfixes.len()),
),
prefixes.reverse();
prefixes
}

pub(crate) fn remove_postfixes_before(&mut self, byte: usize) -> Vec<CommentWithMetadata> {
let mut postfixes = self.postfixes.split_off(
self.postfixes
.iter()
.find_position(|comment| comment.is_before(byte))
.map(|(idx, _)| idx)
.unwrap_or_else(|| self.postfixes.len()),
);
out.sort_by_key(|comment| comment.loc.start());
out
postfixes.reverse();
postfixes
}

pub(crate) fn drain(&mut self) -> Vec<CommentWithMetadata> {
let mut out = std::mem::take(&mut self.prefixes);
out.append(&mut self.postfixes);
pub(crate) fn remove_comments_before(&mut self, byte: usize) -> Vec<CommentWithMetadata> {
let mut out = self.remove_prefixes_before(byte);
out.append(&mut self.remove_postfixes_before(byte));
out.sort_by_key(|comment| comment.loc.start());
out
}
Expand Down
Loading

0 comments on commit 3038c98

Please sign in to comment.