Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions src/analysis.zig
Original file line number Diff line number Diff line change
Expand Up @@ -564,15 +564,27 @@ pub fn getVariableSignature(
var members_source: std.ArrayList(u8) = .empty;

for (container_decl.ast.members) |member| {
const member_line_start = offsets.lineLocUntilIndex(tree.source, tree.tokenStart(tree.firstToken(member))).start;

const member_source_indented = switch (tree.nodeTag(member)) {
switch (tree.nodeTag(member)) {
.container_field_init,
.container_field_align,
.container_field,
=> tree.source[member_line_start..offsets.tokenToLoc(tree, ast.lastToken(tree, member)).end],
=> {},

else => continue,
};
}

const first_token = tree.firstToken(member);
const first_token_idx = tree.tokenStart(first_token);
const line_loc = offsets.lineLocUntilIndex(tree.source, first_token_idx);

const member_source = offsets.nodeToSlice(tree, member);
const member_loc = offsets.nodeToLoc(tree, member);

const prefix = tree.source[line_loc.start..member_loc.start];
const indent = std.mem.findNone(u8, prefix, " \t") orelse prefix.len;

const member_source_indented = try std.mem.concat(arena, u8, &.{ prefix[0..indent], member_source });

try members_source.append(arena, '\n');
try members_source.appendSlice(arena, try trimCommonIndentation(arena, member_source_indented, 4));
try members_source.append(arena, ',');
Expand Down
42 changes: 42 additions & 0 deletions tests/lsp_features/hover.zig
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,25 @@ test "enum" {
\\(type)
\\```
);

try testHover(
\\pub const M<cursor>yEnum = enum {
\\ // zig fmt: off
\\ foo, bar, baz
\\ // zig fmt: on
\\};
,
\\```zig
\\const MyEnum = enum {
\\ foo,
\\ bar,
\\ baz,
\\}
\\```
\\```zig
\\(type)
\\```
);
}

test "union" {
Expand Down Expand Up @@ -622,6 +641,29 @@ test "union" {
\\(type)
\\```
);

try testHover(
\\pub const M<cursor>yUnion = union(enum) {
\\ // zig fmt: off
\\ foo, bar: u16, baz: struct {
\\ bam: u8
\\ }
\\ // zig fmt: on
\\};
,
\\```zig
\\const MyUnion = union(enum) {
\\ foo,
\\ bar: u16,
\\ baz: struct {
\\ bam: u8
\\ },
\\}
\\```
\\```zig
\\(type)
\\```
);
}

test "enum member" {
Expand Down
Loading