diff --git a/serde/Cargo.toml b/serde/Cargo.toml index 33fdba83..97d8287d 100644 --- a/serde/Cargo.toml +++ b/serde/Cargo.toml @@ -9,12 +9,13 @@ documentation = "https://serde-rs.github.io/serde/serde/serde/index.html" readme = "../README.md" keywords = ["serde", "serialization"] -[dependencies] -num = "^0.1.27" - [features] -nightly = [] -num-impls = ["num-bigint", "num-complex", "num-rational"] +nightly = ["clippy"] num-bigint = ["num/bigint"] num-complex = ["num/complex"] +num-impls = ["num-bigint", "num-complex", "num-rational"] num-rational = ["num/rational"] + +[dependencies] +clippy = { version = "^0.0.35", optional = true } +num = { version = "^0.1.27", default-features = false } diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index df6ba502..8c7565da 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -234,7 +234,7 @@ impl Visitor for StringVisitor { fn visit_str(&mut self, v: &str) -> Result where E: Error, { - Ok(v.to_string()) + Ok(v.to_owned()) } fn visit_string(&mut self, v: String) -> Result @@ -247,12 +247,12 @@ impl Visitor for StringVisitor { where E: Error, { match str::from_utf8(v) { - Ok(s) => Ok(s.to_string()), + Ok(s) => Ok(s.to_owned()), Err(_) => Err(Error::type_mismatch(Type::String)), } } - fn visit_byte_buf<'a, E>(&mut self, v: Vec) -> Result + fn visit_byte_buf(&mut self, v: Vec) -> Result where E: Error, { match String::from_utf8(v) { diff --git a/serde/src/lib.rs b/serde/src/lib.rs index e4072d1c..b3e3148e 100644 --- a/serde/src/lib.rs +++ b/serde/src/lib.rs @@ -10,7 +10,10 @@ //! [github repository](https://github.com/serde-rs/serde) #![doc(html_root_url="https://serde-rs.github.io/serde/serde")] -#![cfg_attr(feature = "nightly", feature(collections, enumset, nonzero, step_trait, zero_one))] +#![cfg_attr(feature = "nightly", feature(collections, enumset, nonzero, plugin, step_trait, + zero_one))] +#![cfg_attr(feature = "nightly", plugin(clippy))] +#![cfg_attr(feature = "nightly", allow(linkedlist))] #![deny(missing_docs)] diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index 6a9a369e..6c33dddb 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -566,8 +566,8 @@ impl MapVisitor for MapIteratorVisitor { match self.iter.next() { Some((key, value)) => { - let value = try!(serializer.visit_map_elt(key, value)); - Ok(Some(value)) + try!(serializer.visit_map_elt(key, value)); + Ok(Some(())) } None => Ok(None) } diff --git a/serde/src/ser/mod.rs b/serde/src/ser/mod.rs index 7dc9b1de..392ca815 100644 --- a/serde/src/ser/mod.rs +++ b/serde/src/ser/mod.rs @@ -322,6 +322,7 @@ pub trait Serializer { } /// A trait that is used by a `Serialize` to iterate through a sequence. +#[cfg_attr(feature = "nightly", allow(len_without_is_empty))] pub trait SeqVisitor { /// Serializes a sequence item in the serializer. /// @@ -338,6 +339,7 @@ pub trait SeqVisitor { } /// A trait that is used by a `Serialize` to iterate through a map. +#[cfg_attr(feature = "nightly", allow(len_without_is_empty))] pub trait MapVisitor { /// Serializes a map item in the serializer. /// diff --git a/serde_codegen/Cargo.toml b/serde_codegen/Cargo.toml index cc7a5911..072e440a 100644 --- a/serde_codegen/Cargo.toml +++ b/serde_codegen/Cargo.toml @@ -11,7 +11,7 @@ keywords = ["serde", "serialization"] [features] default = ["with-syntex"] -nightly = ["quasi_macros"] +nightly = ["clippy", "quasi_macros"] with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"] [build-dependencies] @@ -20,6 +20,7 @@ syntex = { version = "^0.26.0", optional = true } [dependencies] aster = { version = "^0.10.0", default-features = false } +clippy = { version = "^0.0.35", optional = true } quasi = { version = "^0.4.0", default-features = false } quasi_macros = { version = "^0.4.0", optional = true } syntex = { version = "^0.26.0", optional = true } diff --git a/serde_codegen/src/attr.rs b/serde_codegen/src/attr.rs index af65f6d1..c4425dda 100644 --- a/serde_codegen/src/attr.rs +++ b/serde_codegen/src/attr.rs @@ -32,7 +32,7 @@ impl FieldAttrs { /// Return a set of formats that the field has attributes for. pub fn formats(&self) -> HashSet> { match self.names { - FieldNames::Format{ref formats, default: _} => { + FieldNames::Format { ref formats, .. } => { let mut set = HashSet::new(); for (fmt, _) in formats.iter() { set.insert(fmt.clone()); @@ -70,7 +70,7 @@ impl FieldAttrs { pub fn default_key_expr(&self) -> &P { match self.names { FieldNames::Global(ref expr) => expr, - FieldNames::Format{formats: _, ref default} => default, + FieldNames::Format { ref default, .. } => default, } } diff --git a/serde_codegen/src/lib.rs b/serde_codegen/src/lib.rs index af94ac5d..2528e43c 100644 --- a/serde_codegen/src/lib.rs +++ b/serde_codegen/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(feature = "nightly", plugin(clippy))] +#![cfg_attr(feature = "nightly", allow(used_underscore_binding))] #![cfg_attr(not(feature = "with-syntex"), feature(rustc_private, plugin))] #![cfg_attr(not(feature = "with-syntex"), plugin(quasi_macros))] diff --git a/serde_macros/Cargo.toml b/serde_macros/Cargo.toml index 93b01fc0..ce4ed232 100644 --- a/serde_macros/Cargo.toml +++ b/serde_macros/Cargo.toml @@ -13,6 +13,7 @@ name = "serde_macros" plugin = true [dependencies] +clippy = "^0.0.35" serde_codegen = { version = "*", path = "../serde_codegen", default-features = false, features = ["nightly"] } [dev-dependencies] diff --git a/serde_macros/benches/bench.rs b/serde_macros/benches/bench.rs index 519c189f..7b545011 100644 --- a/serde_macros/benches/bench.rs +++ b/serde_macros/benches/bench.rs @@ -1,4 +1,5 @@ #![feature(custom_attribute, custom_derive, plugin, test)] +#![plugin(clippy)] #![plugin(serde_macros)] extern crate num; diff --git a/serde_macros/src/lib.rs b/serde_macros/src/lib.rs index 17e39bb4..edd2addc 100644 --- a/serde_macros/src/lib.rs +++ b/serde_macros/src/lib.rs @@ -1,4 +1,5 @@ -#![feature(plugin_registrar, rustc_private)] +#![feature(plugin, plugin_registrar, rustc_private)] +#![plugin(clippy)] extern crate serde_codegen; extern crate rustc_plugin; diff --git a/serde_tests/Cargo.toml b/serde_tests/Cargo.toml index 4e0dba9a..16f8d75b 100644 --- a/serde_tests/Cargo.toml +++ b/serde_tests/Cargo.toml @@ -10,6 +10,9 @@ readme = "README.md" keywords = ["serialization"] build = "build.rs" +[features] +nightly = ["clippy", "serde/nightly"] + [build-dependencies] syntex = { version = "^0.26.0" } syntex_syntax = { version = "^0.26.0" } @@ -21,6 +24,9 @@ rustc-serialize = "^0.3.16" serde = { version = "*", path = "../serde", features = ["num-impls"] } syntex = "^0.26.0" +[dependencies] +clippy = { version = "^0.0.35", optional = true } + [[test]] name = "test" path = "tests/test.rs" diff --git a/serde_tests/benches/bench.rs b/serde_tests/benches/bench.rs index 181c4c61..db86c6a6 100644 --- a/serde_tests/benches/bench.rs +++ b/serde_tests/benches/bench.rs @@ -1,4 +1,6 @@ #![feature(test)] +#![cfg_attr(feature = "nightly", feature(plugin))] +#![cfg_attr(feature = "nightly", plugin(clippy))] extern crate num; extern crate rustc_serialize; diff --git a/serde_tests/benches/bench_enum.rs b/serde_tests/benches/bench_enum.rs index 0367df8b..9bba7d32 100644 --- a/serde_tests/benches/bench_enum.rs +++ b/serde_tests/benches/bench_enum.rs @@ -415,7 +415,7 @@ fn bench_decoder_dog(b: &mut Bencher) { #[bench] fn bench_decoder_frog(b: &mut Bencher) { b.iter(|| { - let animal = Animal::Frog("Henry".to_string(), 349); + let animal = Animal::Frog("Henry".to_owned(), 349); let mut d = decoder::AnimalDecoder::new(animal.clone()); let value: Animal = Decodable::decode(&mut d).unwrap(); @@ -439,7 +439,7 @@ fn bench_deserializer_dog(b: &mut Bencher) { #[bench] fn bench_deserializer_frog(b: &mut Bencher) { b.iter(|| { - let animal = Animal::Frog("Henry".to_string(), 349); + let animal = Animal::Frog("Henry".to_owned(), 349); let mut d = deserializer::AnimalDeserializer::new(animal.clone()); let value: Animal = Deserialize::deserialize(&mut d).unwrap(); diff --git a/serde_tests/benches/bench_struct.rs b/serde_tests/benches/bench_struct.rs index 0e53d1a3..6613c5e3 100644 --- a/serde_tests/benches/bench_struct.rs +++ b/serde_tests/benches/bench_struct.rs @@ -614,7 +614,7 @@ mod deserializer { fn bench_decoder_0_0(b: &mut Bencher) { b.iter(|| { let mut map = HashMap::new(); - map.insert("abc".to_string(), Some('c')); + map.insert("abc".to_owned(), Some('c')); let outer = Outer { inner: vec!(), @@ -653,11 +653,11 @@ fn bench_decoder_1_0(b: &mut Bencher) { fn bench_decoder_1_5(b: &mut Bencher) { b.iter(|| { let mut map = HashMap::new(); - map.insert("1".to_string(), Some('a')); - map.insert("2".to_string(), None); - map.insert("3".to_string(), Some('b')); - map.insert("4".to_string(), None); - map.insert("5".to_string(), Some('c')); + map.insert("1".to_owned(), Some('a')); + map.insert("2".to_owned(), None); + map.insert("3".to_owned(), Some('b')); + map.insert("4".to_owned(), None); + map.insert("5".to_owned(), Some('c')); let outer = Outer { inner: vec!( @@ -716,11 +716,11 @@ fn bench_deserializer_1_0(b: &mut Bencher) { fn bench_deserializer_1_5(b: &mut Bencher) { b.iter(|| { let mut map = HashMap::new(); - map.insert("1".to_string(), Some('a')); - map.insert("2".to_string(), None); - map.insert("3".to_string(), Some('b')); - map.insert("4".to_string(), None); - map.insert("5".to_string(), Some('c')); + map.insert("1".to_owned(), Some('a')); + map.insert("2".to_owned(), None); + map.insert("3".to_owned(), Some('b')); + map.insert("4".to_owned(), None); + map.insert("5".to_owned(), Some('c')); let outer = Outer { inner: vec!( diff --git a/serde_tests/tests/test.rs b/serde_tests/tests/test.rs index 416704ce..7fefeebc 100644 --- a/serde_tests/tests/test.rs +++ b/serde_tests/tests/test.rs @@ -1,3 +1,6 @@ +#![cfg_attr(feature = "nightly", feature(plugin))] +#![cfg_attr(feature = "nightly", plugin(clippy))] + extern crate num; extern crate serde; diff --git a/serde_tests/tests/test_de.rs b/serde_tests/tests/test_de.rs index 5f847770..f818b105 100644 --- a/serde_tests/tests/test_de.rs +++ b/serde_tests/tests/test_de.rs @@ -95,12 +95,12 @@ declare_tests! { test_char { 'a' => vec![Token::Char('a')], 'a' => vec![Token::Str("a")], - 'a' => vec![Token::String("a".to_string())], + 'a' => vec![Token::String("a".to_owned())], } test_string { - "abc".to_string() => vec![Token::Str("abc")], - "abc".to_string() => vec![Token::String("abc".to_string())], - "a".to_string() => vec![Token::Char('a')], + "abc".to_owned() => vec![Token::Str("abc")], + "abc".to_owned() => vec![Token::String("abc".to_owned())], + "a".to_owned() => vec![Token::Char('a')], } test_option { None:: => vec![Token::Unit], diff --git a/serde_tests/tests/test_ser.rs b/serde_tests/tests/test_ser.rs index 6a454814..a5947508 100644 --- a/serde_tests/tests/test_ser.rs +++ b/serde_tests/tests/test_ser.rs @@ -63,7 +63,7 @@ declare_ser_tests! { } test_str { "abc" => &[Token::Str("abc")], - "abc".to_string() => &[Token::Str("abc")], + "abc".to_owned() => &[Token::Str("abc")], } test_option { None:: => &[Token::Option(false)], diff --git a/serde_tests/tests/token.rs b/serde_tests/tests/token.rs index 4815dd1d..ad86cb67 100644 --- a/serde_tests/tests/token.rs +++ b/serde_tests/tests/token.rs @@ -325,7 +325,7 @@ impl de::Error for Error { fn end_of_stream() -> Error { Error::EndOfStreamError } fn unknown_field(field: &str) -> Error { - Error::UnknownFieldError(field.to_string()) + Error::UnknownFieldError(field.to_owned()) } fn missing_field(field: &'static str) -> Error {