Skip to content

Commit 083ff32

Browse files
committed
completion: 限制 docfunction 补全项显示
1 parent 62d715f commit 083ff32

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

crates/emmylua_ls/src/handlers/completion/providers/member_provider.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use emmylua_code_analysis::LuaMemberInfo;
1+
use emmylua_code_analysis::{LuaMemberInfo, LuaType};
22
use emmylua_parser::{LuaAstNode, LuaAstToken, LuaIndexExpr, LuaStringToken};
33

44
use crate::handlers::completion::{
@@ -59,23 +59,28 @@ fn add_resolve_member_infos(
5959
}
6060
}
6161

62-
match resolve_state {
63-
MemberResolveState::All => {
64-
for member_info in member_infos {
65-
add_member_completion(builder, member_info.clone(), completion_status);
62+
// 所有 DocFunction 只取第一个作为补全项
63+
let mut find_doc_function = false;
64+
for member_info in member_infos {
65+
if matches!(member_info.typ, LuaType::DocFunction(_)) {
66+
if find_doc_function {
67+
continue;
6668
}
69+
find_doc_function = true;
6770
}
68-
MemberResolveState::Meta => {
69-
for member_info in member_infos {
71+
72+
match resolve_state {
73+
MemberResolveState::All => {
74+
add_member_completion(builder, member_info.clone(), completion_status);
75+
}
76+
MemberResolveState::Meta => {
7077
if let Some(feature) = member_info.feature {
7178
if feature.is_meta_decl() {
7279
add_member_completion(builder, member_info.clone(), completion_status);
7380
}
7481
}
7582
}
76-
}
77-
MemberResolveState::FileDecl => {
78-
for member_info in member_infos {
83+
MemberResolveState::FileDecl => {
7984
if let Some(feature) = member_info.feature {
8085
if feature.is_file_decl() {
8186
add_member_completion(builder, member_info.clone(), completion_status);

crates/emmylua_ls/src/handlers/completion/test/completion_test.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ mod tests {
105105
// 被动触发补全
106106
assert!(ws.check_completion_with_kind(
107107
r#"
108-
---@class Completion.Test4
108+
---@class Test
109109
---@field event fun(a: "A", b: number)
110110
---@field event fun(a: "B", b: string)
111-
local Test4 = {}
112-
Test4.event(<??>)
111+
local Test = {}
112+
Test.event(<??>)
113113
"#,
114114
vec![
115115
VirtualCompletionItem {
@@ -127,11 +127,11 @@ mod tests {
127127
// 主动触发补全
128128
assert!(ws.check_completion(
129129
r#"
130-
---@class Completion.Test4
130+
---@class Test
131131
---@field event fun(a: "A", b: number)
132132
---@field event fun(a: "B", b: string)
133-
local Test4 = {}
134-
Test4.event(<??>)
133+
local Test = {}
134+
Test.event(<??>)
135135
"#,
136136
vec![
137137
VirtualCompletionItem {
@@ -143,10 +143,28 @@ mod tests {
143143
kind: CompletionItemKind::ENUM_MEMBER,
144144
},
145145
VirtualCompletionItem {
146-
label: "Test4".to_string(),
146+
label: "Test".to_string(),
147147
kind: CompletionItemKind::CLASS,
148148
},
149149
],
150150
));
151+
152+
assert!(ws.check_completion(
153+
r#"
154+
---@class Test
155+
---@field event fun(a: "A", b: number)
156+
---@field event fun(a: "B", b: string)
157+
local Test = {}
158+
Test.<??>
159+
"#,
160+
vec![
161+
VirtualCompletionItem {
162+
label: "event".to_string(),
163+
kind: CompletionItemKind::FUNCTION,
164+
},
165+
],
166+
));
151167
}
168+
169+
152170
}

0 commit comments

Comments
 (0)