@@ -58,7 +58,11 @@ impl<'a> RenderContext<'a> {
5858 }
5959
6060 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+ }
6266 }
6367
6468 fn is_deprecated ( & self , def : impl HasAttrs ) -> bool {
@@ -247,6 +251,7 @@ fn render_resolution_simple_(
247251
248252 let local_name = local_name. to_smol_str ( ) ;
249253 let mut item = CompletionItem :: new ( kind, ctx. source_range ( ) , local_name. clone ( ) ) ;
254+ item. set_relevance ( ctx. completion_relevance ( ) ) ;
250255 if let ScopeDef :: Local ( local) = resolution {
251256 let ty = local. ty ( db) ;
252257 if !ty. is_unknown ( ) {
@@ -446,6 +451,7 @@ mod tests {
446451 "snippet" ,
447452 ) ,
448453 ( relevance. is_op_method, "op_method" ) ,
454+ ( relevance. requires_import, "requires_import" ) ,
449455 ]
450456 . into_iter ( )
451457 . filter_map ( |( cond, desc) | if cond { Some ( desc) } else { None } )
@@ -626,6 +632,7 @@ fn main() { let _: m::Spam = S$0 }
626632 is_local: false,
627633 is_item_from_trait: false,
628634 is_name_already_imported: false,
635+ requires_import: false,
629636 is_op_method: false,
630637 is_private_editable: false,
631638 postfix_match: None,
@@ -650,6 +657,7 @@ fn main() { let _: m::Spam = S$0 }
650657 is_local: false,
651658 is_item_from_trait: false,
652659 is_name_already_imported: false,
660+ requires_import: false,
653661 is_op_method: false,
654662 is_private_editable: false,
655663 postfix_match: None,
@@ -740,6 +748,7 @@ fn foo() { A { the$0 } }
740748 is_local: false,
741749 is_item_from_trait: false,
742750 is_name_already_imported: false,
751+ requires_import: false,
743752 is_op_method: false,
744753 is_private_editable: false,
745754 postfix_match: None,
@@ -1579,7 +1588,7 @@ fn main() {
15791588 & [ CompletionItemKind :: Snippet , CompletionItemKind :: Method ] ,
15801589 expect ! [ [ r#"
15811590 sn not [snippet]
1582- me not() (use ops::Not) [type_could_unify]
1591+ me not() (use ops::Not) [type_could_unify+requires_import ]
15831592 sn if []
15841593 sn while []
15851594 sn ref []
@@ -1621,4 +1630,32 @@ fn main() {
16211630 "# ] ] ,
16221631 ) ;
16231632 }
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+ }
16241661}
0 commit comments