Skip to content

Commit 0345e1a

Browse files
committed
optimize auto-require
1 parent 52debd4 commit 0345e1a

5 files changed

Lines changed: 42 additions & 6 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub fn check_visibility(builder: &mut CompletionBuilder, id: LuaSemanticDeclId)
3030
Some(())
3131
}
3232

33-
fn get_completion_kind(typ: &LuaType) -> CompletionItemKind {
33+
pub fn get_completion_kind(typ: &LuaType) -> CompletionItemKind {
3434
if typ.is_function() {
3535
return CompletionItemKind::FUNCTION;
3636
} else if typ.is_const() {

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ use lsp_types::{CompletionItem, Position};
77
use crate::{
88
handlers::{
99
command::make_auto_require,
10-
completion::{completion_builder::CompletionBuilder, completion_data::CompletionData},
10+
completion::{
11+
add_completions::get_completion_kind, completion_builder::CompletionBuilder,
12+
completion_data::CompletionData,
13+
},
1114
},
1215
util::{key_name_convert, module_name_convert},
1316
};
@@ -177,7 +180,7 @@ fn try_add_member_completion_items(
177180

178181
let completion_item = CompletionItem {
179182
label: key_name,
180-
kind: Some(lsp_types::CompletionItemKind::MODULE),
183+
kind: Some(get_completion_kind(&member_info.typ)),
181184
label_details: Some(lsp_types::CompletionItemLabelDetails {
182185
detail: Some(format!(" (in {})", module_info.full_module_name)),
183186
..Default::default()

crates/emmylua_ls/src/handlers/references/reference_seacher.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use emmylua_code_analysis::{
66
};
77
use emmylua_parser::{
88
LuaAssignStat, LuaAst, LuaAstNode, LuaAstToken, LuaNameToken, LuaStringToken, LuaSyntaxNode,
9-
LuaSyntaxToken,
9+
LuaSyntaxToken, LuaTableField,
1010
};
1111
use lsp_types::Location;
1212

@@ -280,7 +280,16 @@ fn get_signature_decl_member_references(
280280
search_member_references(semantic_model, compilation, member_id, result);
281281
}
282282
}
283-
283+
table_field_node if LuaTableField::can_cast(table_field_node.kind().into()) => {
284+
let table_field = LuaTableField::cast(table_field_node)?;
285+
let decl_id = semantic_model.find_decl(
286+
table_field.syntax().clone().into(),
287+
SemanticDeclLevel::default(),
288+
)?;
289+
if let LuaSemanticDeclId::Member(member_id) = decl_id {
290+
search_member_references(semantic_model, compilation, member_id, result);
291+
}
292+
}
284293
_ => {}
285294
}
286295
None

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,7 @@ mod tests {
928928
"#,
929929
vec![VirtualCompletionItem {
930930
label: "MapName".to_string(),
931-
kind: CompletionItemKind::MODULE,
931+
kind: CompletionItemKind::CLASS,
932932
label_detail: Some(" (in aaaa)".to_string()),
933933
},],
934934
));

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,28 @@ mod tests {
2626
let locations = result.unwrap();
2727
assert!(locations.len() >= 4);
2828
}
29+
30+
#[test]
31+
fn test_function_references_2() {
32+
let mut ws = ProviderVirtualWorkspace::new();
33+
ws.def_file(
34+
"1.lua",
35+
r#"
36+
local flush = require("virtual_0").flush
37+
flush()
38+
"#,
39+
);
40+
let result = ws.check_references(
41+
r#"
42+
local function fl<??>ush()
43+
end
44+
return {
45+
flush = flush,
46+
}
47+
"#,
48+
);
49+
assert!(result.is_some());
50+
let locations = result.unwrap();
51+
assert!(locations.len() >= 4);
52+
}
2953
}

0 commit comments

Comments
 (0)