Remove make::path_from_text

This commit is contained in:
Lukas Wirth 2020-09-16 21:29:48 +02:00
parent 4bc8015370
commit f2ae412ccf
6 changed files with 61 additions and 47 deletions

View file

@ -13,7 +13,7 @@ use hir_expand::{
hygiene::Hygiene,
name::{AsName, Name},
};
use syntax::ast;
use syntax::ast::{self, make};
use crate::{
type_ref::{TypeBound, TypeRef},
@ -104,6 +104,26 @@ impl ModPath {
}
self.segments.first()
}
pub fn to_ast_path(&self) -> ast::Path {
let mut segments = Vec::new();
let mut is_abs = false;
match self.kind {
PathKind::Plain => {}
PathKind::Super(0) => segments.push(make::path_segment_self()),
PathKind::Super(n) => segments.extend((0..n).map(|_| make::path_segment_super())),
PathKind::Crate => segments.push(make::path_segment_crate()),
PathKind::Abs => is_abs = true,
PathKind::DollarCrate(_) => (),
}
segments.extend(
self.segments
.iter()
.map(|segment| make::path_segment(make::name_ref(&segment.to_string()))),
);
make::path_from_segments(segments, is_abs)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@ -290,10 +310,8 @@ impl Display for ModPath {
};
match self.kind {
PathKind::Plain => {}
PathKind::Super(0) => add_segment("self")?,
PathKind::Super(n) => {
if n == 0 {
add_segment("self")?;
}
for _ in 0..n {
add_segment("super")?;
}