Improve unused variable report accuracy

This commit is contained in:
InKryption 2022-08-19 13:23:54 +02:00
parent 9161397b82
commit 63d84855a5
No known key found for this signature in database
GPG Key ID: 99105582F7539E94

View File

@ -250,7 +250,7 @@ fn publishDiagnostics(server: *Server, writer: anytype, handle: DocumentStore.Ha
while (decl_iterator.next()) |decl| { while (decl_iterator.next()) |decl| {
var identifier_count: usize = 0; var identifier_count: usize = 0;
var name_token_index = switch (decl.value_ptr.*) { const name_token_index = switch (decl.value_ptr.*) {
.ast_node => |an| s: { .ast_node => |an| s: {
const an_tag = tree.nodes.items(.tag)[an]; const an_tag = tree.nodes.items(.tag)[an];
switch (an_tag) { switch (an_tag) {
@ -270,8 +270,27 @@ fn publishDiagnostics(server: *Server, writer: anytype, handle: DocumentStore.Ha
const pit_start = tree.firstToken(scope_data); const pit_start = tree.firstToken(scope_data);
const pit_end = ast.lastToken(tree, scope_data); const pit_end = ast.lastToken(tree, scope_data);
for (tree.tokens.items(.tag)[pit_start..pit_end]) |tag, index| { const tags = tree.tokens.items(.tag)[pit_start..pit_end];
if (tag == .identifier and std.mem.eql(u8, tree.tokenSlice(pit_start + @intCast(u32, index)), tree.tokenSlice(name_token_index))) identifier_count += 1; for (tags) |tag, index| {
if (tag != .identifier) continue;
if (!std.mem.eql(u8, tree.tokenSlice(pit_start + @intCast(u32, index)), tree.tokenSlice(name_token_index))) continue;
if (index -| 1 > 0 and tags[index - 1] == .period) continue;
if (index +| 2 < tags.len and tags[index + 1] == .colon) switch (tags[index + 2]) {
.l_brace,
.keyword_inline,
.keyword_while,
.keyword_for,
.keyword_switch,
=> continue,
else => {},
};
if (index -| 2 > 0 and tags[index - 1] == .colon) switch (tags[index - 2]) {
.keyword_break,
.keyword_continue,
=> continue,
else => {},
};
identifier_count += 1;
} }
if (identifier_count <= 1) if (identifier_count <= 1)