Add new lint [needless_braces_on_range_literal
]
This commit is contained in:
parent
3e52dee646
commit
ba43f0aee9
@ -3596,6 +3596,7 @@ Released 2018-09-13
|
||||
[`needless_bool`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool
|
||||
[`needless_borrow`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
|
||||
[`needless_borrowed_reference`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference
|
||||
[`needless_braces_on_range_literal`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_braces_on_range_literal
|
||||
[`needless_collect`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_collect
|
||||
[`needless_continue`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_continue
|
||||
[`needless_doctest_main`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_doctest_main
|
||||
|
@ -241,6 +241,7 @@ store.register_group(true, "clippy::all", Some("clippy_all"), vec![
|
||||
LintId::of(needless_bool::BOOL_COMPARISON),
|
||||
LintId::of(needless_bool::NEEDLESS_BOOL),
|
||||
LintId::of(needless_borrowed_ref::NEEDLESS_BORROWED_REFERENCE),
|
||||
LintId::of(needless_braces_on_range_literal::NEEDLESS_BRACES_ON_RANGE_LITERAL),
|
||||
LintId::of(needless_late_init::NEEDLESS_LATE_INIT),
|
||||
LintId::of(needless_question_mark::NEEDLESS_QUESTION_MARK),
|
||||
LintId::of(needless_update::NEEDLESS_UPDATE),
|
||||
|
@ -405,6 +405,7 @@ store.register_lints(&[
|
||||
needless_bool::BOOL_COMPARISON,
|
||||
needless_bool::NEEDLESS_BOOL,
|
||||
needless_borrowed_ref::NEEDLESS_BORROWED_REFERENCE,
|
||||
needless_braces_on_range_literal::NEEDLESS_BRACES_ON_RANGE_LITERAL,
|
||||
needless_continue::NEEDLESS_CONTINUE,
|
||||
needless_for_each::NEEDLESS_FOR_EACH,
|
||||
needless_late_init::NEEDLESS_LATE_INIT,
|
||||
|
@ -90,6 +90,7 @@ store.register_group(true, "clippy::style", Some("clippy_style"), vec![
|
||||
LintId::of(misc_early::REDUNDANT_PATTERN),
|
||||
LintId::of(mut_mutex_lock::MUT_MUTEX_LOCK),
|
||||
LintId::of(mut_reference::UNNECESSARY_MUT_PASSED),
|
||||
LintId::of(needless_braces_on_range_literal::NEEDLESS_BRACES_ON_RANGE_LITERAL),
|
||||
LintId::of(needless_late_init::NEEDLESS_LATE_INIT),
|
||||
LintId::of(neg_multiply::NEG_MULTIPLY),
|
||||
LintId::of(new_without_default::NEW_WITHOUT_DEFAULT),
|
||||
|
@ -312,6 +312,7 @@ mod needless_arbitrary_self_type;
|
||||
mod needless_bitwise_bool;
|
||||
mod needless_bool;
|
||||
mod needless_borrowed_ref;
|
||||
mod needless_braces_on_range_literal;
|
||||
mod needless_continue;
|
||||
mod needless_for_each;
|
||||
mod needless_late_init;
|
||||
@ -746,6 +747,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
||||
store.register_early_pass(|| Box::new(collapsible_if::CollapsibleIf));
|
||||
store.register_early_pass(|| Box::new(items_after_statements::ItemsAfterStatements));
|
||||
store.register_early_pass(|| Box::new(precedence::Precedence));
|
||||
store.register_early_pass(|| Box::new(needless_braces_on_range_literal::NeedlessBracesOnRangeLiteral));
|
||||
store.register_early_pass(|| Box::new(needless_continue::NeedlessContinue));
|
||||
store.register_early_pass(|| Box::new(redundant_else::RedundantElse));
|
||||
store.register_late_pass(|| Box::new(create_dir::CreateDir));
|
||||
|
67
clippy_lints/src/needless_braces_on_range_literal.rs
Normal file
67
clippy_lints/src/needless_braces_on_range_literal.rs
Normal file
@ -0,0 +1,67 @@
|
||||
//! Checks for braces on literals in range statements
|
||||
//!
|
||||
//! For example, the lint would catch
|
||||
//!
|
||||
//! ```rust
|
||||
//! for i in (0)..10 {
|
||||
//! println!("{i}");
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! And suggest this:
|
||||
//!
|
||||
//! ```rust
|
||||
//! for i in 0..10 {
|
||||
//! println!("{i}");
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! This lint is **warn** by default.
|
||||
|
||||
use clippy_utils::{diagnostics::span_lint_and_then, source::snippet_opt};
|
||||
use rustc_ast::ast::{Expr, ExprKind};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// ### What it does
|
||||
/// The lint checks for braces on literals in range statements that are
|
||||
/// superflous.
|
||||
///
|
||||
/// ### Why is this bad?
|
||||
/// Having superflous braces makes the code less legible as the impose an
|
||||
/// overhead when reading.
|
||||
|
||||
#[clippy::version = "1.63.0"]
|
||||
pub NEEDLESS_BRACES_ON_RANGE_LITERAL,
|
||||
style,
|
||||
"needless braces on range literal can be removed"
|
||||
}
|
||||
|
||||
declare_lint_pass!(NeedlessBracesOnRangeLiteral => [NEEDLESS_BRACES_ON_RANGE_LITERAL]);
|
||||
|
||||
fn check_for_braces(cx: &EarlyContext<'_>, e: &Expr) {
|
||||
if_chain! {
|
||||
if let ExprKind::Paren(ref start_statement) = &e.kind;
|
||||
if let ExprKind::Lit(ref literal) = start_statement.kind;
|
||||
then {
|
||||
span_lint_and_then(cx, NEEDLESS_BRACES_ON_RANGE_LITERAL, e.span,
|
||||
"needless braces on range literal can be removed",
|
||||
|diag| {
|
||||
if let Some(suggestion) = snippet_opt(cx, literal.span) {
|
||||
diag.span_suggestion(e.span, "try", suggestion, Applicability::MachineApplicable);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl EarlyLintPass for NeedlessBracesOnRangeLiteral {
|
||||
fn check_expr(&mut self, cx: &EarlyContext<'_>, e: &Expr) {
|
||||
if let ExprKind::Range(Some(start), Some(end), _) = &e.kind {
|
||||
check_for_braces(cx, start);
|
||||
check_for_braces(cx, end);
|
||||
}
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@
|
||||
#![feature(stmt_expr_attributes)]
|
||||
#![warn(clippy::almost_complete_letter_range)]
|
||||
#![allow(ellipsis_inclusive_range_patterns)]
|
||||
#![allow(clippy::needless_braces_on_range_literal)]
|
||||
|
||||
macro_rules! a {
|
||||
() => {
|
||||
|
@ -6,6 +6,7 @@
|
||||
#![feature(stmt_expr_attributes)]
|
||||
#![warn(clippy::almost_complete_letter_range)]
|
||||
#![allow(ellipsis_inclusive_range_patterns)]
|
||||
#![allow(clippy::needless_braces_on_range_literal)]
|
||||
|
||||
macro_rules! a {
|
||||
() => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:19:17
|
||||
--> $DIR/almost_complete_letter_range.rs:20:17
|
||||
|
|
||||
LL | let _ = ('a') ..'z';
|
||||
| ^^^^^^--^^^
|
||||
@ -9,7 +9,7 @@ LL | let _ = ('a') ..'z';
|
||||
= note: `-D clippy::almost-complete-letter-range` implied by `-D warnings`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:20:17
|
||||
--> $DIR/almost_complete_letter_range.rs:21:17
|
||||
|
|
||||
LL | let _ = 'A' .. ('Z');
|
||||
| ^^^^--^^^^^^
|
||||
@ -17,7 +17,7 @@ LL | let _ = 'A' .. ('Z');
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:26:13
|
||||
--> $DIR/almost_complete_letter_range.rs:27:13
|
||||
|
|
||||
LL | let _ = (b'a')..(b'z');
|
||||
| ^^^^^^--^^^^^^
|
||||
@ -25,7 +25,7 @@ LL | let _ = (b'a')..(b'z');
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:27:13
|
||||
--> $DIR/almost_complete_letter_range.rs:28:13
|
||||
|
|
||||
LL | let _ = b'A'..b'Z';
|
||||
| ^^^^--^^^^
|
||||
@ -33,7 +33,7 @@ LL | let _ = b'A'..b'Z';
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:32:13
|
||||
--> $DIR/almost_complete_letter_range.rs:33:13
|
||||
|
|
||||
LL | let _ = a!()..'z';
|
||||
| ^^^^--^^^
|
||||
@ -41,7 +41,7 @@ LL | let _ = a!()..'z';
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:35:9
|
||||
--> $DIR/almost_complete_letter_range.rs:36:9
|
||||
|
|
||||
LL | b'a'..b'z' if true => 1,
|
||||
| ^^^^--^^^^
|
||||
@ -49,7 +49,7 @@ LL | b'a'..b'z' if true => 1,
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:36:9
|
||||
--> $DIR/almost_complete_letter_range.rs:37:9
|
||||
|
|
||||
LL | b'A'..b'Z' if true => 2,
|
||||
| ^^^^--^^^^
|
||||
@ -57,7 +57,7 @@ LL | b'A'..b'Z' if true => 2,
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:43:9
|
||||
--> $DIR/almost_complete_letter_range.rs:44:9
|
||||
|
|
||||
LL | 'a'..'z' if true => 1,
|
||||
| ^^^--^^^
|
||||
@ -65,7 +65,7 @@ LL | 'a'..'z' if true => 1,
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:44:9
|
||||
--> $DIR/almost_complete_letter_range.rs:45:9
|
||||
|
|
||||
LL | 'A'..'Z' if true => 2,
|
||||
| ^^^--^^^
|
||||
@ -73,7 +73,7 @@ LL | 'A'..'Z' if true => 2,
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:54:9
|
||||
--> $DIR/almost_complete_letter_range.rs:55:9
|
||||
|
|
||||
LL | 'a'..'z' => 1,
|
||||
| ^^^--^^^
|
||||
@ -81,7 +81,7 @@ LL | 'a'..'z' => 1,
|
||||
| help: use an inclusive range: `...`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:61:13
|
||||
--> $DIR/almost_complete_letter_range.rs:62:13
|
||||
|
|
||||
LL | let _ = 'a'..'z';
|
||||
| ^^^--^^^
|
||||
@ -89,7 +89,7 @@ LL | let _ = 'a'..'z';
|
||||
| help: use an inclusive range: `..=`
|
||||
|
||||
error: almost complete ascii letter range
|
||||
--> $DIR/almost_complete_letter_range.rs:63:9
|
||||
--> $DIR/almost_complete_letter_range.rs:64:9
|
||||
|
|
||||
LL | 'a'..'z' => 1,
|
||||
| ^^^--^^^
|
||||
|
9
tests/ui/needless_braces_on_range_literal.fixed
Normal file
9
tests/ui/needless_braces_on_range_literal.fixed
Normal file
@ -0,0 +1,9 @@
|
||||
// run-rustfix
|
||||
// edition:2018
|
||||
|
||||
#![warn(clippy::needless_braces_on_range_literal)]
|
||||
#![allow(clippy::almost_complete_letter_range)]
|
||||
|
||||
fn main() {
|
||||
let _ = 'a'..='z';
|
||||
}
|
9
tests/ui/needless_braces_on_range_literal.rs
Normal file
9
tests/ui/needless_braces_on_range_literal.rs
Normal file
@ -0,0 +1,9 @@
|
||||
// run-rustfix
|
||||
// edition:2018
|
||||
|
||||
#![warn(clippy::needless_braces_on_range_literal)]
|
||||
#![allow(clippy::almost_complete_letter_range)]
|
||||
|
||||
fn main() {
|
||||
let _ = ('a')..=('z');
|
||||
}
|
16
tests/ui/needless_braces_on_range_literal.stderr
Normal file
16
tests/ui/needless_braces_on_range_literal.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error: needless braces on range literal can be removed
|
||||
--> $DIR/needless_braces_on_range_literal.rs:8:13
|
||||
|
|
||||
LL | let _ = ('a')..=('z');
|
||||
| ^^^^^ help: try: `'a'`
|
||||
|
|
||||
= note: `-D clippy::needless-braces-on-range-literal` implied by `-D warnings`
|
||||
|
||||
error: needless braces on range literal can be removed
|
||||
--> $DIR/needless_braces_on_range_literal.rs:8:21
|
||||
|
|
||||
LL | let _ = ('a')..=('z');
|
||||
| ^^^^^ help: try: `'z'`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
Loading…
x
Reference in New Issue
Block a user