}
pub struct State<'a> {
- pub s: pp::Printer<'a>,
+ pub s: pp::Printer,
comments: Option<Comments<'a>>,
ann: &'a (dyn PpAnn + 'a),
}
impl<'a> PrintState<'a> for State<'a> {
- fn writer(&mut self) -> &mut pp::Printer<'a> {
+ fn writer(&mut self) -> &mut pp::Printer {
&mut self.s
}
filename: FileName,
input: String,
ann: &'a dyn PpAnn) -> String {
- let mut out = String::new();
- let mut s = State::new_from_input(cm, sess, filename, input, &mut out, ann);
+ let mut s = State::new_from_input(cm, sess, filename, input, ann);
// When printing the AST, we sometimes need to inject `#[no_std]` here.
// Since you can't compile the HIR, it's not necessary.
s.print_mod(&krate.module, &krate.attrs);
s.print_remaining_comments();
- s.s.eof();
- out
+ s.s.eof()
}
impl<'a> State<'a> {
sess: &ParseSess,
filename: FileName,
input: String,
- out: &'a mut String,
ann: &'a dyn PpAnn)
-> State<'a> {
State {
- s: pp::mk_printer(out),
+ s: pp::mk_printer(),
comments: Some(Comments::new(cm, sess, filename, input)),
ann,
}
pub fn to_string<F>(ann: &dyn PpAnn, f: F) -> String
where F: FnOnce(&mut State<'_>)
{
- let mut wr = String::new();
- {
- let mut printer = State {
- s: pp::mk_printer(&mut wr),
- comments: None,
- ann,
- };
- f(&mut printer);
- printer.s.eof();
- }
- wr
+ let mut printer = State {
+ s: pp::mk_printer(),
+ comments: None,
+ ann,
+ };
+ f(&mut printer);
+ printer.s.eof()
}
pub fn visibility_qualified<S: Into<Cow<'static, str>>>(vis: &hir::Visibility, w: S) -> String {
&sess.parse_sess,
src_name,
src,
- out,
annotation.pp_ann());
for node_id in uii.all_matching_node_ids(hir_map) {
let hir_id = tcx.hir().node_to_hir_id(node_id);
pp_state.synth_comment(path);
pp_state.s.hardbreak();
}
- pp_state.s.eof();
+ *out = pp_state.s.eof();
})
}
const SIZE_INFINITY: isize = 0xffff;
-pub fn mk_printer(out: &mut String) -> Printer<'_> {
+pub fn mk_printer() -> Printer {
let linewidth = 78;
// Yes 55, it makes the ring buffers big enough to never fall behind.
let n: usize = 55 * linewidth;
debug!("mk_printer {}", linewidth);
Printer {
- out,
+ out: String::new(),
buf_max_len: n,
margin: linewidth as isize,
space: linewidth as isize,
}
}
-pub struct Printer<'a> {
- out: &'a mut String,
+pub struct Printer {
+ out: String,
buf_max_len: usize,
/// Width of lines we're constrained to
margin: isize,
}
}
-impl<'a> Printer<'a> {
+impl Printer {
pub fn last_token(&mut self) -> Token {
self.buf[self.right].token.clone()
}
self.pretty_print_end()
}
- pub fn eof(&mut self) {
- self.pretty_print_eof()
+ pub fn eof(mut self) -> String {
+ self.pretty_print_eof();
+ self.out
}
pub fn word<S: Into<Cow<'static, str>>>(&mut self, wrd: S) {
}
pub struct State<'a> {
- pub s: pp::Printer<'a>,
+ pub s: pp::Printer,
comments: Option<Comments<'a>>,
ann: &'a (dyn PpAnn+'a),
is_expanded: bool
input: String,
ann: &'a dyn PpAnn,
is_expanded: bool) -> String {
- let mut out = String::new();
let mut s = State {
- s: pp::mk_printer(&mut out),
+ s: pp::mk_printer(),
comments: Some(Comments::new(cm, sess, filename, input)),
ann,
is_expanded,
s.print_mod(&krate.module, &krate.attrs);
s.print_remaining_comments();
- s.s.eof();
- out
+ s.s.eof()
}
pub fn to_string<F>(f: F) -> String where
F: FnOnce(&mut State<'_>),
{
- let mut wr = String::new();
- {
- let mut printer = State {
- s: pp::mk_printer(&mut wr),
- comments: None,
- ann: &NoAnn,
- is_expanded: false
- };
- f(&mut printer);
- printer.s.eof();
- }
- wr
+ let mut printer = State {
+ s: pp::mk_printer(),
+ comments: None,
+ ann: &NoAnn,
+ is_expanded: false
+ };
+ f(&mut printer);
+ printer.s.eof()
}
fn binop_to_string(op: BinOpToken) -> &'static str {
}
pub trait PrintState<'a> {
- fn writer(&mut self) -> &mut pp::Printer<'a>;
+ fn writer(&mut self) -> &mut pp::Printer;
fn comments(&mut self) -> &mut Option<Comments<'a>>;
fn word_space<S: Into<Cow<'static, str>>>(&mut self, w: S) {
}
impl<'a> PrintState<'a> for State<'a> {
- fn writer(&mut self) -> &mut pp::Printer<'a> {
+ fn writer(&mut self) -> &mut pp::Printer {
&mut self.s
}