@@ -51,45 +51,6 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
51
51
}
52
52
}
53
53
54
- fn eof_err ( & mut self ) -> Diag < ' psess > {
55
- let msg = "this file contains an unclosed delimiter" ;
56
- let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
57
-
58
- let unclosed_delimiter_show_limit = 5 ;
59
- let len = usize:: min ( unclosed_delimiter_show_limit, self . diag_info . open_delimiters . len ( ) ) ;
60
- for & ( _, span) in & self . diag_info . open_delimiters [ ..len] {
61
- err. span_label ( span, "unclosed delimiter" ) ;
62
- self . diag_info . unmatched_delims . push ( UnmatchedDelim {
63
- found_delim : None ,
64
- found_span : self . token . span ,
65
- unclosed_span : Some ( span) ,
66
- candidate_span : None ,
67
- } ) ;
68
- }
69
-
70
- if let Some ( ( _, span) ) = self . diag_info . open_delimiters . get ( unclosed_delimiter_show_limit)
71
- && self . diag_info . open_delimiters . len ( ) >= unclosed_delimiter_show_limit + 2
72
- {
73
- err. span_label (
74
- * span,
75
- format ! (
76
- "another {} unclosed delimiters begin from here" ,
77
- self . diag_info. open_delimiters. len( ) - unclosed_delimiter_show_limit
78
- ) ,
79
- ) ;
80
- }
81
-
82
- if let Some ( ( delim, _) ) = self . diag_info . open_delimiters . last ( ) {
83
- report_suspicious_mismatch_block (
84
- & mut err,
85
- & self . diag_info ,
86
- self . psess . source_map ( ) ,
87
- * delim,
88
- )
89
- }
90
- err
91
- }
92
-
93
54
fn lex_token_tree_open_delim (
94
55
& mut self ,
95
56
open_delim : Delimiter ,
@@ -206,13 +167,7 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
206
167
} else if let Some ( glued) = self . token . glue ( & next_tok) {
207
168
self . token = glued;
208
169
} else {
209
- let this_spacing = if next_tok. is_punct ( ) {
210
- Spacing :: Joint
211
- } else if next_tok == token:: Eof {
212
- Spacing :: Alone
213
- } else {
214
- Spacing :: JointHidden
215
- } ;
170
+ let this_spacing = self . calculate_spacing ( & next_tok) ;
216
171
break ( this_spacing, next_tok) ;
217
172
}
218
173
} ;
@@ -223,23 +178,64 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
223
178
// Cut-down version of `bump` used when the token kind is known in advance.
224
179
fn bump_minimal ( & mut self ) -> Spacing {
225
180
let ( next_tok, is_next_tok_preceded_by_whitespace) = self . next_token_from_cursor ( ) ;
226
-
227
181
let this_spacing = if is_next_tok_preceded_by_whitespace {
228
182
Spacing :: Alone
229
183
} else {
230
- if next_tok. is_punct ( ) {
231
- Spacing :: Joint
232
- } else if next_tok == token:: Eof {
233
- Spacing :: Alone
234
- } else {
235
- Spacing :: JointHidden
236
- }
184
+ self . calculate_spacing ( & next_tok)
237
185
} ;
238
-
239
186
self . token = next_tok;
240
187
this_spacing
241
188
}
242
189
190
+ fn calculate_spacing ( & self , next_tok : & Token ) -> Spacing {
191
+ if next_tok. is_punct ( ) {
192
+ Spacing :: Joint
193
+ } else if * next_tok == token:: Eof {
194
+ Spacing :: Alone
195
+ } else {
196
+ Spacing :: JointHidden
197
+ }
198
+ }
199
+
200
+ fn eof_err ( & mut self ) -> Diag < ' psess > {
201
+ const UNCLOSED_DELIMITER_SHOW_LIMIT : usize = 5 ;
202
+ let msg = "this file contains an unclosed delimiter" ;
203
+ let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
204
+
205
+ let len = usize:: min ( UNCLOSED_DELIMITER_SHOW_LIMIT , self . diag_info . open_delimiters . len ( ) ) ;
206
+ for & ( _, span) in & self . diag_info . open_delimiters [ ..len] {
207
+ err. span_label ( span, "unclosed delimiter" ) ;
208
+ self . diag_info . unmatched_delims . push ( UnmatchedDelim {
209
+ found_delim : None ,
210
+ found_span : self . token . span ,
211
+ unclosed_span : Some ( span) ,
212
+ candidate_span : None ,
213
+ } ) ;
214
+ }
215
+
216
+ if let Some ( ( _, span) ) = self . diag_info . open_delimiters . get ( UNCLOSED_DELIMITER_SHOW_LIMIT )
217
+ && self . diag_info . open_delimiters . len ( ) >= UNCLOSED_DELIMITER_SHOW_LIMIT + 2
218
+ {
219
+ err. span_label (
220
+ * span,
221
+ format ! (
222
+ "another {} unclosed delimiters begin from here" ,
223
+ self . diag_info. open_delimiters. len( ) - UNCLOSED_DELIMITER_SHOW_LIMIT
224
+ ) ,
225
+ ) ;
226
+ }
227
+
228
+ if let Some ( ( delim, _) ) = self . diag_info . open_delimiters . last ( ) {
229
+ report_suspicious_mismatch_block (
230
+ & mut err,
231
+ & self . diag_info ,
232
+ self . psess . source_map ( ) ,
233
+ * delim,
234
+ )
235
+ }
236
+ err
237
+ }
238
+
243
239
fn close_delim_err ( & mut self , delim : Delimiter ) -> Diag < ' psess > {
244
240
// An unexpected closing delimiter (i.e., there is no matching opening delimiter).
245
241
let token_str = token_to_string ( & self . token ) ;
0 commit comments