zls icon indicating copy to clipboard operation
zls copied to clipboard

Rename of enum field does not rename references.

Open smallkirby opened this issue 1 year ago • 2 comments

Zig Version

0.14.0-dev.1820+ea527f7a8

ZLS Version

0.14.0-dev.167+063d7ff

Client / Code Editor / Extensions

Visual Studio Code-1.94.0

Steps to Reproduce and Observed Behavior

Init new project with zig init. Edit main.zig as follows:

const std = @import("std");
const log = std.log;

const SomeEnum = enum(u8) {
    zero,
    one,
    two,
};

pub fn main() !void {
    const e = SomeEnum.two;
    switch (e) {
        .zero => log.info("zero", .{}),
        .one => log.info("one", .{}),
        .two => log.info("two", .{}),
    }
}

Right click the field of enum SomeEnum, for example zero, to rename. Enter new name and press enter. The field name is successfully renamed but its usages, .zero in the switch in this example, are not renamed.

Expected Behavior

Enum field itself and all the usages are renamed.

Relevant log output

No response

Notes

This would be the continuation of #2042. By #2043, the rename operation itself stopped failing. But it still does not work as expected.

smallkirby avatar Oct 08 '24 07:10 smallkirby

So this one is a little harder to tackle, because ZLS cannot infer enum types like the zig compiler can, and the compiler itself does not expose an API to query type information after the Sema phase. Though maybe in cases like this where there can only be one obvious type that .zero belongs to, we can use the AST to find references? Worth trying.

srijan-paul avatar Oct 08 '24 07:10 srijan-paul

this works now, fixed by bcc5d9fd67d815613cce0294a0d45b0d76cecd88

xdBronch avatar Jun 07 '25 21:06 xdBronch