Restore a visual alignment mode for block comments
This commit is contained in:
@@ -146,6 +146,22 @@ pub enum Breaks {
|
|||||||
Inconsistent,
|
Inconsistent,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
enum IndentStyle {
|
||||||
|
/// Vertically aligned under whatever column this block begins at.
|
||||||
|
///
|
||||||
|
/// fn demo(arg1: usize,
|
||||||
|
/// arg2: usize);
|
||||||
|
Visual,
|
||||||
|
/// Indented relative to the indentation level of the previous line.
|
||||||
|
///
|
||||||
|
/// fn demo(
|
||||||
|
/// arg1: usize,
|
||||||
|
/// arg2: usize,
|
||||||
|
/// );
|
||||||
|
Block { offset: isize },
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub struct BreakToken {
|
pub struct BreakToken {
|
||||||
offset: isize,
|
offset: isize,
|
||||||
@@ -154,7 +170,7 @@ pub struct BreakToken {
|
|||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub struct BeginToken {
|
pub struct BeginToken {
|
||||||
offset: isize,
|
indent: IndentStyle,
|
||||||
breaks: Breaks,
|
breaks: Breaks,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,7 +393,10 @@ impl Printer {
|
|||||||
fn print_begin(&mut self, token: BeginToken, size: isize) {
|
fn print_begin(&mut self, token: BeginToken, size: isize) {
|
||||||
if size > self.space {
|
if size > self.space {
|
||||||
self.print_stack.push(PrintFrame::Broken { indent: self.indent, breaks: token.breaks });
|
self.print_stack.push(PrintFrame::Broken { indent: self.indent, breaks: token.breaks });
|
||||||
self.indent = (self.indent as isize + token.offset) as usize;
|
self.indent = match token.indent {
|
||||||
|
IndentStyle::Block { offset } => (self.indent as isize + offset) as usize,
|
||||||
|
IndentStyle::Visual => (self.margin - self.space) as usize,
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
self.print_stack.push(PrintFrame::Fits);
|
self.print_stack.push(PrintFrame::Fits);
|
||||||
}
|
}
|
||||||
@@ -425,7 +444,10 @@ impl Printer {
|
|||||||
|
|
||||||
/// "raw box"
|
/// "raw box"
|
||||||
pub fn rbox(&mut self, indent: usize, breaks: Breaks) {
|
pub fn rbox(&mut self, indent: usize, breaks: Breaks) {
|
||||||
self.scan_begin(BeginToken { offset: indent as isize, breaks })
|
self.scan_begin(BeginToken {
|
||||||
|
indent: IndentStyle::Block { offset: indent as isize },
|
||||||
|
breaks,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inconsistent breaking box
|
/// Inconsistent breaking box
|
||||||
@@ -438,6 +460,10 @@ impl Printer {
|
|||||||
self.rbox(indent, Breaks::Consistent)
|
self.rbox(indent, Breaks::Consistent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn visual_align(&mut self) {
|
||||||
|
self.scan_begin(BeginToken { indent: IndentStyle::Visual, breaks: Breaks::Consistent });
|
||||||
|
}
|
||||||
|
|
||||||
pub fn break_offset(&mut self, n: usize, off: isize) {
|
pub fn break_offset(&mut self, n: usize, off: isize) {
|
||||||
self.scan_break(BreakToken { offset: off, blank_space: n as isize })
|
self.scan_break(BreakToken { offset: off, blank_space: n as isize })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
|
|||||||
self.word(cmnt.lines[0].clone());
|
self.word(cmnt.lines[0].clone());
|
||||||
self.hardbreak()
|
self.hardbreak()
|
||||||
} else {
|
} else {
|
||||||
self.ibox(0);
|
self.visual_align();
|
||||||
for line in &cmnt.lines {
|
for line in &cmnt.lines {
|
||||||
if !line.is_empty() {
|
if !line.is_empty() {
|
||||||
self.word(line.clone());
|
self.word(line.clone());
|
||||||
|
|||||||
Reference in New Issue
Block a user