Skip to content

Commit 492c78f

Browse files
committed
optimize hover function
1 parent 7c6bd04 commit 492c78f

File tree

3 files changed

+54
-32
lines changed

3 files changed

+54
-32
lines changed

crates/emmylua_code_analysis/src/db_index/type/humanize_type.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ where
185185
{
186186
let types = union.get_types();
187187
let num = match level {
188-
RenderLevel::Detailed => 10,
189-
RenderLevel::Simple => 8,
188+
RenderLevel::Detailed => 8,
189+
RenderLevel::Simple => 6,
190190
RenderLevel::Normal => 4,
191191
RenderLevel::Brief => 2,
192192
RenderLevel::Minimal => {

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

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub fn hover_function_type(
4949
function_member,
5050
func_name,
5151
is_local,
52+
false,
5253
)
5354
.unwrap_or_else(|| {
5455
builder.signature_overload = None;
@@ -103,6 +104,7 @@ fn hover_union_function_type(
103104
function_member,
104105
func_name,
105106
false,
107+
true,
106108
) {
107109
overloads.push(type_description);
108110
}
@@ -197,8 +199,12 @@ fn hover_signature_type(
197199
owner_member: Option<&LuaMember>,
198200
func_name: &str,
199201
is_local: bool,
202+
is_form_union: bool,
200203
) -> Option<String> {
201204
let signature = db.get_signature_index().get(&signature_id)?;
205+
if is_form_union && signature.param_docs.is_empty() {
206+
return None;
207+
}
202208
let call_signature = builder.get_call_signature();
203209

204210
let mut type_label = "function ";
@@ -359,42 +365,43 @@ fn build_signature_rets(
359365
}
360366
};
361367
result.push_str(rets.as_str());
368+
return result;
369+
}
370+
371+
let rets = if !overload_rets_string.is_empty() {
372+
overload_rets_string
362373
} else {
363-
let rets = if !overload_rets_string.is_empty() {
364-
overload_rets_string
374+
let rets = &signature.return_docs;
375+
if rets.is_empty() {
376+
"".to_string()
365377
} else {
366-
let rets = &signature.return_docs;
367-
if rets.is_empty() {
368-
"".to_string()
369-
} else {
370-
let mut rets_string_multiline = String::new();
371-
rets_string_multiline.push_str("\n");
378+
let mut rets_string_multiline = String::new();
379+
rets_string_multiline.push_str("\n");
372380

373-
for (i, ret) in rets.iter().enumerate() {
374-
let type_text = build_signature_ret_type(builder, ret, i);
375-
let prefix = if i == 0 {
376-
"-> ".to_string()
377-
} else {
378-
format!("{}. ", i + 1)
379-
};
380-
let name = ret.name.clone().unwrap_or_default();
381+
for (i, ret) in rets.iter().enumerate() {
382+
let type_text = build_signature_ret_type(builder, ret, i);
383+
let prefix = if i == 0 {
384+
"-> ".to_string()
385+
} else {
386+
format!("{}. ", i + 1)
387+
};
388+
let name = ret.name.clone().unwrap_or_default();
381389

382-
rets_string_multiline.push_str(&format!(
383-
" {}{}{}\n",
384-
prefix,
385-
if !name.is_empty() {
386-
format!("{}: ", name)
387-
} else {
388-
"".to_string()
389-
},
390-
type_text,
391-
));
392-
}
393-
rets_string_multiline
390+
rets_string_multiline.push_str(&format!(
391+
" {}{}{}\n",
392+
prefix,
393+
if !name.is_empty() {
394+
format!("{}: ", name)
395+
} else {
396+
"".to_string()
397+
},
398+
type_text,
399+
));
394400
}
395-
};
396-
result.push_str(rets.as_str());
401+
rets_string_multiline
402+
}
397403
};
404+
result.push_str(rets.as_str());
398405
result
399406
}
400407

crates/emmylua_ls/src/handlers/hover/test/hover_test.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,19 @@ mod tests {
103103
},
104104
));
105105
}
106+
107+
#[test]
108+
fn test_function_infer_return_val() {
109+
let mut ws = HoverVirtualWorkspace::new();
110+
assert!(ws.check_hover(
111+
r#"
112+
local function <??>f(a, b)
113+
a = 1
114+
end
115+
"#,
116+
VirtualHoverResult {
117+
value: "\n```lua\nlocal function f(a, b)\n```\n\n---\n\n\n".to_string(),
118+
},
119+
));
120+
}
106121
}

0 commit comments

Comments
 (0)