[INFO] cloning repository https://github.com/kaae-2/neural-net-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/kaae-2/neural-net-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaae-2%2Fneural-net-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaae-2%2Fneural-net-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 173e179d34cbc28762202ae3ce1f46dec7832eb5 [INFO] linting kaae-2/neural-net-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaae-2%2Fneural-net-rs" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/kaae-2/neural-net-rs [INFO] finished tweaking git repo https://github.com/kaae-2/neural-net-rs [INFO] tweaked toml for git repo https://github.com/kaae-2/neural-net-rs written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/kaae-2/neural-net-rs on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/kaae-2/neural-net-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: unused manifest key: build [INFO] [stderr] help: build is a valid .cargo/config.toml key [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded into-attr v0.1.1 [INFO] [stderr] Downloaded impl_ops v0.1.1 [INFO] [stderr] Downloaded into-attr-derive v0.2.1 [INFO] [stderr] Downloaded native-tls v0.2.12 [INFO] [stderr] Downloaded thiserror-impl v1.0.62 [INFO] [stderr] Downloaded dot-structures v0.1.1 [INFO] [stderr] Downloaded security-framework-sys v2.12.0 [INFO] [stderr] Downloaded thiserror v1.0.62 [INFO] [stderr] Downloaded dot-generator v0.2.0 [INFO] [stderr] Downloaded graphviz-rust v0.9.0 [INFO] [stderr] Downloaded ipnet v2.10.1 [INFO] [stderr] Downloaded openssl-sys v0.9.103 [INFO] [stderr] Downloaded pest_generator v2.7.11 [INFO] [stderr] Downloaded pest_derive v2.7.11 [INFO] [stderr] Downloaded schannel v0.1.24 [INFO] [stderr] Downloaded tokio-rustls v0.26.0 [INFO] [stderr] Downloaded ucd-trie v0.1.6 [INFO] [stderr] Downloaded hyper-rustls v0.27.3 [INFO] [stderr] Downloaded rustls-pki-types v1.9.0 [INFO] [stderr] Downloaded pest_meta v2.7.11 [INFO] [stderr] Downloaded cc v1.1.28 [INFO] [stderr] Downloaded reqwest v0.12.8 [INFO] [stderr] Downloaded pest v2.7.11 [INFO] [stderr] Downloaded h2 v0.4.6 [INFO] [stderr] Downloaded openssl v0.10.66 [INFO] [stderr] Downloaded syn v2.0.71 [INFO] [stderr] Downloaded rustls v0.23.14 [INFO] [stderr] Downloaded encoding_rs v0.8.34 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] cca64607ea77d0a8a3af97d3593f7767c2e1c2a02f781e555735a0f594de5efc [INFO] running `Command { std: "docker" "start" "-a" "cca64607ea77d0a8a3af97d3593f7767c2e1c2a02f781e555735a0f594de5efc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "cca64607ea77d0a8a3af97d3593f7767c2e1c2a02f781e555735a0f594de5efc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cca64607ea77d0a8a3af97d3593f7767c2e1c2a02f781e555735a0f594de5efc", kill_on_drop: false }` [INFO] [stdout] cca64607ea77d0a8a3af97d3593f7767c2e1c2a02f781e555735a0f594de5efc [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] ed93ffb83c592edb6b79b30b3f741d85d2af31c80c1888ae3fe5edfa01cafe1c [INFO] running `Command { std: "docker" "start" "-a" "ed93ffb83c592edb6b79b30b3f741d85d2af31c80c1888ae3fe5edfa01cafe1c", kill_on_drop: false }` [INFO] [stderr] warning: unused manifest key: build [INFO] [stderr] help: build is a valid .cargo/config.toml key [INFO] [stderr] Compiling libc v0.2.155 [INFO] [stderr] Checking bytes v1.7.2 [INFO] [stderr] Compiling thiserror v1.0.62 [INFO] [stderr] Checking itoa v1.0.11 [INFO] [stderr] Compiling cc v1.1.28 [INFO] [stderr] Checking tracing-core v0.1.32 [INFO] [stderr] Compiling httparse v1.9.5 [INFO] [stderr] Checking hashbrown v0.15.0 [INFO] [stderr] Compiling openssl v0.10.66 [INFO] [stderr] Compiling ucd-trie v0.1.6 [INFO] [stderr] Compiling syn v2.0.71 [INFO] [stderr] Compiling native-tls v0.2.12 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Compiling rustix v0.38.34 [INFO] [stderr] Checking openssl-probe v0.1.5 [INFO] [stderr] Compiling dot-structures v0.1.1 [INFO] [stderr] Compiling serde v1.0.210 [INFO] [stderr] Compiling once_cell v1.19.0 [INFO] [stderr] Checking unicode-normalization v0.1.24 [INFO] [stderr] Checking unicode-bidi v0.3.17 [INFO] [stderr] Checking ppv-lite86 v0.2.17 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling dot-generator v0.2.0 [INFO] [stderr] Compiling into-attr v0.1.1 [INFO] [stderr] Checking fastrand v2.1.0 [INFO] [stderr] Checking rustls-pki-types v1.9.0 [INFO] [stderr] Checking tracing v0.1.40 [INFO] [stderr] Checking http v1.1.0 [INFO] [stderr] Checking sync_wrapper v1.0.1 [INFO] [stderr] Checking encoding_rs v0.8.34 [INFO] [stderr] Checking ipnet v2.10.1 [INFO] [stderr] Checking impl_ops v0.1.1 [INFO] [stderr] Checking idna v0.5.0 [INFO] [stderr] Checking indexmap v2.6.0 [INFO] [stderr] Checking rustls-pemfile v2.2.0 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking socket2 v0.5.7 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking uuid v1.8.0 [INFO] [stderr] Checking url v2.5.2 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Compiling openssl-sys v0.9.103 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking tokio v1.40.0 [INFO] [stderr] Compiling into-attr-derive v0.2.1 [INFO] [stderr] Checking tempfile v3.10.1 [INFO] [stderr] Checking http-body-util v0.1.2 [INFO] [stderr] Compiling thiserror-impl v1.0.62 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking pest v2.7.11 [INFO] [stderr] Checking tokio-util v0.7.12 [INFO] [stderr] Compiling pest_meta v2.7.11 [INFO] [stderr] Checking h2 v0.4.6 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Compiling pest_generator v2.7.11 [INFO] [stderr] Compiling pest_derive v2.7.11 [INFO] [stderr] Checking graphviz-rust v0.9.0 [INFO] [stderr] Checking hyper v1.4.1 [INFO] [stderr] Checking hyper-util v0.1.9 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.8 [INFO] [stderr] Checking neural-net v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/micrograd/neural_net.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 23 | weights: weights, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `weights` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after outer attribute [INFO] [stdout] --> src/micrograd/neural_net.rs:148:1 [INFO] [stdout] | [INFO] [stdout] 148 | / #[cfg(test)] [INFO] [stdout] 149 | | [INFO] [stdout] | |_^ [INFO] [stdout] 150 | mod tests { [INFO] [stdout] | --------- the attribute applies to this module [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_outer_attr [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_outer_attr)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/micrograd/neural_net.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 23 | weights: weights, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `weights` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/engine.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | let mut visited: HashSet = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] = note: `#[warn(clippy::mutable_key_type)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/engine.rs:110:58 [INFO] [stdout] | [INFO] [stdout] 110 | fn build_topo(&self, topo: &mut Vec, visited: &mut HashSet) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: suspicious use of `+` in `Mul` impl [INFO] [stdout] --> src/micrograd/engine.rs:165:44 [INFO] [stdout] | [INFO] [stdout] 165 | val._prev[0].borrow_mut().grad += data1; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [INFO] [stdout] = note: `#[warn(clippy::suspicious_arithmetic_impl)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: suspicious use of `+` in `Mul` impl [INFO] [stdout] --> src/micrograd/engine.rs:166:44 [INFO] [stdout] | [INFO] [stdout] 166 | val._prev[1].borrow_mut().grad += data0; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:177:9 [INFO] [stdout] | [INFO] [stdout] 175 | let result = self * &_rhs.pow(-1.0); [INFO] [stdout] | ------------------------------------ unnecessary `let` binding [INFO] [stdout] 176 | [INFO] [stdout] 177 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 175 ~ [INFO] [stdout] 176 | [INFO] [stdout] 177 ~ self * &_rhs.pow(-1.0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 184 | let result = self * &Value::from(-1.0); [INFO] [stdout] | --------------------------------------- unnecessary `let` binding [INFO] [stdout] 185 | [INFO] [stdout] 186 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 184 ~ [INFO] [stdout] 185 | [INFO] [stdout] 186 ~ self * &Value::from(-1.0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:193:9 [INFO] [stdout] | [INFO] [stdout] 192 | let result = &-_rhs + self; [INFO] [stdout] | --------------------------- unnecessary `let` binding [INFO] [stdout] 193 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 192 ~ [INFO] [stdout] 193 ~ &-_rhs + self [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/micrograd/neural_net.rs:29:40 [INFO] [stdout] | [INFO] [stdout] 29 | pub fn forward(&self, activations: &Vec) -> Value { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 29 - pub fn forward(&self, activations: &Vec) -> Value { [INFO] [stdout] 29 + pub fn forward(&self, activations: &[Value]) -> Value { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/neural_net.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 38 | let output = if self.nonlin { result.relu() } else { result }; [INFO] [stdout] | -------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 39 | [INFO] [stdout] 40 | output [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 38 ~ [INFO] [stdout] 39 | [INFO] [stdout] 40 ~ if self.nonlin { result.relu() } else { result } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/micrograd/neural_net.rs:114:21 [INFO] [stdout] | [INFO] [stdout] 114 | n_layer_size[i].clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `n_layer_size[i]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/micrograd/neural_net.rs:115:21 [INFO] [stdout] | [INFO] [stdout] 115 | n_layer_size[i + 1].clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `n_layer_size[i + 1]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | let mut total_nodes: HashSet = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | let mut total_edges: HashSet<(Value, Value)> = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/micrograd/visualize.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | let _ = output_graph_file(&dot, filename)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] = note: `#[warn(clippy::let_unit_value)]` on by default [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 32 - let _ = output_graph_file(&dot, filename)?; [INFO] [stdout] 32 + output_graph_file(&dot, filename)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/micrograd/visualize.rs:36:37 [INFO] [stdout] | [INFO] [stdout] 36 | pub fn output_graph_file(dot_graph: &String, filename: String) -> Result<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 36 ~ pub fn output_graph_file(dot_graph: &str, filename: String) -> Result<()> { [INFO] [stdout] 37 | exec_dot( [INFO] [stdout] 38 ~ dot_graph.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/micrograd/visualize.rs:44:32 [INFO] [stdout] | [INFO] [stdout] 44 | fn trace_nodes(root: Value) -> Result<(HashSet, HashSet<(Value, Value)>)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/micrograd/visualize.rs:47:14 [INFO] [stdout] | [INFO] [stdout] 47 | fn build<'a>( [INFO] [stdout] | ^^ [INFO] [stdout] 48 | v: &'a Value, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 47 ~ fn build( [INFO] [stdout] 48 ~ v: &Value, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:49:20 [INFO] [stdout] | [INFO] [stdout] 49 | mut nodes: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:50:20 [INFO] [stdout] | [INFO] [stdout] 50 | mut edges: HashSet<(Value, Value)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/micrograd/visualize.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | ) -> Option<(HashSet, HashSet<(Value, Value)>)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &&str>` [INFO] [stdout] --> src/micrograd/visualize.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | Ok(id [INFO] [stdout] | ________^ [INFO] [stdout] 68 | | .to_string() [INFO] [stdout] 69 | | .split(&"-") [INFO] [stdout] 70 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 67 ~ Ok(id [INFO] [stdout] 68 + .to_string() [INFO] [stdout] 69 + .split(&"-") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:82:22 [INFO] [stdout] | [INFO] [stdout] 82 | fn make_graph(nodes: HashSet, edges: HashSet<(Value, Value)>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:82:45 [INFO] [stdout] | [INFO] [stdout] 82 | fn make_graph(nodes: HashSet, edges: HashSet<(Value, Value)>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/micrograd/visualize.rs:106:12 [INFO] [stdout] | [INFO] [stdout] 106 | if n.borrow()._op != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `n.borrow()._op.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/micrograd/visualize.rs:132:32 [INFO] [stdout] | [INFO] [stdout] 132 | let n2_string = if n2.borrow()._op.as_ref() != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `n2.borrow()._op.as_ref().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `from_*` usually take no `self` [INFO] [stdout] --> src/transformer/tokenizer.rs:29:18 [INFO] [stdout] | [INFO] [stdout] 29 | fn from_utf8(&mut self, input: &str) -> Result> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Chars<'_>` [INFO] [stdout] --> src/transformer/tokenizer.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | let vocab = input [INFO] [stdout] | _____________________^ [INFO] [stdout] 34 | | .chars() [INFO] [stdout] 35 | | .into_iter() [INFO] [stdout] | |________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 33 ~ let vocab = input [INFO] [stdout] 34 + .chars() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/transformer/tokenizer.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 45 | let id = self.max_token_id.clone(); [INFO] [stdout] | ----------------------------------- unnecessary `let` binding [INFO] [stdout] 46 | id [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 45 ~ [INFO] [stdout] 46 ~ self.max_token_id.clone() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/transformer/tokenizer.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | let id = self.max_token_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.max_token_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/transformer/tokenizer.rs:71:26 [INFO] [stdout] | [INFO] [stdout] 71 | .expect(&format!( [INFO] [stdout] | __________________________^ [INFO] [stdout] 72 | | "{:?} exists, current vocab: {:?}", [INFO] [stdout] 73 | | &rule, total_vocab [INFO] [stdout] 74 | | )) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 ~ .unwrap_or_else(|| panic!("{:?} exists, current vocab: {:?}", [INFO] [stdout] 72 + &rule, total_vocab)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/transformer/tokenizer.rs:78:26 [INFO] [stdout] | [INFO] [stdout] 78 | .expect(&format!( [INFO] [stdout] | __________________________^ [INFO] [stdout] 79 | | "{:?} exists, current vocab: {:?}", [INFO] [stdout] 80 | | &rule, total_vocab [INFO] [stdout] 81 | | )) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 78 ~ .unwrap_or_else(|| panic!("{:?} exists, current vocab: {:?}", [INFO] [stdout] 79 + &rule, total_vocab)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:104:16 [INFO] [stdout] | [INFO] [stdout] 104 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/transformer/tokenizer.rs:102:28 [INFO] [stdout] | [INFO] [stdout] 102 | let mut it = input.into_iter().peekable(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:121:12 [INFO] [stdout] | [INFO] [stdout] 121 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/transformer/tokenizer.rs:167:12 [INFO] [stdout] | [INFO] [stdout] 167 | if input_vec.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!input_vec.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:205:24 [INFO] [stdout] | [INFO] [stdout] 205 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformer/tokenizer.rs:192:36 [INFO] [stdout] | [INFO] [stdout] 192 | .max_by(|a, b| a.1.cmp(&b.1)) [INFO] [stdout] | ^^^^ help: change this to: `b.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/transformer/tokenizer.rs:203:36 [INFO] [stdout] | [INFO] [stdout] 203 | let mut it = input.into_iter().peekable(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/transformer/tokenizer.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 232 | return Ok(output); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 - return Ok(output); [INFO] [stdout] 232 + Ok(output) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `decoded` [INFO] [stdout] --> examples/c01-2_tokenizer_shakespeare.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | let decoded = encoder.decode(encoded)?; [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_decoded` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/engine.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | let mut visited: HashSet = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] = note: `#[warn(clippy::mutable_key_type)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/engine.rs:110:58 [INFO] [stdout] | [INFO] [stdout] 110 | fn build_topo(&self, topo: &mut Vec, visited: &mut HashSet) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: suspicious use of `+` in `Mul` impl [INFO] [stdout] --> src/micrograd/engine.rs:165:44 [INFO] [stdout] | [INFO] [stdout] 165 | val._prev[0].borrow_mut().grad += data1; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [INFO] [stdout] = note: `#[warn(clippy::suspicious_arithmetic_impl)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: suspicious use of `+` in `Mul` impl [INFO] [stdout] --> src/micrograd/engine.rs:166:44 [INFO] [stdout] | [INFO] [stdout] 166 | val._prev[1].borrow_mut().grad += data0; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:177:9 [INFO] [stdout] | [INFO] [stdout] 175 | let result = self * &_rhs.pow(-1.0); [INFO] [stdout] | ------------------------------------ unnecessary `let` binding [INFO] [stdout] 176 | [INFO] [stdout] 177 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 175 ~ [INFO] [stdout] 176 | [INFO] [stdout] 177 ~ self * &_rhs.pow(-1.0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:186:9 [INFO] [stdout] | [INFO] [stdout] 184 | let result = self * &Value::from(-1.0); [INFO] [stdout] | --------------------------------------- unnecessary `let` binding [INFO] [stdout] 185 | [INFO] [stdout] 186 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 184 ~ [INFO] [stdout] 185 | [INFO] [stdout] 186 ~ self * &Value::from(-1.0) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/engine.rs:193:9 [INFO] [stdout] | [INFO] [stdout] 192 | let result = &-_rhs + self; [INFO] [stdout] | --------------------------- unnecessary `let` binding [INFO] [stdout] 193 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 192 ~ [INFO] [stdout] 193 ~ &-_rhs + self [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> examples/c00_micrograd_make_moons.rs:32:13 [INFO] [stdout] | [INFO] [stdout] 27 | / let data_point = DataPoint { [INFO] [stdout] 28 | | x: fields[0].parse::().expect("field 0 can be read"), [INFO] [stdout] 29 | | y: fields[1].parse::().expect("field 1 can be read"), [INFO] [stdout] 30 | | label: fields[2].parse::().expect("field 2 can be read"), [INFO] [stdout] 31 | | }; [INFO] [stdout] | |______________- unnecessary `let` binding [INFO] [stdout] 32 | data_point [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 27 ~ [INFO] [stdout] 28 ~ DataPoint { [INFO] [stdout] 29 + x: fields[0].parse::().expect("field 0 can be read"), [INFO] [stdout] 30 + y: fields[1].parse::().expect("field 1 can be read"), [INFO] [stdout] 31 + label: fields[2].parse::().expect("field 2 can be read"), [INFO] [stdout] 32 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression borrows a value the compiler would automatically borrow [INFO] [stdout] --> examples/c00_micrograd_make_moons.rs:71:25 [INFO] [stdout] | [INFO] [stdout] 71 | let n = Value::from((&losses).len() as f64); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `losses` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::iter::Map, {closure@examples/c00_micrograd_make_moons.rs:78:18: 78:21}>` [INFO] [stdout] --> examples/c00_micrograd_make_moons.rs:75:12 [INFO] [stdout] | [INFO] [stdout] 75 | * &model [INFO] [stdout] | ____________^ [INFO] [stdout] 76 | | .parameters() [INFO] [stdout] 77 | | .iter() [INFO] [stdout] 78 | | .map(|p| p * p) [INFO] [stdout] 79 | | .into_iter() [INFO] [stdout] | |________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 75 ~ * &model [INFO] [stdout] 76 + .parameters() [INFO] [stdout] 77 + .iter() [INFO] [stdout] 78 + .map(|p| p * p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/micrograd/neural_net.rs:29:40 [INFO] [stdout] | [INFO] [stdout] 29 | pub fn forward(&self, activations: &Vec) -> Value { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 29 - pub fn forward(&self, activations: &Vec) -> Value { [INFO] [stdout] 29 + pub fn forward(&self, activations: &[Value]) -> Value { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/micrograd/neural_net.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 38 | let output = if self.nonlin { result.relu() } else { result }; [INFO] [stdout] | -------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 39 | [INFO] [stdout] 40 | output [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 38 ~ [INFO] [stdout] 39 | [INFO] [stdout] 40 ~ if self.nonlin { result.relu() } else { result } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/micrograd/neural_net.rs:114:21 [INFO] [stdout] | [INFO] [stdout] 114 | n_layer_size[i].clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `n_layer_size[i]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/micrograd/neural_net.rs:115:21 [INFO] [stdout] | [INFO] [stdout] 115 | n_layer_size[i + 1].clone(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `n_layer_size[i + 1]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | let mut total_nodes: HashSet = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | let mut total_edges: HashSet<(Value, Value)> = HashSet::new(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/micrograd/visualize.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | let _ = output_graph_file(&dot, filename)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] = note: `#[warn(clippy::let_unit_value)]` on by default [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 32 - let _ = output_graph_file(&dot, filename)?; [INFO] [stdout] 32 + output_graph_file(&dot, filename)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/micrograd/visualize.rs:36:37 [INFO] [stdout] | [INFO] [stdout] 36 | pub fn output_graph_file(dot_graph: &String, filename: String) -> Result<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 36 ~ pub fn output_graph_file(dot_graph: &str, filename: String) -> Result<()> { [INFO] [stdout] 37 | exec_dot( [INFO] [stdout] 38 ~ dot_graph.to_owned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/micrograd/visualize.rs:44:32 [INFO] [stdout] | [INFO] [stdout] 44 | fn trace_nodes(root: Value) -> Result<(HashSet, HashSet<(Value, Value)>)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/micrograd/visualize.rs:47:14 [INFO] [stdout] | [INFO] [stdout] 47 | fn build<'a>( [INFO] [stdout] | ^^ [INFO] [stdout] 48 | v: &'a Value, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 47 ~ fn build( [INFO] [stdout] 48 ~ v: &Value, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:49:20 [INFO] [stdout] | [INFO] [stdout] 49 | mut nodes: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:50:20 [INFO] [stdout] | [INFO] [stdout] 50 | mut edges: HashSet<(Value, Value)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/micrograd/visualize.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | ) -> Option<(HashSet, HashSet<(Value, Value)>)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &&str>` [INFO] [stdout] --> src/micrograd/visualize.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | Ok(id [INFO] [stdout] | ________^ [INFO] [stdout] 68 | | .to_string() [INFO] [stdout] 69 | | .split(&"-") [INFO] [stdout] 70 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 67 ~ Ok(id [INFO] [stdout] 68 + .to_string() [INFO] [stdout] 69 + .split(&"-") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:82:22 [INFO] [stdout] | [INFO] [stdout] 82 | fn make_graph(nodes: HashSet, edges: HashSet<(Value, Value)>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: mutable key type [INFO] [stdout] --> src/micrograd/visualize.rs:82:45 [INFO] [stdout] | [INFO] [stdout] 82 | fn make_graph(nodes: HashSet, edges: HashSet<(Value, Value)>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: ... because it contains `(Value, Value)`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Value`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Rc>`, which has interior mutability [INFO] [stdout] = note: ... because it contains `RefCell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `Cell`, which has interior mutability [INFO] [stdout] = note: ... because it contains `UnsafeCell`, which has interior mutability [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mutable_key_type [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/micrograd/visualize.rs:106:12 [INFO] [stdout] | [INFO] [stdout] 106 | if n.borrow()._op != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `n.borrow()._op.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/micrograd/visualize.rs:132:32 [INFO] [stdout] | [INFO] [stdout] 132 | let n2_string = if n2.borrow()._op.as_ref() != None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `n2.borrow()._op.as_ref().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `from_*` usually take no `self` [INFO] [stdout] --> src/transformer/tokenizer.rs:29:18 [INFO] [stdout] | [INFO] [stdout] 29 | fn from_utf8(&mut self, input: &str) -> Result> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Chars<'_>` [INFO] [stdout] --> src/transformer/tokenizer.rs:33:21 [INFO] [stdout] | [INFO] [stdout] 33 | let vocab = input [INFO] [stdout] | _____________________^ [INFO] [stdout] 34 | | .chars() [INFO] [stdout] 35 | | .into_iter() [INFO] [stdout] | |________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 33 ~ let vocab = input [INFO] [stdout] 34 + .chars() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/transformer/tokenizer.rs:46:9 [INFO] [stdout] | [INFO] [stdout] 45 | let id = self.max_token_id.clone(); [INFO] [stdout] | ----------------------------------- unnecessary `let` binding [INFO] [stdout] 46 | id [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 45 ~ [INFO] [stdout] 46 ~ self.max_token_id.clone() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/transformer/tokenizer.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | let id = self.max_token_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.max_token_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/transformer/tokenizer.rs:71:26 [INFO] [stdout] | [INFO] [stdout] 71 | .expect(&format!( [INFO] [stdout] | __________________________^ [INFO] [stdout] 72 | | "{:?} exists, current vocab: {:?}", [INFO] [stdout] 73 | | &rule, total_vocab [INFO] [stdout] 74 | | )) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 ~ .unwrap_or_else(|| panic!("{:?} exists, current vocab: {:?}", [INFO] [stdout] 72 + &rule, total_vocab)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/transformer/tokenizer.rs:78:26 [INFO] [stdout] | [INFO] [stdout] 78 | .expect(&format!( [INFO] [stdout] | __________________________^ [INFO] [stdout] 79 | | "{:?} exists, current vocab: {:?}", [INFO] [stdout] 80 | | &rule, total_vocab [INFO] [stdout] 81 | | )) [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 78 ~ .unwrap_or_else(|| panic!("{:?} exists, current vocab: {:?}", [INFO] [stdout] 79 + &rule, total_vocab)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:104:16 [INFO] [stdout] | [INFO] [stdout] 104 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/transformer/tokenizer.rs:102:28 [INFO] [stdout] | [INFO] [stdout] 102 | let mut it = input.into_iter().peekable(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:121:12 [INFO] [stdout] | [INFO] [stdout] 121 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/transformer/tokenizer.rs:167:12 [INFO] [stdout] | [INFO] [stdout] 167 | if input_vec.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!input_vec.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/transformer/tokenizer.rs:205:24 [INFO] [stdout] | [INFO] [stdout] 205 | if !it.peek().is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `it.peek().is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/transformer/tokenizer.rs:192:36 [INFO] [stdout] | [INFO] [stdout] 192 | .max_by(|a, b| a.1.cmp(&b.1)) [INFO] [stdout] | ^^^^ help: change this to: `b.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/transformer/tokenizer.rs:203:36 [INFO] [stdout] | [INFO] [stdout] 203 | let mut it = input.into_iter().peekable(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/transformer/tokenizer.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 232 | return Ok(output); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 - return Ok(output); [INFO] [stdout] 232 + Ok(output) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.93s [INFO] running `Command { std: "docker" "inspect" "ed93ffb83c592edb6b79b30b3f741d85d2af31c80c1888ae3fe5edfa01cafe1c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ed93ffb83c592edb6b79b30b3f741d85d2af31c80c1888ae3fe5edfa01cafe1c", kill_on_drop: false }` [INFO] [stdout] ed93ffb83c592edb6b79b30b3f741d85d2af31c80c1888ae3fe5edfa01cafe1c