diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-11-09 09:13:14 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2019-11-09 09:13:14 +0000 |
commit | 561bb979cecd786f5d311ea7bddb1e15d77a3848 (patch) | |
tree | a6aaa81c3acbfc5e6add5ebbee9abbc0f8357014 /crates/ra_mbe/src/lib.rs | |
parent | 23939cabcc10ecc045a97361df182b9b4db32953 (diff) | |
parent | 0a5ec69404a2556dd82e5bb00b295aebaa291f04 (diff) |
Merge #2169
2169: MBE: Mapping spans for goto definition r=matklad a=edwin0cheng
Currently, go to definition gives the wrong span in MBE. This PR implement a mapping mechanism to fix it and it could be used for future MBE hygiene implementation.
The basic idea of the mapping is:
1. When expanding the macro, generated 2 `TokenMap` which maps the macro args and macro defs between tokens and input text-ranges.
2. Before converting generated `TokenTree` to `SyntaxNode`, generated a `ExpandedRangeMap` which is a mapping between token and output text-ranges.
3. Using these 3 mappings to construct an `ExpansionInfo` which can map between input text ranges and output text ranges.
Co-authored-by: Edwin Cheng <[email protected]>
Diffstat (limited to 'crates/ra_mbe/src/lib.rs')
-rw-r--r-- | crates/ra_mbe/src/lib.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/crates/ra_mbe/src/lib.rs b/crates/ra_mbe/src/lib.rs index 15f000175..70a289f09 100644 --- a/crates/ra_mbe/src/lib.rs +++ b/crates/ra_mbe/src/lib.rs | |||
@@ -32,7 +32,7 @@ pub enum ExpandError { | |||
32 | 32 | ||
33 | pub use crate::syntax_bridge::{ | 33 | pub use crate::syntax_bridge::{ |
34 | ast_to_token_tree, syntax_node_to_token_tree, token_tree_to_expr, token_tree_to_items, | 34 | ast_to_token_tree, syntax_node_to_token_tree, token_tree_to_expr, token_tree_to_items, |
35 | token_tree_to_macro_stmts, token_tree_to_pat, token_tree_to_ty, | 35 | token_tree_to_macro_stmts, token_tree_to_pat, token_tree_to_ty, RevTokenMap, TokenMap, |
36 | }; | 36 | }; |
37 | 37 | ||
38 | /// This struct contains AST for a single `macro_rules` definition. What might | 38 | /// This struct contains AST for a single `macro_rules` definition. What might |
@@ -118,6 +118,10 @@ impl MacroRules { | |||
118 | shift_subtree(&mut tt, self.shift); | 118 | shift_subtree(&mut tt, self.shift); |
119 | mbe_expander::expand(self, &tt) | 119 | mbe_expander::expand(self, &tt) |
120 | } | 120 | } |
121 | |||
122 | pub fn shift(&self) -> u32 { | ||
123 | self.shift | ||
124 | } | ||
121 | } | 125 | } |
122 | 126 | ||
123 | impl Rule { | 127 | impl Rule { |