@@ -232,6 +232,23 @@ fn highlight_references(
232
232
}
233
233
}
234
234
235
+ // highlight the tail expr of the labelled block
236
+ if matches ! ( def, Definition :: Label ( _) ) {
237
+ let label = token. parent_ancestors ( ) . nth ( 1 ) . and_then ( ast:: Label :: cast) ;
238
+ if let Some ( block) =
239
+ label. and_then ( |label| label. syntax ( ) . parent ( ) ) . and_then ( ast:: BlockExpr :: cast)
240
+ {
241
+ for_each_tail_expr ( & block. into ( ) , & mut |tail| {
242
+ if !matches ! ( tail, ast:: Expr :: BreakExpr ( _) ) {
243
+ res. insert ( HighlightedRange {
244
+ range : tail. syntax ( ) . text_range ( ) ,
245
+ category : ReferenceCategory :: empty ( ) ,
246
+ } ) ;
247
+ }
248
+ } ) ;
249
+ }
250
+ }
251
+
235
252
// highlight the defs themselves
236
253
match def {
237
254
Definition :: Local ( local) => {
@@ -446,6 +463,18 @@ pub(crate) fn highlight_break_points(
446
463
push_to_highlights ( file_id, text_range) ;
447
464
} ) ;
448
465
466
+ if matches ! ( expr, ast:: Expr :: BlockExpr ( _) ) {
467
+ for_each_tail_expr ( & expr, & mut |tail| {
468
+ if matches ! ( tail, ast:: Expr :: BreakExpr ( _) ) {
469
+ return ;
470
+ }
471
+
472
+ let file_id = sema. hir_file_for ( tail. syntax ( ) ) ;
473
+ let range = tail. syntax ( ) . text_range ( ) ;
474
+ push_to_highlights ( file_id, Some ( range) ) ;
475
+ } ) ;
476
+ }
477
+
449
478
Some ( highlights)
450
479
}
451
480
@@ -2072,4 +2101,41 @@ pub unsafe fn bootstrap() -> ! {
2072
2101
"# ,
2073
2102
)
2074
2103
}
2104
+
2105
+ #[ test]
2106
+ fn labeled_block_tail_expr ( ) {
2107
+ check (
2108
+ r#"
2109
+ fn foo() {
2110
+ 'a: {
2111
+ // ^^^
2112
+ if true { break$0 'a 0; }
2113
+ // ^^^^^^^^
2114
+ 5
2115
+ // ^
2116
+ }
2117
+ }
2118
+ "# ,
2119
+ ) ;
2120
+ }
2121
+
2122
+ #[ test]
2123
+ fn labeled_block_tail_expr_2 ( ) {
2124
+ check (
2125
+ r#"
2126
+ fn foo() {
2127
+ let _ = 'b$0lk: {
2128
+ // ^^^^
2129
+ let x = 1;
2130
+ if true { break 'blk 42; }
2131
+ // ^^^^
2132
+ if false { break 'blk 24; }
2133
+ // ^^^^
2134
+ 100
2135
+ // ^^^
2136
+ };
2137
+ }
2138
+ "# ,
2139
+ ) ;
2140
+ }
2075
2141
}
0 commit comments