diff options
Diffstat (limited to 'lib/src/lints/useless_parens.rs')
-rw-r--r-- | lib/src/lints/useless_parens.rs | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/lib/src/lints/useless_parens.rs b/lib/src/lints/useless_parens.rs index 2d6ba8f..36ad1b7 100644 --- a/lib/src/lints/useless_parens.rs +++ b/lib/src/lints/useless_parens.rs | |||
@@ -1,12 +1,37 @@ | |||
1 | use crate::{Lint, Metadata, Report, Rule, Suggestion, Diagnostic}; | 1 | use crate::{Diagnostic, Metadata, Report, Rule, Suggestion}; |
2 | 2 | ||
3 | use if_chain::if_chain; | 3 | use if_chain::if_chain; |
4 | use macros::lint; | 4 | use macros::lint; |
5 | use rnix::{ | 5 | use rnix::{ |
6 | types::{ParsedType, KeyValue, Paren, TypedNode, Wrapper}, | 6 | types::{KeyValue, Paren, ParsedType, TypedNode, Wrapper}, |
7 | NodeOrToken, SyntaxElement, SyntaxKind, | 7 | NodeOrToken, SyntaxElement, SyntaxKind, |
8 | }; | 8 | }; |
9 | 9 | ||
10 | /// ## What it does | ||
11 | /// Checks for unnecessary parentheses. | ||
12 | /// | ||
13 | /// ## Why is this bad? | ||
14 | /// Unnecessarily parenthesized code is hard to read. | ||
15 | /// | ||
16 | /// ## Example | ||
17 | /// | ||
18 | /// ``` | ||
19 | /// let | ||
20 | /// double = (x: 2 * x); | ||
21 | /// ls = map (double) [ 1 2 3 ]; | ||
22 | /// in | ||
23 | /// (2 + 3) | ||
24 | /// ``` | ||
25 | /// | ||
26 | /// Remove unnecessary parentheses: | ||
27 | /// | ||
28 | /// ``` | ||
29 | /// let | ||
30 | /// double = x: 2 * x; | ||
31 | /// ls = map double [ 1 2 3 ]; | ||
32 | /// in | ||
33 | /// 2 + 3 | ||
34 | /// ``` | ||
10 | #[lint( | 35 | #[lint( |
11 | name = "useless parens", | 36 | name = "useless parens", |
12 | note = "These parentheses can be omitted", | 37 | note = "These parentheses can be omitted", |
@@ -27,7 +52,7 @@ impl Rule for UselessParens { | |||
27 | 52 | ||
28 | if let Some(diagnostic) = do_thing(parsed_type_node); | 53 | if let Some(diagnostic) = do_thing(parsed_type_node); |
29 | then { | 54 | then { |
30 | let mut report = Self::report(); | 55 | let mut report = self.report(); |
31 | report.diagnostics.push(diagnostic); | 56 | report.diagnostics.push(diagnostic); |
32 | Some(report) | 57 | Some(report) |
33 | } else { | 58 | } else { |
@@ -79,7 +104,7 @@ fn do_thing(parsed_type_node: ParsedType) -> Option<Diagnostic> { | |||
79 | if let Some(parsed_inner) = ParsedType::cast(inner_node); | 104 | if let Some(parsed_inner) = ParsedType::cast(inner_node); |
80 | if matches!( | 105 | if matches!( |
81 | parsed_inner, | 106 | parsed_inner, |
82 | ParsedType::List(_) | 107 | ParsedType::List(_) |
83 | | ParsedType::Paren(_) | 108 | | ParsedType::Paren(_) |
84 | | ParsedType::Str(_) | 109 | | ParsedType::Str(_) |
85 | | ParsedType::AttrSet(_) | 110 | | ParsedType::AttrSet(_) |
@@ -95,6 +120,6 @@ fn do_thing(parsed_type_node: ParsedType) -> Option<Diagnostic> { | |||
95 | None | 120 | None |
96 | } | 121 | } |
97 | }, | 122 | }, |
98 | _ => None | 123 | _ => None, |
99 | } | 124 | } |
100 | } | 125 | } |