Skip to content

Commit ac7314c

Browse files
committed
update completion
1 parent f7409e2 commit ac7314c

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,8 @@ pub fn add_completion(builder: &mut CompletionBuilder) -> Option<()> {
3232
let file_conversion = emmyrc.completion.auto_require_naming_convention;
3333
let version_number = emmyrc.runtime.version.to_lua_version_number();
3434
let file_id = builder.semantic_model.get_file_id();
35-
let module_infos = builder
36-
.semantic_model
37-
.get_db()
38-
.get_module_index()
39-
.get_module_infos();
35+
let module_index = builder.semantic_model.get_db().get_module_index();
36+
let module_infos = module_index.get_module_infos();
4037
let range = builder.trigger_token.text_range();
4138
let document = builder.semantic_model.get_document();
4239
let lsp_position = document.to_lsp_range(range)?.start;
@@ -46,6 +43,7 @@ pub fn add_completion(builder: &mut CompletionBuilder) -> Option<()> {
4643
if module_info.is_visible(&version_number)
4744
&& module_info.file_id != file_id
4845
&& module_info.export_type.is_some()
46+
&& !module_index.is_std(&module_info.file_id)
4947
{
5048
add_module_completion_item(
5149
builder,

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ pub fn add_completion(builder: &mut CompletionBuilder) -> Option<()> {
1515
if builder.is_cancelled() {
1616
return None;
1717
}
18-
1918
if check_can_add_completion(builder).is_none() {
2019
return Some(());
2120
}
@@ -58,12 +57,15 @@ fn check_can_add_completion(builder: &CompletionBuilder) -> Option<()> {
5857
}
5958
} else if builder.trigger_kind == CompletionTriggerKind::INVOKED {
6059
let parent = builder.trigger_token.parent()?;
61-
let prev_token = builder.trigger_token.prev_token()?;
62-
match prev_token.kind().into() {
63-
LuaTokenKind::TkTagUsing | LuaTokenKind::TkTagExport | LuaTokenKind::TkTagNamespace => {
64-
return None;
60+
if let Some(prev_token) = builder.trigger_token.prev_token() {
61+
match prev_token.kind().into() {
62+
LuaTokenKind::TkTagUsing
63+
| LuaTokenKind::TkTagExport
64+
| LuaTokenKind::TkTagNamespace => {
65+
return None;
66+
}
67+
_ => {}
6568
}
66-
_ => {}
6769
}
6870

6971
// 即时是主动触发, 也不允许在函数定义的参数列表中添加
@@ -230,8 +232,15 @@ fn add_global_env(
230232

231233
fn env_check_match_word(trigger_text: &str, name: &str) -> bool {
232234
// 如果首字母是`(`或者`,`则允许, 用于在函数参数调用处触发补全
233-
match trigger_text.chars().next() {
234-
Some('(') | Some(',') => true,
235-
_ => check_match_word(trigger_text, name),
235+
if matches!(trigger_text.chars().next(), Some('(') | Some(',')) {
236+
return true;
237+
}
238+
239+
if check_match_word(trigger_text, name) {
240+
// 如果首字母匹配, 则需要检查 trigger_text 的每个字符是否都存在于 name 中
241+
242+
return true;
236243
}
244+
245+
false
237246
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,4 +1131,17 @@ mod tests {
11311131
],
11321132
));
11331133
}
1134+
1135+
#[test]
1136+
fn test_file_start() {
1137+
let mut ws = ProviderVirtualWorkspace::new_with_init_std_lib();
1138+
assert!(ws.check_completion(
1139+
"table<??>",
1140+
vec![VirtualCompletionItem {
1141+
label: "table".to_string(),
1142+
kind: CompletionItemKind::CLASS,
1143+
..Default::default()
1144+
},],
1145+
));
1146+
}
11341147
}

0 commit comments

Comments
 (0)