Add pretty-printing for const generics

Co-Authored-By: Gabriel Smith <yodaldevoid@users.noreply.github.com>
This commit is contained in:
varkor 2019-02-15 22:21:57 +00:00
parent 725ba9625e
commit d44030d8ec

View File

@ -1711,31 +1711,25 @@ impl<'a> State<'a> {
} }
}; };
let mut types = vec![]; let mut nonelided_generic_args: bool = false;
let mut elide_lifetimes = true; let elide_lifetimes = generic_args.args.iter().all(|arg| match arg {
for arg in &generic_args.args { GenericArg::Lifetime(lt) => lt.is_elided(),
match arg { _ => {
GenericArg::Lifetime(lt) => { nonelided_generic_args = true;
if !lt.is_elided() { true
elide_lifetimes = false;
}
}
GenericArg::Type(ty) => {
types.push(ty);
}
} }
} });
if !elide_lifetimes {
if nonelided_generic_args {
start_or_comma(self)?; start_or_comma(self)?;
self.commasep(Inconsistent, &generic_args.args, |s, generic_arg| { self.commasep(Inconsistent, &generic_args.args, |s, generic_arg| {
match generic_arg { match generic_arg {
GenericArg::Lifetime(lt) => s.print_lifetime(lt), GenericArg::Lifetime(lt) if !elide_lifetimes => s.print_lifetime(lt),
GenericArg::Lifetime(_) => Ok(()),
GenericArg::Type(ty) => s.print_type(ty), GenericArg::Type(ty) => s.print_type(ty),
GenericArg::Const(ct) => s.print_anon_const(&ct.value),
} }
})?; })?;
} else if !types.is_empty() {
start_or_comma(self)?;
self.commasep(Inconsistent, &types, |s, ty| s.print_type(&ty))?;
} }
// FIXME(eddyb) This would leak into error messages, e.g.: // FIXME(eddyb) This would leak into error messages, e.g.:
@ -2106,7 +2100,12 @@ impl<'a> State<'a> {
} }
pub fn print_generic_param(&mut self, param: &GenericParam) -> io::Result<()> { pub fn print_generic_param(&mut self, param: &GenericParam) -> io::Result<()> {
if let GenericParamKind::Const { .. } = param.kind {
self.word_space("const")?;
}
self.print_ident(param.name.ident())?; self.print_ident(param.name.ident())?;
match param.kind { match param.kind {
GenericParamKind::Lifetime { .. } => { GenericParamKind::Lifetime { .. } => {
let mut sep = ":"; let mut sep = ":";
@ -2133,6 +2132,10 @@ impl<'a> State<'a> {
_ => Ok(()), _ => Ok(()),
} }
} }
GenericParamKind::Const { ref ty } => {
self.word_space(":")?;
self.print_type(ty)
}
} }
} }