@@ -7,7 +7,9 @@ use stdx::{never, TupleExt};
7
7
use syntax:: ast:: { self , AstNode } ;
8
8
use text_edit:: { TextRange , TextSize } ;
9
9
10
- use crate :: { InlayHint , InlayHintLabel , InlayHintPosition , InlayHintsConfig , InlayKind } ;
10
+ use crate :: {
11
+ InlayHint , InlayHintLabel , InlayHintLabelPart , InlayHintPosition , InlayHintsConfig , InlayKind ,
12
+ } ;
11
13
12
14
pub ( super ) fn hints (
13
15
acc : & mut Vec < InlayHint > ,
@@ -27,34 +29,27 @@ pub(super) fn hints(
27
29
return None ;
28
30
}
29
31
30
- let move_kw_range = match closure. move_token ( ) {
31
- Some ( t) => t. text_range ( ) ,
32
+ let ( range , label ) = match closure. move_token ( ) {
33
+ Some ( t) => ( t. text_range ( ) , InlayHintLabel :: default ( ) ) ,
32
34
None => {
33
- let range = closure. syntax ( ) . first_token ( ) ?. prev_token ( ) ?. text_range ( ) ;
34
- let range = TextRange :: new ( range. end ( ) - TextSize :: from ( 1 ) , range. end ( ) ) ;
35
- acc. push ( InlayHint {
36
- range,
37
- kind : InlayKind :: ClosureCapture ,
38
- label : InlayHintLabel :: from ( "move" ) ,
39
- text_edit : None ,
40
- position : InlayHintPosition :: After ,
41
- pad_left : false ,
42
- pad_right : false ,
43
- resolve_parent : Some ( closure. syntax ( ) . text_range ( ) ) ,
44
- } ) ;
45
- range
35
+ let prev_token = closure. syntax ( ) . first_token ( ) ?. prev_token ( ) ?. text_range ( ) ;
36
+ (
37
+ TextRange :: new ( prev_token. end ( ) - TextSize :: from ( 1 ) , prev_token. end ( ) ) ,
38
+ InlayHintLabel :: from ( "move" ) ,
39
+ )
46
40
}
47
41
} ;
48
- acc . push ( InlayHint {
49
- range : move_kw_range ,
42
+ let mut hint = InlayHint {
43
+ range,
50
44
kind : InlayKind :: ClosureCapture ,
51
- label : InlayHintLabel :: from ( "(" ) ,
45
+ label,
52
46
text_edit : None ,
53
47
position : InlayHintPosition :: After ,
54
48
pad_left : false ,
55
- pad_right : false ,
56
- resolve_parent : None ,
57
- } ) ;
49
+ pad_right : true ,
50
+ resolve_parent : Some ( closure. syntax ( ) . text_range ( ) ) ,
51
+ } ;
52
+ hint. label . append_str ( "(" ) ;
58
53
let last = captures. len ( ) - 1 ;
59
54
for ( idx, capture) in captures. into_iter ( ) . enumerate ( ) {
60
55
let local = capture. local ( ) ;
@@ -76,48 +71,20 @@ pub(super) fn hints(
76
71
if never ! ( label. is_empty( ) ) {
77
72
continue ;
78
73
}
79
- let label = InlayHintLabel :: simple (
80
- label,
81
- None ,
82
- source. name ( ) . and_then ( |name| {
74
+ hint. label . append_part ( InlayHintLabelPart {
75
+ text : label,
76
+ linked_location : source. name ( ) . and_then ( |name| {
83
77
name. syntax ( ) . original_file_range_opt ( sema. db ) . map ( TupleExt :: head) . map ( Into :: into)
84
78
} ) ,
85
- ) ;
86
- acc. push ( InlayHint {
87
- range : move_kw_range,
88
- kind : InlayKind :: ClosureCapture ,
89
- label,
90
- text_edit : None ,
91
- position : InlayHintPosition :: After ,
92
- pad_left : false ,
93
- pad_right : false ,
94
- resolve_parent : Some ( closure. syntax ( ) . text_range ( ) ) ,
79
+ tooltip : None ,
95
80
} ) ;
96
81
97
82
if idx != last {
98
- acc. push ( InlayHint {
99
- range : move_kw_range,
100
- kind : InlayKind :: ClosureCapture ,
101
- label : InlayHintLabel :: from ( ", " ) ,
102
- text_edit : None ,
103
- position : InlayHintPosition :: After ,
104
- pad_left : false ,
105
- pad_right : false ,
106
- resolve_parent : None ,
107
- } ) ;
83
+ hint. label . append_str ( ", " ) ;
108
84
}
109
85
}
110
- acc. push ( InlayHint {
111
- range : move_kw_range,
112
- kind : InlayKind :: ClosureCapture ,
113
- label : InlayHintLabel :: from ( ")" ) ,
114
- text_edit : None ,
115
- position : InlayHintPosition :: After ,
116
- pad_left : false ,
117
- pad_right : true ,
118
- resolve_parent : None ,
119
- } ) ;
120
-
86
+ hint. label . append_str ( ")" ) ;
87
+ acc. push ( hint) ;
121
88
Some ( ( ) )
122
89
}
123
90
@@ -147,51 +114,25 @@ fn main() {
147
114
let mut baz = NonCopy;
148
115
let qux = &mut NonCopy;
149
116
|| {
150
- // ^ move
151
- // ^ (
152
- // ^ &foo
153
- // ^ , $
154
- // ^ bar
155
- // ^ , $
156
- // ^ baz
157
- // ^ , $
158
- // ^ qux
159
- // ^ )
117
+ // ^ move(&foo, bar, baz, qux)
160
118
foo;
161
119
bar;
162
120
baz;
163
121
qux;
164
122
};
165
123
|| {
166
- // ^ move
167
- // ^ (
168
- // ^ &foo
169
- // ^ , $
170
- // ^ &bar
171
- // ^ , $
172
- // ^ &baz
173
- // ^ , $
174
- // ^ &qux
175
- // ^ )
124
+ // ^ move(&foo, &bar, &baz, &qux)
176
125
&foo;
177
126
&bar;
178
127
&baz;
179
128
&qux;
180
129
};
181
130
|| {
182
- // ^ move
183
- // ^ (
184
- // ^ &mut baz
185
- // ^ )
131
+ // ^ move(&mut baz)
186
132
&mut baz;
187
133
};
188
134
|| {
189
- // ^ move
190
- // ^ (
191
- // ^ &mut baz
192
- // ^ , $
193
- // ^ &mut *qux
194
- // ^ )
135
+ // ^ move(&mut baz, &mut *qux)
195
136
baz = NonCopy;
196
137
*qux = NonCopy;
197
138
};
@@ -209,9 +150,7 @@ fn main() {
209
150
fn main() {
210
151
let foo = u32;
211
152
move || {
212
- // ^^^^ (
213
- // ^^^^ foo
214
- // ^^^^ )
153
+ // ^^^^ (foo)
215
154
foo;
216
155
};
217
156
}
0 commit comments