@@ -113,11 +113,11 @@ fn build_hover_content<'a>(
113113 match property_id {
114114 LuaSemanticDeclId :: LuaDecl ( decl_id) => {
115115 let typ = typ?;
116- build_decl_hover ( & mut builder, db, typ, decl_id) ;
116+ build_decl_hover ( & mut builder, db, typ, decl_id, is_completion ) ? ;
117117 }
118118 LuaSemanticDeclId :: Member ( member_id) => {
119119 let typ = typ?;
120- build_member_hover ( & mut builder, db, typ, member_id) ;
120+ build_member_hover ( & mut builder, db, typ, member_id, is_completion ) ;
121121 }
122122 LuaSemanticDeclId :: TypeDecl ( type_decl_id) => {
123123 build_type_decl_hover ( & mut builder, db, type_decl_id) ;
@@ -132,6 +132,7 @@ fn build_decl_hover(
132132 db : & DbIndex ,
133133 typ : LuaType ,
134134 decl_id : LuaDeclId ,
135+ is_completion : bool ,
135136) -> Option < ( ) > {
136137 let decl = db. get_decl_index ( ) . get_decl ( & decl_id) ?;
137138
@@ -141,8 +142,12 @@ fn build_decl_hover(
141142 replace_semantic_type ( & mut semantic_decls, & typ) ;
142143 // 处理类型签名
143144 if is_function ( & typ) {
145+ if is_completion {
146+ let decl_semantic_id = LuaSemanticDeclId :: LuaDecl ( decl_id) ;
147+ semantic_decls. retain ( |( decl, _) | decl == & decl_semantic_id) ;
148+ }
144149 // 如果找到了那么需要将它移动到末尾, 因为尾部最优先显示
145- if let Some ( pos) = semantic_decls
150+ else if let Some ( pos) = semantic_decls
146151 . iter ( )
147152 . position ( |( _, origin_type) | origin_type == & typ)
148153 {
@@ -203,7 +208,9 @@ fn build_decl_hover(
203208 let mut semantic_decl_set = HashSet :: new ( ) ;
204209 let decl_decl = LuaSemanticDeclId :: LuaDecl ( decl_id) ;
205210 semantic_decl_set. insert ( & decl_decl) ;
206- semantic_decl_set. extend ( semantic_decls. iter ( ) . map ( |( decl, _) | decl) ) ;
211+ if !is_completion {
212+ semantic_decl_set. extend ( semantic_decls. iter ( ) . map ( |( decl, _) | decl) ) ;
213+ }
207214 for semantic_decl in semantic_decl_set {
208215 builder. add_description ( semantic_decl) ;
209216 }
@@ -217,6 +224,7 @@ fn build_member_hover(
217224 db : & DbIndex ,
218225 typ : LuaType ,
219226 member_id : LuaMemberId ,
227+ is_completion : bool ,
220228) -> Option < ( ) > {
221229 let member = db. get_member_index ( ) . get_member ( & member_id) ?;
222230 let mut semantic_decls =
@@ -231,8 +239,12 @@ fn build_member_hover(
231239 } ;
232240
233241 if is_function ( & typ) {
242+ if is_completion {
243+ let member_semantic_id = LuaSemanticDeclId :: Member ( member_id) ;
244+ semantic_decls. retain ( |( decl, _) | decl == & member_semantic_id) ;
245+ }
234246 // 如果找到了那么需要将它移动到末尾, 因为尾部最优先显示
235- if let Some ( pos) = semantic_decls
247+ else if let Some ( pos) = semantic_decls
236248 . iter ( )
237249 . position ( |( _, origin_type) | origin_type == & typ)
238250 {
@@ -276,7 +288,9 @@ fn build_member_hover(
276288 let mut semantic_decl_set = HashSet :: new ( ) ;
277289 let member_decl = LuaSemanticDeclId :: Member ( member. get_id ( ) ) ;
278290 semantic_decl_set. insert ( & member_decl) ;
279- semantic_decl_set. extend ( semantic_decls. iter ( ) . map ( |( decl, _) | decl) ) ;
291+ if !is_completion {
292+ semantic_decl_set. extend ( semantic_decls. iter ( ) . map ( |( decl, _) | decl) ) ;
293+ }
280294 for semantic_decl in semantic_decl_set {
281295 builder. add_description ( semantic_decl) ;
282296 }
0 commit comments