@@ -139,8 +139,7 @@ impl<'a> Resolver<'a> {
139
139
& candidates,
140
140
if instead { Instead :: Yes } else { Instead :: No } ,
141
141
found_use,
142
- IsPattern :: No ,
143
- IsImport :: No ,
142
+ DiagnosticMode :: Normal ,
144
143
path,
145
144
) ;
146
145
err. emit ( ) ;
@@ -699,8 +698,7 @@ impl<'a> Resolver<'a> {
699
698
& import_suggestions,
700
699
Instead :: No ,
701
700
FoundUse :: Yes ,
702
- IsPattern :: Yes ,
703
- IsImport :: No ,
701
+ DiagnosticMode :: Pattern ,
704
702
vec ! [ ] ,
705
703
) ;
706
704
}
@@ -1483,8 +1481,7 @@ impl<'a> Resolver<'a> {
1483
1481
& import_suggestions,
1484
1482
Instead :: No ,
1485
1483
FoundUse :: Yes ,
1486
- IsPattern :: No ,
1487
- IsImport :: No ,
1484
+ DiagnosticMode :: Normal ,
1488
1485
vec ! [ ] ,
1489
1486
) ;
1490
1487
@@ -2445,18 +2442,13 @@ enum FoundUse {
2445
2442
No ,
2446
2443
}
2447
2444
2448
- /// Whether a binding is part of a pattern or an expression. Used for diagnostics.
2449
- enum IsPattern {
2445
+ /// Whether a binding is part of a pattern or a use statement. Used for diagnostics.
2446
+ enum DiagnosticMode {
2447
+ Normal ,
2450
2448
/// The binding is part of a pattern
2451
- Yes ,
2452
- /// The binding is part of an expression
2453
- No ,
2454
- }
2455
-
2456
- /// Whether a binding is part of a use statement. Used for diagnostics.
2457
- enum IsImport {
2458
- Yes ,
2459
- No ,
2449
+ Pattern ,
2450
+ /// The binding is part of a use statement
2451
+ Import ,
2460
2452
}
2461
2453
2462
2454
pub ( crate ) fn import_candidates (
@@ -2475,8 +2467,7 @@ pub(crate) fn import_candidates(
2475
2467
candidates,
2476
2468
Instead :: Yes ,
2477
2469
FoundUse :: Yes ,
2478
- IsPattern :: No ,
2479
- IsImport :: Yes ,
2470
+ DiagnosticMode :: Import ,
2480
2471
vec ! [ ] ,
2481
2472
) ;
2482
2473
}
@@ -2493,8 +2484,7 @@ fn show_candidates(
2493
2484
candidates : & [ ImportSuggestion ] ,
2494
2485
instead : Instead ,
2495
2486
found_use : FoundUse ,
2496
- is_pattern : IsPattern ,
2497
- is_import : IsImport ,
2487
+ mode : DiagnosticMode ,
2498
2488
path : Vec < Segment > ,
2499
2489
) {
2500
2490
if candidates. is_empty ( ) {
@@ -2529,7 +2519,7 @@ fn show_candidates(
2529
2519
} ;
2530
2520
2531
2521
let instead = if let Instead :: Yes = instead { " instead" } else { "" } ;
2532
- let mut msg = if let IsPattern :: Yes = is_pattern {
2522
+ let mut msg = if let DiagnosticMode :: Pattern = mode {
2533
2523
format ! (
2534
2524
"if you meant to match on {}{}{}, use the full path in the pattern" ,
2535
2525
kind, instead, name
@@ -2542,19 +2532,24 @@ fn show_candidates(
2542
2532
err. note ( note) ;
2543
2533
}
2544
2534
2545
- if let ( IsPattern :: Yes , Some ( span) ) = ( is_pattern, use_placement_span) {
2546
- err. span_suggestions (
2547
- span,
2548
- & msg,
2549
- accessible_path_strings. into_iter ( ) . map ( |a| a. 0 ) ,
2550
- Applicability :: MaybeIncorrect ,
2551
- ) ;
2552
- } else if let Some ( span) = use_placement_span {
2535
+ if let Some ( span) = use_placement_span {
2536
+ let add_use = match mode {
2537
+ DiagnosticMode :: Pattern => {
2538
+ err. span_suggestions (
2539
+ span,
2540
+ & msg,
2541
+ accessible_path_strings. into_iter ( ) . map ( |a| a. 0 ) ,
2542
+ Applicability :: MaybeIncorrect ,
2543
+ ) ;
2544
+ return ;
2545
+ }
2546
+ DiagnosticMode :: Import => "" ,
2547
+ DiagnosticMode :: Normal => "use " ,
2548
+ } ;
2553
2549
for candidate in & mut accessible_path_strings {
2554
2550
// produce an additional newline to separate the new use statement
2555
2551
// from the directly following item.
2556
2552
let additional_newline = if let FoundUse :: Yes = found_use { "" } else { "\n " } ;
2557
- let add_use = if let IsImport :: Yes = is_import { "" } else { "use " } ;
2558
2553
candidate. 0 = format ! ( "{}{};\n {}" , add_use, & candidate. 0 , additional_newline) ;
2559
2554
}
2560
2555
@@ -2585,19 +2580,22 @@ fn show_candidates(
2585
2580
2586
2581
err. note ( & msg) ;
2587
2582
}
2588
- } else if matches ! ( is_import , IsImport :: No ) {
2583
+ } else if ! matches ! ( mode , DiagnosticMode :: Import ) {
2589
2584
assert ! ( !inaccessible_path_strings. is_empty( ) ) ;
2590
2585
2591
- let prefix =
2592
- if let IsPattern :: Yes = is_pattern { "you might have meant to match on " } else { "" } ;
2586
+ let prefix = if let DiagnosticMode :: Pattern = mode {
2587
+ "you might have meant to match on "
2588
+ } else {
2589
+ ""
2590
+ } ;
2593
2591
if inaccessible_path_strings. len ( ) == 1 {
2594
2592
let ( name, descr, def_id, note) = & inaccessible_path_strings[ 0 ] ;
2595
2593
let msg = format ! (
2596
2594
"{}{} `{}`{} exists but is inaccessible" ,
2597
2595
prefix,
2598
2596
descr,
2599
2597
name,
2600
- if let IsPattern :: Yes = is_pattern { ", which" } else { "" }
2598
+ if let DiagnosticMode :: Pattern = mode { ", which" } else { "" }
2601
2599
) ;
2602
2600
2603
2601
if let Some ( local_def_id) = def_id. and_then ( |did| did. as_local ( ) ) {
0 commit comments