add eq constraints on associated constants
This commit is contained in:
parent
a34c079752
commit
0765999622
23 changed files with 195 additions and 113 deletions
|
|
@ -2117,7 +2117,8 @@ impl Clean<TypeBindingKind> for hir::TypeBindingKind<'_> {
|
|||
hir::TypeBindingKind::Equality { ref ty } => {
|
||||
TypeBindingKind::Equality { ty: ty.clean(cx) }
|
||||
}
|
||||
hir::TypeBindingKind::Constraint { bounds } => TypeBindingKind::Constraint {
|
||||
hir::TypeBindingKind::Const { c: _ } => todo!(),
|
||||
hir::TypeBindingKind::Constraint { ref bounds } => TypeBindingKind::Constraint {
|
||||
bounds: bounds.iter().filter_map(|b| b.clean(cx)).collect(),
|
||||
},
|
||||
}
|
||||
|
|
|
|||
14
src/test/ui/associated-consts/assoc-const.rs
Normal file
14
src/test/ui/associated-consts/assoc-const.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
// run-pass
|
||||
|
||||
pub trait Foo {
|
||||
const N: usize;
|
||||
}
|
||||
|
||||
pub struct Bar;
|
||||
|
||||
impl Foo for Bar {
|
||||
const N: usize = 3;
|
||||
}
|
||||
|
||||
fn foo<F: Foo<N=3>>() {}
|
||||
fn main() {}
|
||||
|
|
@ -645,12 +645,13 @@ pub fn eq_generic_bound(l: &GenericBound, r: &GenericBound) -> bool {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn eq_assoc_constraint(l: &AssocTyConstraint, r: &AssocTyConstraint) -> bool {
|
||||
use AssocTyConstraintKind::*;
|
||||
pub fn eq_assoc_constraint(l: &AssocConstraint, r: &AssocConstraint) -> bool {
|
||||
use AssocConstraintKind::*;
|
||||
eq_id(l.ident, r.ident)
|
||||
&& match (&l.kind, &r.kind) {
|
||||
(Equality { ty: l }, Equality { ty: r }) => eq_ty(l, r),
|
||||
(Bound { bounds: l }, Bound { bounds: r }) => over(l, r, eq_generic_bound),
|
||||
(ConstEquality { c: l }, ConstEquality { c: r }) => eq_anon_const(l, r),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ pub(crate) enum SegmentParam<'a> {
|
|||
Const(&'a ast::AnonConst),
|
||||
LifeTime(&'a ast::Lifetime),
|
||||
Type(&'a ast::Ty),
|
||||
Binding(&'a ast::AssocTyConstraint),
|
||||
Binding(&'a ast::AssocConstraint),
|
||||
}
|
||||
|
||||
impl<'a> SegmentParam<'a> {
|
||||
|
|
@ -176,9 +176,9 @@ impl<'a> Rewrite for SegmentParam<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
impl Rewrite for ast::AssocTyConstraint {
|
||||
impl Rewrite for ast::AssocConstraint {
|
||||
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
||||
use ast::AssocTyConstraintKind::{Bound, Equality};
|
||||
use ast::AssocConstraintKind::{Bound, Equality, ConstEquality};
|
||||
|
||||
let mut result = String::with_capacity(128);
|
||||
result.push_str(rewrite_ident(context, self.ident));
|
||||
|
|
@ -192,8 +192,8 @@ impl Rewrite for ast::AssocTyConstraint {
|
|||
|
||||
let infix = match (&self.kind, context.config.type_punctuation_density()) {
|
||||
(Bound { .. }, _) => ": ",
|
||||
(Equality { .. }, TypeDensity::Wide) => " = ",
|
||||
(Equality { .. }, TypeDensity::Compressed) => "=",
|
||||
(ConstEquality { .. } | Equality { .. }, TypeDensity::Wide) => " = ",
|
||||
(ConstEquality { .. } | Equality { .. }, TypeDensity::Compressed) => "=",
|
||||
};
|
||||
result.push_str(infix);
|
||||
|
||||
|
|
@ -206,11 +206,12 @@ impl Rewrite for ast::AssocTyConstraint {
|
|||
}
|
||||
}
|
||||
|
||||
impl Rewrite for ast::AssocTyConstraintKind {
|
||||
impl Rewrite for ast::AssocConstraintKind {
|
||||
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
||||
match self {
|
||||
ast::AssocTyConstraintKind::Equality { ty } => ty.rewrite(context, shape),
|
||||
ast::AssocTyConstraintKind::Bound { bounds } => bounds.rewrite(context, shape),
|
||||
ast::AssocConstraintKind::Equality { ty } => ty.rewrite(context, shape),
|
||||
ast::AssocConstraintKind::ConstEquality { c } => c.rewrite(context, shape),
|
||||
ast::AssocConstraintKind::Bound { bounds } => bounds.rewrite(context, shape),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue