diff options
| author | cynecx <me@cynecx.net> | 2021-04-12 16:24:48 +0200 |
|---|---|---|
| committer | cynecx <me@cynecx.net> | 2021-04-17 16:24:56 +0200 |
| commit | 28ef7c20d79803403be58eeffa18ab1fb21e261c (patch) | |
| tree | 8fc1bc1b94bec220d6ab1c1bb4c67d6676b20244 | |
| parent | cf3b4f1e208247c9d171273dabff9c6b3c98a240 (diff) | |
| download | rust-28ef7c20d79803403be58eeffa18ab1fb21e261c.tar.gz rust-28ef7c20d79803403be58eeffa18ab1fb21e261c.zip | |
hir_ty: deal with TypeRef::Macro in HirFormatter
| -rw-r--r-- | crates/hir/src/semantics.rs | 5 | ||||
| -rw-r--r-- | crates/hir_ty/src/display.rs | 17 |
2 files changed, 17 insertions, 5 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 29c0821cfed..62500602a71 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs @@ -10,7 +10,7 @@ use hir_def::{ resolver::{self, HasResolver, Resolver, TypeNs}, AsMacroCall, FunctionId, TraitId, VariantId, }; -use hir_expand::{hygiene::Hygiene, name::AsName, ExpansionInfo}; +use hir_expand::{name::AsName, ExpansionInfo}; use hir_ty::associated_type_shorthand_candidates; use itertools::Itertools; use rustc_hash::{FxHashMap, FxHashSet}; @@ -854,8 +854,7 @@ impl<'a> SemanticsScope<'a> { /// Resolve a path as-if it was written at the given scope. This is /// necessary a heuristic, as it doesn't take hygiene into account. pub fn speculative_resolve(&self, path: &ast::Path) -> Option<PathResolution> { - let hygiene = Hygiene::new(self.db.upcast(), self.file_id); - let ctx = body::LowerCtx::with_hygiene(&hygiene); + let ctx = body::LowerCtx::new(self.db.upcast(), self.file_id); let path = Path::from_src(path.clone(), &ctx)?; resolve_hir_path(self.db, &self.resolver, &path) } diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs index 63bcb064069..4fb7d9cf2fd 100644 --- a/crates/hir_ty/src/display.rs +++ b/crates/hir_ty/src/display.rs @@ -9,6 +9,7 @@ use std::{ use chalk_ir::BoundVar; use hir_def::{ + body, db::DefDatabase, find_path, generics::TypeParamProvenance, @@ -18,7 +19,7 @@ use hir_def::{ visibility::Visibility, AssocContainerId, Lookup, ModuleId, TraitId, }; -use hir_expand::name::Name; +use hir_expand::{hygiene::Hygiene, name::Name}; use crate::{ const_from_placeholder_idx, db::HirDatabase, from_assoc_type_id, from_foreign_def_id, @@ -997,7 +998,19 @@ impl HirDisplay for TypeRef { write!(f, "dyn ")?; f.write_joined(bounds, " + ")?; } - TypeRef::Error | TypeRef::Macro(_) => write!(f, "{{error}}")?, + TypeRef::Macro(macro_call) => { + let macro_call = macro_call.to_node(f.db.upcast()); + let ctx = body::LowerCtx::with_hygiene(&Hygiene::new_unhygienic()); + match macro_call.path() { + Some(path) => match Path::from_src(path, &ctx) { + Some(path) => path.hir_fmt(f)?, + None => write!(f, "{{macro}}")?, + }, + None => write!(f, "{{macro}}")?, + } + write!(f, "!(..)")?; + } + TypeRef::Error => write!(f, "{{error}}")?, } Ok(()) } |
