From 3d5e775bf75e001428bfd4fe13d6d365dc8201c0 Mon Sep 17 00:00:00 2001 From: Noam Preil Date: Fri, 15 May 2020 15:10:53 -0400 Subject: [PATCH] Make style guideline warnings opt-in --- README.md | 1 + src/config.zig | 4 ++++ src/main.zig | 54 ++++++++++++++++++++++++++------------------------ 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index ac8b416..56762a1 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ The following options are currently available. | --- | --- | --- | --- | | `enable_snippets` | `bool` | `true` | Enables snippet completion, set to false for compatibility with language clients that do not support snippets (such as ale). | | `zig_lib_path` | `?[]const u8` | `null` | zig library path, used to analyze std library imports. | +| `warn_style` | `bool` | `false` | Enables warnings for style *guideline* mismatches | ## Usage diff --git a/src/config.zig b/src/config.zig index 1b70383..36c94cd 100644 --- a/src/config.zig +++ b/src/config.zig @@ -5,3 +5,7 @@ enable_snippets: bool = true, /// zig library path zig_lib_path: ?[]const u8 = null, + +/// Whether to pay attention to style issues. This is opt-in since the style +/// guide explicitly states that the style info provided is a guideline only. +warn_style: bool = false, diff --git a/src/main.zig b/src/main.zig index 7e25fc5..6db997a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -137,34 +137,36 @@ fn publishDiagnostics(handle: DocumentStore.Handle, config: Config) !void { if (is_extern) break :blk; - if (func.name_token) |name_token| { - const loc = tree.tokenLocation(0, name_token); + if (config.warn_style) { + if (func.name_token) |name_token| { + const loc = tree.tokenLocation(0, name_token); - const is_type_function = switch (func.return_type) { - .Explicit => |node| if (node.cast(std.zig.ast.Node.Identifier)) |ident| - std.mem.eql(u8, tree.tokenSlice(ident.token), "type") - else - false, - .InferErrorSet, .Invalid => false, - }; + const is_type_function = switch (func.return_type) { + .Explicit => |node| if (node.cast(std.zig.ast.Node.Identifier)) |ident| + std.mem.eql(u8, tree.tokenSlice(ident.token), "type") + else + false, + .InferErrorSet, .Invalid => false, + }; - const func_name = tree.tokenSlice(name_token); - if (!is_type_function and !analysis.isCamelCase(func_name)) { - try diagnostics.append(.{ - .range = astLocationToRange(loc), - .severity = .Information, - .code = "BadStyle", - .source = "zls", - .message = "Functions should be camelCase", - }); - } else if (is_type_function and !analysis.isPascalCase(func_name)) { - try diagnostics.append(.{ - .range = astLocationToRange(loc), - .severity = .Information, - .code = "BadStyle", - .source = "zls", - .message = "Type functions should be PascalCase", - }); + const func_name = tree.tokenSlice(name_token); + if (!is_type_function and !analysis.isCamelCase(func_name)) { + try diagnostics.append(.{ + .range = astLocationToRange(loc), + .severity = .Information, + .code = "BadStyle", + .source = "zls", + .message = "Functions should be camelCase", + }); + } else if (is_type_function and !analysis.isPascalCase(func_name)) { + try diagnostics.append(.{ + .range = astLocationToRange(loc), + .severity = .Information, + .code = "BadStyle", + .source = "zls", + .message = "Type functions should be PascalCase", + }); + } } } },