@@ -11,7 +11,9 @@ use ide_db::base_db::FileRange;
11
11
use rustc_hash:: FxHashMap ;
12
12
use std:: { cell:: Cell , iter:: Peekable } ;
13
13
use syntax:: ast:: { AstNode , AstToken } ;
14
- use syntax:: { ast, SyntaxElement , SyntaxElementChildren , SyntaxKind , SyntaxNode , SyntaxToken } ;
14
+ use syntax:: {
15
+ ast, SyntaxElement , SyntaxElementChildren , SyntaxKind , SyntaxNode , SyntaxToken , TextRange ,
16
+ } ;
15
17
use test_utils:: mark;
16
18
17
19
// Creates a match error. If we're currently attempting to match some code that we thought we were
@@ -46,6 +48,7 @@ macro_rules! fail_match {
46
48
#[ derive( Debug ) ]
47
49
pub struct Match {
48
50
pub ( crate ) range : FileRange ,
51
+ pub ( crate ) range_in_match : TextRange ,
49
52
pub ( crate ) matched_node : SyntaxNode ,
50
53
pub ( crate ) placeholder_values : FxHashMap < Var , PlaceholderMatch > ,
51
54
pub ( crate ) ignored_comments : Vec < ast:: Comment > ,
@@ -154,8 +157,12 @@ impl<'db, 'sema> Matcher<'db, 'sema> {
154
157
155
158
dbg ! ( & matched_range, code) ;
156
159
157
- let range = match matched_range {
158
- Ok ( ( ) ) => sema. original_range ( code) ,
160
+ let ( range, range_in_match) = match matched_range {
161
+ Ok ( ( ) ) => {
162
+ let original_range = sema. original_range ( code) ;
163
+ let range_in_match = TextRange :: up_to ( original_range. range . len ( ) ) ;
164
+ ( original_range, range_in_match)
165
+ }
159
166
// Err(MatchFailed::Partial(r)) => r
160
167
Err ( TokenMatchFailed :: EarlyStop ( end) ) => {
161
168
if code. kind ( ) != SyntaxKind :: LET_STMT {
@@ -177,14 +184,16 @@ impl<'db, 'sema> Matcher<'db, 'sema> {
177
184
let text_range = original_range. range ;
178
185
assert ! ( text_range. contains( end) ) ;
179
186
original_range. range = syntax:: TextRange :: new ( text_range. start ( ) , end) ;
180
- original_range
187
+ let range_in_match = TextRange :: up_to ( original_range. range . len ( ) ) ;
188
+ ( original_range, range_in_match)
181
189
}
182
190
Err ( TokenMatchFailed :: Failed ( e) ) => return Err ( e) ,
183
191
} ;
184
192
185
193
match_state. validate_range ( & range) ?;
186
194
let mut the_match = Match {
187
195
range,
196
+ range_in_match,
188
197
matched_node : code. clone ( ) ,
189
198
placeholder_values : FxHashMap :: default ( ) ,
190
199
ignored_comments : Vec :: new ( ) ,
0 commit comments