rustc_ast_pretty/pp/
convenience.rs
1use std::borrow::Cow;
2
3use crate::pp::{BeginToken, BreakToken, Breaks, IndentStyle, Printer, SIZE_INFINITY, Token};
4
5impl Printer {
6 pub fn rbox(&mut self, indent: isize, breaks: Breaks) {
8 self.scan_begin(BeginToken { indent: IndentStyle::Block { offset: indent }, breaks })
9 }
10
11 pub fn ibox(&mut self, indent: isize) {
13 self.rbox(indent, Breaks::Inconsistent)
14 }
15
16 pub fn cbox(&mut self, indent: isize) {
18 self.rbox(indent, Breaks::Consistent)
19 }
20
21 pub fn visual_align(&mut self) {
22 self.scan_begin(BeginToken { indent: IndentStyle::Visual, breaks: Breaks::Consistent });
23 }
24
25 pub fn break_offset(&mut self, n: usize, off: isize) {
26 self.scan_break(BreakToken {
27 offset: off,
28 blank_space: n as isize,
29 ..BreakToken::default()
30 });
31 }
32
33 pub fn end(&mut self) {
34 self.scan_end()
35 }
36
37 pub fn eof(mut self) -> String {
38 self.scan_eof();
39 self.out
40 }
41
42 pub fn word<S: Into<Cow<'static, str>>>(&mut self, wrd: S) {
43 let string = wrd.into();
44 self.scan_string(string)
45 }
46
47 fn spaces(&mut self, n: usize) {
48 self.break_offset(n, 0)
49 }
50
51 pub fn zerobreak(&mut self) {
52 self.spaces(0)
53 }
54
55 pub fn space(&mut self) {
56 self.spaces(1)
57 }
58
59 pub fn hardbreak(&mut self) {
60 self.spaces(SIZE_INFINITY as usize)
61 }
62
63 pub fn is_beginning_of_line(&self) -> bool {
64 match self.last_token() {
65 Some(last_token) => last_token.is_hardbreak_tok(),
66 None => true,
67 }
68 }
69
70 pub(crate) fn hardbreak_tok_offset(off: isize) -> Token {
71 Token::Break(BreakToken {
72 offset: off,
73 blank_space: SIZE_INFINITY,
74 ..BreakToken::default()
75 })
76 }
77
78 pub fn trailing_comma(&mut self) {
79 self.scan_break(BreakToken { pre_break: Some(','), ..BreakToken::default() });
80 }
81
82 pub fn trailing_comma_or_space(&mut self) {
83 self.scan_break(BreakToken {
84 blank_space: 1,
85 pre_break: Some(','),
86 ..BreakToken::default()
87 });
88 }
89}
90
91impl Token {
92 pub(crate) fn is_hardbreak_tok(&self) -> bool {
93 *self == Printer::hardbreak_tok_offset(0)
94 }
95}