Skip to content

Commit 7d49bc7

Browse files
committed
fix overload completion detail
1 parent 67c4e5c commit 7d49bc7

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

crates/emmylua_ls/src/handlers/hover/build_hover.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)