1
- use hir:: { self , HasCrate , HasSource } ;
2
- use syntax:: ast:: { self , make, AstNode , HasGenericParams , HasName , HasVisibility } ;
1
+ use hir:: { self , HasCrate , HasSource , HasVisibility } ;
2
+ use syntax:: ast:: { self , make, AstNode , HasGenericParams , HasName , HasVisibility as _ } ;
3
3
4
4
use crate :: {
5
5
utils:: { convert_param_list_to_arg_list, find_struct_impl, render_snippet, Cursor } ,
@@ -45,6 +45,7 @@ use syntax::ast::edit::AstNodeEdit;
45
45
pub ( crate ) fn generate_delegate_methods ( acc : & mut Assists , ctx : & AssistContext ) -> Option < ( ) > {
46
46
let strukt = ctx. find_node_at_offset :: < ast:: Struct > ( ) ?;
47
47
let strukt_name = strukt. name ( ) ?;
48
+ let current_module = ctx. sema . scope ( strukt. syntax ( ) ) . module ( ) ?;
48
49
49
50
let ( field_name, field_ty) = match ctx. find_node_at_offset :: < ast:: RecordField > ( ) {
50
51
Some ( field) => {
@@ -66,7 +67,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext)
66
67
let mut methods = vec ! [ ] ;
67
68
sema_field_ty. iterate_assoc_items ( ctx. db ( ) , krate, |item| {
68
69
if let hir:: AssocItem :: Function ( f) = item {
69
- if f. self_param ( ctx. db ( ) ) . is_some ( ) {
70
+ if f. self_param ( ctx. db ( ) ) . is_some ( ) && f . is_visible_from ( ctx . db ( ) , current_module ) {
70
71
methods. push ( f)
71
72
}
72
73
}
@@ -170,7 +171,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext)
170
171
171
172
#[ cfg( test) ]
172
173
mod tests {
173
- use crate :: tests:: check_assist;
174
+ use crate :: tests:: { check_assist, check_assist_not_applicable } ;
174
175
175
176
use super :: * ;
176
177
@@ -311,4 +312,24 @@ impl<T> Person<T> {
311
312
}"# ,
312
313
) ;
313
314
}
315
+
316
+ #[ test]
317
+ fn test_generate_delegate_visibility ( ) {
318
+ check_assist_not_applicable (
319
+ generate_delegate_methods,
320
+ r#"
321
+ mod m {
322
+ pub struct Age(u8);
323
+ impl Age {
324
+ fn age(&self) -> u8 {
325
+ self.0
326
+ }
327
+ }
328
+ }
329
+
330
+ struct Person {
331
+ ag$0e: m::Age,
332
+ }"# ,
333
+ )
334
+ }
314
335
}
0 commit comments