Split redundant_closure lint
Move the method checking into a new lint called `redundant_closures_for_method_calls` and put it in the pedantic group. This aspect of the lint seems more controversial than the rest. cc #3942
This commit is contained in:
parent
f49d878ce5
commit
4fcaab3d62
9 changed files with 52 additions and 21 deletions
|
|
@ -32,7 +32,26 @@ declare_clippy_lint! {
|
|||
"redundant closures, i.e., `|a| foo(a)` (which can be written as just `foo`)"
|
||||
}
|
||||
|
||||
declare_lint_pass!(EtaReduction => [REDUNDANT_CLOSURE]);
|
||||
declare_clippy_lint! {
|
||||
/// **What it does:** Checks for closures which only invoke a method on the closure
|
||||
/// argument and can be replaced by referencing the method directly.
|
||||
///
|
||||
/// **Why is this bad?** It's unnecessary to create the closure.
|
||||
///
|
||||
/// **Example:**
|
||||
/// ```rust,ignore
|
||||
/// Some('a').map(|s| s.to_uppercase());
|
||||
/// ```
|
||||
/// may be rewritten as
|
||||
/// ```rust,ignore
|
||||
/// Some('a').map(char::to_uppercase);
|
||||
/// ```
|
||||
pub REDUNDANT_CLOSURES_FOR_METHOD_CALLS,
|
||||
pedantic,
|
||||
"redundant closures for method calls"
|
||||
}
|
||||
|
||||
declare_lint_pass!(EtaReduction => [REDUNDANT_CLOSURE, REDUNDANT_CLOSURES_FOR_METHOD_CALLS]);
|
||||
|
||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for EtaReduction {
|
||||
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
||||
|
|
@ -104,7 +123,7 @@ fn check_closure(cx: &LateContext<'_, '_>, expr: &Expr) {
|
|||
if let Some(name) = get_ufcs_type_name(cx, method_def_id, &args[0]);
|
||||
|
||||
then {
|
||||
span_lint_and_then(cx, REDUNDANT_CLOSURE, expr.span, "redundant closure found", |db| {
|
||||
span_lint_and_then(cx, REDUNDANT_CLOSURES_FOR_METHOD_CALLS, expr.span, "redundant closure found", |db| {
|
||||
db.span_suggestion(
|
||||
expr.span,
|
||||
"remove closure as shown",
|
||||
|
|
|
|||
|
|
@ -614,6 +614,7 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) {
|
|||
enum_glob_use::ENUM_GLOB_USE,
|
||||
enum_variants::MODULE_NAME_REPETITIONS,
|
||||
enum_variants::PUB_ENUM_VARIANT_NAMES,
|
||||
eta_reduction::REDUNDANT_CLOSURES_FOR_METHOD_CALLS,
|
||||
functions::TOO_MANY_LINES,
|
||||
if_not_else::IF_NOT_ELSE,
|
||||
infinite_iter::MAYBE_INFINITE_ITER,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue