Change to only detect in external macros.

This commit is contained in:
daxpedda
2019-12-05 11:06:13 +01:00
parent d11b958faf
commit 946961d19e
4 changed files with 21 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
use rustc::declare_lint_pass; use rustc::declare_lint_pass;
use rustc::hir::*; use rustc::hir::*;
use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass}; use rustc::lint::{in_external_macro, LateContext, LateLintPass, LintArray, LintContext, LintPass};
use rustc_errors::Applicability; use rustc_errors::Applicability;
use rustc_session::declare_tool_lint; use rustc_session::declare_tool_lint;
use syntax::source_map::Spanned; use syntax::source_map::Spanned;
@@ -8,9 +8,7 @@ use syntax::source_map::Spanned;
use if_chain::if_chain; use if_chain::if_chain;
use crate::utils::SpanlessEq; use crate::utils::SpanlessEq;
use crate::utils::{ use crate::utils::{get_parent_expr, is_allowed, match_type, paths, span_lint, span_lint_and_sugg, walk_ptrs_ty};
get_parent_expr, in_macro, is_allowed, match_type, paths, span_lint, span_lint_and_sugg, walk_ptrs_ty,
};
declare_clippy_lint! { declare_clippy_lint! {
/// **What it does:** Checks for string appends of the form `x = x + y` (without /// **What it does:** Checks for string appends of the form `x = x + y` (without
@@ -82,7 +80,7 @@ declare_lint_pass!(StringAdd => [STRING_ADD, STRING_ADD_ASSIGN]);
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for StringAdd { impl<'a, 'tcx> LateLintPass<'a, 'tcx> for StringAdd {
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, e: &'tcx Expr) { fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, e: &'tcx Expr) {
if in_macro(e.span) { if in_external_macro(cx.sess(), e.span) {
return; return;
} }

View File

@@ -31,3 +31,11 @@ macro_rules! try_err {
} }
}; };
} }
#[macro_export]
macro_rules! string_add {
() => {
let y = "".to_owned();
let z = y + "...";
};
}

View File

@@ -1,3 +1,8 @@
// aux-build:macro_rules.rs
#[macro_use]
extern crate macro_rules;
#[warn(clippy::string_add)] #[warn(clippy::string_add)]
#[allow(clippy::string_add_assign, unused)] #[allow(clippy::string_add_assign, unused)]
fn main() { fn main() {
@@ -17,12 +22,5 @@ fn main() {
x = x + 1; x = x + 1;
assert_eq!(2, x); assert_eq!(2, x);
macro_rules! mac { string_add!();
() => {
let y = "".to_owned();
let z = y + "...";
};
}
mac!();
} }

View File

@@ -1,5 +1,5 @@
error: manual implementation of an assign operation error: manual implementation of an assign operation
--> $DIR/string_add.rs:8:9 --> $DIR/string_add.rs:13:9
| |
LL | x = x + "."; LL | x = x + ".";
| ^^^^^^^^^^^ help: replace it with: `x += "."` | ^^^^^^^^^^^ help: replace it with: `x += "."`
@@ -7,7 +7,7 @@ LL | x = x + ".";
= note: `-D clippy::assign-op-pattern` implied by `-D warnings` = note: `-D clippy::assign-op-pattern` implied by `-D warnings`
error: you added something to a string. Consider using `String::push_str()` instead error: you added something to a string. Consider using `String::push_str()` instead
--> $DIR/string_add.rs:8:13 --> $DIR/string_add.rs:13:13
| |
LL | x = x + "."; LL | x = x + ".";
| ^^^^^^^ | ^^^^^^^
@@ -15,13 +15,13 @@ LL | x = x + ".";
= note: `-D clippy::string-add` implied by `-D warnings` = note: `-D clippy::string-add` implied by `-D warnings`
error: you added something to a string. Consider using `String::push_str()` instead error: you added something to a string. Consider using `String::push_str()` instead
--> $DIR/string_add.rs:12:13 --> $DIR/string_add.rs:17:13
| |
LL | let z = y + "..."; LL | let z = y + "...";
| ^^^^^^^^^ | ^^^^^^^^^
error: manual implementation of an assign operation error: manual implementation of an assign operation
--> $DIR/string_add.rs:17:5 --> $DIR/string_add.rs:22:5
| |
LL | x = x + 1; LL | x = x + 1;
| ^^^^^^^^^ help: replace it with: `x += 1` | ^^^^^^^^^ help: replace it with: `x += 1`