Skip to content

Commit 45971ad

Browse files
committed
completion: 限制空格补全范围
1 parent c0a7dbf commit 45971ad

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

crates/emmylua_ls/src/handlers/completion/completion_builder.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ pub struct CompletionBuilder<'a> {
1212
completion_items: Vec<CompletionItem>,
1313
cancel_token: CancellationToken,
1414
stopped: bool,
15+
// 主动触发补全
16+
pub is_invoke_completion: bool,
1517
}
1618

1719
impl<'a> CompletionBuilder<'a> {
1820
pub fn new(
1921
trigger_token: LuaSyntaxToken,
2022
semantic_model: SemanticModel<'a>,
2123
cancel_token: CancellationToken,
24+
is_invoke_completion: bool,
2225
) -> Self {
2326
Self {
2427
trigger_token,
@@ -27,6 +30,7 @@ impl<'a> CompletionBuilder<'a> {
2730
completion_items: Vec::new(),
2831
cancel_token,
2932
stopped: false,
33+
is_invoke_completion,
3034
}
3135
}
3236

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use emmylua_parser::LuaAstNode;
1111
use log::error;
1212
use lsp_types::{
1313
ClientCapabilities, CompletionItem, CompletionOptions, CompletionOptionsCompletionItem,
14-
CompletionParams, CompletionResponse, ServerCapabilities,
14+
CompletionParams, CompletionResponse, CompletionTriggerKind, ServerCapabilities,
1515
};
1616
use providers::add_completions;
1717
use resolve_completion::resolve_completion;
@@ -52,7 +52,15 @@ pub async fn on_completion_handler(
5252
}
5353
};
5454

55-
let mut builder = CompletionBuilder::new(token, semantic_model, cancel_token);
55+
let mut builder = CompletionBuilder::new(
56+
token,
57+
semantic_model,
58+
cancel_token,
59+
params
60+
.context
61+
.map(|context| context.trigger_kind == CompletionTriggerKind::INVOKED)
62+
.unwrap_or(false),
63+
);
5664
add_completions(&mut builder);
5765
Some(CompletionResponse::Array(builder.get_completion_items()))
5866
}

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,24 @@ mod postfix_provider;
1111
mod table_decl_field_provider;
1212
mod type_special_provider;
1313

14-
use emmylua_parser::{LuaAstToken, LuaStringToken};
14+
use emmylua_parser::{LuaAst, LuaAstNode, LuaAstToken, LuaStringToken};
1515
use rowan::TextRange;
1616

1717
use super::completion_builder::CompletionBuilder;
1818

1919
pub fn add_completions(builder: &mut CompletionBuilder) -> Option<()> {
20+
// 空格补全只允许在非主动且位于函数调用参数列表中触发
21+
if builder.get_trigger_text().is_empty() && !builder.is_invoke_completion {
22+
let node = LuaAst::cast(builder.trigger_token.parent()?)?;
23+
match node {
24+
LuaAst::LuaCallArgList(_) => {
25+
type_special_provider::add_completion(builder);
26+
return Some(());
27+
}
28+
_ => return Some(()),
29+
}
30+
}
31+
2032
module_path_provider::add_completion(builder);
2133
file_path_provider::add_completion(builder);
2234
keywords_provider::add_completion(builder);

0 commit comments

Comments
 (0)