Skip to content

Commit 33429a5

Browse files
committed
Merge branch 'main' of github.com:EmmyLuaLs/emmylua-analyzer-rust
2 parents bcd6453 + 88e723d commit 33429a5

File tree

2 files changed

+69
-4
lines changed

2 files changed

+69
-4
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod std_hover;
99
pub use build_hover::build_hover_content_for_completion;
1010
use build_hover::build_semantic_info_hover;
1111
use emmylua_code_analysis::{EmmyLuaAnalysis, FileId};
12-
use emmylua_parser::LuaAstNode;
12+
use emmylua_parser::{LuaAstNode, LuaTokenKind};
1313
pub use find_origin::{find_all_same_named_members, find_member_origin_owner};
1414
pub use hover_builder::HoverBuilder;
1515
pub use hover_humanize::infer_prefix_global_name;
@@ -56,10 +56,20 @@ pub fn hover(analysis: &EmmyLuaAnalysis, file_id: FileId, position: Position) ->
5656

5757
let token = match root.syntax().token_at_offset(position_offset) {
5858
TokenAtOffset::Single(token) => token,
59-
TokenAtOffset::Between(_, right) => right,
60-
TokenAtOffset::None => {
61-
return None;
59+
TokenAtOffset::Between(left, right) => {
60+
if matches!(
61+
right.kind().into(),
62+
LuaTokenKind::TkDot
63+
| LuaTokenKind::TkColon
64+
| LuaTokenKind::TkLeftBracket
65+
| LuaTokenKind::TkRightBracket
66+
) {
67+
left
68+
} else {
69+
right
70+
}
6271
}
72+
TokenAtOffset::None => return None,
6373
};
6474
match token {
6575
keywords if is_keyword(keywords.clone()) => {

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,4 +310,59 @@ mod tests {
310310
));
311311
Ok(())
312312
}
313+
314+
#[gtest]
315+
fn test_before_dot_returns_object_info() -> Result<()> {
316+
let mut ws = ProviderVirtualWorkspace::new();
317+
ws.def(
318+
r#"
319+
---@class Node
320+
---@field field number?
321+
---@field method fun(self: Node)
322+
323+
---@type Node
324+
node = {}
325+
326+
function node.method() end
327+
"#,
328+
);
329+
330+
check!(ws.check_hover(
331+
r#"
332+
node<??>.field = nil
333+
"#,
334+
VirtualHoverResult {
335+
value: "```lua\n(global) node: Node {\n field: number?,\n method: function,\n}\n```".to_string(),
336+
},
337+
));
338+
339+
check!(ws.check_hover(
340+
r#"
341+
node<??>:method()
342+
"#,
343+
VirtualHoverResult {
344+
value: "```lua\n(global) node: Node {\n field: number?,\n method: function,\n}\n```".to_string(),
345+
},
346+
));
347+
348+
check!(ws.check_hover(
349+
r#"
350+
node<??>["key"] = "value"
351+
"#,
352+
VirtualHoverResult {
353+
value: "```lua\n(global) node: Node {\n field: number?,\n method: function,\n}\n```".to_string(),
354+
},
355+
));
356+
357+
check!(ws.check_hover(
358+
r#"
359+
node["key"<??>] = "value"
360+
"#,
361+
VirtualHoverResult {
362+
value: "\"key\"".to_string(),
363+
},
364+
));
365+
366+
Ok(())
367+
}
313368
}

0 commit comments

Comments
 (0)