}
impl<'a> PrintState<'a> for State<'a> {
- fn insert_extra_parens(&self) -> bool {
- true
- }
fn comments(&mut self) -> &mut Option<Comments<'a>> {
&mut self.comments
}
self.head(visibility_qualified(&item.vis, "union"));
self.print_struct(struct_def, generics, item.ident.name, item.span, true);
}
- hir::ItemKind::Impl {
+ hir::ItemKind::Impl(hir::Impl {
unsafety,
polarity,
defaultness,
ref of_trait,
ref self_ty,
items,
- } => {
+ }) => {
self.head("");
self.print_visibility(&item.vis);
self.print_defaultness(defaultness);
self.ann.post(self, AnnNode::Block(blk))
}
+ fn print_else(&mut self, els: Option<&hir::Expr<'_>>) {
+ match els {
+ Some(_else) => {
+ match _else.kind {
+ // "another else-if"
+ hir::ExprKind::If(ref i, ref then, ref e) => {
+ self.cbox(INDENT_UNIT - 1);
+ self.ibox(0);
+ self.s.word(" else if ");
+ self.print_expr_as_cond(&i);
+ self.s.space();
+ self.print_expr(&then);
+ self.print_else(e.as_ref().map(|e| &**e))
+ }
+ // "final else"
+ hir::ExprKind::Block(ref b, _) => {
+ self.cbox(INDENT_UNIT - 1);
+ self.ibox(0);
+ self.s.word(" else ");
+ self.print_block(&b)
+ }
+ // BLEAH, constraints would be great here
+ _ => {
+ panic!("print_if saw if with weird alternative");
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+
+ pub fn print_if(
+ &mut self,
+ test: &hir::Expr<'_>,
+ blk: &hir::Expr<'_>,
+ elseopt: Option<&hir::Expr<'_>>,
+ ) {
+ self.head("if");
+ self.print_expr_as_cond(test);
+ self.s.space();
+ self.print_expr(blk);
+ self.print_else(elseopt)
+ }
+
pub fn print_anon_const(&mut self, constant: &hir::AnonConst) {
self.ann.nested(self, Nested::Body(constant.body))
}
self.s.word(".");
self.print_ident(segment.ident);
- let generic_args = segment.generic_args();
+ let generic_args = segment.args();
if !generic_args.args.is_empty() || !generic_args.bindings.is_empty() {
self.print_generic_args(generic_args, segment.infer_args, true);
}
// Print `}`:
self.bclose_maybe_open(expr.span, true);
}
- hir::ExprKind::Loop(ref blk, opt_label, _) => {
+ hir::ExprKind::If(ref test, ref blk, ref elseopt) => {
+ self.print_if(&test, &blk, elseopt.as_ref().map(|e| &**e));
+ }
+ hir::ExprKind::Loop(ref blk, opt_label, _, _) => {
if let Some(label) = opt_label {
self.print_ident(label.ident);
self.word_space(":");
}
if segment.ident.name != kw::PathRoot {
self.print_ident(segment.ident);
- self.print_generic_args(
- segment.generic_args(),
- segment.infer_args,
- colons_before_params,
- );
+ self.print_generic_args(segment.args(), segment.infer_args, colons_before_params);
}
}
}
pub fn print_path_segment(&mut self, segment: &hir::PathSegment<'_>) {
if segment.ident.name != kw::PathRoot {
self.print_ident(segment.ident);
- self.print_generic_args(segment.generic_args(), segment.infer_args, false);
+ self.print_generic_args(segment.args(), segment.infer_args, false);
}
}
if segment.ident.name != kw::PathRoot {
self.print_ident(segment.ident);
self.print_generic_args(
- segment.generic_args(),
+ segment.args(),
segment.infer_args,
colons_before_params,
);
let item_segment = path.segments.last().unwrap();
self.print_ident(item_segment.ident);
self.print_generic_args(
- item_segment.generic_args(),
+ item_segment.args(),
item_segment.infer_args,
colons_before_params,
)
self.s.word("::");
self.print_ident(item_segment.ident);
self.print_generic_args(
- item_segment.generic_args(),
+ item_segment.args(),
item_segment.infer_args,
colons_before_params,
)
for binding in generic_args.bindings.iter() {
start_or_comma(self);
self.print_ident(binding.ident);
+ self.print_generic_args(binding.gen_args, false, false);
self.s.space();
match generic_args.bindings[0].kind {
hir::TypeBindingKind::Equality { ref ty } => {
self.print_type(&default)
}
}
- GenericParamKind::Const { ref ty } => {
+ GenericParamKind::Const { ref ty, ref default } => {
self.word_space(":");
- self.print_type(ty)
+ self.print_type(ty);
+ if let Some(ref _default) = default {
+ // FIXME(const_generics_defaults): print the `default` value here
+ }
}
}
}
}
match predicate {
- &hir::WherePredicate::BoundPredicate(hir::WhereBoundPredicate {
- ref bound_generic_params,
- ref bounded_ty,
+ hir::WherePredicate::BoundPredicate(hir::WhereBoundPredicate {
+ bound_generic_params,
+ bounded_ty,
bounds,
..
}) => {
self.print_formal_generic_params(bound_generic_params);
self.print_type(&bounded_ty);
- self.print_bounds(":", bounds);
+ self.print_bounds(":", *bounds);
}
- &hir::WherePredicate::RegionPredicate(hir::WhereRegionPredicate {
- ref lifetime,
- ref bounds,
+ hir::WherePredicate::RegionPredicate(hir::WhereRegionPredicate {
+ lifetime,
+ bounds,
..
}) => {
self.print_lifetime(lifetime);
}
}
}
- &hir::WherePredicate::EqPredicate(hir::WhereEqPredicate {
- ref lhs_ty,
- ref rhs_ty,
- ..
+ hir::WherePredicate::EqPredicate(hir::WhereEqPredicate {
+ lhs_ty, rhs_ty, ..
}) => {
self.print_type(lhs_ty);
self.s.space();
//
// Duplicated from `parse::classify`, but adapted for the HIR.
fn expr_requires_semi_to_be_stmt(e: &hir::Expr<'_>) -> bool {
- !matches!(e.kind, hir::ExprKind::Match(..) | hir::ExprKind::Block(..) | hir::ExprKind::Loop(..))
+ !matches!(
+ e.kind,
+ hir::ExprKind::If(..)
+ | hir::ExprKind::Match(..)
+ | hir::ExprKind::Block(..)
+ | hir::ExprKind::Loop(..)
+ )
}
/// This statement requires a semicolon after it.