[INFO] crate holmes 0.1.0 is already in cache [INFO] extracting crate holmes 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/holmes/0.1.0 [INFO] extracting crate holmes 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/holmes/0.1.0 [INFO] validating manifest of holmes-0.1.0 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 holmes-0.1.0 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 holmes-0.1.0 [INFO] finished frobbing holmes-0.1.0 [INFO] frobbed toml for holmes-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/holmes/0.1.0/Cargo.toml [INFO] started frobbing holmes-0.1.0 [INFO] finished frobbing holmes-0.1.0 [INFO] frobbed toml for holmes-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/holmes/0.1.0/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 holmes-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/holmes/0.1.0:/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] c2d3fca70ac6f5f757829906cb56551f3b6967f664aee9e747aeecd95597c661 [INFO] running `"docker" "start" "-a" "c2d3fca70ac6f5f757829906cb56551f3b6967f664aee9e747aeecd95597c661"` [INFO] [stderr] Checking phf_shared v0.7.21 [INFO] [stderr] Checking postgres-protocol v0.2.2 [INFO] [stderr] Checking phf v0.7.21 [INFO] [stderr] Checking postgres-shared v0.1.1 [INFO] [stderr] Checking postgres v0.13.6 [INFO] [stderr] Checking holmes v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:235:29 [INFO] [stderr] | [INFO] [stderr] 235 | Arc::new(List { elem: elem }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `elem` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:502:29 [INFO] [stderr] | [INFO] [stderr] 502 | Arc::new(List { elements: elements }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:548:30 [INFO] [stderr] | [INFO] [stderr] 548 | Arc::new(Tuple { elements: elements }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:678:17 [INFO] [stderr] | [INFO] [stderr] 678 | val: val, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:712:31 [INFO] [stderr] | [INFO] [stderr] 712 | Arc::new(String { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:744:30 [INFO] [stderr] | [INFO] [stderr] 744 | Arc::new(Bytes { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:776:35 [INFO] [stderr] | [INFO] [stderr] 776 | Arc::new(LargeBytes { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:235:29 [INFO] [stderr] | [INFO] [stderr] 235 | Arc::new(List { elem: elem }) [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `elem` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:502:29 [INFO] [stderr] | [INFO] [stderr] 502 | Arc::new(List { elements: elements }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:548:30 [INFO] [stderr] | [INFO] [stderr] 548 | Arc::new(Tuple { elements: elements }) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `elements` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:678:17 [INFO] [stderr] | [INFO] [stderr] 678 | val: val, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:712:31 [INFO] [stderr] | [INFO] [stderr] 712 | Arc::new(String { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:744:30 [INFO] [stderr] | [INFO] [stderr] 744 | Arc::new(Bytes { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/dyn.rs:776:35 [INFO] [stderr] | [INFO] [stderr] 776 | Arc::new(LargeBytes { val: val }) [INFO] [stderr] | ^^^^^^^^ help: replace it with: `val` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/mod.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/mod.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | conn: conn, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `conn` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/mod.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/engine/mod.rs:120:22 [INFO] [stderr] | [INFO] [stderr] 120 | Quiescence { signals: signals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `signals` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/pg/mod.rs:209:13 [INFO] [stderr] | [INFO] [stderr] 209 | conn: conn, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `conn` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/engine/mod.rs:120:22 [INFO] [stderr] | [INFO] [stderr] 120 | Quiescence { signals: signals } [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `signals` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/engine/mod.rs:235:21 [INFO] [stderr] | [INFO] [stderr] 235 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:16:50 [INFO] [stderr] | [INFO] [stderr] 16 | use futures::{Stream, Future, Async, Poll, done, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:17:21 [INFO] [stderr] | [INFO] [stderr] 17 | use futures::task::{park, Task}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:66:23 [INFO] [stderr] | [INFO] [stderr] 66 | fn done(&self) -> BoxFuture<(), ()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:98:28 [INFO] [stderr] | [INFO] [stderr] 98 | self.await(park()); [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:131:30 [INFO] [stderr] | [INFO] [stderr] 131 | signal.refer(park()); [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/engine/mod.rs:235:21 [INFO] [stderr] | [INFO] [stderr] 235 | () [INFO] [stderr] | ^^ help: remove the final `()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unused_unit)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:16:50 [INFO] [stderr] | [INFO] [stderr] 16 | use futures::{Stream, Future, Async, Poll, done, BoxFuture}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:17:21 [INFO] [stderr] | [INFO] [stderr] 17 | use futures::task::{park, Task}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::BoxFuture': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:66:23 [INFO] [stderr] | [INFO] [stderr] 66 | fn done(&self) -> BoxFuture<(), ()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:98:28 [INFO] [stderr] | [INFO] [stderr] 98 | self.await(park()); [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::park': renamed to `current` [INFO] [stderr] --> src/engine/mod.rs:131:30 [INFO] [stderr] | [INFO] [stderr] 131 | signal.refer(park()); [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::Task::unpark': renamed to `notify` [INFO] [stderr] --> src/engine/mod.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | Some(t) => t.unpark(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::Task::unpark': renamed to `notify` [INFO] [stderr] --> src/engine/mod.rs:74:22 [INFO] [stderr] | [INFO] [stderr] 74 | task.unpark(); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | done(Ok(())).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::Task::unpark': renamed to `notify` [INFO] [stderr] --> src/engine/mod.rs:60:30 [INFO] [stderr] | [INFO] [stderr] 60 | Some(t) => t.unpark(), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::task::Task::unpark': renamed to `notify` [INFO] [stderr] --> src/engine/mod.rs:74:22 [INFO] [stderr] | [INFO] [stderr] 74 | task.unpark(); [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> src/engine/mod.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | done(Ok(())).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/pg/dyn.rs:227:26 [INFO] [stderr] | [INFO] [stderr] 227 | #[derive(Debug,Clone,Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/pg/dyn.rs:240:5 [INFO] [stderr] | [INFO] [stderr] 240 | / impl PartialEq for List { [INFO] [stderr] 241 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 242 | | *self.elem == *other.elem [INFO] [stderr] 243 | | } [INFO] [stderr] 244 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/pg/dyn.rs:227:26 [INFO] [stderr] | [INFO] [stderr] 227 | #[derive(Debug,Clone,Hash)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/pg/dyn.rs:240:5 [INFO] [stderr] | [INFO] [stderr] 240 | / impl PartialEq for List { [INFO] [stderr] 241 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 242 | | *self.elem == *other.elem [INFO] [stderr] 243 | | } [INFO] [stderr] 244 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [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/pg/mod.rs:77:35 [INFO] [stderr] | [INFO] [stderr] 77 | fn db_expr(e: &Projection, names: &Vec, table: &String) -> 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/pg/mod.rs:77:56 [INFO] [stderr] | [INFO] [stderr] 77 | fn db_expr(e: &Projection, names: &Vec, table: &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: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | Projection::Var(v) => format!("{}", names[v]), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `names[v].to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [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/pg/mod.rs:93:36 [INFO] [stderr] | [INFO] [stderr] 93 | fn db_type(e: &Projection, fields: &Vec, var_types: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Field]` [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/pg/mod.rs:93:60 [INFO] [stderr] | [INFO] [stderr] 93 | fn db_type(e: &Projection, fields: &Vec, var_types: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Type]` [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: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/pg/mod.rs:143:5 [INFO] [stderr] | [INFO] [stderr] 143 | / pub fn next(&mut self) -> Option [INFO] [stderr] 144 | | where T: FromSql [INFO] [stderr] 145 | | { [INFO] [stderr] 146 | | let idx = self.index; [INFO] [stderr] 147 | | self.index += 1; [INFO] [stderr] 148 | | self.row.get(idx) [INFO] [stderr] 149 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pg/mod.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | / match params.database.clone() { [INFO] [stderr] 174 | | Some(db) => { [INFO] [stderr] 175 | | params.database = Some("postgres".to_owned()); [INFO] [stderr] 176 | | let conn = try!(Connection::connect(params, TlsMode::None)); [INFO] [stderr] ... | [INFO] [stderr] 181 | | None => (), [INFO] [stderr] 182 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Some(db) = params.database.clone() { [INFO] [stderr] 174 | params.database = Some("postgres".to_owned()); [INFO] [stderr] 175 | let conn = try!(Connection::connect(params, TlsMode::None)); [INFO] [stderr] 176 | let create_query = format!("CREATE DATABASE {}", &db); [INFO] [stderr] 177 | // TODO only suppress db exists error [INFO] [stderr] 178 | let _ = conn.execute(&create_query, &[]); [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/pg/mod.rs:77:35 [INFO] [stderr] | [INFO] [stderr] 77 | fn db_expr(e: &Projection, names: &Vec, table: &String) -> 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/pg/mod.rs:77:56 [INFO] [stderr] | [INFO] [stderr] 77 | fn db_expr(e: &Projection, names: &Vec, table: &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: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | Projection::Var(v) => format!("{}", names[v]), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `names[v].to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [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/pg/mod.rs:93:36 [INFO] [stderr] | [INFO] [stderr] 93 | fn db_type(e: &Projection, fields: &Vec, var_types: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Field]` [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/pg/mod.rs:93:60 [INFO] [stderr] | [INFO] [stderr] 93 | fn db_type(e: &Projection, fields: &Vec, var_types: &Vec) -> Result { [INFO] [stderr] | ^^^^^^^^^^ help: change this to: `&[Type]` [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:328:33 [INFO] [stderr] | [INFO] [stderr] 328 | .ok_or(ErrorKind::Arg("Field type had no name".to_string()))?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Field type had no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: defining a method called `next` on this type; consider implementing the `std::iter::Iterator` trait or choosing a less ambiguous name [INFO] [stderr] --> src/pg/mod.rs:143:5 [INFO] [stderr] | [INFO] [stderr] 143 | / pub fn next(&mut self) -> Option [INFO] [stderr] 144 | | where T: FromSql [INFO] [stderr] 145 | | { [INFO] [stderr] 146 | | let idx = self.index; [INFO] [stderr] 147 | | self.index += 1; [INFO] [stderr] 148 | | self.row.get(idx) [INFO] [stderr] 149 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:414:14 [INFO] [stderr] | [INFO] [stderr] 414 | .ok_or(ErrorKind::Arg("Tried to add a type with no name".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Tried to add a type with no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/pg/mod.rs:428:9 [INFO] [stderr] | [INFO] [stderr] 428 | self.named_types.borrow().get(type_str).map(|x| x.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.named_types.borrow().get(type_str).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pg/mod.rs:173:9 [INFO] [stderr] | [INFO] [stderr] 173 | / match params.database.clone() { [INFO] [stderr] 174 | | Some(db) => { [INFO] [stderr] 175 | | params.database = Some("postgres".to_owned()); [INFO] [stderr] 176 | | let conn = try!(Connection::connect(params, TlsMode::None)); [INFO] [stderr] ... | [INFO] [stderr] 181 | | None => (), [INFO] [stderr] 182 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 173 | if let Some(db) = params.database.clone() { [INFO] [stderr] 174 | params.database = Some("postgres".to_owned()); [INFO] [stderr] 175 | let conn = try!(Connection::connect(params, TlsMode::None)); [INFO] [stderr] 176 | let create_query = format!("CREATE DATABASE {}", &db); [INFO] [stderr] 177 | // TODO only suppress db exists error [INFO] [stderr] 178 | let _ = conn.execute(&create_query, &[]); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pg/mod.rs:453:9 [INFO] [stderr] | [INFO] [stderr] 453 | / match self.pred_by_name.borrow().get(&pred.name) { [INFO] [stderr] 454 | | Some(existing) => { [INFO] [stderr] 455 | | if existing != pred { [INFO] [stderr] 456 | | bail!(ErrorKind::Arg(format!("Predicate {} already registered at a \ [INFO] [stderr] ... | [INFO] [stderr] 465 | | None => (), [INFO] [stderr] 466 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 453 | if let Some(existing) = self.pred_by_name.borrow().get(&pred.name) { [INFO] [stderr] 454 | if existing != pred { [INFO] [stderr] 455 | bail!(ErrorKind::Arg(format!("Predicate {} already registered at a \ [INFO] [stderr] 456 | different type.\nExisting: {:?}\nNew: {:?}", [INFO] [stderr] 457 | &pred.name, [INFO] [stderr] 458 | existing, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:491:21 [INFO] [stderr] | [INFO] [stderr] 491 | None => format!("1 = 1"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"1 = 1".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pg/mod.rs:494:12 [INFO] [stderr] | [INFO] [stderr] 494 | if query.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `query.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: needlessly taken reference of both operands [INFO] [stderr] --> src/pg/mod.rs:526:39 [INFO] [stderr] | [INFO] [stderr] 526 | } else if &var_type[v] != &type_ { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 526 | } else if var_type[v] != type_ { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:602:20 [INFO] [stderr] | [INFO] [stderr] 602 | let vars = format!("{}", merge_vars.join(", ")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `merge_vars.join(", ").to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:606:14 [INFO] [stderr] | [INFO] [stderr] 606 | .ok_or(ErrorKind::Internal(format!("Match clause accesses no tables")))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Internal(format!("Match clause accesses no tables")))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:606:40 [INFO] [stderr] | [INFO] [stderr] 606 | .ok_or(ErrorKind::Internal(format!("Match clause accesses no tables")))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Match clause accesses no tables".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:328:33 [INFO] [stderr] | [INFO] [stderr] 328 | .ok_or(ErrorKind::Arg("Field type had no name".to_string()))?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Field type had no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:631:55 [INFO] [stderr] | [INFO] [stderr] 631 | bail!(ErrorKind::Internal(format!("Failure loading fact ids from row"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Failure loading fact ids from row".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:639:59 [INFO] [stderr] | [INFO] [stderr] 639 | None => bail!(ErrorKind::Internal(format!("Failure loading var from row"))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Failure loading var from row".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/pg/mod.rs:648:21 [INFO] [stderr] | [INFO] [stderr] 648 | fn valid_name(name: &String) -> bool { [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/fact_db.rs:51:28 [INFO] [stderr] | [INFO] [stderr] 51 | query: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[Clause]` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/fact_db.rs:53:24 [INFO] [stderr] | [INFO] [stderr] 53 | -> Result, Vec)>, Self::Error>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:414:14 [INFO] [stderr] | [INFO] [stderr] 414 | .ok_or(ErrorKind::Arg("Tried to add a type with no name".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Tried to add a type with no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/pg/mod.rs:428:9 [INFO] [stderr] | [INFO] [stderr] 428 | self.named_types.borrow().get(type_str).map(|x| x.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.named_types.borrow().get(type_str).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/pg/mod.rs:453:9 [INFO] [stderr] | [INFO] [stderr] 453 | / match self.pred_by_name.borrow().get(&pred.name) { [INFO] [stderr] 454 | | Some(existing) => { [INFO] [stderr] 455 | | if existing != pred { [INFO] [stderr] 456 | | bail!(ErrorKind::Arg(format!("Predicate {} already registered at a \ [INFO] [stderr] ... | [INFO] [stderr] 465 | | None => (), [INFO] [stderr] 466 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 453 | if let Some(existing) = self.pred_by_name.borrow().get(&pred.name) { [INFO] [stderr] 454 | if existing != pred { [INFO] [stderr] 455 | bail!(ErrorKind::Arg(format!("Predicate {} already registered at a \ [INFO] [stderr] 456 | different type.\nExisting: {:?}\nNew: {:?}", [INFO] [stderr] 457 | &pred.name, [INFO] [stderr] 458 | existing, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `mem_db::MemDB` [INFO] [stderr] --> src/mem_db.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | / pub fn new() -> MemDB { [INFO] [stderr] 51 | | MemDB { [INFO] [stderr] 52 | | facts: RefCell::new(HashMap::new()), [INFO] [stderr] 53 | | next_id: Cell::new(0), [INFO] [stderr] ... | [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [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] 39 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/mem_db.rs:90:33 [INFO] [stderr] | [INFO] [stderr] 90 | let name = type_.name().ok_or(ErrorKind::Arg("Provided type had no name".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Provided type had no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/mem_db.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match self.preds.borrow().get(&pred.name) { [INFO] [stderr] 102 | | Some(exist) => { [INFO] [stderr] 103 | | if exist == pred { [INFO] [stderr] 104 | | return Ok(()); [INFO] [stderr] ... | [INFO] [stderr] 112 | | None => (), [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 101 | if let Some(exist) = self.preds.borrow().get(&pred.name) { [INFO] [stderr] 102 | if exist == pred { [INFO] [stderr] 103 | return Ok(()); [INFO] [stderr] 104 | } else { [INFO] [stderr] 105 | bail!(ErrorKind::Type(format!("Predicate already registered with different \ [INFO] [stderr] 106 | type.\nExisting: {:?}\nNew: {:?}", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:491:21 [INFO] [stderr] | [INFO] [stderr] 491 | None => format!("1 = 1"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"1 = 1".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/pg/mod.rs:494:12 [INFO] [stderr] | [INFO] [stderr] 494 | if query.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `query.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: needlessly taken reference of both operands [INFO] [stderr] --> src/pg/mod.rs:526:39 [INFO] [stderr] | [INFO] [stderr] 526 | } else if &var_type[v] != &type_ { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::op_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stderr] help: use the values directly [INFO] [stderr] | [INFO] [stderr] 526 | } else if var_type[v] != type_ { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:50:22 [INFO] [stderr] | [INFO] [stderr] 50 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:63:1 [INFO] [stderr] | [INFO] [stderr] 63 | / impl PartialEq for Field { [INFO] [stderr] 64 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 65 | | (self.name == other.name) && (self.description == other.description) && [INFO] [stderr] 66 | | (self.type_.eq(&other.type_)) [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:602:20 [INFO] [stderr] | [INFO] [stderr] 602 | let vars = format!("{}", merge_vars.join(", ")); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `merge_vars.join(", ").to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/pg/mod.rs:606:14 [INFO] [stderr] | [INFO] [stderr] 606 | .ok_or(ErrorKind::Internal(format!("Match clause accesses no tables")))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Internal(format!("Match clause accesses no tables")))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:606:40 [INFO] [stderr] | [INFO] [stderr] 606 | .ok_or(ErrorKind::Internal(format!("Match clause accesses no tables")))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Match clause accesses no tables".to_string()` [INFO] [stderr] | [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:106:22 [INFO] [stderr] | [INFO] [stderr] 106 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:119:1 [INFO] [stderr] | [INFO] [stderr] 119 | / impl PartialEq for MatchExpr { [INFO] [stderr] 120 | | fn eq(&self, other: &MatchExpr) -> bool { [INFO] [stderr] 121 | | use self::MatchExpr::*; [INFO] [stderr] 122 | | match (self, other) { [INFO] [stderr] ... | [INFO] [stderr] 128 | | } [INFO] [stderr] 129 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:631:55 [INFO] [stderr] | [INFO] [stderr] 631 | bail!(ErrorKind::Internal(format!("Failure loading fact ids from row"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Failure loading fact ids from row".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/pg/mod.rs:639:59 [INFO] [stderr] | [INFO] [stderr] 639 | None => bail!(ErrorKind::Internal(format!("Failure loading var from row"))), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Failure loading var from row".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/pg/mod.rs:648:21 [INFO] [stderr] | [INFO] [stderr] 648 | fn valid_name(name: &String) -> bool { [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/fact_db.rs:51:28 [INFO] [stderr] | [INFO] [stderr] 51 | query: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[Clause]` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/fact_db.rs:53:24 [INFO] [stderr] | [INFO] [stderr] 53 | -> Result, Vec)>, Self::Error>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:200:22 [INFO] [stderr] | [INFO] [stderr] 200 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:213:1 [INFO] [stderr] | [INFO] [stderr] 213 | / impl PartialEq for Expr { [INFO] [stderr] 214 | | fn eq(&self, other: &Expr) -> bool { [INFO] [stderr] 215 | | use self::Expr::*; [INFO] [stderr] 216 | | match (self, other) { [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `mem_db::MemDB` [INFO] [stderr] --> src/mem_db.rs:50:5 [INFO] [stderr] | [INFO] [stderr] 50 | / pub fn new() -> MemDB { [INFO] [stderr] 51 | | MemDB { [INFO] [stderr] 52 | | facts: RefCell::new(HashMap::new()), [INFO] [stderr] 53 | | next_id: Cell::new(0), [INFO] [stderr] ... | [INFO] [stderr] 61 | | } [INFO] [stderr] 62 | | } [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] 39 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/mem_db.rs:90:33 [INFO] [stderr] | [INFO] [stderr] 90 | let name = type_.name().ok_or(ErrorKind::Arg("Provided type had no name".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Arg("Provided type had no name".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/mem_db.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / match self.preds.borrow().get(&pred.name) { [INFO] [stderr] 102 | | Some(exist) => { [INFO] [stderr] 103 | | if exist == pred { [INFO] [stderr] 104 | | return Ok(()); [INFO] [stderr] ... | [INFO] [stderr] 112 | | None => (), [INFO] [stderr] 113 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 101 | if let Some(exist) = self.preds.borrow().get(&pred.name) { [INFO] [stderr] 102 | if exist == pred { [INFO] [stderr] 103 | return Ok(()); [INFO] [stderr] 104 | } else { [INFO] [stderr] 105 | bail!(ErrorKind::Type(format!("Predicate already registered with different \ [INFO] [stderr] 106 | type.\nExisting: {:?}\nNew: {:?}", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/engine/mod.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | / match self.task.borrow_mut().take() { [INFO] [stderr] 60 | | Some(t) => t.unpark(), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(t) = self.task.borrow_mut().take() { t.unpark() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:50:22 [INFO] [stderr] | [INFO] [stderr] 50 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:63:1 [INFO] [stderr] | [INFO] [stderr] 63 | / impl PartialEq for Field { [INFO] [stderr] 64 | | fn eq(&self, other: &Self) -> bool { [INFO] [stderr] 65 | | (self.name == other.name) && (self.description == other.description) && [INFO] [stderr] 66 | | (self.type_.eq(&other.type_)) [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:106:22 [INFO] [stderr] | [INFO] [stderr] 106 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:119:1 [INFO] [stderr] | [INFO] [stderr] 119 | / impl PartialEq for MatchExpr { [INFO] [stderr] 120 | | fn eq(&self, other: &MatchExpr) -> bool { [INFO] [stderr] 121 | | use self::MatchExpr::*; [INFO] [stderr] 122 | | match (self, other) { [INFO] [stderr] ... | [INFO] [stderr] 128 | | } [INFO] [stderr] 129 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [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/engine/mod.rs:173:37 [INFO] [stderr] | [INFO] [stderr] 173 | fn substitute(clause: &Clause, ans: &Vec) -> Fact { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/engine/types.rs:200:22 [INFO] [stderr] | [INFO] [stderr] 200 | #[derive(Clone,Debug,Hash,Eq)] [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/engine/types.rs:213:1 [INFO] [stderr] | [INFO] [stderr] 213 | / impl PartialEq for Expr { [INFO] [stderr] 214 | | fn eq(&self, other: &Expr) -> bool { [INFO] [stderr] 215 | | use self::Expr::*; [INFO] [stderr] 216 | | match (self, other) { [INFO] [stderr] ... | [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/engine/mod.rs:215:12 [INFO] [stderr] | [INFO] [stderr] 215 | Ok(try!(self.fact_db.add_type(type_).chain_err(|| ErrorKind::FactDB))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine/mod.rs:226:12 [INFO] [stderr] | [INFO] [stderr] 226 | if pred.fields.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pred.fields.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/engine/mod.rs:231:9 [INFO] [stderr] | [INFO] [stderr] 231 | / match self.fact_db.get_predicate(&pred.name) { [INFO] [stderr] 232 | | Some(p) => { [INFO] [stderr] 233 | | if pred.fields == p.fields { [INFO] [stderr] 234 | | // TODO should this be return () [INFO] [stderr] ... | [INFO] [stderr] 240 | | None => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 231 | if let Some(p) = self.fact_db.get_predicate(&pred.name) { [INFO] [stderr] 232 | if pred.fields == p.fields { [INFO] [stderr] 233 | // TODO should this be return () [INFO] [stderr] 234 | () [INFO] [stderr] 235 | } else { [INFO] [stderr] 236 | bail!(ErrorKind::Type(format!("{:?} != {:?}", pred.fields, p.fields))); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/engine/mod.rs:243:12 [INFO] [stderr] | [INFO] [stderr] 243 | Ok(try!(self.fact_db.new_predicate(pred).chain_err(|| ErrorKind::FactDB))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/engine/mod.rs:252:39 [INFO] [stderr] | [INFO] [stderr] 252 | fn get_dep_rules(&mut self, pred: &String) -> Rc>> { [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/engine/mod.rs:253:44 [INFO] [stderr] | [INFO] [stderr] 253 | self.rules.entry(pred.to_string()).or_insert(Rc::new(RefCell::new(Vec::new()))).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| Rc::new(RefCell::new(Vec::new())))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/engine/mod.rs:302:33 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn derive(&self, query: &Vec) -> Result>> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[Clause]` [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/engine/mod.rs:310:37 [INFO] [stderr] | [INFO] [stderr] 310 | pub fn render(&self, pred_name: &String) -> Result { [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 seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/engine/mod.rs:59:13 [INFO] [stderr] | [INFO] [stderr] 59 | / match self.task.borrow_mut().take() { [INFO] [stderr] 60 | | Some(t) => t.unpark(), [INFO] [stderr] 61 | | None => (), [INFO] [stderr] 62 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Some(t) = self.task.borrow_mut().take() { t.unpark() }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/engine/mod.rs:312:14 [INFO] [stderr] | [INFO] [stderr] 312 | .ok_or(ErrorKind::Invalid("Predicate absent".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Invalid("Predicate absent".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/engine/mod.rs:173:37 [INFO] [stderr] | [INFO] [stderr] 173 | fn substitute(clause: &Clause, ans: &Vec) -> Fact { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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: passing a unit value to a function [INFO] [stderr] --> src/engine/mod.rs:215:12 [INFO] [stderr] | [INFO] [stderr] 215 | Ok(try!(self.fact_db.add_type(type_).chain_err(|| ErrorKind::FactDB))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [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/engine/mod.rs:425:44 [INFO] [stderr] | [INFO] [stderr] 425 | fn bind(lhs: &BindExpr, rhs: Value, state: &Vec) -> Vec> { [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] 425 | fn bind(lhs: &BindExpr, rhs: Value, state: &[Value]) -> Vec> { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 430 | Normal(Unbound) => vec![state.to_owned()], [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 436 | vec![state.to_owned()] [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 442 | let mut next = state.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 452 | vec![state.to_owned()] [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 462 | let mut next = vec![state.to_owned()]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/engine/mod.rs:226:12 [INFO] [stderr] | [INFO] [stderr] 226 | if pred.fields.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pred.fields.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/engine/mod.rs:231:9 [INFO] [stderr] | [INFO] [stderr] 231 | / match self.fact_db.get_predicate(&pred.name) { [INFO] [stderr] 232 | | Some(p) => { [INFO] [stderr] 233 | | if pred.fields == p.fields { [INFO] [stderr] 234 | | // TODO should this be return () [INFO] [stderr] ... | [INFO] [stderr] 240 | | None => (), [INFO] [stderr] 241 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 231 | if let Some(p) = self.fact_db.get_predicate(&pred.name) { [INFO] [stderr] 232 | if pred.fields == p.fields { [INFO] [stderr] 233 | // TODO should this be return () [INFO] [stderr] 234 | () [INFO] [stderr] 235 | } else { [INFO] [stderr] 236 | bail!(ErrorKind::Type(format!("{:?} != {:?}", pred.fields, p.fields))); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/engine/mod.rs:243:12 [INFO] [stderr] | [INFO] [stderr] 243 | Ok(try!(self.fact_db.new_predicate(pred).chain_err(|| ErrorKind::FactDB))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/engine/mod.rs:252:39 [INFO] [stderr] | [INFO] [stderr] 252 | fn get_dep_rules(&mut self, pred: &String) -> Rc>> { [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: use of `or_insert` followed by a function call [INFO] [stderr] --> src/engine/mod.rs:253:44 [INFO] [stderr] | [INFO] [stderr] 253 | self.rules.entry(pred.to_string()).or_insert(Rc::new(RefCell::new(Vec::new()))).clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| Rc::new(RefCell::new(Vec::new())))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/engine/mod.rs:302:33 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn derive(&self, query: &Vec) -> Result>> { [INFO] [stderr] | ^^^^^^^^^^^^ help: change this to: `&[Clause]` [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/engine/mod.rs:484:28 [INFO] [stderr] | [INFO] [stderr] 484 | fn eval(expr: &Expr, subs: &Vec, funcs: &HashMap>) -> Value { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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/engine/mod.rs:310:37 [INFO] [stderr] | [INFO] [stderr] 310 | pub fn render(&self, pred_name: &String) -> Result { [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: use of `ok_or` followed by a function call [INFO] [stderr] --> src/engine/mod.rs:312:14 [INFO] [stderr] | [INFO] [stderr] 312 | .ok_or(ErrorKind::Invalid("Predicate absent".to_string()))?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ErrorKind::Invalid("Predicate absent".to_string()))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [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/engine/mod.rs:425:44 [INFO] [stderr] | [INFO] [stderr] 425 | fn bind(lhs: &BindExpr, rhs: Value, state: &Vec) -> Vec> { [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] 425 | fn bind(lhs: &BindExpr, rhs: Value, state: &[Value]) -> Vec> { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 430 | Normal(Unbound) => vec![state.to_owned()], [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 436 | vec![state.to_owned()] [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 442 | let mut next = state.to_owned(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 452 | vec![state.to_owned()] [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: change `state.clone()` to [INFO] [stderr] | [INFO] [stderr] 462 | let mut next = vec![state.to_owned()]; [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/engine/mod.rs:484:28 [INFO] [stderr] | [INFO] [stderr] 484 | fn eval(expr: &Expr, subs: &Vec, funcs: &HashMap>) -> Value { [INFO] [stderr] | ^^^^^^^^^^^ help: change this to: `&[Value]` [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] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `holmes`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: Could not compile `holmes`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "c2d3fca70ac6f5f757829906cb56551f3b6967f664aee9e747aeecd95597c661"` [INFO] running `"docker" "rm" "-f" "c2d3fca70ac6f5f757829906cb56551f3b6967f664aee9e747aeecd95597c661"` [INFO] [stdout] c2d3fca70ac6f5f757829906cb56551f3b6967f664aee9e747aeecd95597c661