diff options
Diffstat (limited to 'crates/ra_hir_def/src/path.rs')
-rw-r--r-- | crates/ra_hir_def/src/path.rs | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/crates/ra_hir_def/src/path.rs b/crates/ra_hir_def/src/path.rs index 82cfa67a9..9f93a5424 100644 --- a/crates/ra_hir_def/src/path.rs +++ b/crates/ra_hir_def/src/path.rs | |||
@@ -1,7 +1,11 @@ | |||
1 | //! A desugared representation of paths like `crate::foo` or `<Type as Trait>::bar`. | 1 | //! A desugared representation of paths like `crate::foo` or `<Type as Trait>::bar`. |
2 | mod lower; | 2 | mod lower; |
3 | 3 | ||
4 | use std::{iter, sync::Arc}; | 4 | use std::{ |
5 | fmt::{self, Display}, | ||
6 | iter, | ||
7 | sync::Arc, | ||
8 | }; | ||
5 | 9 | ||
6 | use hir_expand::{ | 10 | use hir_expand::{ |
7 | hygiene::Hygiene, | 11 | hygiene::Hygiene, |
@@ -248,6 +252,42 @@ impl From<Name> for ModPath { | |||
248 | } | 252 | } |
249 | } | 253 | } |
250 | 254 | ||
255 | impl Display for ModPath { | ||
256 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
257 | let mut first_segment = true; | ||
258 | let mut add_segment = |s| { | ||
259 | if !first_segment { | ||
260 | f.write_str("::")?; | ||
261 | } | ||
262 | first_segment = false; | ||
263 | f.write_str(s)?; | ||
264 | Ok(()) | ||
265 | }; | ||
266 | match self.kind { | ||
267 | PathKind::Plain => {} | ||
268 | PathKind::Super(n) => { | ||
269 | if n == 0 { | ||
270 | add_segment("self")?; | ||
271 | } | ||
272 | for _ in 0..n { | ||
273 | add_segment("super")?; | ||
274 | } | ||
275 | } | ||
276 | PathKind::Crate => add_segment("crate")?, | ||
277 | PathKind::Abs => add_segment("")?, | ||
278 | PathKind::DollarCrate(_) => add_segment("$crate")?, | ||
279 | } | ||
280 | for segment in &self.segments { | ||
281 | if !first_segment { | ||
282 | f.write_str("::")?; | ||
283 | } | ||
284 | first_segment = false; | ||
285 | write!(f, "{}", segment)?; | ||
286 | } | ||
287 | Ok(()) | ||
288 | } | ||
289 | } | ||
290 | |||
251 | pub use hir_expand::name as __name; | 291 | pub use hir_expand::name as __name; |
252 | 292 | ||
253 | #[macro_export] | 293 | #[macro_export] |