mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-26 22:50:56 +00:00
Change to only detect in external macros.
This commit is contained in:
parent
d11b958faf
commit
946961d19e
4 changed files with 21 additions and 17 deletions
|
@ -1,6 +1,6 @@
|
|||
use rustc::declare_lint_pass;
|
||||
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_session::declare_tool_lint;
|
||||
use syntax::source_map::Spanned;
|
||||
|
@ -8,9 +8,7 @@ use syntax::source_map::Spanned;
|
|||
use if_chain::if_chain;
|
||||
|
||||
use crate::utils::SpanlessEq;
|
||||
use crate::utils::{
|
||||
get_parent_expr, in_macro, is_allowed, match_type, paths, span_lint, span_lint_and_sugg, walk_ptrs_ty,
|
||||
};
|
||||
use crate::utils::{get_parent_expr, is_allowed, match_type, paths, span_lint, span_lint_and_sugg, walk_ptrs_ty};
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// **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 {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,3 +31,11 @@ macro_rules! try_err {
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! string_add {
|
||||
() => {
|
||||
let y = "".to_owned();
|
||||
let z = y + "...";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// aux-build:macro_rules.rs
|
||||
|
||||
#[macro_use]
|
||||
extern crate macro_rules;
|
||||
|
||||
#[warn(clippy::string_add)]
|
||||
#[allow(clippy::string_add_assign, unused)]
|
||||
fn main() {
|
||||
|
@ -17,12 +22,5 @@ fn main() {
|
|||
x = x + 1;
|
||||
assert_eq!(2, x);
|
||||
|
||||
macro_rules! mac {
|
||||
() => {
|
||||
let y = "".to_owned();
|
||||
let z = y + "...";
|
||||
};
|
||||
}
|
||||
|
||||
mac!();
|
||||
string_add!();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: manual implementation of an assign operation
|
||||
--> $DIR/string_add.rs:8:9
|
||||
--> $DIR/string_add.rs:13:9
|
||||
|
|
||||
LL | x = x + ".";
|
||||
| ^^^^^^^^^^^ help: replace it with: `x += "."`
|
||||
|
@ -7,7 +7,7 @@ LL | x = x + ".";
|
|||
= note: `-D clippy::assign-op-pattern` implied by `-D warnings`
|
||||
|
||||
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 + ".";
|
||||
| ^^^^^^^
|
||||
|
@ -15,13 +15,13 @@ LL | x = x + ".";
|
|||
= note: `-D clippy::string-add` implied by `-D warnings`
|
||||
|
||||
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 + "...";
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: manual implementation of an assign operation
|
||||
--> $DIR/string_add.rs:17:5
|
||||
--> $DIR/string_add.rs:22:5
|
||||
|
|
||||
LL | x = x + 1;
|
||||
| ^^^^^^^^^ help: replace it with: `x += 1`
|
||||
|
|
Loading…
Reference in a new issue