[INFO] cloning repository https://github.com/Remmaker/RMakeReborn [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Remmaker/RMakeReborn" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRemmaker%2FRMakeReborn", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRemmaker%2FRMakeReborn'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] e26f7fc7aaa0035b5026a916c07b606bd813924b [INFO] linting Remmaker/RMakeReborn against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FRemmaker%2FRMakeReborn" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Remmaker/RMakeReborn [INFO] finished tweaking git repo https://github.com/Remmaker/RMakeReborn [INFO] tweaked toml for git repo https://github.com/Remmaker/RMakeReborn written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Remmaker/RMakeReborn 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/Remmaker/RMakeReborn 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] c70e542a4258cbf616bc76f3f3dd58d3b34d4ef14f65af384e36da102dbbf309 [INFO] running `Command { std: "docker" "start" "-a" "c70e542a4258cbf616bc76f3f3dd58d3b34d4ef14f65af384e36da102dbbf309", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "c70e542a4258cbf616bc76f3f3dd58d3b34d4ef14f65af384e36da102dbbf309", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c70e542a4258cbf616bc76f3f3dd58d3b34d4ef14f65af384e36da102dbbf309", kill_on_drop: false }` [INFO] [stdout] c70e542a4258cbf616bc76f3f3dd58d3b34d4ef14f65af384e36da102dbbf309 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] 4fc83c8e74787d6a01e50f4113494b17eeb02439b63c29ba0254efc0bd640ea5 [INFO] running `Command { std: "docker" "start" "-a" "4fc83c8e74787d6a01e50f4113494b17eeb02439b63c29ba0254efc0bd640ea5", kill_on_drop: false }` [INFO] [stderr] Checking rmake v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: fields `stdout` and `stderr` are never read [INFO] [stdout] --> src/config.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 41 | pub struct CmdOutput { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 42 | pub stdout: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 43 | pub stderr: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CmdOutput` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cli.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | file_is_conf(&second)?; [INFO] [stdout] | ^^^^^^^ help: change this to: `second` [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: unneeded late initialization [INFO] [stdout] --> src/cli.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 45 | let res: Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `res` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 45 ~ [INFO] [stdout] 46 | check_for_config_requirement(&config)?; [INFO] [stdout] 47 | [INFO] [stdout] 48 ~ let res: Vec = if should_build { [INFO] [stdout] 49 | let build_conf = parse_build(&config)?; [INFO] [stdout] 50 ~ execute_build(&build_conf)? [INFO] [stdout] 51 | } else { [INFO] [stdout] 52 | let run_conf = parse_run(&config)?; [INFO] [stdout] 53 ~ execute_run(&run_conf)? [INFO] [stdout] 54 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/config.rs:95:16 [INFO] [stdout] | [INFO] [stdout] 95 | if !config.current_section.is_none() { // Handle a '{' standalone in a scope [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `config.current_section.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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:90:37 [INFO] [stdout] | [INFO] [stdout] 90 | if is_comment_line_or_empty(&line) { [INFO] [stdout] | ^^^^^ help: change this to: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a suffix manually [INFO] [stdout] --> src/config.rs:108:43 [INFO] [stdout] | [INFO] [stdout] 108 | config.current_section = Some(line[..line.len()-1].trim().to_string().to_lowercase()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the suffix was tested here [INFO] [stdout] --> src/config.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 94 | if line.ends_with("{") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_suffix` method [INFO] [stdout] | [INFO] [stdout] 94 ~ if let Some() = line.strip_suffix("{") { [INFO] [stdout] 95 | if !config.current_section.is_none() { // Handle a '{' standalone in a scope [INFO] [stdout] ... [INFO] [stdout] 107 | [INFO] [stdout] 108 ~ config.current_section = Some(.trim().to_string().to_lowercase()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/config.rs:113:16 [INFO] [stdout] | [INFO] [stdout] 113 | if config.current_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `config.current_section.is_none()` [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: this creates an owned instance just for comparison [INFO] [stdout] --> src/config.rs:131:16 [INFO] [stdout] | [INFO] [stdout] 131 | if lines[i+1].trim().to_string() != "{" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `lines[i+1].trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/config.rs:144:28 [INFO] [stdout] | [INFO] [stdout] 144 | for (_, content) in dir.enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 144 - for (_, content) in dir.enumerate() { [INFO] [stdout] 144 + for content in dir { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 145 | / if let Ok(entry) = content { [INFO] [stdout] 146 | | if entry.path().extension().is_some_and(|ext| ext.to_str() == Some("rm")) { [INFO] [stdout] 147 | | ret = entry.file_name().to_string_lossy().to_string(); [INFO] [stdout] 148 | | break [INFO] [stdout] 149 | | } [INFO] [stdout] 150 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 145 ~ if let Ok(entry) = content [INFO] [stdout] 146 ~ && entry.path().extension().is_some_and(|ext| ext.to_str() == Some("rm")) { [INFO] [stdout] 147 | ret = entry.file_name().to_string_lossy().to_string(); [INFO] [stdout] 148 | break [INFO] [stdout] 149 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/config.rs:169:28 [INFO] [stdout] | [INFO] [stdout] 169 | for (_, content) in dir.enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 169 - for (_, content) in dir.enumerate() { [INFO] [stdout] 169 + for content in dir { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:170:9 [INFO] [stdout] | [INFO] [stdout] 170 | / if let Ok(entry) = content { [INFO] [stdout] 171 | | if entry.path().is_file() && entry.file_name().to_string_lossy().eq(file_search.as_str()) { [INFO] [stdout] 172 | | ret = true; [INFO] [stdout] 173 | | break [INFO] [stdout] 174 | | } [INFO] [stdout] 175 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 170 ~ if let Ok(entry) = content [INFO] [stdout] 171 ~ && entry.path().is_file() && entry.file_name().to_string_lossy().eq(file_search.as_str()) { [INFO] [stdout] 172 | ret = true; [INFO] [stdout] 173 | break [INFO] [stdout] 174 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `stdout` and `stderr` are never read [INFO] [stdout] --> src/config.rs:42:9 [INFO] [stdout] | [INFO] [stdout] 41 | pub struct CmdOutput { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 42 | pub stdout: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 43 | pub stderr: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CmdOutput` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cli.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | file_is_conf(&second)?; [INFO] [stdout] | ^^^^^^^ help: change this to: `second` [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::string::String` [INFO] [stdout] --> src/config.rs:179:57 [INFO] [stdout] | [INFO] [stdout] 179 | return Err(ConfigError::FileNotFound { message: format!("Config file not found: {file}").into() }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("Config file not found: {file}")` [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] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/cli.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 45 | let res: Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `res` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 45 ~ [INFO] [stdout] 46 | check_for_config_requirement(&config)?; [INFO] [stdout] 47 | [INFO] [stdout] 48 ~ let res: Vec = if should_build { [INFO] [stdout] 49 | let build_conf = parse_build(&config)?; [INFO] [stdout] 50 ~ execute_build(&build_conf)? [INFO] [stdout] 51 | } else { [INFO] [stdout] 52 | let run_conf = parse_run(&config)?; [INFO] [stdout] 53 ~ execute_run(&run_conf)? [INFO] [stdout] 54 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/run.rs:56:5 [INFO] [stdout] | [INFO] [stdout] 56 | / if let Some(interpreter) = &run_conf.interpreter { [INFO] [stdout] 57 | | if let Some(prescript) = &run_conf.prescript { [INFO] [stdout] 58 | | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] 59 | | .output().map_err(|_| ConfigError::CommandFailed { cmd: interpreter.clone(), message: "Unexpected".into() })?; [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 56 ~ if let Some(interpreter) = &run_conf.interpreter [INFO] [stdout] 57 ~ && let Some(prescript) = &run_conf.prescript { [INFO] [stdout] 58 | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] ... [INFO] [stdout] 65 | ret.push(tmpoutput); [INFO] [stdout] 66 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/run.rs:58:50 [INFO] [stdout] | [INFO] [stdout] 58 | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `interpreter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/run.rs:93:5 [INFO] [stdout] | [INFO] [stdout] 93 | / if let Some(interpreter) = &run_conf.interpreter { [INFO] [stdout] 94 | | if let Some(postscript) = &run_conf.postscript { [INFO] [stdout] 95 | | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] 96 | | .output().map_err(|_| ConfigError::CommandFailed { cmd: interpreter.clone(), message: "Unexpected".into() })?; [INFO] [stdout] ... | [INFO] [stdout] 104 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 93 ~ if let Some(interpreter) = &run_conf.interpreter [INFO] [stdout] 94 ~ && let Some(postscript) = &run_conf.postscript { [INFO] [stdout] 95 | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] ... [INFO] [stdout] 102 | ret.push(tmpoutput); [INFO] [stdout] 103 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/run.rs:95:50 [INFO] [stdout] | [INFO] [stdout] 95 | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `interpreter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/config.rs:95:16 [INFO] [stdout] | [INFO] [stdout] 95 | if !config.current_section.is_none() { // Handle a '{' standalone in a scope [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `config.current_section.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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:90:37 [INFO] [stdout] | [INFO] [stdout] 90 | if is_comment_line_or_empty(&line) { [INFO] [stdout] | ^^^^^ help: change this to: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a suffix manually [INFO] [stdout] --> src/config.rs:108:43 [INFO] [stdout] | [INFO] [stdout] 108 | config.current_section = Some(line[..line.len()-1].trim().to_string().to_lowercase()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the suffix was tested here [INFO] [stdout] --> src/config.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 94 | if line.ends_with("{") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_suffix` method [INFO] [stdout] | [INFO] [stdout] 94 ~ if let Some() = line.strip_suffix("{") { [INFO] [stdout] 95 | if !config.current_section.is_none() { // Handle a '{' standalone in a scope [INFO] [stdout] ... [INFO] [stdout] 107 | [INFO] [stdout] 108 ~ config.current_section = Some(.trim().to_string().to_lowercase()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/config.rs:113:16 [INFO] [stdout] | [INFO] [stdout] 113 | if config.current_section == None { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `config.current_section.is_none()` [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: this creates an owned instance just for comparison [INFO] [stdout] --> src/config.rs:131:16 [INFO] [stdout] | [INFO] [stdout] 131 | if lines[i+1].trim().to_string() != "{" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `lines[i+1].trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/config.rs:144:28 [INFO] [stdout] | [INFO] [stdout] 144 | for (_, content) in dir.enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 144 - for (_, content) in dir.enumerate() { [INFO] [stdout] 144 + for content in dir { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 145 | / if let Ok(entry) = content { [INFO] [stdout] 146 | | if entry.path().extension().is_some_and(|ext| ext.to_str() == Some("rm")) { [INFO] [stdout] 147 | | ret = entry.file_name().to_string_lossy().to_string(); [INFO] [stdout] 148 | | break [INFO] [stdout] 149 | | } [INFO] [stdout] 150 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 145 ~ if let Ok(entry) = content [INFO] [stdout] 146 ~ && entry.path().extension().is_some_and(|ext| ext.to_str() == Some("rm")) { [INFO] [stdout] 147 | ret = entry.file_name().to_string_lossy().to_string(); [INFO] [stdout] 148 | break [INFO] [stdout] 149 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/config.rs:169:28 [INFO] [stdout] | [INFO] [stdout] 169 | for (_, content) in dir.enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 169 - for (_, content) in dir.enumerate() { [INFO] [stdout] 169 + for content in dir { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:170:9 [INFO] [stdout] | [INFO] [stdout] 170 | / if let Ok(entry) = content { [INFO] [stdout] 171 | | if entry.path().is_file() && entry.file_name().to_string_lossy().eq(file_search.as_str()) { [INFO] [stdout] 172 | | ret = true; [INFO] [stdout] 173 | | break [INFO] [stdout] 174 | | } [INFO] [stdout] 175 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 170 ~ if let Ok(entry) = content [INFO] [stdout] 171 ~ && entry.path().is_file() && entry.file_name().to_string_lossy().eq(file_search.as_str()) { [INFO] [stdout] 172 | ret = true; [INFO] [stdout] 173 | break [INFO] [stdout] 174 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/config.rs:179:57 [INFO] [stdout] | [INFO] [stdout] 179 | return Err(ConfigError::FileNotFound { message: format!("Config file not found: {file}").into() }) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("Config file not found: {file}")` [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] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/run.rs:56:5 [INFO] [stdout] | [INFO] [stdout] 56 | / if let Some(interpreter) = &run_conf.interpreter { [INFO] [stdout] 57 | | if let Some(prescript) = &run_conf.prescript { [INFO] [stdout] 58 | | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] 59 | | .output().map_err(|_| ConfigError::CommandFailed { cmd: interpreter.clone(), message: "Unexpected".into() })?; [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 56 ~ if let Some(interpreter) = &run_conf.interpreter [INFO] [stdout] 57 ~ && let Some(prescript) = &run_conf.prescript { [INFO] [stdout] 58 | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] ... [INFO] [stdout] 65 | ret.push(tmpoutput); [INFO] [stdout] 66 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/run.rs:58:50 [INFO] [stdout] | [INFO] [stdout] 58 | let tmp = std::process::Command::new(interpreter.to_string()).args(prescript.iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `interpreter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/run.rs:93:5 [INFO] [stdout] | [INFO] [stdout] 93 | / if let Some(interpreter) = &run_conf.interpreter { [INFO] [stdout] 94 | | if let Some(postscript) = &run_conf.postscript { [INFO] [stdout] 95 | | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] 96 | | .output().map_err(|_| ConfigError::CommandFailed { cmd: interpreter.clone(), message: "Unexpected".into() })?; [INFO] [stdout] ... | [INFO] [stdout] 104 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 93 ~ if let Some(interpreter) = &run_conf.interpreter [INFO] [stdout] 94 ~ && let Some(postscript) = &run_conf.postscript { [INFO] [stdout] 95 | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] ... [INFO] [stdout] 102 | ret.push(tmpoutput); [INFO] [stdout] 103 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/run.rs:95:50 [INFO] [stdout] | [INFO] [stdout] 95 | let tmp = std::process::Command::new(interpreter.to_string()).args(postscript.iter()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `interpreter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.67s [INFO] running `Command { std: "docker" "inspect" "4fc83c8e74787d6a01e50f4113494b17eeb02439b63c29ba0254efc0bd640ea5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4fc83c8e74787d6a01e50f4113494b17eeb02439b63c29ba0254efc0bd640ea5", kill_on_drop: false }` [INFO] [stdout] 4fc83c8e74787d6a01e50f4113494b17eeb02439b63c29ba0254efc0bd640ea5