@@ -192,7 +192,7 @@ pub enum FormatSpecifier {
192
192
}
193
193
194
194
pub trait HasFormatSpecifier : AstToken {
195
- fn lex_format_specifier < F > ( & self , callback : & mut F )
195
+ fn lex_format_specifier < F > ( & self , mut callback : F )
196
196
where
197
197
F : FnMut ( TextRange , FormatSpecifier ) ,
198
198
{
@@ -217,21 +217,15 @@ pub trait HasFormatSpecifier: AstToken {
217
217
FormatSpecifier :: Open ,
218
218
) ;
219
219
220
- let next_char = if let Some ( c) = chars. clone ( ) . next ( ) {
221
- c
222
- } else {
223
- break ;
224
- } ;
225
-
226
220
// check for integer/identifier
227
- match next_char {
221
+ match chars . clone ( ) . next ( ) . unwrap_or_default ( ) {
228
222
'0' ..='9' => {
229
223
// integer
230
- read_integer ( & mut chars, initial_len, callback) ;
224
+ read_integer ( & mut chars, initial_len, & mut callback) ;
231
225
}
232
226
'a' ..='z' | 'A' ..='Z' | '_' => {
233
227
// identifier
234
- read_identifier ( & mut chars, initial_len, callback) ;
228
+ read_identifier ( & mut chars, initial_len, & mut callback) ;
235
229
}
236
230
_ => { }
237
231
}
@@ -241,7 +235,7 @@ pub trait HasFormatSpecifier: AstToken {
241
235
& mut chars,
242
236
initial_len,
243
237
FormatSpecifier :: Colon ,
244
- callback,
238
+ & mut callback,
245
239
) ;
246
240
247
241
// check for fill/align
@@ -255,13 +249,13 @@ pub trait HasFormatSpecifier: AstToken {
255
249
& mut chars,
256
250
initial_len,
257
251
FormatSpecifier :: Fill ,
258
- callback,
252
+ & mut callback,
259
253
) ;
260
254
skip_char_and_emit (
261
255
& mut chars,
262
256
initial_len,
263
257
FormatSpecifier :: Align ,
264
- callback,
258
+ & mut callback,
265
259
) ;
266
260
}
267
261
_ => match first {
@@ -270,7 +264,7 @@ pub trait HasFormatSpecifier: AstToken {
270
264
& mut chars,
271
265
initial_len,
272
266
FormatSpecifier :: Align ,
273
- callback,
267
+ & mut callback,
274
268
) ;
275
269
}
276
270
_ => { }
@@ -284,7 +278,7 @@ pub trait HasFormatSpecifier: AstToken {
284
278
& mut chars,
285
279
initial_len,
286
280
FormatSpecifier :: Sign ,
287
- callback,
281
+ & mut callback,
288
282
) ;
289
283
}
290
284
_ => { }
@@ -296,7 +290,7 @@ pub trait HasFormatSpecifier: AstToken {
296
290
& mut chars,
297
291
initial_len,
298
292
FormatSpecifier :: NumberSign ,
299
- callback,
293
+ & mut callback,
300
294
) ;
301
295
}
302
296
@@ -310,33 +304,33 @@ pub trait HasFormatSpecifier: AstToken {
310
304
& mut chars,
311
305
initial_len,
312
306
FormatSpecifier :: Zero ,
313
- callback,
307
+ & mut callback,
314
308
) ;
315
309
}
316
310
317
311
// width
318
312
match chars. clone ( ) . next ( ) . unwrap_or_default ( ) {
319
313
'0' ..='9' => {
320
- read_integer ( & mut chars, initial_len, callback) ;
314
+ read_integer ( & mut chars, initial_len, & mut callback) ;
321
315
if chars. clone ( ) . next ( ) == Some ( '$' ) {
322
316
skip_char_and_emit (
323
317
& mut chars,
324
318
initial_len,
325
319
FormatSpecifier :: DollarSign ,
326
- callback,
320
+ & mut callback,
327
321
) ;
328
322
}
329
323
}
330
324
'a' ..='z' | 'A' ..='Z' | '_' => {
331
- read_identifier ( & mut chars, initial_len, callback) ;
325
+ read_identifier ( & mut chars, initial_len, & mut callback) ;
332
326
if chars. clone ( ) . next ( ) != Some ( '$' ) {
333
327
continue ;
334
328
}
335
329
skip_char_and_emit (
336
330
& mut chars,
337
331
initial_len,
338
332
FormatSpecifier :: DollarSign ,
339
- callback,
333
+ & mut callback,
340
334
) ;
341
335
}
342
336
_ => { }
@@ -348,7 +342,7 @@ pub trait HasFormatSpecifier: AstToken {
348
342
& mut chars,
349
343
initial_len,
350
344
FormatSpecifier :: Dot ,
351
- callback,
345
+ & mut callback,
352
346
) ;
353
347
354
348
match chars. clone ( ) . next ( ) . unwrap_or_default ( ) {
@@ -357,30 +351,30 @@ pub trait HasFormatSpecifier: AstToken {
357
351
& mut chars,
358
352
initial_len,
359
353
FormatSpecifier :: Asterisk ,
360
- callback,
354
+ & mut callback,
361
355
) ;
362
356
}
363
357
'0' ..='9' => {
364
- read_integer ( & mut chars, initial_len, callback) ;
358
+ read_integer ( & mut chars, initial_len, & mut callback) ;
365
359
if chars. clone ( ) . next ( ) == Some ( '$' ) {
366
360
skip_char_and_emit (
367
361
& mut chars,
368
362
initial_len,
369
363
FormatSpecifier :: DollarSign ,
370
- callback,
364
+ & mut callback,
371
365
) ;
372
366
}
373
367
}
374
368
'a' ..='z' | 'A' ..='Z' | '_' => {
375
- read_identifier ( & mut chars, initial_len, callback) ;
369
+ read_identifier ( & mut chars, initial_len, & mut callback) ;
376
370
if chars. clone ( ) . next ( ) != Some ( '$' ) {
377
371
continue ;
378
372
}
379
373
skip_char_and_emit (
380
374
& mut chars,
381
375
initial_len,
382
376
FormatSpecifier :: DollarSign ,
383
- callback,
377
+ & mut callback,
384
378
) ;
385
379
}
386
380
_ => {
@@ -396,11 +390,11 @@ pub trait HasFormatSpecifier: AstToken {
396
390
& mut chars,
397
391
initial_len,
398
392
FormatSpecifier :: QuestionMark ,
399
- callback,
393
+ & mut callback,
400
394
) ;
401
395
}
402
396
'a' ..='z' | 'A' ..='Z' | '_' => {
403
- read_identifier ( & mut chars, initial_len, callback) ;
397
+ read_identifier ( & mut chars, initial_len, & mut callback) ;
404
398
}
405
399
_ => { }
406
400
}
@@ -416,7 +410,12 @@ pub trait HasFormatSpecifier: AstToken {
416
410
// Escaped format end specifier, `}}`
417
411
continue ;
418
412
}
419
- skip_char_and_emit ( & mut chars, initial_len, FormatSpecifier :: Close , callback) ;
413
+ skip_char_and_emit (
414
+ & mut chars,
415
+ initial_len,
416
+ FormatSpecifier :: Close ,
417
+ & mut callback,
418
+ ) ;
420
419
}
421
420
_ => {
422
421
while let Some ( next_char) = chars. clone ( ) . next ( ) {
0 commit comments