@@ -236,13 +236,12 @@ pub enum ArgumentType {
236
236
}
237
237
238
238
#[ derive( Debug , PartialEq , Eq ) ]
239
- pub struct Argument < ' t > {
239
+ pub struct Argument {
240
240
pub argument_type : ArgumentType ,
241
- pub content : & ' t str ,
242
241
pub at : ( usize , usize ) ,
243
242
}
244
243
245
- impl < ' a , ' t > Argument < ' a > {
244
+ impl < ' t > Argument {
246
245
pub fn content ( & self , template : & ' t str ) -> & ' t str {
247
246
let ( start, len) = self . at ;
248
247
let end = start + len;
@@ -264,13 +263,12 @@ impl<'a, 't> Argument<'a> {
264
263
}
265
264
266
265
#[ derive( Debug , PartialEq , Eq ) ]
267
- pub struct FilterToken < ' t > {
268
- pub content : & ' t str ,
266
+ pub struct FilterToken {
269
267
pub at : ( usize , usize ) ,
270
- pub argument : Option < Argument < ' t > > ,
268
+ pub argument : Option < Argument > ,
271
269
}
272
270
273
- impl < ' a , ' t > FilterToken < ' a > {
271
+ impl < ' t > FilterToken {
274
272
pub fn content ( & self , template : & ' t str ) -> & ' t str {
275
273
let ( start, len) = self . at ;
276
274
& template[ start..start + len]
@@ -402,7 +400,7 @@ impl<'t> FilterLexer<'t> {
402
400
& mut self ,
403
401
chars : & mut std:: str:: Chars ,
404
402
end : char ,
405
- ) -> Result < Argument < ' t > , VariableLexerError > {
403
+ ) -> Result < Argument , VariableLexerError > {
406
404
let mut count = 1 ;
407
405
loop {
408
406
let next = match chars. next ( ) {
@@ -419,12 +417,10 @@ impl<'t> FilterLexer<'t> {
419
417
chars. next ( ) ;
420
418
} else if next == end {
421
419
let at = ( self . byte , count) ;
422
- let content = & self . rest [ 1 ..count - 1 ] ;
423
420
self . rest = & self . rest [ count..] ;
424
421
self . byte += count;
425
422
return Ok ( Argument {
426
423
argument_type : ArgumentType :: Text ,
427
- content,
428
424
at,
429
425
} ) ;
430
426
}
@@ -434,11 +430,11 @@ impl<'t> FilterLexer<'t> {
434
430
fn lex_translated (
435
431
& mut self ,
436
432
chars : & mut std:: str:: Chars ,
437
- ) -> Result < Argument < ' t > , VariableLexerError > {
433
+ ) -> Result < Argument , VariableLexerError > {
438
434
let start = self . byte ;
439
435
self . byte += START_TRANSLATE_LEN ;
440
436
self . rest = & self . rest [ START_TRANSLATE_LEN ..] ;
441
- let token = match chars. next ( ) {
437
+ match chars. next ( ) {
442
438
None => {
443
439
let at = ( start, START_TRANSLATE_LEN ) ;
444
440
self . rest = "" ;
@@ -458,7 +454,6 @@ impl<'t> FilterLexer<'t> {
458
454
self . rest = & self . rest [ END_TRANSLATE_LEN ..] ;
459
455
Ok ( Argument {
460
456
argument_type : ArgumentType :: TranslatedText ,
461
- content : token. content ,
462
457
at : ( start, self . byte - start) ,
463
458
} )
464
459
}
@@ -470,28 +465,27 @@ impl<'t> FilterLexer<'t> {
470
465
}
471
466
}
472
467
473
- fn lex_numeric ( & mut self ) -> Argument < ' t > {
468
+ fn lex_numeric ( & mut self ) -> Argument {
474
469
let end = self
475
470
. rest
476
471
. find ( |c : char | !( c. is_ascii_digit ( ) || c == '-' || c == '.' || c == 'e' ) )
477
472
. unwrap_or ( self . rest . len ( ) ) ;
478
473
let content = & self . rest [ ..end] ;
479
474
// Match django bug
480
- let ( content , end) = match content[ 1 ..] . find ( '-' ) {
481
- Some ( n) => ( & content [ .. n + 1 ] , n + 1 ) ,
482
- None => ( content , end) ,
475
+ let end = match content[ 1 ..] . find ( '-' ) {
476
+ Some ( n) => n + 1 ,
477
+ None => end,
483
478
} ;
484
479
// End match django bug
485
480
self . rest = & self . rest [ end..] ;
486
481
let at = ( self . byte , end) ;
487
482
self . byte += end;
488
483
Argument {
489
484
argument_type : ArgumentType :: Numeric ,
490
- content,
491
485
at,
492
486
}
493
487
}
494
- fn lex_variable_argument ( & mut self ) -> Result < Argument < ' t > , VariableLexerError > {
488
+ fn lex_variable_argument ( & mut self ) -> Result < Argument , VariableLexerError > {
495
489
let content = trim_variable ( self . rest ) ;
496
490
match check_variable_attrs ( content, self . byte ) {
497
491
Ok ( ( ) ) => { }
@@ -506,12 +500,11 @@ impl<'t> FilterLexer<'t> {
506
500
self . rest = & self . rest [ end..] ;
507
501
Ok ( Argument {
508
502
argument_type : ArgumentType :: Variable ,
509
- content,
510
503
at,
511
504
} )
512
505
}
513
506
514
- fn lex_filter ( & mut self ) -> Result < FilterToken < ' t > , VariableLexerError > {
507
+ fn lex_filter ( & mut self ) -> Result < FilterToken , VariableLexerError > {
515
508
let filter = self . rest . trim_start ( ) ;
516
509
let start = self . rest . len ( ) - filter. len ( ) ;
517
510
self . byte += start;
@@ -528,11 +521,7 @@ impl<'t> FilterLexer<'t> {
528
521
self . byte += end;
529
522
self . rest = & self . rest [ end..] ;
530
523
let argument = self . lex_argument ( ) ?;
531
- Ok ( FilterToken {
532
- content : filter,
533
- at,
534
- argument,
535
- } )
524
+ Ok ( FilterToken { at, argument } )
536
525
}
537
526
_ => {
538
527
let next = self . rest . find ( "|" ) . unwrap_or ( self . rest . len ( ) ) ;
@@ -543,7 +532,7 @@ impl<'t> FilterLexer<'t> {
543
532
}
544
533
}
545
534
546
- fn lex_argument ( & mut self ) -> Result < Option < Argument < ' t > > , VariableLexerError > {
535
+ fn lex_argument ( & mut self ) -> Result < Option < Argument > , VariableLexerError > {
547
536
let next = match ( self . rest . find ( "|" ) , self . rest . find ( ":" ) ) {
548
537
( _, None ) => return Ok ( None ) ,
549
538
( Some ( f) , Some ( a) ) if f < a => return Ok ( None ) ,
@@ -577,10 +566,10 @@ impl<'t> FilterLexer<'t> {
577
566
578
567
fn lex_remainder (
579
568
& mut self ,
580
- token : FilterToken < ' t > ,
569
+ token : FilterToken ,
581
570
remainder : & ' t str ,
582
571
start_next : usize ,
583
- ) -> Result < FilterToken < ' t > , VariableLexerError > {
572
+ ) -> Result < FilterToken , VariableLexerError > {
584
573
match remainder. find ( |c : char | !c. is_whitespace ( ) ) {
585
574
None => {
586
575
self . rest = & self . rest [ start_next..] ;
@@ -606,7 +595,7 @@ impl<'t> FilterLexer<'t> {
606
595
}
607
596
608
597
impl < ' t > Iterator for FilterLexer < ' t > {
609
- type Item = Result < FilterToken < ' t > , VariableLexerError > ;
598
+ type Item = Result < FilterToken , VariableLexerError > ;
610
599
611
600
fn next ( & mut self ) -> Option < Self :: Item > {
612
601
if self . rest . is_empty ( ) {
@@ -890,10 +879,10 @@ mod lexer_tests {
890
879
mod variable_lexer_tests {
891
880
use super :: * ;
892
881
893
- fn contents < ' t > (
894
- template : & ' t str ,
895
- tokens : Vec < Result < FilterToken < ' _ > , VariableLexerError > > ,
896
- ) -> Vec < ( & ' t str , Option < & ' t str > ) > {
882
+ fn contents (
883
+ template : & str ,
884
+ tokens : Vec < Result < FilterToken , VariableLexerError > > ,
885
+ ) -> Vec < ( & str , Option < & str > ) > {
897
886
tokens
898
887
. iter ( )
899
888
. map ( |t| match t {
@@ -956,7 +945,6 @@ mod variable_lexer_tests {
956
945
assert_eq ! (
957
946
tokens,
958
947
vec![ Ok ( FilterToken {
959
- content: "title" ,
960
948
at: ( 11 , 5 ) ,
961
949
argument: None ,
962
950
} ) ]
@@ -975,12 +963,10 @@ mod variable_lexer_tests {
975
963
vec![
976
964
Ok ( FilterToken {
977
965
argument: None ,
978
- content: "title" ,
979
966
at: ( 11 , 5 ) ,
980
967
} ) ,
981
968
Ok ( FilterToken {
982
969
argument: None ,
983
- content: "length" ,
984
970
at: ( 17 , 6 ) ,
985
971
} ) ,
986
972
]
@@ -1030,10 +1016,8 @@ mod variable_lexer_tests {
1030
1016
vec![ Ok ( FilterToken {
1031
1017
argument: Some ( Argument {
1032
1018
argument_type: ArgumentType :: Text ,
1033
- content: "foo" ,
1034
1019
at: ( 19 , 5 ) ,
1035
1020
} ) ,
1036
- content: "default" ,
1037
1021
at: ( 11 , 7 ) ,
1038
1022
} ) ]
1039
1023
) ;
@@ -1051,10 +1035,8 @@ mod variable_lexer_tests {
1051
1035
vec![ Ok ( FilterToken {
1052
1036
argument: Some ( Argument {
1053
1037
argument_type: ArgumentType :: Text ,
1054
- content: "foo" ,
1055
1038
at: ( 19 , 5 ) ,
1056
1039
} ) ,
1057
- content: "default" ,
1058
1040
at: ( 11 , 7 ) ,
1059
1041
} ) ]
1060
1042
) ;
@@ -1072,10 +1054,8 @@ mod variable_lexer_tests {
1072
1054
vec![ Ok ( FilterToken {
1073
1055
argument: Some ( Argument {
1074
1056
argument_type: ArgumentType :: Text ,
1075
- content: "foo\\ \' " ,
1076
1057
at: ( 19 , 7 ) ,
1077
1058
} ) ,
1078
- content: "default" ,
1079
1059
at: ( 11 , 7 ) ,
1080
1060
} ) ]
1081
1061
) ;
@@ -1096,10 +1076,8 @@ mod variable_lexer_tests {
1096
1076
vec![ Ok ( FilterToken {
1097
1077
argument: Some ( Argument {
1098
1078
argument_type: ArgumentType :: TranslatedText ,
1099
- content: "foo" ,
1100
1079
at: ( 19 , 8 ) ,
1101
1080
} ) ,
1102
- content: "default" ,
1103
1081
at: ( 11 , 7 ) ,
1104
1082
} ) ]
1105
1083
) ;
@@ -1117,10 +1095,8 @@ mod variable_lexer_tests {
1117
1095
vec![ Ok ( FilterToken {
1118
1096
argument: Some ( Argument {
1119
1097
argument_type: ArgumentType :: TranslatedText ,
1120
- content: "foo" ,
1121
1098
at: ( 19 , 8 ) ,
1122
1099
} ) ,
1123
- content: "default" ,
1124
1100
at: ( 11 , 7 ) ,
1125
1101
} ) ]
1126
1102
) ;
@@ -1138,10 +1114,8 @@ mod variable_lexer_tests {
1138
1114
vec![ Ok ( FilterToken {
1139
1115
argument: Some ( Argument {
1140
1116
argument_type: ArgumentType :: Numeric ,
1141
- content: "500" ,
1142
1117
at: ( 19 , 3 ) ,
1143
1118
} ) ,
1144
- content: "default" ,
1145
1119
at: ( 11 , 7 ) ,
1146
1120
} ) ]
1147
1121
) ;
@@ -1159,10 +1133,8 @@ mod variable_lexer_tests {
1159
1133
vec![ Ok ( FilterToken {
1160
1134
argument: Some ( Argument {
1161
1135
argument_type: ArgumentType :: Numeric ,
1162
- content: "-0.5" ,
1163
1136
at: ( 19 , 4 ) ,
1164
1137
} ) ,
1165
- content: "default" ,
1166
1138
at: ( 11 , 7 ) ,
1167
1139
} ) ]
1168
1140
) ;
@@ -1180,10 +1152,8 @@ mod variable_lexer_tests {
1180
1152
vec![ Ok ( FilterToken {
1181
1153
argument: Some ( Argument {
1182
1154
argument_type: ArgumentType :: Numeric ,
1183
- content: "5.2e3" ,
1184
1155
at: ( 19 , 5 ) ,
1185
1156
} ) ,
1186
- content: "default" ,
1187
1157
at: ( 11 , 7 ) ,
1188
1158
} ) ]
1189
1159
) ;
@@ -1227,10 +1197,8 @@ mod variable_lexer_tests {
1227
1197
vec![ Ok ( FilterToken {
1228
1198
argument: Some ( Argument {
1229
1199
argument_type: ArgumentType :: Variable ,
1230
- content: "spam" ,
1231
1200
at: ( 19 , 4 ) ,
1232
1201
} ) ,
1233
- content: "default" ,
1234
1202
at: ( 11 , 7 ) ,
1235
1203
} ) ]
1236
1204
) ;
@@ -1249,15 +1217,12 @@ mod variable_lexer_tests {
1249
1217
Ok ( FilterToken {
1250
1218
argument: Some ( Argument {
1251
1219
argument_type: ArgumentType :: Variable ,
1252
- content: "spam" ,
1253
1220
at: ( 19 , 4 ) ,
1254
1221
} ) ,
1255
- content: "default" ,
1256
1222
at: ( 11 , 7 ) ,
1257
1223
} ) ,
1258
1224
Ok ( FilterToken {
1259
1225
argument: None ,
1260
- content: "title" ,
1261
1226
at: ( 24 , 5 ) ,
1262
1227
} ) ,
1263
1228
]
@@ -1280,15 +1245,12 @@ mod variable_lexer_tests {
1280
1245
Ok ( FilterToken {
1281
1246
argument: Some ( Argument {
1282
1247
argument_type: ArgumentType :: Text ,
1283
- content: "spam" ,
1284
1248
at: ( 19 , 6 ) ,
1285
1249
} ) ,
1286
- content: "default" ,
1287
1250
at: ( 11 , 7 ) ,
1288
1251
} ) ,
1289
1252
Ok ( FilterToken {
1290
1253
argument: None ,
1291
- content: "title" ,
1292
1254
at: ( 26 , 5 ) ,
1293
1255
} ) ,
1294
1256
]
0 commit comments