@@ -58,7 +58,11 @@ impl<'a> RenderContext<'a> {
58
58
}
59
59
60
60
fn completion_relevance ( & self ) -> CompletionRelevance {
61
- CompletionRelevance { is_private_editable : self . is_private_editable , ..Default :: default ( ) }
61
+ CompletionRelevance {
62
+ is_private_editable : self . is_private_editable ,
63
+ requires_import : self . import_to_add . is_some ( ) ,
64
+ ..Default :: default ( )
65
+ }
62
66
}
63
67
64
68
fn is_deprecated ( & self , def : impl HasAttrs ) -> bool {
@@ -247,6 +251,7 @@ fn render_resolution_simple_(
247
251
248
252
let local_name = local_name. to_smol_str ( ) ;
249
253
let mut item = CompletionItem :: new ( kind, ctx. source_range ( ) , local_name. clone ( ) ) ;
254
+ item. set_relevance ( ctx. completion_relevance ( ) ) ;
250
255
if let ScopeDef :: Local ( local) = resolution {
251
256
let ty = local. ty ( db) ;
252
257
if !ty. is_unknown ( ) {
@@ -446,6 +451,7 @@ mod tests {
446
451
"snippet" ,
447
452
) ,
448
453
( relevance. is_op_method, "op_method" ) ,
454
+ ( relevance. requires_import, "requires_import" ) ,
449
455
]
450
456
. into_iter ( )
451
457
. filter_map ( |( cond, desc) | if cond { Some ( desc) } else { None } )
@@ -626,6 +632,7 @@ fn main() { let _: m::Spam = S$0 }
626
632
is_local: false,
627
633
is_item_from_trait: false,
628
634
is_name_already_imported: false,
635
+ requires_import: false,
629
636
is_op_method: false,
630
637
is_private_editable: false,
631
638
postfix_match: None,
@@ -650,6 +657,7 @@ fn main() { let _: m::Spam = S$0 }
650
657
is_local: false,
651
658
is_item_from_trait: false,
652
659
is_name_already_imported: false,
660
+ requires_import: false,
653
661
is_op_method: false,
654
662
is_private_editable: false,
655
663
postfix_match: None,
@@ -740,6 +748,7 @@ fn foo() { A { the$0 } }
740
748
is_local: false,
741
749
is_item_from_trait: false,
742
750
is_name_already_imported: false,
751
+ requires_import: false,
743
752
is_op_method: false,
744
753
is_private_editable: false,
745
754
postfix_match: None,
@@ -1579,7 +1588,7 @@ fn main() {
1579
1588
& [ CompletionItemKind :: Snippet , CompletionItemKind :: Method ] ,
1580
1589
expect ! [ [ r#"
1581
1590
sn not [snippet]
1582
- me not() (use ops::Not) [type_could_unify]
1591
+ me not() (use ops::Not) [type_could_unify+requires_import ]
1583
1592
sn if []
1584
1593
sn while []
1585
1594
sn ref []
@@ -1621,4 +1630,32 @@ fn main() {
1621
1630
"# ] ] ,
1622
1631
) ;
1623
1632
}
1633
+
1634
+ #[ test]
1635
+ fn flyimport_reduced_relevance ( ) {
1636
+ check_relevance (
1637
+ r#"
1638
+ mod std {
1639
+ pub mod io {
1640
+ pub trait BufRead {}
1641
+ pub struct BufReader;
1642
+ pub struct BufWriter;
1643
+ }
1644
+ }
1645
+ struct Buffer;
1646
+
1647
+ fn f() {
1648
+ Buf$0
1649
+ }
1650
+ "# ,
1651
+ expect ! [ [ r#"
1652
+ md std []
1653
+ st Buffer []
1654
+ fn f() []
1655
+ tt BufRead (use std::io::BufRead) [requires_import]
1656
+ st BufReader (use std::io::BufReader) [requires_import]
1657
+ st BufWriter (use std::io::BufWriter) [requires_import]
1658
+ "# ] ] ,
1659
+ ) ;
1660
+ }
1624
1661
}
0 commit comments