Added &String matching and renamed to vec_ptr_arg to ptr_arg, also added README section

This commit is contained in:
llogiq
2015-05-04 08:15:24 +02:00
parent 07adeee6e9
commit 8d2328d9a5
5 changed files with 37 additions and 25 deletions

View File

@@ -18,8 +18,8 @@ pub mod types;
pub mod misc;
pub mod eq_op;
pub mod bit_mask;
pub mod ptr_arg;
pub mod needless_bool;
pub mod vec_ptr_arg;
#[plugin_registrar]
pub fn plugin_registrar(reg: &mut Registry) {
@@ -29,14 +29,13 @@ pub fn plugin_registrar(reg: &mut Registry) {
reg.register_lint_pass(box misc::TopLevelRefPass as LintPassObject);
reg.register_lint_pass(box eq_op::EqOp as LintPassObject);
reg.register_lint_pass(box bit_mask::BitMask as LintPassObject);
reg.register_lint_pass(box ptr_arg::PtrArg as LintPassObject);
reg.register_lint_pass(box needless_bool::NeedlessBool as LintPassObject);
reg.register_lint_pass(box vec_ptr_arg::VecPtrArg as LintPassObject);
reg.register_lint_group("clippy", vec![types::BOX_VEC, types::LINKEDLIST,
misc::SINGLE_MATCH, misc::STR_TO_STRING,
misc::TOPLEVEL_REF_ARG, eq_op::EQ_OP,
bit_mask::BAD_BIT_MASK,
needless_bool::NEEDLESS_BOOL,
vec_ptr_arg::VEC_PTR_ARG
bit_mask::BAD_BIT_MASK, ptr_arg::PTR_ARG,
needless_bool::NEEDLESS_BOOL
]);
}

View File

@@ -13,18 +13,18 @@ use syntax::codemap::Span;
use types::match_ty_unwrap;
declare_lint! {
pub VEC_PTR_ARG,
pub PTR_ARG,
Allow,
"Warn on declaration of a &Vec-typed method argument"
"Warn on declaration of a &Vec- or &String-typed method argument"
}
#[derive(Copy,Clone)]
pub struct VecPtrArg;
pub struct PtrArg;
impl LintPass for VecPtrArg {
impl LintPass for PtrArg {
fn get_lints(&self) -> LintArray {
lint_array!(VEC_PTR_ARG)
lint_array!(PTR_ARG)
}
fn check_item(&mut self, cx: &Context, item: &Item) {
@@ -59,7 +59,11 @@ fn check_fn(cx: &Context, decl: &FnDecl) {
fn check_ptr_subtype(cx: &Context, span: Span, ty: &Ty) {
if match_ty_unwrap(ty, &["Vec"]).is_some() {
cx.span_lint(VEC_PTR_ARG, span,
cx.span_lint(PTR_ARG, span,
"Writing '&Vec<_>' instead of '&[_]' involves one more reference and cannot be used with non-vec-based slices. Consider changing the type to &[...]");
} else { if match_ty_unwrap(ty, &["String"]).is_some() {
cx.span_lint(PTR_ARG, span,
"Writing '&String' instead of '&str' involves a new Object where a slices will do. Consider changing the type to &str");
}
}
}