Merge pull request #2493 from bootandy/fix_cow
Lint passing Cow by reference
This commit is contained in:
commit
40ebff8c7a
3 changed files with 47 additions and 2 deletions
|
|
@ -3,6 +3,7 @@
|
|||
use std::borrow::Cow;
|
||||
use rustc::hir::*;
|
||||
use rustc::hir::map::NodeItem;
|
||||
use rustc::hir::QPath;
|
||||
use rustc::lint::*;
|
||||
use rustc::ty;
|
||||
use syntax::ast::NodeId;
|
||||
|
|
@ -213,6 +214,33 @@ fn check_fn(cx: &LateContext, decl: &FnDecl, fn_id: NodeId, opt_body_id: Option<
|
|||
},
|
||||
);
|
||||
}
|
||||
} else if match_type(cx, ty, &paths::COW) {
|
||||
if_chain! {
|
||||
if let TyRptr(_, MutTy { ref ty, ..} ) = arg.node;
|
||||
if let TyPath(ref path) = ty.node;
|
||||
if let QPath::Resolved(None, ref pp) = *path;
|
||||
if let [ref bx] = *pp.segments;
|
||||
if let Some(ref params) = bx.parameters;
|
||||
if !params.parenthesized;
|
||||
if let [ref inner] = *params.types;
|
||||
then {
|
||||
let replacement = snippet_opt(cx, inner.span);
|
||||
match replacement {
|
||||
Some(r) => {
|
||||
span_lint_and_then(
|
||||
cx,
|
||||
PTR_ARG,
|
||||
arg.span,
|
||||
"using a reference to `Cow` is not recommended.",
|
||||
|db| {
|
||||
db.span_suggestion(arg.span, "change this to", "&".to_owned() + &r);
|
||||
},
|
||||
);
|
||||
},
|
||||
None => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
use std::borrow::Cow;
|
||||
|
||||
|
||||
fn x(y: &i32) -> i32 {
|
||||
|
|
@ -51,3 +51,12 @@ fn issue_1432() {
|
|||
|
||||
let _ = v.iter().filter(|&a| a.is_empty());
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn test_cow_with_ref(c: &Cow<[i32]>) {
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn test_cow(c: Cow<[i32]>) {
|
||||
let _c = c;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,5 +38,13 @@ error: this pattern creates a reference to a reference
|
|||
50 | let _ = v.iter().filter(|&ref a| a.is_empty());
|
||||
| ^^^^^ help: change this to: `a`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error: using a reference to `Cow` is not recommended.
|
||||
--> $DIR/needless_borrow.rs:56:25
|
||||
|
|
||||
56 | fn test_cow_with_ref(c: &Cow<[i32]>) {
|
||||
| ^^^^^^^^^^^ help: change this to: `&[i32]`
|
||||
|
|
||||
= note: `-D ptr-arg` implied by `-D warnings`
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue