use quote::ToTokens;
use syn::spanned::Spanned;
use super::{PrettyPrint, Printer, TextMode};
impl PrettyPrint for syn::Attribute {
fn pretty_print(&self, printer: &mut Printer<'_>) {
if self.meta.path().is_ident("doc") {
return;
}
self.pound_token.pretty_print(printer);
if let syn::AttrStyle::Inner(not) = &self.style {
not.pretty_print(printer);
}
if let Some(source_text) = self.bracket_token.span.span().source_text() {
source_text.pretty_print(printer);
}
printer.scan_same_line_trivia();
printer.scan_break();
" ".pretty_print(printer);
}
}
impl PrettyPrint for syn::token::PathSep {
fn pretty_print(&self, printer: &mut Printer<'_>) {
printer.move_cursor(self.span().start());
printer.scan_text("::".into(), TextMode::Always);
printer.move_cursor(self.span().end());
}
}
impl PrettyPrint for syn::Path {
fn pretty_print(&self, printer: &mut Printer<'_>) {
if let Some(leading_colon) = &self.leading_colon {
leading_colon.pretty_print(printer);
}
for pair in self.segments.pairs() {
let segment = pair.value();
segment.ident.pretty_print(printer);
match &segment.arguments {
syn::PathArguments::None => {}
syn::PathArguments::AngleBracketed(args) => {
args.pretty_print(printer);
}
syn::PathArguments::Parenthesized(args) => {
args.pretty_print(printer);
}
}
if let Some(punct) = pair.punct() {
punct.pretty_print(printer);
}
}
}
}
impl PrettyPrint for syn::AngleBracketedGenericArguments {
fn pretty_print(&self, printer: &mut Printer<'_>) {
self.lt_token.pretty_print(printer);
for pair in self.args.pairs() {
pair.value().pretty_print(printer);
if let Some(punct) = pair.punct() {
printer.scan_no_break_trivia();
punct.pretty_print(printer);
printer.scan_trivia(true, true);
" ".pretty_print(printer);
}
}
self.gt_token.pretty_print(printer);
}
}
impl PrettyPrint for syn::GenericArgument {
fn pretty_print(&self, printer: &mut Printer<'_>) {
printer.move_cursor(self.span().start());
printer.scan_text(self.to_token_stream().to_string().into(), TextMode::Always);
printer.move_cursor(self.span().end());
}
}
impl PrettyPrint for syn::ParenthesizedGenericArguments {
fn pretty_print(&self, printer: &mut Printer<'_>) {
use super::Delim;
self.paren_token.pretty_print(printer, None, |printer| {
for pair in self.inputs.pairs() {
pair.value().pretty_print(printer);
if let Some(punct) = pair.punct() {
printer.scan_no_break_trivia();
punct.pretty_print(printer);
printer.scan_trivia(true, true);
" ".pretty_print(printer);
}
}
});
match &self.output {
syn::ReturnType::Default => {}
syn::ReturnType::Type(arrow, ty) => {
" ".pretty_print(printer);
arrow.pretty_print(printer);
" ".pretty_print(printer);
ty.pretty_print(printer);
}
}
}
}
impl PrettyPrint for syn::Type {
fn pretty_print(&self, printer: &mut Printer<'_>) {
printer.move_cursor(self.span().start());
printer.scan_text(self.to_token_stream().to_string().into(), TextMode::Always);
printer.move_cursor(self.span().end());
}
}
impl PrettyPrint for syn::token::RArrow {
fn pretty_print(&self, printer: &mut Printer<'_>) {
printer.move_cursor(self.span().start());
printer.scan_text("->".into(), TextMode::Always);
printer.move_cursor(self.span().end());
}
}