[INFO] cloning repository https://github.com/sluongng/pbls [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sluongng/pbls" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsluongng%2Fpbls", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsluongng%2Fpbls'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] c80e3b3b81d5723a98ad3d885cc8a26cfc2baf23 [INFO] linting sluongng/pbls against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsluongng%2Fpbls" "/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/sluongng/pbls [INFO] finished tweaking git repo https://github.com/sluongng/pbls [INFO] tweaked toml for git repo https://github.com/sluongng/pbls written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/sluongng/pbls 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/sluongng/pbls 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] Updating crates.io index [INFO] [stderr] Updating git repository `https://github.com/sluongng/tree-sitter-protobuf` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded tree-sitter-language v0.1.0 [INFO] [stderr] Downloaded serde_repr v0.1.16 [INFO] [stderr] Downloaded lsp-server v0.7.4 [INFO] [stderr] Downloaded toml v0.8.6 [INFO] [stderr] Downloaded tree-sitter v0.23.0 [INFO] [stderr] Downloaded cc v1.1.23 [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] f8a5a581a122ea63805ee1fd69c012ab078c0d45d584d802137751ea119f2bfe [INFO] running `Command { std: "docker" "start" "-a" "f8a5a581a122ea63805ee1fd69c012ab078c0d45d584d802137751ea119f2bfe", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f8a5a581a122ea63805ee1fd69c012ab078c0d45d584d802137751ea119f2bfe", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f8a5a581a122ea63805ee1fd69c012ab078c0d45d584d802137751ea119f2bfe", kill_on_drop: false }` [INFO] [stdout] f8a5a581a122ea63805ee1fd69c012ab078c0d45d584d802137751ea119f2bfe [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] dc10fea6b6344d85e5caadbe4acab3c7d0c03312c10c4fe1f045dd26b930f18d [INFO] running `Command { std: "docker" "start" "-a" "dc10fea6b6344d85e5caadbe4acab3c7d0c03312c10c4fe1f045dd26b930f18d", kill_on_drop: false }` [INFO] [stderr] Compiling serde v1.0.189 [INFO] [stderr] Checking memchr v2.6.4 [INFO] [stderr] Checking hashbrown v0.14.2 [INFO] [stderr] Checking winnow v0.5.19 [INFO] [stderr] Checking tree-sitter-language v0.1.0 [INFO] [stderr] Compiling proc-macro2 v1.0.69 [INFO] [stderr] Compiling cc v1.1.23 [INFO] [stderr] Checking env_filter v0.1.2 [INFO] [stderr] Compiling rustix v0.38.21 [INFO] [stderr] Checking linux-raw-sys v0.4.10 [INFO] [stderr] Checking bitflags v2.4.1 [INFO] [stderr] Checking yansi v0.5.1 [INFO] [stderr] Checking fluent-uri v0.1.4 [INFO] [stderr] Checking diff v0.1.13 [INFO] [stderr] Checking fastrand v2.0.1 [INFO] [stderr] Checking env_logger v0.11.5 [INFO] [stderr] Checking aho-corasick v1.1.2 [INFO] [stderr] Checking pretty_assertions v1.4.0 [INFO] [stderr] Compiling quote v1.0.33 [INFO] [stderr] Compiling syn v2.0.38 [INFO] [stderr] Checking indexmap v2.1.0 [INFO] [stderr] Compiling tree-sitter-protobuf v0.0.1 (https://github.com/sluongng/tree-sitter-protobuf?rev=f90291422082f7e745710123cb4a70c1874dafb7#f9029142) [INFO] [stderr] Compiling tree-sitter v0.23.0 [INFO] [stderr] Checking regex-automata v0.4.8 [INFO] [stderr] Compiling serde_derive v1.0.189 [INFO] [stderr] Compiling serde_repr v0.1.16 [INFO] [stderr] Checking tempfile v3.8.1 [INFO] [stderr] Checking regex v1.11.0 [INFO] [stderr] Checking toml_datetime v0.6.5 [INFO] [stderr] Checking serde_json v1.0.107 [INFO] [stderr] Checking serde_spanned v0.6.4 [INFO] [stderr] Checking toml_edit v0.20.7 [INFO] [stderr] Checking lsp-server v0.7.4 [INFO] [stderr] Checking lsp-types v0.97.0 [INFO] [stderr] Checking toml v0.8.6 [INFO] [stderr] Checking pbls v1.0.3 (/opt/rustwide/workdir) [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:239:9 [INFO] [stdout] | [INFO] [stdout] 239 | self: &Self, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] = note: `#[warn(clippy::needless_arbitrary_self_type)]` on by default [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 239 - self: &Self, [INFO] [stdout] 239 + &self, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:328:23 [INFO] [stdout] | [INFO] [stdout] 328 | pub fn references(self: &Self, item: &GotoContext) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 328 - pub fn references(self: &Self, item: &GotoContext) -> Vec { [INFO] [stdout] 328 + pub fn references(&self, item: &GotoContext) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:369:20 [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 369 - pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] 369 + pub fn type_at(&self, row: usize, col: usize) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/workspace.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 52 | fn get(self: &Self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 52 - fn get(self: &Self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] 52 + fn get(&self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:239:9 [INFO] [stdout] | [INFO] [stdout] 239 | self: &Self, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] = note: `#[warn(clippy::needless_arbitrary_self_type)]` on by default [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 239 - self: &Self, [INFO] [stdout] 239 + &self, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:328:23 [INFO] [stdout] | [INFO] [stdout] 328 | pub fn references(self: &Self, item: &GotoContext) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 328 - pub fn references(self: &Self, item: &GotoContext) -> Vec { [INFO] [stdout] 328 + pub fn references(&self, item: &GotoContext) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/file.rs:369:20 [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 369 - pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] 369 + pub fn type_at(&self, row: usize, col: usize) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type of the `self` parameter does not need to be arbitrary [INFO] [stdout] --> src/workspace.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 52 | fn get(self: &Self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type [INFO] [stdout] help: remove the type [INFO] [stdout] | [INFO] [stdout] 52 - fn get(self: &Self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] 52 + fn get(&self, uri: &Uri) -> Result<&file::File> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated field `lsp_types::InitializeParams::root_uri`: Use `workspace_folders` instead when possible [INFO] [stdout] --> src/lib.rs:254:16 [INFO] [stdout] | [INFO] [stdout] 254 | let root = params [INFO] [stdout] | ________________^ [INFO] [stdout] 255 | | .root_uri [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated field `lsp_types::InitializeParams::root_uri`: Use `workspace_folders` instead when possible [INFO] [stdout] --> src/lib.rs:254:16 [INFO] [stdout] | [INFO] [stdout] 254 | let root = params [INFO] [stdout] | ________________^ [INFO] [stdout] 255 | | .root_uri [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` 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/file.rs:72:42 [INFO] [stdout] | [INFO] [stdout] 72 | .map(|line| char_to_byte(&line, range.start.character)) [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] = note: `#[warn(clippy::needless_borrow)]` 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/file.rs:85:42 [INFO] [stdout] | [INFO] [stdout] 85 | .map(|line| char_to_byte(&line, range.end.character)) [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:128:22 [INFO] [stdout] | [INFO] [stdout] 128 | .matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:149:20 [INFO] [stdout] | [INFO] [stdout] 149 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:171:20 [INFO] [stdout] | [INFO] [stdout] 171 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: redundant closure [INFO] [stdout] --> src/file.rs:229:22 [INFO] [stdout] | [INFO] [stdout] 229 | .map(|n| CompletionContext::Enum(n)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `CompletionContext::Enum` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/file.rs:233:22 [INFO] [stdout] | [INFO] [stdout] 233 | .map(|n| CompletionContext::Message(n)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `CompletionContext::Message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/file.rs:291:16 [INFO] [stdout] | [INFO] [stdout] 291 | && !node.parent().is_some_and(|p| p.kind() == "oneofName") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `node.parent().is_none_or(|p| p.kind() != "oneofName")` [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: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:249:18 [INFO] [stdout] | [INFO] [stdout] 249 | row: row.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [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` has identical blocks [INFO] [stdout] --> src/file.rs:275:81 [INFO] [stdout] | [INFO] [stdout] 275 | } else if node.is_error() && self.get_text(node).starts_with("option ") { [INFO] [stdout] | _________________________________________________________________________________^ [INFO] [stdout] 276 | | // option | -> (ERROR) [INFO] [stdout] 277 | | Some(CompletionContext::Option) [INFO] [stdout] 278 | | } else if node [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/file.rs:281:9 [INFO] [stdout] | [INFO] [stdout] 281 | / { [INFO] [stdout] 282 | | // option | -> (ERROR) [INFO] [stdout] 283 | | Some(CompletionContext::Option) [INFO] [stdout] 284 | | } else if node.is_error() && self.get_text(node).starts_with("import ") { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/file.rs:304:25 [INFO] [stdout] | [INFO] [stdout] 304 | .lines() [INFO] [stdout] | _________________________^ [INFO] [stdout] 305 | | .skip(row) [INFO] [stdout] 306 | | .next() [INFO] [stdout] | |_______________________^ help: use `nth` instead: `.nth(row)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] = note: `#[warn(clippy::iter_skip_next)]` 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/file.rs:341:28 [INFO] [stdout] | [INFO] [stdout] 341 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:360:28 [INFO] [stdout] | [INFO] [stdout] 360 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:373:18 [INFO] [stdout] | [INFO] [stdout] 373 | row: row.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:374:21 [INFO] [stdout] | [INFO] [stdout] 374 | column: col.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:72:42 [INFO] [stdout] | [INFO] [stdout] 72 | .map(|line| char_to_byte(&line, range.start.character)) [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] = note: `#[warn(clippy::needless_borrow)]` 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/file.rs:85:42 [INFO] [stdout] | [INFO] [stdout] 85 | .map(|line| char_to_byte(&line, range.end.character)) [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: this loop could be written as a `while let` loop [INFO] [stdout] --> src/file.rs:414:9 [INFO] [stdout] | [INFO] [stdout] 414 | / loop { [INFO] [stdout] 415 | | if let Some(parent) = node.parent() { [INFO] [stdout] 416 | | if parent.kind() == "message" { [INFO] [stdout] 417 | | let name = self.type_name(parent); [INFO] [stdout] ... | [INFO] [stdout] 425 | | } [INFO] [stdout] | |_________^ help: try: `while let Some(parent) = node.parent() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/file.rs:419:21 [INFO] [stdout] | [INFO] [stdout] 419 | name.map(|n| res.push(n)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 419 - name.map(|n| res.push(n)); [INFO] [stdout] 419 + if let Some(n) = name { res.push(n) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:128:22 [INFO] [stdout] | [INFO] [stdout] 128 | .matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/file.rs:466:18 [INFO] [stdout] | [INFO] [stdout] 466 | fn relative_name<'a>(message: &str, name: &'a str) -> String { [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] 466 - fn relative_name<'a>(message: &str, name: &'a str) -> String { [INFO] [stdout] 466 + fn relative_name(message: &str, name: &str) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:149:20 [INFO] [stdout] | [INFO] [stdout] 149 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:171:20 [INFO] [stdout] | [INFO] [stdout] 171 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: useless conversion to the same type: `&str` [INFO] [stdout] --> src/file.rs:564:41 [INFO] [stdout] | [INFO] [stdout] 564 | assert_eq!(file.package(), Some("main".into())); [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `"main"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/file.rs:568:41 [INFO] [stdout] | [INFO] [stdout] 568 | assert_eq!(file.package(), Some("main".into())); [INFO] [stdout] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `"main"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `&str` [INFO] [stdout] --> src/file.rs:572:41 [INFO] [stdout] | [INFO] [stdout] 572 | assert_eq!(file.package(), Some("foo.bar.baz".into())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `"foo.bar.baz"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/file.rs:229:22 [INFO] [stdout] | [INFO] [stdout] 229 | .map(|n| CompletionContext::Enum(n)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `CompletionContext::Enum` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/file.rs:233:22 [INFO] [stdout] | [INFO] [stdout] 233 | .map(|n| CompletionContext::Message(n)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `CompletionContext::Message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/file.rs:291:16 [INFO] [stdout] | [INFO] [stdout] 291 | && !node.parent().is_some_and(|p| p.kind() == "oneofName") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `node.parent().is_none_or(|p| p.kind() != "oneofName")` [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: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:249:18 [INFO] [stdout] | [INFO] [stdout] 249 | row: row.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [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` has identical blocks [INFO] [stdout] --> src/file.rs:275:81 [INFO] [stdout] | [INFO] [stdout] 275 | } else if node.is_error() && self.get_text(node).starts_with("option ") { [INFO] [stdout] | _________________________________________________________________________________^ [INFO] [stdout] 276 | | // option | -> (ERROR) [INFO] [stdout] 277 | | Some(CompletionContext::Option) [INFO] [stdout] 278 | | } else if node [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/file.rs:281:9 [INFO] [stdout] | [INFO] [stdout] 281 | / { [INFO] [stdout] 282 | | // option | -> (ERROR) [INFO] [stdout] 283 | | Some(CompletionContext::Option) [INFO] [stdout] 284 | | } else if node.is_error() && self.get_text(node).starts_with("import ") { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/file.rs:304:25 [INFO] [stdout] | [INFO] [stdout] 304 | .lines() [INFO] [stdout] | _________________________^ [INFO] [stdout] 305 | | .skip(row) [INFO] [stdout] 306 | | .next() [INFO] [stdout] | |_______________________^ help: use `nth` instead: `.nth(row)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] = note: `#[warn(clippy::iter_skip_next)]` 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/file.rs:341:28 [INFO] [stdout] | [INFO] [stdout] 341 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/file.rs:360:28 [INFO] [stdout] | [INFO] [stdout] 360 | qc.matches(&query, self.tree.root_node(), self.text.as_bytes()) [INFO] [stdout] | ^^^^^^ help: change this to: `query` [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: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:373:18 [INFO] [stdout] | [INFO] [stdout] 373 | row: row.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `usize` [INFO] [stdout] --> src/file.rs:374:21 [INFO] [stdout] | [INFO] [stdout] 374 | column: col.try_into().unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider removing `.try_into()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `while let` loop [INFO] [stdout] --> src/file.rs:414:9 [INFO] [stdout] | [INFO] [stdout] 414 | / loop { [INFO] [stdout] 415 | | if let Some(parent) = node.parent() { [INFO] [stdout] 416 | | if parent.kind() == "message" { [INFO] [stdout] 417 | | let name = self.type_name(parent); [INFO] [stdout] ... | [INFO] [stdout] 425 | | } [INFO] [stdout] | |_________^ help: try: `while let Some(parent) = node.parent() { .. }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stdout] = note: `#[warn(clippy::while_let_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/file.rs:419:21 [INFO] [stdout] | [INFO] [stdout] 419 | name.map(|n| res.push(n)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 419 - name.map(|n| res.push(n)); [INFO] [stdout] 419 + if let Some(n) = name { res.push(n) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/file.rs:466:18 [INFO] [stdout] | [INFO] [stdout] 466 | fn relative_name<'a>(message: &str, name: &'a str) -> String { [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] 466 - fn relative_name<'a>(message: &str, name: &'a str) -> String { [INFO] [stdout] 466 + fn relative_name(message: &str, name: &str) -> String { [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/protoc.rs:8:18 [INFO] [stdout] | [INFO] [stdout] 8 | proto_paths: &Vec, [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] 8 - proto_paths: &Vec, [INFO] [stdout] 8 + proto_paths: &[std::path::PathBuf], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/protoc.rs:51:39 [INFO] [stdout] | [INFO] [stdout] 51 | .filter_map(|l| parse_diag(l, &text)) [INFO] [stdout] | ^^^^^ help: change this to: `text` [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: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/protoc.rs:75:37 [INFO] [stdout] | [INFO] [stdout] 75 | let line = file_contents.lines().skip(lineno.try_into().ok()?).next()?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `nth` instead: `.nth(lineno.try_into().ok()?)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/workspace.rs:108:29 [INFO] [stdout] | [INFO] [stdout] 108 | protoc::diags(&uri, &file.text(), &self.proto_paths) [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `file.text()` [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: useless conversion to the same type: `std::result::Result<(), std::boxed::Box>` [INFO] [stdout] --> src/workspace.rs:117:9 [INFO] [stdout] | [INFO] [stdout] 117 | / self.files [INFO] [stdout] 118 | | .get_mut(uri) [INFO] [stdout] 119 | | .ok_or(format!("File not loaded: {uri:?}"))? [INFO] [stdout] 120 | | .edit(changes) [INFO] [stdout] 121 | | .into() [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()` [INFO] [stdout] | [INFO] [stdout] 117 ~ self.files [INFO] [stdout] 118 + .get_mut(uri) [INFO] [stdout] 119 + .ok_or(format!("File not loaded: {uri:?}"))? [INFO] [stdout] 120 + .edit(changes) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/workspace.rs:142:18 [INFO] [stdout] | [INFO] [stdout] 142 | .map(|p| std::fs::canonicalize(p)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `std::fs::canonicalize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/workspace.rs:141:40 [INFO] [stdout] | [INFO] [stdout] 141 | .filter(|p| p.is_file() && p.extension().map_or(false, |e| e == "proto")) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 141 - .filter(|p| p.is_file() && p.extension().map_or(false, |e| e == "proto")) [INFO] [stdout] 141 + .filter(|p| p.is_file() && p.extension().is_some_and(|e| e == "proto")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/workspace.rs:169:76 [INFO] [stdout] | [INFO] [stdout] 169 | let text = std::fs::read_to_string(uri.path().to_string()).expect(format!("Failed to read file {:?}", uri).as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("Failed to read file {:?}", uri))` [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/workspace.rs:194:80 [INFO] [stdout] | [INFO] [stdout] 194 | Some(file::CompletionContext::Message(msg)) => self.complete_types(&msg, file), [INFO] [stdout] | ^^^^ help: change this to: `msg` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/protoc.rs:8:18 [INFO] [stdout] | [INFO] [stdout] 8 | proto_paths: &Vec, [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] 8 - proto_paths: &Vec, [INFO] [stdout] 8 + proto_paths: &[std::path::PathBuf], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/protoc.rs:51:39 [INFO] [stdout] | [INFO] [stdout] 51 | .filter_map(|l| parse_diag(l, &text)) [INFO] [stdout] | ^^^^^ help: change this to: `text` [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: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/protoc.rs:75:37 [INFO] [stdout] | [INFO] [stdout] 75 | let line = file_contents.lines().skip(lineno.try_into().ok()?).next()?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `nth` instead: `.nth(lineno.try_into().ok()?)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/lib.rs:185:26 [INFO] [stdout] | [INFO] [stdout] 185 | Ok(entry) => entry [INFO] [stdout] | __________________________^ [INFO] [stdout] 186 | | .path() [INFO] [stdout] 187 | | .extension() [INFO] [stdout] 188 | | .map_or(false, |e| e.to_str() == Some("proto")), [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 188 - .map_or(false, |e| e.to_str() == Some("proto")), [INFO] [stdout] 188 + .is_some_and(|e| e.to_str() == Some("proto")), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/lib.rs:196:5 [INFO] [stdout] | [INFO] [stdout] 196 | / for entry in std::fs::read_dir(&root)? { [INFO] [stdout] 197 | | if let Ok(entry) = entry { [INFO] [stdout] 198 | | if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 199 | | let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] ... | [INFO] [stdout] 203 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/lib.rs:197:9 [INFO] [stdout] | [INFO] [stdout] 197 | / if let Ok(entry) = entry { [INFO] [stdout] 198 | | if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 199 | | let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] 200 | | res.append(&mut dirs); [INFO] [stdout] 201 | | } [INFO] [stdout] 202 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 196 ~ for entry in std::fs::read_dir(&root)?.flatten() { [INFO] [stdout] 197 + if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 198 + let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] 199 + res.append(&mut dirs); [INFO] [stdout] 200 + } [INFO] [stdout] 201 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/workspace.rs:108:29 [INFO] [stdout] | [INFO] [stdout] 108 | protoc::diags(&uri, &file.text(), &self.proto_paths) [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `file.text()` [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: useless conversion to the same type: `std::result::Result<(), std::boxed::Box>` [INFO] [stdout] --> src/workspace.rs:117:9 [INFO] [stdout] | [INFO] [stdout] 117 | / self.files [INFO] [stdout] 118 | | .get_mut(uri) [INFO] [stdout] 119 | | .ok_or(format!("File not loaded: {uri:?}"))? [INFO] [stdout] 120 | | .edit(changes) [INFO] [stdout] 121 | | .into() [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()` [INFO] [stdout] | [INFO] [stdout] 117 ~ self.files [INFO] [stdout] 118 + .get_mut(uri) [INFO] [stdout] 119 + .ok_or(format!("File not loaded: {uri:?}"))? [INFO] [stdout] 120 + .edit(changes) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/workspace.rs:142:18 [INFO] [stdout] | [INFO] [stdout] 142 | .map(|p| std::fs::canonicalize(p)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `std::fs::canonicalize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/workspace.rs:141:40 [INFO] [stdout] | [INFO] [stdout] 141 | .filter(|p| p.is_file() && p.extension().map_or(false, |e| e == "proto")) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 141 - .filter(|p| p.is_file() && p.extension().map_or(false, |e| e == "proto")) [INFO] [stdout] 141 + .filter(|p| p.is_file() && p.extension().is_some_and(|e| e == "proto")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/workspace.rs:169:76 [INFO] [stdout] | [INFO] [stdout] 169 | let text = std::fs::read_to_string(uri.path().to_string()).expect(format!("Failed to read file {:?}", uri).as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("Failed to read file {:?}", uri))` [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] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:216:23 [INFO] [stdout] | [INFO] [stdout] 216 | fn parent_context(&self, node: Option) -> Option { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 216 | fn parent_context(&self, node: Option) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:239:15 [INFO] [stdout] | [INFO] [stdout] 239 | self: &Self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 242 | ) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 242 | ) -> Result>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:369:26 [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/workspace.rs:194:80 [INFO] [stdout] | [INFO] [stdout] 194 | Some(file::CompletionContext::Message(msg)) => self.complete_types(&msg, file), [INFO] [stdout] | ^^^^ help: change this to: `msg` [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: this `map_or` can be simplified [INFO] [stdout] --> src/lib.rs:185:26 [INFO] [stdout] | [INFO] [stdout] 185 | Ok(entry) => entry [INFO] [stdout] | __________________________^ [INFO] [stdout] 186 | | .path() [INFO] [stdout] 187 | | .extension() [INFO] [stdout] 188 | | .map_or(false, |e| e.to_str() == Some("proto")), [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 188 - .map_or(false, |e| e.to_str() == Some("proto")), [INFO] [stdout] 188 + .is_some_and(|e| e.to_str() == Some("proto")), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/lib.rs:196:5 [INFO] [stdout] | [INFO] [stdout] 196 | / for entry in std::fs::read_dir(&root)? { [INFO] [stdout] 197 | | if let Ok(entry) = entry { [INFO] [stdout] 198 | | if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 199 | | let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] ... | [INFO] [stdout] 203 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/lib.rs:197:9 [INFO] [stdout] | [INFO] [stdout] 197 | / if let Ok(entry) = entry { [INFO] [stdout] 198 | | if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 199 | | let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] 200 | | res.append(&mut dirs); [INFO] [stdout] 201 | | } [INFO] [stdout] 202 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 196 ~ for entry in std::fs::read_dir(&root)?.flatten() { [INFO] [stdout] 197 + if entry.metadata().is_ok_and(|m| m.is_dir()) { [INFO] [stdout] 198 + let mut dirs = find_dirs(entry.path())?; [INFO] [stdout] 199 + res.append(&mut dirs); [INFO] [stdout] 200 + } [INFO] [stdout] 201 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:216:23 [INFO] [stdout] | [INFO] [stdout] 216 | fn parent_context(&self, node: Option) -> Option { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 216 | fn parent_context(&self, node: Option) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:239:15 [INFO] [stdout] | [INFO] [stdout] 239 | self: &Self, [INFO] [stdout] | ^^^^^ the lifetime is elided here [INFO] [stdout] ... [INFO] [stdout] 242 | ) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 242 | ) -> Result>> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/file.rs:369:26 [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 369 | pub fn type_at(self: &Self, row: usize, col: usize) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated field `lsp_types::InitializeParams::root_uri`: Use `workspace_folders` instead when possible [INFO] [stdout] --> tests/integration_test.rs:284:13 [INFO] [stdout] | [INFO] [stdout] 284 | / root_uri: Some( [INFO] [stdout] 285 | | Uri::from_str( [INFO] [stdout] 286 | | format!( [INFO] [stdout] 287 | | "file://{}", [INFO] [stdout] ... | [INFO] [stdout] 292 | | .unwrap(), [INFO] [stdout] 293 | | ), [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `skip_while(

).next()` on an `Iterator` [INFO] [stdout] --> tests/integration_test.rs:128:26 [INFO] [stdout] | [INFO] [stdout] 128 | let (lineno, line) = filetext [INFO] [stdout] | __________________________^ [INFO] [stdout] 129 | | .lines() [INFO] [stdout] 130 | | .enumerate() [INFO] [stdout] 131 | | .skip_while(|(_, l)| !l.contains(text)) [INFO] [stdout] 132 | | .next() [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: this is more succinctly expressed by calling `.find(!

)` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#skip_while_next [INFO] [stdout] = note: `#[warn(clippy::skip_while_next)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> tests/integration_test.rs:169:28 [INFO] [stdout] | [INFO] [stdout] 169 | .find_map(|(i, l)| match l.find(text.as_str()) { [INFO] [stdout] | ____________________________^ [INFO] [stdout] 170 | | Some(col) => Some((i, col)), [INFO] [stdout] 171 | | None => None, [INFO] [stdout] 172 | | }) [INFO] [stdout] | |_________^ help: try: `l.find(text.as_str()).map(|col| (i, col))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> tests/integration_test.rs:198:28 [INFO] [stdout] | [INFO] [stdout] 198 | .find_map(|(i, l)| match l.find(name) { [INFO] [stdout] | ____________________________^ [INFO] [stdout] 199 | | Some(col) => Some((i, col)), [INFO] [stdout] 200 | | None => None, [INFO] [stdout] 201 | | }) [INFO] [stdout] | |_________^ help: try: `l.find(name).map(|col| (i, col))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:970:9 [INFO] [stdout] | [INFO] [stdout] 970 | &tmp.path().join("root.proto"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("root.proto")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:988:9 [INFO] [stdout] | [INFO] [stdout] 988 | &tmp.path().join("sibling.proto"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("sibling.proto")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:992:20 [INFO] [stdout] | [INFO] [stdout] 992 | std::fs::write(&tmp.path().join("a/a.txt"), "not a proto")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("a/a.txt")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:994:9 [INFO] [stdout] | [INFO] [stdout] 994 | &tmp.path().join("a/a.proto"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("a/a.proto")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:998:9 [INFO] [stdout] | [INFO] [stdout] 998 | &tmp.path().join("a/f/af.proto"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("a/f/af.proto")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:1002:20 [INFO] [stdout] | [INFO] [stdout] 1002 | std::fs::write(&tmp.path().join("b/c/bc.txt"), "not a proto")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("b/c/bc.txt")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:1004:9 [INFO] [stdout] | [INFO] [stdout] 1004 | &tmp.path().join("b/c/bc.proto"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("b/c/bc.proto")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> tests/integration_test.rs:1008:20 [INFO] [stdout] | [INFO] [stdout] 1008 | std::fs::write(&tmp.path().join("b/d/bd.txt"), "not a proto")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `tmp.path().join("b/d/bd.txt")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.67s [INFO] running `Command { std: "docker" "inspect" "dc10fea6b6344d85e5caadbe4acab3c7d0c03312c10c4fe1f045dd26b930f18d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dc10fea6b6344d85e5caadbe4acab3c7d0c03312c10c4fe1f045dd26b930f18d", kill_on_drop: false }` [INFO] [stdout] dc10fea6b6344d85e5caadbe4acab3c7d0c03312c10c4fe1f045dd26b930f18d