Use `UseSegment::Slf` or `UseSegment::Super` when appropriate
Currently we `UseSegment::Ident` for all of the segments except the last.
E.g. `use super::foo::bar::self;` will be
`[Ident("super"), Ident("foo"), Ident("bar"), Self(None)]`.
in the current implementation. I think that this should be
`[Super(None), Ident("foo"), Ident("bar"), Self(None)]`.
instead.
I noticed this because some tests failed after updating
`rustc-ap-syntax` to 73.0.0.
@@ -299,16 +299,24 @@ impl UseSegment {
_ => self.clone(),
}
}
+
+ fn from_path_segment(path_seg: &ast::PathSegment) -> UseSegment {
+ let name = path_seg.identifier.name.as_str();
+ if name == "self" {
+ UseSegment::Slf(None)
+ } else if name == "super" {
+ UseSegment::Super(None)
+ } else {
+ UseSegment::Ident((*name).to_owned(), None)
+ }
+ }
}
impl UseTree {
fn from_ast(a: &ast::UseTree) -> UseTree {
let mut result = UseTree { path: vec![] };
for p in &a.prefix.segments {
- result.path.push(UseSegment::Ident(
- (*p.identifier.name.as_str()).to_owned(),
- None,
- ));
+ result.path.push(UseSegment::from_path_segment(p));
}
match a.kind {
UseTreeKind::Glob => {
