Skip to content

Commit 8f40076

Browse files
committed
optimize completion and signature help
1 parent ea31e61 commit 8f40076

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

crates/emmylua_ls/src/handlers/completion/add_completions/add_decl_completion.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use lsp_types::CompletionItem;
44
use crate::handlers::completion::completion_builder::CompletionBuilder;
55

66
use super::{
7-
check_visibility, get_completion_kind, get_description, get_detail, is_deprecated, CallDisplay, CompletionData,
7+
check_visibility, get_completion_kind, get_description, get_detail, is_deprecated, CallDisplay,
8+
CompletionData,
89
};
910

1011
pub fn add_decl_completion(

crates/emmylua_ls/src/handlers/completion/add_completions/add_member_completion.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use lsp_types::CompletionItem;
44
use crate::handlers::completion::completion_builder::CompletionBuilder;
55

66
use super::{
7-
check_visibility, get_completion_kind, get_description, get_detail, is_deprecated, CallDisplay, CompletionData,
7+
check_visibility, get_completion_kind, get_description, get_detail, is_deprecated, CallDisplay,
8+
CompletionData,
89
};
910

1011
#[derive(Debug, Clone, Copy, PartialEq)]
@@ -58,6 +59,10 @@ pub fn add_member_completion(
5859
.unwrap_or(CallDisplay::None);
5960

6061
let typ = member_info.typ;
62+
if status == CompletionTriggerStatus::Colon && !typ.is_function() {
63+
return None;
64+
}
65+
6166
let data = if let Some(id) = &property_owner {
6267
CompletionData::from_property_owner_id(id.clone().into())
6368
} else {
@@ -100,13 +105,20 @@ fn get_call_show(
100105
typ: &LuaType,
101106
status: CompletionTriggerStatus,
102107
) -> Option<CallDisplay> {
103-
let sig_id = match typ {
104-
LuaType::Signature(sig_id) => sig_id,
108+
let (colon_call, colon_define) = match typ {
109+
LuaType::Signature(sig_id) => {
110+
let signature = db.get_signature_index().get(sig_id)?;
111+
let colon_define = signature.is_colon_define;
112+
let colon_call = status == CompletionTriggerStatus::Colon;
113+
(colon_call, colon_define)
114+
}
115+
LuaType::DocFunction(func) => {
116+
let colon_define = func.is_colon_define();
117+
let colon_call = status == CompletionTriggerStatus::Colon;
118+
(colon_call, colon_define)
119+
}
105120
_ => return None,
106121
};
107-
let signature = db.get_signature_index().get(sig_id)?;
108-
let colon_define = signature.is_colon_define;
109-
let colon_call = status == CompletionTriggerStatus::Colon;
110122

111123
match (colon_call, colon_define) {
112124
(false, true) => Some(CallDisplay::AddSelf),

crates/emmylua_ls/src/handlers/completion/add_completions/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ fn get_description(builder: &CompletionBuilder, typ: &LuaType) -> Option<String>
186186
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
187187
pub enum CompletionData {
188188
PropertyOwnerId(LuaPropertyOwnerId),
189-
Module(String)
189+
Module(String),
190190
}
191191

192192
#[allow(unused)]
@@ -200,4 +200,4 @@ impl CompletionData {
200200
let data = Self::Module(module);
201201
Some(serde_json::to_value(data).unwrap())
202202
}
203-
}
203+
}

crates/emmylua_ls/src/handlers/signature_helper/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ pub async fn on_signature_helper_handler(
6060
token.kind().into(),
6161
LuaTokenKind::TkWhitespace | LuaTokenKind::TkEndOfLine
6262
) {
63-
param_context.active_signature_help
63+
if token.parent()?.kind() == LuaSyntaxKind::CallArgList.into() {
64+
param_context.active_signature_help
65+
} else {
66+
None
67+
}
6468
} else {
6569
let node = token.parent_ancestors().find(|node| {
6670
matches!(

0 commit comments

Comments
 (0)