[INFO] crate classifier 0.0.3 is already in cache [INFO] extracting crate classifier 0.0.3 into work/ex/clippy-test-run/sources/stable/reg/classifier/0.0.3 [INFO] extracting crate classifier 0.0.3 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/classifier/0.0.3 [INFO] validating manifest of classifier-0.0.3 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of classifier-0.0.3 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing classifier-0.0.3 [INFO] finished frobbing classifier-0.0.3 [INFO] frobbed toml for classifier-0.0.3 written to work/ex/clippy-test-run/sources/stable/reg/classifier/0.0.3/Cargo.toml [INFO] started frobbing classifier-0.0.3 [INFO] finished frobbing classifier-0.0.3 [INFO] frobbed toml for classifier-0.0.3 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/classifier/0.0.3/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting classifier-0.0.3 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/classifier/0.0.3:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 8c87b684d8a292f922e3c9cddc811033d18f66986854a7b3579d497b19c1abd1 [INFO] running `"docker" "start" "-a" "8c87b684d8a292f922e3c9cddc811033d18f66986854a7b3579d497b19c1abd1"` [INFO] [stderr] Checking classifier v0.0.3 (/opt/crater/workdir) [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/naive_bayes.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | let mut classification = self.classifications.get_mut(label).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/naive_bayes.rs:51:13 [INFO] [stderr] | [INFO] [stderr] 51 | let mut classification = self.classifications.get_mut(label).unwrap(); [INFO] [stderr] | ----^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `naive_bayes::Classifier` [INFO] [stderr] --> src/naive_bayes.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> Classifier { [INFO] [stderr] 31 | | Classifier { [INFO] [stderr] 32 | | vocab: HashSet::new(), [INFO] [stderr] 33 | | num_examples: 0u32, [INFO] [stderr] ... | [INFO] [stderr] 36 | | } [INFO] [stderr] 37 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:42:56 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn add_document_tokenized(&mut self, document: &Vec, label: &String) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:42:77 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn add_document_tokenized(&mut self, document: &Vec, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/naive_bayes.rs:43:12 [INFO] [stderr] | [INFO] [stderr] 43 | if document.len() == 0 { return; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `document.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:66:46 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn add_document(&mut self, document: &String, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:66:62 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn add_document(&mut self, document: &String, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn add_documents(&mut self, examples: &Vec<(String, String)>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:78:57 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn add_documents_tokenized(&mut self, examples: &Vec<(Vec, String)>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(Vec, String)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:109:48 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn classify_tokenized(&self, document: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:126:38 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn classify(&self, document: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:132:66 [INFO] [stderr] | [INFO] [stderr] 132 | pub fn get_document_probabilities_tokenized(&self, document: &Vec) -> Vec<(String, f64)> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:148:56 [INFO] [stderr] | [INFO] [stderr] 148 | pub fn get_document_probabilities(&self, document: &String) -> Vec<(String, f64)> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/naive_bayes.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | json::encode(self).ok().expect("encoding JSON failed") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/naive_bayes.rs:159:38 [INFO] [stderr] | [INFO] [stderr] 159 | let classifier: Classifier = json::decode(encoded).ok().expect("decoding JSON failed"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:168:19 [INFO] [stderr] | [INFO] [stderr] 168 | fn new(label: &String) -> Classification { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 168 | fn new(label: &str) -> Classification { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `label.clone()` to [INFO] [stderr] | [INFO] [stderr] 170 | label: label.to_string(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:179:34 [INFO] [stderr] | [INFO] [stderr] 179 | fn add_word(&mut self, word: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:191:28 [INFO] [stderr] | [INFO] [stderr] 191 | self.probability = self.num_examples as f64 / total_examples as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_examples)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:191:55 [INFO] [stderr] | [INFO] [stderr] 191 | self.probability = self.num_examples as f64 / total_examples as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(total_examples)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:195:14 [INFO] [stderr] | [INFO] [stderr] 195 | (self.num_words as f64 + smoothing * vocab.len() as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_words)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:202:22 [INFO] [stderr] | [INFO] [stderr] 202 | (word_count as f64 + smoothing) / [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f64::from(word_count)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:203:22 [INFO] [stderr] | [INFO] [stderr] 203 | (self.num_words as f64 + smoothing * vocab.len() as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_words)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:211:40 [INFO] [stderr] | [INFO] [stderr] 211 | fn score_document(&self, document: &Vec, vocab: &HashSet) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:227:29 [INFO] [stderr] | [INFO] [stderr] 227 | fn split_document(document: &String) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `naive_bayes::Classifier` [INFO] [stderr] --> src/naive_bayes.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | / pub fn new() -> Classifier { [INFO] [stderr] 31 | | Classifier { [INFO] [stderr] 32 | | vocab: HashSet::new(), [INFO] [stderr] 33 | | num_examples: 0u32, [INFO] [stderr] ... | [INFO] [stderr] 36 | | } [INFO] [stderr] 37 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 10 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:42:56 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn add_document_tokenized(&mut self, document: &Vec, label: &String) { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:42:77 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn add_document_tokenized(&mut self, document: &Vec, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/naive_bayes.rs:43:12 [INFO] [stderr] | [INFO] [stderr] 43 | if document.len() == 0 { return; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `document.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:66:46 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn add_document(&mut self, document: &String, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:66:62 [INFO] [stderr] | [INFO] [stderr] 66 | pub fn add_document(&mut self, document: &String, label: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:71:47 [INFO] [stderr] | [INFO] [stderr] 71 | pub fn add_documents(&mut self, examples: &Vec<(String, String)>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(String, String)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:78:57 [INFO] [stderr] | [INFO] [stderr] 78 | pub fn add_documents_tokenized(&mut self, examples: &Vec<(Vec, String)>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[(Vec, String)]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:109:48 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn classify_tokenized(&self, document: &Vec) -> String { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:126:38 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn classify(&self, document: &String) -> String { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:132:66 [INFO] [stderr] | [INFO] [stderr] 132 | pub fn get_document_probabilities_tokenized(&self, document: &Vec) -> Vec<(String, f64)> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:148:56 [INFO] [stderr] | [INFO] [stderr] 148 | pub fn get_document_probabilities(&self, document: &String) -> Vec<(String, f64)> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/naive_bayes.rs:154:9 [INFO] [stderr] | [INFO] [stderr] 154 | json::encode(self).ok().expect("encoding JSON failed") [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/naive_bayes.rs:159:38 [INFO] [stderr] | [INFO] [stderr] 159 | let classifier: Classifier = json::decode(encoded).ok().expect("decoding JSON failed"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:168:19 [INFO] [stderr] | [INFO] [stderr] 168 | fn new(label: &String) -> Classification { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] help: change this to [INFO] [stderr] | [INFO] [stderr] 168 | fn new(label: &str) -> Classification { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `label.clone()` to [INFO] [stderr] | [INFO] [stderr] 170 | label: label.to_string(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:179:34 [INFO] [stderr] | [INFO] [stderr] 179 | fn add_word(&mut self, word: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:191:28 [INFO] [stderr] | [INFO] [stderr] 191 | self.probability = self.num_examples as f64 / total_examples as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_examples)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:191:55 [INFO] [stderr] | [INFO] [stderr] 191 | self.probability = self.num_examples as f64 / total_examples as f64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(total_examples)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:195:14 [INFO] [stderr] | [INFO] [stderr] 195 | (self.num_words as f64 + smoothing * vocab.len() as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_words)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:202:22 [INFO] [stderr] | [INFO] [stderr] 202 | (word_count as f64 + smoothing) / [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `f64::from(word_count)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/naive_bayes.rs:203:22 [INFO] [stderr] | [INFO] [stderr] 203 | (self.num_words as f64 + smoothing * vocab.len() as f64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(self.num_words)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/naive_bayes.rs:211:40 [INFO] [stderr] | [INFO] [stderr] 211 | fn score_document(&self, document: &Vec, vocab: &HashSet) -> f64 { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[String]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/naive_bayes.rs:227:29 [INFO] [stderr] | [INFO] [stderr] 227 | fn split_document(document: &String) -> Vec { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/foods.rs:62:403 [INFO] [stderr] | [INFO] [stderr] 62 | ("beetroot water spinach okra water chestnut ricebean pea catsear courgette summer purslane. water spinach arugula pea tatsoi aubergine spring onion bush tomato kale radicchio turnip chicory salsify pea sprouts fava bean. dandelion zucchini burdock yarrow chickpea dandelion sorrel courgette turnip greens tigernut soybean radish artichoke wattle seed endive groundnut broccoli arugula.".split(" ").map(|s| s.to_string()).collect(), "veggie"), [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/foods.rs:64:438 [INFO] [stderr] | [INFO] [stderr] 64 | ("sirloin meatloaf ham hock sausage meatball tongue prosciutto picanha turkey ball tip pastrami. ribeye chicken sausage, ham hock landjaeger pork belly pancetta ball tip tenderloin leberkas shank shankle rump. cupim short ribs ground round biltong tenderloin ribeye drumstick landjaeger short loin doner chicken shoulder spare ribs fatback boudin. pork chop shank shoulder, t-bone beef ribs drumstick landjaeger meatball.".split(" ").map(|s| s.to_string()).collect(), "meat"), [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/foods.rs:66:596 [INFO] [stderr] | [INFO] [stderr] 66 | ("pea horseradish azuki bean lettuce avocado asparagus okra. kohlrabi radish okra azuki bean corn fava bean mustard tigernut jã­cama green bean celtuce collard greens avocado quandong fennel gumbo black-eyed pea. grape silver beet watercress potato tigernut corn groundnut. chickweed okra pea winter purslane coriander yarrow sweet pepper radish garlic brussels sprout groundnut summer purslane earthnut pea tomato spring onion azuki bean gourd. gumbo kakadu plum komatsuna black-eyed pea green bean zucchini gourd winter purslane silver beet rock melon radish asparagus spinach.".split(" ").map(|s| s.to_string()).collect(), "veggie"), [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/foods.rs:68:314 [INFO] [stderr] | [INFO] [stderr] 68 | ("sirloin porchetta drumstick, pastrami bresaola landjaeger turducken kevin ham capicola corned beef. pork cow capicola, pancetta turkey tri-tip doner ball tip salami. fatback pastrami rump pancetta landjaeger. doner porchetta meatloaf short ribs cow chuck jerky pork chop landjaeger picanha tail.".split(" ").map(|s| s.to_string()).collect(), "meat"), [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/foods.rs:81:59 [INFO] [stderr] | [INFO] [stderr] 81 | let food_sentence = "salami pancetta beef ribs".split(" ").map(|s| s.to_string()).collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> tests/foods.rs:158:13 [INFO] [stderr] | [INFO] [stderr] 158 | assert!(nb.get_labels().len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nb.get_labels().is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 3.30s [INFO] running `"docker" "inspect" "8c87b684d8a292f922e3c9cddc811033d18f66986854a7b3579d497b19c1abd1"` [INFO] running `"docker" "rm" "-f" "8c87b684d8a292f922e3c9cddc811033d18f66986854a7b3579d497b19c1abd1"` [INFO] [stdout] 8c87b684d8a292f922e3c9cddc811033d18f66986854a7b3579d497b19c1abd1