[INFO] updating cached repository itarato/toydb [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/itarato/toydb [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/itarato/toydb" "work/ex/clippy-test-run/sources/stable/gh/itarato/toydb"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/itarato/toydb'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/itarato/toydb" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/itarato/toydb"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/itarato/toydb'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] d90c5b0e96c8980a4b6101e60aae3667015a1a30 [INFO] sha for GitHub repo itarato/toydb: d90c5b0e96c8980a4b6101e60aae3667015a1a30 [INFO] validating manifest of itarato/toydb 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 itarato/toydb 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 itarato/toydb [INFO] finished frobbing itarato/toydb [INFO] frobbed toml for itarato/toydb written to work/ex/clippy-test-run/sources/stable/gh/itarato/toydb/Cargo.toml [INFO] started frobbing itarato/toydb [INFO] finished frobbing itarato/toydb [INFO] frobbed toml for itarato/toydb written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/itarato/toydb/Cargo.toml [INFO] crate itarato/toydb has a lockfile. skipping [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 itarato/toydb 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/gh/itarato/toydb:/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] 8b992f70a8c2ff5c8fb8afccc898f633e22e2c1288cb6164e8e29802c473ba38 [INFO] running `"docker" "start" "-a" "8b992f70a8c2ff5c8fb8afccc898f633e22e2c1288cb6164e8e29802c473ba38"` [INFO] [stderr] Checking mio v0.6.14 [INFO] [stderr] Checking crossbeam-epoch v0.4.3 [INFO] [stderr] Checking tokio-io v0.1.7 [INFO] [stderr] Checking http v0.1.6 [INFO] [stderr] Checking regex v1.0.0 [INFO] [stderr] Checking crossbeam-deque v0.3.1 [INFO] [stderr] Checking tokio-codec v0.1.0 [INFO] [stderr] Checking tokio-threadpool v0.1.4 [INFO] [stderr] Checking tokio-reactor v0.1.2 [INFO] [stderr] Checking env_logger v0.5.10 [INFO] [stderr] Checking tokio-tcp v0.1.0 [INFO] [stderr] Checking tokio-udp v0.1.1 [INFO] [stderr] Checking tokio-fs v0.1.1 [INFO] [stderr] Checking tokio v0.1.7 [INFO] [stderr] Checking h2 v0.1.9 [INFO] [stderr] Checking hyper v0.12.1 [INFO] [stderr] Checking toydb v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/dbclient.rs:26:11 [INFO] [stderr] | [INFO] [stderr] 26 | () [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: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | return Err(()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `prelude` [INFO] [stderr] --> src/repl.rs:3:21 [INFO] [stderr] | [INFO] [stderr] 3 | use std::io::{self, prelude::*, Write}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `Query` [INFO] [stderr] --> src/query.rs:4:1 [INFO] [stderr] | [INFO] [stderr] 4 | pub enum Query { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Int` [INFO] [stderr] --> src/query.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | Int, [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Varchar` [INFO] [stderr] --> src/query.rs:25:5 [INFO] [stderr] | [INFO] [stderr] 25 | Varchar(u8), [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `FieldDef` [INFO] [stderr] --> src/query.rs:38:1 [INFO] [stderr] | [INFO] [stderr] 38 | pub struct FieldDef { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:44:5 [INFO] [stderr] | [INFO] [stderr] 44 | pub fn new(name: String, config: Type) -> FieldDef { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `CreateQuery` [INFO] [stderr] --> src/query.rs:50:1 [INFO] [stderr] | [INFO] [stderr] 50 | pub struct CreateQuery { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:57:5 [INFO] [stderr] | [INFO] [stderr] 57 | pub fn new(table: String, fields: Vec, indices: Vec) -> CreateQuery { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `Relation` [INFO] [stderr] --> src/query.rs:62:1 [INFO] [stderr] | [INFO] [stderr] 62 | pub enum Relation { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from` [INFO] [stderr] --> src/query.rs:69:5 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `FieldCondition` [INFO] [stderr] --> src/query.rs:90:1 [INFO] [stderr] | [INFO] [stderr] 90 | pub struct FieldCondition { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn new(field_name: String, relation: String, value: String) -> FieldCondition { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `SelectQuery` [INFO] [stderr] --> src/query.rs:107:1 [INFO] [stderr] | [INFO] [stderr] 107 | pub struct SelectQuery { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | / pub fn new( [INFO] [stderr] 115 | | table: String, [INFO] [stderr] 116 | | columns: Vec, [INFO] [stderr] 117 | | conditions: Vec, [INFO] [stderr] ... | [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | pub fn new(table_name: String, raw_inserts: HashMap) -> InsertQuery { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `DescribeQuery` [INFO] [stderr] --> src/query.rs:143:1 [INFO] [stderr] | [INFO] [stderr] 143 | pub struct DescribeQuery; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse` [INFO] [stderr] --> src/query_parser.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &String) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `tokenize` [INFO] [stderr] --> src/query_parser.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `parse_create_table` [INFO] [stderr] --> src/query_parser.rs:52:1 [INFO] [stderr] | [INFO] [stderr] 52 | fn parse_create_table(tokens: &mut Vec<&str>) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `parse_select` [INFO] [stderr] --> src/query_parser.rs:122:1 [INFO] [stderr] | [INFO] [stderr] 122 | fn parse_select(tokens: &mut Vec<&str>) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `parse_insert` [INFO] [stderr] --> src/query_parser.rs:153:1 [INFO] [stderr] | [INFO] [stderr] 153 | fn parse_insert(tokens: &mut Vec<&str>) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/dbclient.rs:11:27 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn send(&self, raw: &String) { [INFO] [stderr] | ^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 11 | pub fn send(&self, raw: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `raw.clone()` to [INFO] [stderr] | [INFO] [stderr] 13 | let mut req = Request::new(Body::from(raw.to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | | &Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match self { [INFO] [stderr] 82 | | &Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | | &Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | | &Relation::Gt => write!(f, ">"), [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 81 | match *self { [INFO] [stderr] 82 | Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | Relation::Gt => write!(f, ">"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:9:34 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &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: single-character string constant used as pattern [INFO] [stderr] --> src/query_parser.rs:11:45 [INFO] [stderr] | [INFO] [stderr] 11 | if slice.to_lowercase().starts_with("?") { [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] --> src/query_parser.rs:14:45 [INFO] [stderr] | [INFO] [stderr] 14 | if slice.to_lowercase().starts_with("+") { [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] --> src/query_parser.rs:17:45 [INFO] [stderr] | [INFO] [stderr] 17 | if slice.to_lowercase().starts_with(">") { [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] --> src/query_parser.rs:20:45 [INFO] [stderr] | [INFO] [stderr] 20 | if slice.to_lowercase().starts_with(":") { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:27:30 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:30:12 [INFO] [stderr] | [INFO] [stderr] 30 | if tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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/query_parser.rs:47:18 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [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/query_parser.rs:63:11 [INFO] [stderr] | [INFO] [stderr] 63 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to one [INFO] [stderr] --> src/query_parser.rs:79:20 [INFO] [stderr] | [INFO] [stderr] 79 | if tokens.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:103:8 [INFO] [stderr] | [INFO] [stderr] 103 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:110:15 [INFO] [stderr] | [INFO] [stderr] 110 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:137:8 [INFO] [stderr] | [INFO] [stderr] 137 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:140:15 [INFO] [stderr] | [INFO] [stderr] 140 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:160:11 [INFO] [stderr] | [INFO] [stderr] 160 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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/repl.rs:43:17 [INFO] [stderr] | [INFO] [stderr] 43 | / match self.execute_raw_command(&command) { [INFO] [stderr] 44 | | ReplResponseAction::Finish => return, [INFO] [stderr] 45 | | _ => {} [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________________^ help: try this: `if let ReplResponseAction::Finish = self.execute_raw_command(&command) { return }` [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] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/repl.rs:57:44 [INFO] [stderr] | [INFO] [stderr] 57 | fn execute_raw_command(&self, command: &String) -> ReplResponseAction { [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/repl.rs:80:27 [INFO] [stderr] | [INFO] [stderr] 80 | fn parse_command(command: &String) -> Result { [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] 80 | fn parse_command(command: &str) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `command.clone()` to [INFO] [stderr] | [INFO] [stderr] 94 | return Ok(Command::DBCommand(command.to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `util` [INFO] [stderr] --> src/dbserver.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use util; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/dbserver.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | server [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/dbserver.rs:32:26 [INFO] [stderr] | [INFO] [stderr] 32 | let server = Server::bind(&addr).serve(new_service).map_err(|_| ()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/dbserver.rs:53:17 [INFO] [stderr] | [INFO] [stderr] 53 | () [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: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | return Err(()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::hash::Hash` [INFO] [stderr] --> src/util.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::hash::Hash; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `util` [INFO] [stderr] --> src/dbserver.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use util; [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/dbserver.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | server [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/dbserver.rs:32:26 [INFO] [stderr] | [INFO] [stderr] 32 | let server = Server::bind(&addr).serve(new_service).map_err(|_| ()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/dbserver.rs:53:17 [INFO] [stderr] | [INFO] [stderr] 53 | () [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: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | return Err(()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::hash::Hash` [INFO] [stderr] --> src/util.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::hash::Hash; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded unit expression [INFO] [stderr] --> src/dbclient.rs:26:11 [INFO] [stderr] | [INFO] [stderr] 26 | () [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: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/query_parser.rs:41:17 [INFO] [stderr] | [INFO] [stderr] 41 | return Err(()); [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: method is never used: `looks_like_query` [INFO] [stderr] --> src/query_parser.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &String) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_verbose` [INFO] [stderr] --> src/main.rs:30:1 [INFO] [stderr] | [INFO] [stderr] 30 | fn is_verbose() -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/dbserver.rs:37:40 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn read_file(&self, file_name: &String) -> Result<(), io::Error> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: length comparison to zero [INFO] [stderr] --> src/dbserver.rs:46:25 [INFO] [stderr] | [INFO] [stderr] 46 | .filter(|l| l.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!l.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/dbserver.rs:61:10 [INFO] [stderr] | [INFO] [stderr] 61 | raw: &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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/dbserver.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / match req.method() { [INFO] [stderr] 80 | | &Method::POST => { [INFO] [stderr] 81 | | let fut = req.into_body().concat2().and_then(move |chunk| { [INFO] [stderr] 82 | | let value = str::from_utf8(chunk.as_ref()).unwrap().to_owned(); [INFO] [stderr] ... | [INFO] [stderr] 99 | | } [INFO] [stderr] 100 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 79 | match *req.method() { [INFO] [stderr] 80 | Method::POST => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/engine.rs:63:29 [INFO] [stderr] | [INFO] [stderr] 63 | Err(e) [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] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 63 | Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:71:60 [INFO] [stderr] | [INFO] [stderr] 71 | let real_val = raw_string_to_val(raw_val, &self.schema.get(column_name).unwrap().field_def.config); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.schema[column_name]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:83:34 [INFO] [stderr] | [INFO] [stderr] 83 | let data_type = &self.schema.get(index_field).unwrap().field_def.config; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.schema[index_field]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:84:45 [INFO] [stderr] | [INFO] [stderr] 84 | let val = raw_string_to_val(raw_inserts.get(index_field).unwrap(), data_type).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&raw_inserts[index_field]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/engine.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | / match data_type { [INFO] [stderr] 99 | | &query::Type::Int => match u32::from_str_radix(raw, 10) { [INFO] [stderr] 100 | | Ok(n) => Ok(util::Val::U32(n)), [INFO] [stderr] 101 | | Err(_) => Err(()) [INFO] [stderr] 102 | | } [INFO] [stderr] 103 | | &query::Type::Varchar(len) => Ok(util::Val::Varchar((&raw[0..usize::min(len as usize, raw.len())]).to_owned())) [INFO] [stderr] 104 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 98 | match *data_type { [INFO] [stderr] 99 | query::Type::Int => match u32::from_str_radix(raw, 10) { [INFO] [stderr] 100 | Ok(n) => Ok(util::Val::U32(n)), [INFO] [stderr] 101 | Err(_) => Err(()) [INFO] [stderr] 102 | } [INFO] [stderr] 103 | query::Type::Varchar(len) => Ok(util::Val::Varchar((&raw[0..usize::min(len as usize, raw.len())]).to_owned())) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the variable `idx` is used as a loop counter. Consider using `for (idx, item) in raw.chars().enumerate()` or similar iterators [INFO] [stderr] --> src/engine.rs:145:23 [INFO] [stderr] | [INFO] [stderr] 145 | for ch in raw.chars() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [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.rs:167:10 [INFO] [stderr] | [INFO] [stderr] 167 | row: &Row, [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] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/engine.rs:169:17 [INFO] [stderr] | [INFO] [stderr] 169 | conditions: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[query::FieldCondition]` [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: The use of negated comparison operators on partially ordered types produces code that is hard to read and refactor. Please consider using the `partial_cmp` method instead, to make it clear that the two values could be incomparable. [INFO] [stderr] --> src/engine.rs:197:20 [INFO] [stderr] | [INFO] [stderr] 197 | if !(orig.unwrap() < value.unwrap()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::neg_cmp_op_on_partial_ord)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_cmp_op_on_partial_ord [INFO] [stderr] [INFO] [stderr] warning: The use of negated comparison operators on partially ordered types produces code that is hard to read and refactor. Please consider using the `partial_cmp` method instead, to make it clear that the two values could be incomparable. [INFO] [stderr] --> src/engine.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | if !(orig.unwrap() > value.unwrap()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_cmp_op_on_partial_ord [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.rs:212:27 [INFO] [stderr] | [INFO] [stderr] 212 | fn extract_row_value(row: &Row, column_info: &ColumnInfo) -> Result { [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] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/engine.rs:218:24 [INFO] [stderr] | [INFO] [stderr] 218 | val |= (row[column_info.offs + i] as u32) << (i * 8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(row[column_info.offs + i])` [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 u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/engine.rs:288:36 [INFO] [stderr] | [INFO] [stderr] 288 | val |= (row[column_info.offs + i] as u32) << (i * 8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(row[column_info.offs + i])` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | | &Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match self { [INFO] [stderr] 82 | | &Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | | &Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | | &Relation::Gt => write!(f, ">"), [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 81 | match *self { [INFO] [stderr] 82 | Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | Relation::Gt => write!(f, ">"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:9:34 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &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: single-character string constant used as pattern [INFO] [stderr] --> src/query_parser.rs:11:45 [INFO] [stderr] | [INFO] [stderr] 11 | if slice.to_lowercase().starts_with("?") { [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] --> src/query_parser.rs:14:45 [INFO] [stderr] | [INFO] [stderr] 14 | if slice.to_lowercase().starts_with("+") { [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] --> src/query_parser.rs:17:45 [INFO] [stderr] | [INFO] [stderr] 17 | if slice.to_lowercase().starts_with(">") { [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] --> src/query_parser.rs:20:45 [INFO] [stderr] | [INFO] [stderr] 20 | if slice.to_lowercase().starts_with(":") { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:27:30 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:30:12 [INFO] [stderr] | [INFO] [stderr] 30 | if tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:47:18 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [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/query_parser.rs:63:11 [INFO] [stderr] | [INFO] [stderr] 63 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to one [INFO] [stderr] --> src/query_parser.rs:79:20 [INFO] [stderr] | [INFO] [stderr] 79 | if tokens.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:103:8 [INFO] [stderr] | [INFO] [stderr] 103 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:110:15 [INFO] [stderr] | [INFO] [stderr] 110 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:137:8 [INFO] [stderr] | [INFO] [stderr] 137 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:140:15 [INFO] [stderr] | [INFO] [stderr] 140 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:160:11 [INFO] [stderr] | [INFO] [stderr] 160 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: method is never used: `looks_like_query` [INFO] [stderr] --> src/query_parser.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &String) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `is_verbose` [INFO] [stderr] --> src/main.rs:30:1 [INFO] [stderr] | [INFO] [stderr] 30 | fn is_verbose() -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/dbserver.rs:37:40 [INFO] [stderr] | [INFO] [stderr] 37 | pub fn read_file(&self, file_name: &String) -> Result<(), io::Error> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [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: length comparison to zero [INFO] [stderr] --> src/dbserver.rs:46:25 [INFO] [stderr] | [INFO] [stderr] 46 | .filter(|l| l.len() > 0) [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!l.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/dbserver.rs:61:10 [INFO] [stderr] | [INFO] [stderr] 61 | raw: &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] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/util.rs:6:38 [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(Serialize, Deserialize, Eq, 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/util.rs:45:1 [INFO] [stderr] | [INFO] [stderr] 45| / impl PartialEq for Val { [INFO] [stderr] 46| | fn eq(&self, other: &Val) -> bool { [INFO] [stderr] 47| | match (self, other) { [INFO] [stderr] 48| | (Val::U32(l), Val::U32(r)) => l == r, [INFO] [stderr] ... | [INFO] [stderr] 52| | } [INFO] [stderr] 53| | } [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/dbserver.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / match req.method() { [INFO] [stderr] 80 | | &Method::POST => { [INFO] [stderr] 81 | | let fut = req.into_body().concat2().and_then(move |chunk| { [INFO] [stderr] 82 | | let value = str::from_utf8(chunk.as_ref()).unwrap().to_owned(); [INFO] [stderr] ... | [INFO] [stderr] 99 | | } [INFO] [stderr] 100 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 79 | match *req.method() { [INFO] [stderr] 80 | Method::POST => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match data_type { [INFO] [stderr] 25 | | &query::Type::Int => Val::wrap_raw_int(raw), [INFO] [stderr] 26 | | &query::Type::Varchar(n) => Val::wrap_raw_varchar(raw, n), [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *data_type { [INFO] [stderr] 25 | query::Type::Int => Val::wrap_raw_int(raw), [INFO] [stderr] 26 | query::Type::Varchar(n) => Val::wrap_raw_varchar(raw, n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/index.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / if self.map.contains_key(&val) { [INFO] [stderr] 17 | | self.map.get_mut(&val).unwrap().push(at); [INFO] [stderr] 18 | | } else { [INFO] [stderr] 19 | | self.map.insert(val, vec![at]); [INFO] [stderr] 20 | | } [INFO] [stderr] | |_________^ help: consider using: `self.map.entry(val)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/engine.rs:63:29 [INFO] [stderr] | [INFO] [stderr] 63 | Err(e) [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] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 63 | Err(()) [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:71:60 [INFO] [stderr] | [INFO] [stderr] 71 | let real_val = raw_string_to_val(raw_val, &self.schema.get(column_name).unwrap().field_def.config); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.schema[column_name]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:83:34 [INFO] [stderr] | [INFO] [stderr] 83 | let data_type = &self.schema.get(index_field).unwrap().field_def.config; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&self.schema[index_field]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/engine.rs:84:45 [INFO] [stderr] | [INFO] [stderr] 84 | let val = raw_string_to_val(raw_inserts.get(index_field).unwrap(), data_type).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&raw_inserts[index_field]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/engine.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | / match data_type { [INFO] [stderr] 99 | | &query::Type::Int => match u32::from_str_radix(raw, 10) { [INFO] [stderr] 100 | | Ok(n) => Ok(util::Val::U32(n)), [INFO] [stderr] 101 | | Err(_) => Err(()) [INFO] [stderr] 102 | | } [INFO] [stderr] 103 | | &query::Type::Varchar(len) => Ok(util::Val::Varchar((&raw[0..usize::min(len as usize, raw.len())]).to_owned())) [INFO] [stderr] 104 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 98 | match *data_type { [INFO] [stderr] 99 | query::Type::Int => match u32::from_str_radix(raw, 10) { [INFO] [stderr] 100 | Ok(n) => Ok(util::Val::U32(n)), [INFO] [stderr] 101 | Err(_) => Err(()) [INFO] [stderr] 102 | } [INFO] [stderr] 103 | query::Type::Varchar(len) => Ok(util::Val::Varchar((&raw[0..usize::min(len as usize, raw.len())]).to_owned())) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: the variable `idx` is used as a loop counter. Consider using `for (idx, item) in raw.chars().enumerate()` or similar iterators [INFO] [stderr] --> src/engine.rs:145:23 [INFO] [stderr] | [INFO] [stderr] 145 | for ch in raw.chars() { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [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.rs:167:10 [INFO] [stderr] | [INFO] [stderr] 167 | row: &Row, [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] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/engine.rs:169:17 [INFO] [stderr] | [INFO] [stderr] 169 | conditions: &Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[query::FieldCondition]` [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: The use of negated comparison operators on partially ordered types produces code that is hard to read and refactor. Please consider using the `partial_cmp` method instead, to make it clear that the two values could be incomparable. [INFO] [stderr] --> src/engine.rs:197:20 [INFO] [stderr] | [INFO] [stderr] 197 | if !(orig.unwrap() < value.unwrap()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::neg_cmp_op_on_partial_ord)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_cmp_op_on_partial_ord [INFO] [stderr] [INFO] [stderr] warning: The use of negated comparison operators on partially ordered types produces code that is hard to read and refactor. Please consider using the `partial_cmp` method instead, to make it clear that the two values could be incomparable. [INFO] [stderr] --> src/engine.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | if !(orig.unwrap() > value.unwrap()) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#neg_cmp_op_on_partial_ord [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.rs:212:27 [INFO] [stderr] | [INFO] [stderr] 212 | fn extract_row_value(row: &Row, column_info: &ColumnInfo) -> Result { [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] [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/engine.rs:218:24 [INFO] [stderr] | [INFO] [stderr] 218 | val |= (row[column_info.offs + i] as u32) << (i * 8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(row[column_info.offs + i])` [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] error: Could not compile `toydb`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/engine.rs:288:36 [INFO] [stderr] | [INFO] [stderr] 288 | val |= (row[column_info.offs + i] as u32) << (i * 8); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u32::from(row[column_info.offs + i])` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | | &Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match self { [INFO] [stderr] 82 | | &Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | | &Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | | &Relation::Gt => write!(f, ">"), [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 81 | match *self { [INFO] [stderr] 82 | Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | Relation::Gt => write!(f, ">"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:9:34 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &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: single-character string constant used as pattern [INFO] [stderr] --> src/query_parser.rs:11:45 [INFO] [stderr] | [INFO] [stderr] 11 | if slice.to_lowercase().starts_with("?") { [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] --> src/query_parser.rs:14:45 [INFO] [stderr] | [INFO] [stderr] 14 | if slice.to_lowercase().starts_with("+") { [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] --> src/query_parser.rs:17:45 [INFO] [stderr] | [INFO] [stderr] 17 | if slice.to_lowercase().starts_with(">") { [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] --> src/query_parser.rs:20:45 [INFO] [stderr] | [INFO] [stderr] 20 | if slice.to_lowercase().starts_with(":") { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:27:30 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:30:12 [INFO] [stderr] | [INFO] [stderr] 30 | if tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:47:18 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [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/query_parser.rs:63:11 [INFO] [stderr] | [INFO] [stderr] 63 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to one [INFO] [stderr] --> src/query_parser.rs:79:20 [INFO] [stderr] | [INFO] [stderr] 79 | if tokens.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:103:8 [INFO] [stderr] | [INFO] [stderr] 103 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:110:15 [INFO] [stderr] | [INFO] [stderr] 110 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:137:8 [INFO] [stderr] | [INFO] [stderr] 137 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:140:15 [INFO] [stderr] | [INFO] [stderr] 140 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:160:11 [INFO] [stderr] | [INFO] [stderr] 160 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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] error: you are deriving `Hash` but have implemented `PartialEq` explicitly [INFO] [stderr] --> src/util.rs:6:38 [INFO] [stderr] | [INFO] [stderr] 6 | #[derive(Serialize, Deserialize, Eq, 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/util.rs:45:1 [INFO] [stderr] | [INFO] [stderr] 45| / impl PartialEq for Val { [INFO] [stderr] 46| | fn eq(&self, other: &Val) -> bool { [INFO] [stderr] 47| | match (self, other) { [INFO] [stderr] 48| | (Val::U32(l), Val::U32(r)) => l == r, [INFO] [stderr] ... | [INFO] [stderr] 52| | } [INFO] [stderr] 53| | } [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/util.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | / match data_type { [INFO] [stderr] 25 | | &query::Type::Int => Val::wrap_raw_int(raw), [INFO] [stderr] 26 | | &query::Type::Varchar(n) => Val::wrap_raw_varchar(raw, n), [INFO] [stderr] 27 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 24 | match *data_type { [INFO] [stderr] 25 | query::Type::Int => Val::wrap_raw_int(raw), [INFO] [stderr] 26 | query::Type::Varchar(n) => Val::wrap_raw_varchar(raw, n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused import: `prelude` [INFO] [stderr] --> src/repl.rs:3:21 [INFO] [stderr] | [INFO] [stderr] 3 | use std::io::{self, prelude::*, Write}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stderr] --> src/index.rs:16:9 [INFO] [stderr] | [INFO] [stderr] 16 | / if self.map.contains_key(&val) { [INFO] [stderr] 17 | | self.map.get_mut(&val).unwrap().push(at); [INFO] [stderr] 18 | | } else { [INFO] [stderr] 19 | | self.map.insert(val, vec![at]); [INFO] [stderr] 20 | | } [INFO] [stderr] | |_________^ help: consider using: `self.map.entry(val)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_entry)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `toydb`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variant is never constructed: `Select` [INFO] [stderr] --> src/query.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | Select(SelectQuery), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Insert` [INFO] [stderr] --> src/query.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | Insert(InsertQuery), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Describe` [INFO] [stderr] --> src/query.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | Describe(DescribeQuery), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum is never used: `Relation` [INFO] [stderr] --> src/query.rs:62:1 [INFO] [stderr] | [INFO] [stderr] 62 | pub enum Relation { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `from` [INFO] [stderr] --> src/query.rs:69:5 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:97:5 [INFO] [stderr] | [INFO] [stderr] 97 | pub fn new(field_name: String, relation: String, value: String) -> FieldCondition { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:114:5 [INFO] [stderr] | [INFO] [stderr] 114 | / pub fn new( [INFO] [stderr] 115 | | table: String, [INFO] [stderr] 116 | | columns: Vec, [INFO] [stderr] 117 | | conditions: Vec, [INFO] [stderr] ... | [INFO] [stderr] 123 | | } [INFO] [stderr] 124 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/query.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | pub fn new(table_name: String, raw_inserts: HashMap) -> InsertQuery { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `parse` [INFO] [stderr] --> src/query_parser.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &String) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `tokenize` [INFO] [stderr] --> src/query_parser.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `parse_select` [INFO] [stderr] --> src/query_parser.rs:122:1 [INFO] [stderr] | [INFO] [stderr] 122 | fn parse_select(tokens: &mut Vec<&str>) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `parse_insert` [INFO] [stderr] --> src/query_parser.rs:153:1 [INFO] [stderr] | [INFO] [stderr] 153 | fn parse_insert(tokens: &mut Vec<&str>) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/dbclient.rs:11:27 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn send(&self, raw: &String) { [INFO] [stderr] | ^^^^^^^ [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] help: change this to [INFO] [stderr] | [INFO] [stderr] 11 | pub fn send(&self, raw: &str) { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `raw.clone()` to [INFO] [stderr] | [INFO] [stderr] 13 | let mut req = Request::new(Body::from(raw.to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:30:9 [INFO] [stderr] | [INFO] [stderr] 30 | / match self { [INFO] [stderr] 31 | | &Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | | &Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 30 | match *self { [INFO] [stderr] 31 | Type::Int => write!(f, "Int"), [INFO] [stderr] 32 | Type::Varchar(n) => write!(f, "Varchar of size {}", n), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query.rs:69:22 [INFO] [stderr] | [INFO] [stderr] 69 | pub fn from(raw: &String) -> Option { [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/query.rs:81:9 [INFO] [stderr] | [INFO] [stderr] 81 | / match self { [INFO] [stderr] 82 | | &Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | | &Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | | &Relation::Gt => write!(f, ">"), [INFO] [stderr] 85 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 81 | match *self { [INFO] [stderr] 82 | Relation::Eq => write!(f, "="), [INFO] [stderr] 83 | Relation::Lt => write!(f, "<"), [INFO] [stderr] 84 | Relation::Gt => write!(f, ">"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:9:34 [INFO] [stderr] | [INFO] [stderr] 9 | pub fn looks_like_query(raw: &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: single-character string constant used as pattern [INFO] [stderr] --> src/query_parser.rs:11:45 [INFO] [stderr] | [INFO] [stderr] 11 | if slice.to_lowercase().starts_with("?") { [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] --> src/query_parser.rs:14:45 [INFO] [stderr] | [INFO] [stderr] 14 | if slice.to_lowercase().starts_with("+") { [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] --> src/query_parser.rs:17:45 [INFO] [stderr] | [INFO] [stderr] 17 | if slice.to_lowercase().starts_with(">") { [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] --> src/query_parser.rs:20:45 [INFO] [stderr] | [INFO] [stderr] 20 | if slice.to_lowercase().starts_with(":") { [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/query_parser.rs:27:30 [INFO] [stderr] | [INFO] [stderr] 27 | pub fn parse(&self, raw: &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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:30:12 [INFO] [stderr] | [INFO] [stderr] 30 | if tokens.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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/query_parser.rs:47:18 [INFO] [stderr] | [INFO] [stderr] 47 | fn tokenize(raw: &String) -> Vec<&str> { [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/query_parser.rs:63:11 [INFO] [stderr] | [INFO] [stderr] 63 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to one [INFO] [stderr] --> src/query_parser.rs:79:20 [INFO] [stderr] | [INFO] [stderr] 79 | if tokens.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:103:8 [INFO] [stderr] | [INFO] [stderr] 103 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:110:15 [INFO] [stderr] | [INFO] [stderr] 110 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:137:8 [INFO] [stderr] | [INFO] [stderr] 137 | if tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:140:15 [INFO] [stderr] | [INFO] [stderr] 140 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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: length comparison to zero [INFO] [stderr] --> src/query_parser.rs:160:11 [INFO] [stderr] | [INFO] [stderr] 160 | while tokens.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tokens.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/repl.rs:43:17 [INFO] [stderr] | [INFO] [stderr] 43 | / match self.execute_raw_command(&command) { [INFO] [stderr] 44 | | ReplResponseAction::Finish => return, [INFO] [stderr] 45 | | _ => {} [INFO] [stderr] 46 | | } [INFO] [stderr] | |_________________^ help: try this: `if let ReplResponseAction::Finish = self.execute_raw_command(&command) { return }` [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] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/repl.rs:57:44 [INFO] [stderr] | [INFO] [stderr] 57 | fn execute_raw_command(&self, command: &String) -> ReplResponseAction { [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/repl.rs:80:27 [INFO] [stderr] | [INFO] [stderr] 80 | fn parse_command(command: &String) -> Result { [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] 80 | fn parse_command(command: &str) -> Result { [INFO] [stderr] | ^^^^ [INFO] [stderr] help: change `command.clone()` to [INFO] [stderr] | [INFO] [stderr] 94 | return Ok(Command::DBCommand(command.to_string())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "8b992f70a8c2ff5c8fb8afccc898f633e22e2c1288cb6164e8e29802c473ba38"` [INFO] running `"docker" "rm" "-f" "8b992f70a8c2ff5c8fb8afccc898f633e22e2c1288cb6164e8e29802c473ba38"` [INFO] [stdout] 8b992f70a8c2ff5c8fb8afccc898f633e22e2c1288cb6164e8e29802c473ba38