@@ -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
}
@@ -1496,8 +1494,7 @@ impl<'a> Resolver<'a> {
1496
1494
& import_suggestions,
1497
1495
Instead :: No ,
1498
1496
FoundUse :: Yes ,
1499
- IsPattern :: No ,
1500
- IsImport :: No ,
1497
+ DiagnosticMode :: Normal ,
1501
1498
vec ! [ ] ,
1502
1499
) ;
1503
1500
@@ -2458,18 +2455,13 @@ enum FoundUse {
2458
2455
No ,
2459
2456
}
2460
2457
2461
- /// Whether a binding is part of a pattern or an expression. Used for diagnostics.
2462
- enum IsPattern {
2458
+ /// Whether a binding is part of a pattern or a use statement. Used for diagnostics.
2459
+ enum DiagnosticMode {
2460
+ Normal ,
2463
2461
/// The binding is part of a pattern
2464
- Yes ,
2465
- /// The binding is part of an expression
2466
- No ,
2467
- }
2468
-
2469
- /// Whether a binding is part of a use statement. Used for diagnostics.
2470
- enum IsImport {
2471
- Yes ,
2472
- No ,
2462
+ Pattern ,
2463
+ /// The binding is part of a use statement
2464
+ Import ,
2473
2465
}
2474
2466
2475
2467
pub ( crate ) fn import_candidates (
@@ -2488,8 +2480,7 @@ pub(crate) fn import_candidates(
2488
2480
candidates,
2489
2481
Instead :: Yes ,
2490
2482
FoundUse :: Yes ,
2491
- IsPattern :: No ,
2492
- IsImport :: Yes ,
2483
+ DiagnosticMode :: Import ,
2493
2484
vec ! [ ] ,
2494
2485
) ;
2495
2486
}
@@ -2506,8 +2497,7 @@ fn show_candidates(
2506
2497
candidates : & [ ImportSuggestion ] ,
2507
2498
instead : Instead ,
2508
2499
found_use : FoundUse ,
2509
- is_pattern : IsPattern ,
2510
- is_import : IsImport ,
2500
+ mode : DiagnosticMode ,
2511
2501
path : Vec < Segment > ,
2512
2502
) {
2513
2503
if candidates. is_empty ( ) {
@@ -2542,7 +2532,7 @@ fn show_candidates(
2542
2532
} ;
2543
2533
2544
2534
let instead = if let Instead :: Yes = instead { " instead" } else { "" } ;
2545
- let mut msg = if let IsPattern :: Yes = is_pattern {
2535
+ let mut msg = if let DiagnosticMode :: Pattern = mode {
2546
2536
format ! (
2547
2537
"if you meant to match on {}{}{}, use the full path in the pattern" ,
2548
2538
kind, instead, name
@@ -2555,19 +2545,24 @@ fn show_candidates(
2555
2545
err. note ( note) ;
2556
2546
}
2557
2547
2558
- if let ( IsPattern :: Yes , Some ( span) ) = ( is_pattern, use_placement_span) {
2559
- err. span_suggestions (
2560
- span,
2561
- & msg,
2562
- accessible_path_strings. into_iter ( ) . map ( |a| a. 0 ) ,
2563
- Applicability :: MaybeIncorrect ,
2564
- ) ;
2565
- } else if let Some ( span) = use_placement_span {
2548
+ if let Some ( span) = use_placement_span {
2549
+ let add_use = match mode {
2550
+ DiagnosticMode :: Pattern => {
2551
+ err. span_suggestions (
2552
+ span,
2553
+ & msg,
2554
+ accessible_path_strings. into_iter ( ) . map ( |a| a. 0 ) ,
2555
+ Applicability :: MaybeIncorrect ,
2556
+ ) ;
2557
+ return ;
2558
+ }
2559
+ DiagnosticMode :: Import => "" ,
2560
+ DiagnosticMode :: Normal => "use " ,
2561
+ } ;
2566
2562
for candidate in & mut accessible_path_strings {
2567
2563
// produce an additional newline to separate the new use statement
2568
2564
// from the directly following item.
2569
2565
let additional_newline = if let FoundUse :: Yes = found_use { "" } else { "\n " } ;
2570
- let add_use = if let IsImport :: Yes = is_import { "" } else { "use " } ;
2571
2566
candidate. 0 = format ! ( "{}{};\n {}" , add_use, & candidate. 0 , additional_newline) ;
2572
2567
}
2573
2568
@@ -2598,19 +2593,22 @@ fn show_candidates(
2598
2593
2599
2594
err. note ( & msg) ;
2600
2595
}
2601
- } else if matches ! ( is_import , IsImport :: No ) {
2596
+ } else if ! matches ! ( mode , DiagnosticMode :: Import ) {
2602
2597
assert ! ( !inaccessible_path_strings. is_empty( ) ) ;
2603
2598
2604
- let prefix =
2605
- if let IsPattern :: Yes = is_pattern { "you might have meant to match on " } else { "" } ;
2599
+ let prefix = if let DiagnosticMode :: Pattern = mode {
2600
+ "you might have meant to match on "
2601
+ } else {
2602
+ ""
2603
+ } ;
2606
2604
if inaccessible_path_strings. len ( ) == 1 {
2607
2605
let ( name, descr, def_id, note) = & inaccessible_path_strings[ 0 ] ;
2608
2606
let msg = format ! (
2609
2607
"{}{} `{}`{} exists but is inaccessible" ,
2610
2608
prefix,
2611
2609
descr,
2612
2610
name,
2613
- if let IsPattern :: Yes = is_pattern { ", which" } else { "" }
2611
+ if let DiagnosticMode :: Pattern = mode { ", which" } else { "" }
2614
2612
) ;
2615
2613
2616
2614
if let Some ( local_def_id) = def_id. and_then ( |did| did. as_local ( ) ) {
0 commit comments