From 61360fdfec981eadef1eefb595c8b32c951771e8 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sun, 15 Dec 2019 01:20:07 +0800 Subject: Fix original_source find order --- crates/ra_hir_expand/src/lib.rs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'crates/ra_hir_expand/src') diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs index 94e1e466a..d1a43fe6c 100644 --- a/crates/ra_hir_expand/src/lib.rs +++ b/crates/ra_hir_expand/src/lib.rs @@ -214,7 +214,17 @@ pub struct ExpansionInfo { exp_map: Arc, } +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ExpansionOrigin { + Call, + Def, +} + impl ExpansionInfo { + pub fn call_node(&self) -> Option> { + Some(self.arg.with_value(self.arg.value.parent()?)) + } + pub fn map_token_down(&self, token: InFile<&SyntaxToken>) -> Option> { assert_eq!(token.file_id, self.arg.file_id); let range = token.value.text_range().checked_sub(self.arg.value.text_range().start())?; @@ -228,21 +238,26 @@ impl ExpansionInfo { Some(self.expanded.with_value(token)) } - pub fn map_token_up(&self, token: InFile<&SyntaxToken>) -> Option> { + pub fn map_token_up( + &self, + token: InFile<&SyntaxToken>, + ) -> Option<(InFile, ExpansionOrigin)> { let token_id = self.exp_map.token_by_range(token.value.text_range())?; let (token_id, origin) = self.macro_def.0.map_id_up(token_id); - let (token_map, tt) = match origin { - mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone()), - mbe::Origin::Def => { - (&self.macro_def.1, self.def.as_ref().map(|tt| tt.syntax().clone())) - } + let (token_map, tt, origin) = match origin { + mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone(), ExpansionOrigin::Call), + mbe::Origin::Def => ( + &self.macro_def.1, + self.def.as_ref().map(|tt| tt.syntax().clone()), + ExpansionOrigin::Def, + ), }; let range = token_map.range_by_token(token_id)?; let token = algo::find_covering_element(&tt.value, range + tt.value.text_range().start()) .into_token()?; - Some(tt.with_value(token)) + Some((tt.with_value(token), origin)) } } -- cgit v1.2.3 From b53587c7bdd67c63bd33a745fdaeb22a847b6c2f Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sun, 15 Dec 2019 01:46:39 +0800 Subject: Re-export Origin to replace ExpansionOrigin --- crates/ra_hir_expand/src/lib.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'crates/ra_hir_expand/src') diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs index d1a43fe6c..cb4e1950b 100644 --- a/crates/ra_hir_expand/src/lib.rs +++ b/crates/ra_hir_expand/src/lib.rs @@ -214,11 +214,7 @@ pub struct ExpansionInfo { exp_map: Arc, } -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum ExpansionOrigin { - Call, - Def, -} +pub use mbe::Origin; impl ExpansionInfo { pub fn call_node(&self) -> Option> { @@ -241,17 +237,15 @@ impl ExpansionInfo { pub fn map_token_up( &self, token: InFile<&SyntaxToken>, - ) -> Option<(InFile, ExpansionOrigin)> { + ) -> Option<(InFile, Origin)> { let token_id = self.exp_map.token_by_range(token.value.text_range())?; let (token_id, origin) = self.macro_def.0.map_id_up(token_id); - let (token_map, tt, origin) = match origin { - mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone(), ExpansionOrigin::Call), - mbe::Origin::Def => ( - &self.macro_def.1, - self.def.as_ref().map(|tt| tt.syntax().clone()), - ExpansionOrigin::Def, - ), + let (token_map, tt) = match origin { + mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone()), + mbe::Origin::Def => { + (&self.macro_def.1, self.def.as_ref().map(|tt| tt.syntax().clone())) + } }; let range = token_map.range_by_token(token_id)?; -- cgit v1.2.3