@@ -2,7 +2,7 @@ use emmylua_code_analysis::{
22 DbIndex , LuaMemberInfo , LuaMemberKey , LuaSemanticDeclId , LuaType , LuaTypeDeclId , SemanticModel ,
33 enum_variable_is_param, get_tpl_ref_extend_type,
44} ;
5- use emmylua_parser:: { LuaAstNode , LuaAstToken , LuaIndexExpr , LuaStringToken } ;
5+ use emmylua_parser:: { LuaAstNode , LuaAstToken , LuaIndexExpr , LuaStringToken , LuaSyntaxToken } ;
66use std:: collections:: HashMap ;
77
88use crate :: handlers:: completion:: {
@@ -134,8 +134,11 @@ fn add_resolve_member_infos(
134134 return Some ( ( ) ) ;
135135 }
136136
137- let ( filtered_member_infos, overload_count) =
138- filter_member_infos ( & builder. semantic_model , member_infos) ?;
137+ let ( filtered_member_infos, overload_count) = filter_member_infos (
138+ & builder. semantic_model ,
139+ & builder. trigger_token ,
140+ member_infos,
141+ ) ?;
139142
140143 let resolve_state = get_resolve_state ( builder. semantic_model . get_db ( ) , & filtered_member_infos) ;
141144
@@ -182,20 +185,33 @@ fn add_resolve_member_infos(
182185/// 过滤成员信息,返回需要的成员列表和重载数量
183186fn filter_member_infos < ' a > (
184187 semantic_model : & SemanticModel ,
188+ trigger_token : & LuaSyntaxToken ,
185189 member_infos : & ' a Vec < LuaMemberInfo > ,
186190) -> Option < ( Vec < & ' a LuaMemberInfo > , Option < usize > ) > {
187191 if member_infos. is_empty ( ) {
188192 return None ;
189193 }
190194
195+ let visible_member_infos: Vec < & LuaMemberInfo > = member_infos
196+ . iter ( )
197+ . filter ( |member_info| {
198+ member_info. property_owner_id . as_ref ( ) . is_none_or ( |id| {
199+ semantic_model. is_semantic_visible ( trigger_token. clone ( ) , id. clone ( ) )
200+ } )
201+ } )
202+ . collect ( ) ;
203+ if visible_member_infos. is_empty ( ) {
204+ return None ;
205+ }
206+
191207 let mut file_decl_member: Option < & LuaMemberInfo > = None ;
192208 let mut member_with_owners: Vec < ( & LuaMemberInfo , Option < LuaTypeDeclId > ) > =
193- Vec :: with_capacity ( member_infos . len ( ) ) ;
209+ Vec :: with_capacity ( visible_member_infos . len ( ) ) ;
194210 let mut all_doc_function = true ;
195211 let mut overload_count = 0 ;
196212
197213 // 一次遍历收集所有信息
198- for member_info in member_infos {
214+ for member_info in visible_member_infos {
199215 let owner_id = get_owner_type_id ( semantic_model. get_db ( ) , member_info) ;
200216 member_with_owners. push ( ( member_info, owner_id. clone ( ) ) ) ;
201217
0 commit comments