diff options
author | Jonas Schievink <[email protected]> | 2021-05-06 18:59:54 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2021-05-06 18:59:54 +0100 |
commit | 976a3226fe0f145dfefd473e9fecd63d58aca50e (patch) | |
tree | 59dd6c2e4cc81c3f9285d47e5a44e370110818c7 /crates/hir_def/src/path/lower.rs | |
parent | b37b709459a4ff881a91965ebf0c39e3a449c304 (diff) |
Don't store call-site text offsets in hygiene info
Diffstat (limited to 'crates/hir_def/src/path/lower.rs')
-rw-r--r-- | crates/hir_def/src/path/lower.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/crates/hir_def/src/path/lower.rs b/crates/hir_def/src/path/lower.rs index 1df6db525..3b3a3738f 100644 --- a/crates/hir_def/src/path/lower.rs +++ b/crates/hir_def/src/path/lower.rs | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | mod lower_use; | 3 | mod lower_use; |
4 | 4 | ||
5 | use crate::intern::Interned; | 5 | use crate::{db::DefDatabase, intern::Interned}; |
6 | use std::sync::Arc; | 6 | use std::sync::Arc; |
7 | 7 | ||
8 | use either::Either; | 8 | use either::Either; |
@@ -20,7 +20,11 @@ pub(super) use lower_use::lower_use_tree; | |||
20 | 20 | ||
21 | /// Converts an `ast::Path` to `Path`. Works with use trees. | 21 | /// Converts an `ast::Path` to `Path`. Works with use trees. |
22 | /// It correctly handles `$crate` based path from macro call. | 22 | /// It correctly handles `$crate` based path from macro call. |
23 | pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> { | 23 | pub(super) fn lower_path( |
24 | db: &dyn DefDatabase, | ||
25 | mut path: ast::Path, | ||
26 | ctx: &LowerCtx, | ||
27 | ) -> Option<Path> { | ||
24 | let mut kind = PathKind::Plain; | 28 | let mut kind = PathKind::Plain; |
25 | let mut type_anchor = None; | 29 | let mut type_anchor = None; |
26 | let mut segments = Vec::new(); | 30 | let mut segments = Vec::new(); |
@@ -36,7 +40,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> { | |||
36 | match segment.kind()? { | 40 | match segment.kind()? { |
37 | ast::PathSegmentKind::Name(name_ref) => { | 41 | ast::PathSegmentKind::Name(name_ref) => { |
38 | // FIXME: this should just return name | 42 | // FIXME: this should just return name |
39 | match hygiene.name_ref_to_name(name_ref) { | 43 | match hygiene.name_ref_to_name(db.upcast(), name_ref) { |
40 | Either::Left(name) => { | 44 | Either::Left(name) => { |
41 | let args = segment | 45 | let args = segment |
42 | .generic_arg_list() | 46 | .generic_arg_list() |
@@ -71,7 +75,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> { | |||
71 | } | 75 | } |
72 | // <T as Trait<A>>::Foo desugars to Trait<Self=T, A>::Foo | 76 | // <T as Trait<A>>::Foo desugars to Trait<Self=T, A>::Foo |
73 | Some(trait_ref) => { | 77 | Some(trait_ref) => { |
74 | let path = Path::from_src(trait_ref.path()?, ctx)?; | 78 | let path = Path::from_src(db, trait_ref.path()?, ctx)?; |
75 | let mod_path = (*path.mod_path).clone(); | 79 | let mod_path = (*path.mod_path).clone(); |
76 | let num_segments = path.mod_path.segments.len(); | 80 | let num_segments = path.mod_path.segments.len(); |
77 | kind = mod_path.kind; | 81 | kind = mod_path.kind; |
@@ -133,7 +137,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> { | |||
133 | // We follow what it did anyway :) | 137 | // We follow what it did anyway :) |
134 | if segments.len() == 1 && kind == PathKind::Plain { | 138 | if segments.len() == 1 && kind == PathKind::Plain { |
135 | if let Some(_macro_call) = path.syntax().parent().and_then(ast::MacroCall::cast) { | 139 | if let Some(_macro_call) = path.syntax().parent().and_then(ast::MacroCall::cast) { |
136 | if let Some(crate_id) = hygiene.local_inner_macros(path) { | 140 | if let Some(crate_id) = hygiene.local_inner_macros(db.upcast(), path) { |
137 | kind = PathKind::DollarCrate(crate_id); | 141 | kind = PathKind::DollarCrate(crate_id); |
138 | } | 142 | } |
139 | } | 143 | } |