@@ -27,7 +27,7 @@ pub fn build_semantic_info_hover(
2727 return build_hover_without_property ( db, document, token, typ) ;
2828 }
2929 let hover_builder = build_hover_content (
30- Some ( semantic_model) ,
30+ semantic_model,
3131 db,
3232 Some ( typ) ,
3333 semantic_info. semantic_decl . unwrap ( ) ,
@@ -57,36 +57,42 @@ fn build_hover_without_property(
5757 } )
5858}
5959
60- pub fn build_hover_content < ' a > (
61- semantic_model : Option < & ' a SemanticModel > ,
60+ pub fn build_hover_content_for_completion < ' a > (
61+ semantic_model : & ' a SemanticModel ,
62+ db : & DbIndex ,
63+ property_id : LuaSemanticDeclId ,
64+ ) -> Option < HoverBuilder < ' a > > {
65+ let typ = match property_id {
66+ LuaSemanticDeclId :: LuaDecl ( decl_id) => {
67+ let decl = db. get_decl_index ( ) . get_decl ( & decl_id) ?;
68+ Some ( decl. get_type ( ) ?. clone ( ) )
69+ }
70+ LuaSemanticDeclId :: Member ( member_id) => {
71+ let member = db. get_member_index ( ) . get_member ( & member_id) ?;
72+ Some ( member. get_decl_type ( ) )
73+ }
74+ _ => None ,
75+ } ;
76+ build_hover_content ( semantic_model, db, typ, property_id, true , None )
77+ }
78+
79+ fn build_hover_content < ' a > (
80+ semantic_model : & ' a SemanticModel ,
6281 db : & DbIndex ,
6382 typ : Option < LuaType > ,
6483 property_id : LuaSemanticDeclId ,
6584 is_completion : bool ,
6685 token : Option < LuaSyntaxToken > ,
6786) -> Option < HoverBuilder < ' a > > {
68- let semantic_model = semantic_model?;
6987 let mut builder = HoverBuilder :: new ( semantic_model, token, is_completion) ;
7088 match property_id {
7189 LuaSemanticDeclId :: LuaDecl ( decl_id) => {
72- let effective_typ = match typ {
73- Some ( t) => t,
74- None => {
75- let decl = db. get_decl_index ( ) . get_decl ( & decl_id) ?;
76- decl. get_type ( ) ?. clone ( )
77- }
78- } ;
79- build_decl_hover ( & mut builder, db, effective_typ, decl_id) ;
90+ let typ = typ?;
91+ build_decl_hover ( & mut builder, db, typ, decl_id) ;
8092 }
8193 LuaSemanticDeclId :: Member ( member_id) => {
82- let effective_typ = match typ {
83- Some ( t) => t,
84- None => {
85- let member = db. get_member_index ( ) . get_member ( & member_id) ?;
86- member. get_decl_type ( ) . clone ( )
87- }
88- } ;
89- build_member_hover ( & mut builder, db, effective_typ, member_id) ;
94+ let typ = typ?;
95+ build_member_hover ( & mut builder, db, typ, member_id) ;
9096 }
9197 LuaSemanticDeclId :: TypeDecl ( type_decl_id) => {
9298 build_type_decl_hover ( & mut builder, db, type_decl_id) ;
0 commit comments