[INFO] crate vfs 0.2.0 is already in cache [INFO] extracting crate vfs 0.2.0 into work/ex/clippy-test-run/sources/stable/reg/vfs/0.2.0 [INFO] extracting crate vfs 0.2.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/vfs/0.2.0 [INFO] validating manifest of vfs-0.2.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 vfs-0.2.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 vfs-0.2.0 [INFO] finished frobbing vfs-0.2.0 [INFO] frobbed toml for vfs-0.2.0 written to work/ex/clippy-test-run/sources/stable/reg/vfs/0.2.0/Cargo.toml [INFO] started frobbing vfs-0.2.0 [INFO] finished frobbing vfs-0.2.0 [INFO] frobbed toml for vfs-0.2.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/vfs/0.2.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 vfs-0.2.0 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/vfs/0.2.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 -Dclippy::into_iter_on_array" "-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] e003ca3217efde3b8c1618e97a65ffb0f5d841e7222f80694bb9356310adb36f [INFO] running `"docker" "start" "-a" "e003ca3217efde3b8c1618e97a65ffb0f5d841e7222f80694bb9356310adb36f"` [INFO] [stderr] Checking vfs v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/physical.rs:128:40 [INFO] [stderr] | [INFO] [stderr] 128 | Box::new(PhysicalReadDir { inner: inner }) as Box>>> [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [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/memory.rs:194:13 [INFO] [stderr] | [INFO] [stderr] 194 | path: path, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `path` [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/memory.rs:302:13 [INFO] [stderr] | [INFO] [stderr] 302 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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/physical.rs:128:40 [INFO] [stderr] | [INFO] [stderr] 128 | Box::new(PhysicalReadDir { inner: inner }) as Box>>> [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [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/memory.rs:194:13 [INFO] [stderr] | [INFO] [stderr] 194 | path: path, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `path` [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/memory.rs:302:13 [INFO] [stderr] | [INFO] [stderr] 302 | pos: pos, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `pos` [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 return statement [INFO] [stderr] --> src/physical.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | return Box::new(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(result)` [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/memory.rs:193:9 [INFO] [stderr] | [INFO] [stderr] 193 | / return MemoryPath { [INFO] [stderr] 194 | | path: path, [INFO] [stderr] 195 | | fs: fs.clone(), [INFO] [stderr] 196 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 193 | MemoryPath { [INFO] [stderr] 194 | path: path, [INFO] [stderr] 195 | fs: fs.clone(), [INFO] [stderr] 196 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/memory.rs:204:9 [INFO] [stderr] | [INFO] [stderr] 204 | return traverse_with(root, &mut components, f); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `traverse_with(root, &mut components, f)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | return (None, self.path.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(None, self.path.clone())` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:289:13 [INFO] [stderr] | [INFO] [stderr] 289 | return Ok(file_node.data.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(file_node.data.clone())` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:337:9 [INFO] [stderr] | [INFO] [stderr] 337 | return Box::new(MemoryPath::new(&self.fs, new_path)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(MemoryPath::new(&self.fs, new_path))` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:349:9 [INFO] [stderr] | [INFO] [stderr] 349 | return self.with_node(|node| ()).is_ok(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.with_node(|node| ()).is_ok()` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | return try!(self.with_node(FsNode::metadata)).map(|x| Box::new(x) as Box); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `try!(self.with_node(FsNode::metadata)).map(|x| Box::new(x) as Box)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:368:9 [INFO] [stderr] | [INFO] [stderr] 368 | return Ok(children); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(children)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:366:13 [INFO] [stderr] | [INFO] [stderr] 366 | return Box::new(children.into_iter()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(children.into_iter())` [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: unneeded return statement [INFO] [stderr] --> src/physical.rs:92:9 [INFO] [stderr] | [INFO] [stderr] 92 | return Box::new(result); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(result)` [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/memory.rs:193:9 [INFO] [stderr] | [INFO] [stderr] 193 | / return MemoryPath { [INFO] [stderr] 194 | | path: path, [INFO] [stderr] 195 | | fs: fs.clone(), [INFO] [stderr] 196 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 193 | MemoryPath { [INFO] [stderr] 194 | path: path, [INFO] [stderr] 195 | fs: fs.clone(), [INFO] [stderr] 196 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/memory.rs:204:9 [INFO] [stderr] | [INFO] [stderr] 204 | return traverse_with(root, &mut components, f); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `traverse_with(root, &mut components, f)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:221:9 [INFO] [stderr] | [INFO] [stderr] 221 | return (None, self.path.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `(None, self.path.clone())` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:289:13 [INFO] [stderr] | [INFO] [stderr] 289 | return Ok(file_node.data.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(file_node.data.clone())` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:337:9 [INFO] [stderr] | [INFO] [stderr] 337 | return Box::new(MemoryPath::new(&self.fs, new_path)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(MemoryPath::new(&self.fs, new_path))` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:349:9 [INFO] [stderr] | [INFO] [stderr] 349 | return self.with_node(|node| ()).is_ok(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `self.with_node(|node| ()).is_ok()` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:353:9 [INFO] [stderr] | [INFO] [stderr] 353 | return try!(self.with_node(FsNode::metadata)).map(|x| Box::new(x) as Box); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `try!(self.with_node(FsNode::metadata)).map(|x| Box::new(x) as Box)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:368:9 [INFO] [stderr] | [INFO] [stderr] 368 | return Ok(children); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(children)` [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: unneeded return statement [INFO] [stderr] --> src/memory.rs:366:13 [INFO] [stderr] | [INFO] [stderr] 366 | return Box::new(children.into_iter()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Box::new(children.into_iter())` [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] error: the method "create" is called more than once [INFO] [stderr] --> src/physical.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | / OpenOptions::new() [INFO] [stderr] 42 | | .read(open_options.read) [INFO] [stderr] 43 | | .write(open_options.write) [INFO] [stderr] 44 | | .create(open_options.create) [INFO] [stderr] ... | [INFO] [stderr] 47 | | .create(open_options.create) [INFO] [stderr] 48 | | .open(self) [INFO] [stderr] | |_______________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::nonsensical_open_options)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonsensical_open_options [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/physical.rs:126:27 [INFO] [stderr] | [INFO] [stderr] 126 | fn read_dir(&self) -> Result>>>> { [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/memory.rs:65:19 [INFO] [stderr] | [INFO] [stderr] 65 | kind: self.kind.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.kind` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `memory::MemoryFS` [INFO] [stderr] --> src/memory.rs:85:5 [INFO] [stderr] | [INFO] [stderr] 85 | / pub fn new() -> MemoryFS { [INFO] [stderr] 86 | | MemoryFS { handle: Arc::new(RwLock::new(MemoryFSImpl { root: FsNode::new_directory() })) } [INFO] [stderr] 87 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 84 | impl Default for memory::MemoryFS { [INFO] [stderr] 85 | fn default() -> Self { [INFO] [stderr] 86 | Self::new() [INFO] [stderr] 87 | } [INFO] [stderr] 88 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/memory.rs:109:13 [INFO] [stderr] | [INFO] [stderr] 109 | let ref mut vec: &mut Vec = guard.deref_mut(); [INFO] [stderr] | ----^^^^^^^^^^^----------------------------------- help: try: `let vec: &mut &mut Vec = &mut guard.deref_mut();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/memory.rs:201:57 [INFO] [stderr] | [INFO] [stderr] 201 | let mut components: Vec<&str> = self.path.split("/").collect(); [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/memory.rs:208:46 [INFO] [stderr] | [INFO] [stderr] 208 | let mut split = self.path.rsplitn(2, "/"); [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/memory.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / let mut pos = 0u64; [INFO] [stderr] 296 | | if open_options.append { [INFO] [stderr] 297 | | pos = ctry!(data_handle.0.read()).len() as u64; [INFO] [stderr] 298 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let pos = if open_options.append { ctry!(data_handle.0.read()).len() as u64 } else { 0u64 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/memory.rs:321:26 [INFO] [stderr] | [INFO] [stderr] 321 | Some(v.get(0).unwrap().to_owned().to_owned()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `&v[0]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/memory.rs:342:57 [INFO] [stderr] | [INFO] [stderr] 342 | let mut components: Vec<&str> = self.path.split("/").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/memory.rs:356:27 [INFO] [stderr] | [INFO] [stderr] 356 | fn read_dir(&self) -> Result>>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: variable `openOptions` should have a snake case name such as `open_options` [INFO] [stderr] --> src/lib.rs:65:33 [INFO] [stderr] | [INFO] [stderr] 65 | fn open_with_options(&self, openOptions: &OpenOptions) -> Result>; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:95:29 [INFO] [stderr] | [INFO] [stderr] 95 | fn resolve(&self, path: &String) -> Box; [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:107:27 [INFO] [stderr] | [INFO] [stderr] 107 | fn read_dir(&self) -> Result>>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: trait `VMetadata` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stderr] --> src/lib.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | / pub trait VMetadata { [INFO] [stderr] 137 | | /// Returns true iff this path is a directory [INFO] [stderr] 138 | | fn is_dir(&self) -> bool; [INFO] [stderr] 139 | | /// Returns true iff this path is a file [INFO] [stderr] ... | [INFO] [stderr] 142 | | fn len(&self) -> u64; [INFO] [stderr] 143 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `vfs`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: the method "create" is called more than once [INFO] [stderr] --> src/physical.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | / OpenOptions::new() [INFO] [stderr] 42 | | .read(open_options.read) [INFO] [stderr] 43 | | .write(open_options.write) [INFO] [stderr] 44 | | .create(open_options.create) [INFO] [stderr] ... | [INFO] [stderr] 47 | | .create(open_options.create) [INFO] [stderr] 48 | | .open(self) [INFO] [stderr] | |_______________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::nonsensical_open_options)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonsensical_open_options [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/physical.rs:126:27 [INFO] [stderr] | [INFO] [stderr] 126 | fn read_dir(&self) -> Result>>>> { [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/memory.rs:65:19 [INFO] [stderr] | [INFO] [stderr] 65 | kind: self.kind.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.kind` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `memory::MemoryFS` [INFO] [stderr] --> src/memory.rs:85:5 [INFO] [stderr] | [INFO] [stderr] 85 | / pub fn new() -> MemoryFS { [INFO] [stderr] 86 | | MemoryFS { handle: Arc::new(RwLock::new(MemoryFSImpl { root: FsNode::new_directory() })) } [INFO] [stderr] 87 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 84 | impl Default for memory::MemoryFS { [INFO] [stderr] 85 | fn default() -> Self { [INFO] [stderr] 86 | Self::new() [INFO] [stderr] 87 | } [INFO] [stderr] 88 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/memory.rs:109:13 [INFO] [stderr] | [INFO] [stderr] 109 | let ref mut vec: &mut Vec = guard.deref_mut(); [INFO] [stderr] | ----^^^^^^^^^^^----------------------------------- help: try: `let vec: &mut &mut Vec = &mut guard.deref_mut();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/memory.rs:201:57 [INFO] [stderr] | [INFO] [stderr] 201 | let mut components: Vec<&str> = self.path.split("/").collect(); [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/memory.rs:208:46 [INFO] [stderr] | [INFO] [stderr] 208 | let mut split = self.path.rsplitn(2, "/"); [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: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/memory.rs:295:9 [INFO] [stderr] | [INFO] [stderr] 295 | / let mut pos = 0u64; [INFO] [stderr] 296 | | if open_options.append { [INFO] [stderr] 297 | | pos = ctry!(data_handle.0.read()).len() as u64; [INFO] [stderr] 298 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let pos = if open_options.append { ctry!(data_handle.0.read()).len() as u64 } else { 0u64 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise [INFO] [stderr] --> src/memory.rs:321:26 [INFO] [stderr] | [INFO] [stderr] 321 | Some(v.get(0).unwrap().to_owned().to_owned()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `&v[0]` [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: single-character string constant used as pattern [INFO] [stderr] --> src/memory.rs:342:57 [INFO] [stderr] | [INFO] [stderr] 342 | let mut components: Vec<&str> = self.path.split("/").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/memory.rs:356:27 [INFO] [stderr] | [INFO] [stderr] 356 | fn read_dir(&self) -> Result>>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: variable `openOptions` should have a snake case name such as `open_options` [INFO] [stderr] --> src/lib.rs:65:33 [INFO] [stderr] | [INFO] [stderr] 65 | fn open_with_options(&self, openOptions: &OpenOptions) -> Result>; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/lib.rs:95:29 [INFO] [stderr] | [INFO] [stderr] 95 | fn resolve(&self, path: &String) -> Box; [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/lib.rs:107:27 [INFO] [stderr] | [INFO] [stderr] 107 | fn read_dir(&self) -> Result>>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: trait `VMetadata` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stderr] --> src/lib.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | / pub trait VMetadata { [INFO] [stderr] 137 | | /// Returns true iff this path is a directory [INFO] [stderr] 138 | | fn is_dir(&self) -> bool; [INFO] [stderr] 139 | | /// Returns true iff this path is a file [INFO] [stderr] ... | [INFO] [stderr] 142 | | fn len(&self) -> u64; [INFO] [stderr] 143 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `vfs`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "e003ca3217efde3b8c1618e97a65ffb0f5d841e7222f80694bb9356310adb36f"` [INFO] running `"docker" "rm" "-f" "e003ca3217efde3b8c1618e97a65ffb0f5d841e7222f80694bb9356310adb36f"` [INFO] [stdout] e003ca3217efde3b8c1618e97a65ffb0f5d841e7222f80694bb9356310adb36f