[INFO] cloning repository https://github.com/PasqualeMainolfi/csound-lsp [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/PasqualeMainolfi/csound-lsp" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPasqualeMainolfi%2Fcsound-lsp", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPasqualeMainolfi%2Fcsound-lsp'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 677e63bb1e782033d91ab7ad16fd69c2bd83c29b [INFO] linting PasqualeMainolfi/csound-lsp against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FPasqualeMainolfi%2Fcsound-lsp" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/PasqualeMainolfi/csound-lsp [INFO] finished tweaking git repo https://github.com/PasqualeMainolfi/csound-lsp [INFO] tweaked toml for git repo https://github.com/PasqualeMainolfi/csound-lsp written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/PasqualeMainolfi/csound-lsp 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/PasqualeMainolfi/csound-lsp 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] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Updating git repository `https://github.com/PasqualeMainolfi/tree-sitter-csound.git` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded rust-embed-impl v8.11.0 [INFO] [stderr] Downloaded str_indices v0.4.4 [INFO] [stderr] Downloaded tree-sitter-html v0.23.2 [INFO] [stderr] Downloaded tower-lsp v0.20.0 [INFO] [stderr] Downloaded ppmd-rust v1.3.0 [INFO] [stderr] Downloaded cc v1.2.54 [INFO] [stderr] Downloaded tree-sitter-python v0.25.0 [INFO] [stderr] Downloaded lsp-types v0.94.1 [INFO] [stderr] Downloaded lzma-rust2 v0.15.7 [INFO] [stderr] Downloaded ropey v1.6.1 [INFO] [stderr] Downloaded typed-path v0.12.1 [INFO] [stderr] Downloaded zip v7.2.0 [INFO] [stderr] Downloaded zmij v1.0.16 [INFO] [stderr] Downloaded tree-sitter v0.25.10 [INFO] [stderr] Downloaded tree-sitter-json v0.24.8 [INFO] [stderr] Downloaded tree-sitter-language v0.1.6 [INFO] [stderr] Downloaded rust-embed-utils v8.11.0 [INFO] [stderr] Downloaded tower-lsp-macros v0.9.0 [INFO] [stderr] Downloaded bzip2 v0.6.1 [INFO] [stderr] Downloaded deflate64 v0.1.10 [INFO] [stderr] Downloaded find-msvc-tools v0.1.8 [INFO] [stderr] Downloaded rust-embed v8.11.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 68b05a8df5162f8782aef60186b0cb16a9fea2e905e30fbe79569daea20576ed [INFO] running `Command { std: "docker" "start" "-a" "68b05a8df5162f8782aef60186b0cb16a9fea2e905e30fbe79569daea20576ed", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "68b05a8df5162f8782aef60186b0cb16a9fea2e905e30fbe79569daea20576ed", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "68b05a8df5162f8782aef60186b0cb16a9fea2e905e30fbe79569daea20576ed", kill_on_drop: false }` [INFO] [stdout] 68b05a8df5162f8782aef60186b0cb16a9fea2e905e30fbe79569daea20576ed [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] f3c2537b04fe191894591972a40cc2c7c5c0573dde57caeb41f8351251b29b9c [INFO] running `Command { std: "docker" "start" "-a" "f3c2537b04fe191894591972a40cc2c7c5c0573dde57caeb41f8351251b29b9c", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Compiling find-msvc-tools v0.1.8 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Checking lock_api v0.4.14 [INFO] [stderr] Compiling fs_extra v1.3.0 [INFO] [stderr] Compiling tree-sitter-language v0.1.6 [INFO] [stderr] Compiling zmij v1.0.16 [INFO] [stderr] Compiling dunce v1.0.5 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Compiling aws-lc-rs v1.15.4 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking http v1.4.0 [INFO] [stderr] Checking tracing-core v0.1.36 [INFO] [stderr] Checking indexmap v2.13.0 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Checking form_urlencoded v1.2.2 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking crc-catalog v2.4.0 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Checking openssl-probe v0.2.1 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking deranged v0.5.5 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Compiling rust-embed-utils v8.11.0 [INFO] [stderr] Checking crc v3.3.0 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking zlib-rs v0.5.5 [INFO] [stderr] Checking simd-adler32 v0.3.8 [INFO] [stderr] Checking iri-string v0.7.10 [INFO] [stderr] Checking libbz2-rs-sys v0.2.2 [INFO] [stderr] Checking time-core v0.1.7 [INFO] [stderr] Checking bumpalo v3.19.1 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Checking lzma-rust2 v0.15.7 [INFO] [stderr] Checking zopfli v0.8.3 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking crossbeam-channel v0.5.15 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking ppmd-rust v1.3.0 [INFO] [stderr] Checking str_indices v0.4.4 [INFO] [stderr] Checking typed-path v0.12.1 [INFO] [stderr] Checking streaming-iterator v0.1.9 [INFO] [stderr] Checking deflate64 v0.1.10 [INFO] [stderr] Checking constant_time_eq v0.3.1 [INFO] [stderr] Checking ropey v1.6.1 [INFO] [stderr] Checking bzip2 v0.6.1 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking socket2 v0.6.2 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Compiling cc v1.2.54 [INFO] [stderr] Checking flate2 v1.1.8 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking time v0.3.45 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Compiling zstd-sys v2.0.16+zstd.1.5.7 [INFO] [stderr] Compiling tree-sitter-html v0.23.2 [INFO] [stderr] Compiling tree-sitter-python v0.25.0 [INFO] [stderr] Compiling tree-sitter-csound v1.2.2 (https://github.com/PasqualeMainolfi/tree-sitter-csound.git#7debf171) [INFO] [stderr] Compiling tree-sitter-json v0.24.8 [INFO] [stderr] Compiling aws-lc-sys v0.37.0 [INFO] [stderr] Compiling tree-sitter v0.25.10 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Checking zstd v0.13.3 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling zeroize_derive v1.4.3 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling rust-embed-impl v8.11.0 [INFO] [stderr] Compiling auto_impl v1.3.0 [INFO] [stderr] Checking zeroize v1.8.2 [INFO] [stderr] Checking rustls-pki-types v1.14.0 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling tower-lsp-macros v0.9.0 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Checking pin-project v1.1.10 [INFO] [stderr] Checking rust-embed v8.11.0 [INFO] [stderr] Checking zip v7.2.0 [INFO] [stderr] Checking rustls-native-certs v0.8.3 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking lsp-server v0.7.9 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking lsp-types v0.94.1 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking h2 v0.4.13 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking rustls-platform-verifier v0.6.2 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking reqwest v0.13.1 [INFO] [stderr] Checking tower-lsp v0.20.0 [INFO] [stderr] Checking csound-lsp v1.5.5 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:553:21 [INFO] [stdout] | [INFO] [stdout] 553 | message: message, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/server.rs:553:21 [INFO] [stdout] | [INFO] [stdout] 553 | message: message, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:38:1 [INFO] [stdout] | [INFO] [stdout] 38 | use tree_sitter_python; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:39:1 [INFO] [stdout] | [INFO] [stdout] 39 | use tree_sitter_html; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:40:1 [INFO] [stdout] | [INFO] [stdout] 40 | use tree_sitter_json; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:38:1 [INFO] [stdout] | [INFO] [stdout] 38 | use tree_sitter_python; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:39:1 [INFO] [stdout] | [INFO] [stdout] 39 | use tree_sitter_html; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/parser.rs:40:1 [INFO] [stdout] | [INFO] [stdout] 40 | use tree_sitter_json; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:715:17 [INFO] [stdout] | [INFO] [stdout] 715 | udo_type: udo_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `udo_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:715:17 [INFO] [stdout] | [INFO] [stdout] 715 | udo_type: udo_type, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `udo_type` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:925:41 [INFO] [stdout] | [INFO] [stdout] 925 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1028:29 [INFO] [stdout] | [INFO] [stdout] 1028 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1051:33 [INFO] [stdout] | [INFO] [stdout] 1051 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1083:29 [INFO] [stdout] | [INFO] [stdout] 1083 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1131:33 [INFO] [stdout] | [INFO] [stdout] 1131 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:925:41 [INFO] [stdout] | [INFO] [stdout] 925 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1028:29 [INFO] [stdout] | [INFO] [stdout] 1028 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1051:33 [INFO] [stdout] | [INFO] [stdout] 1051 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1083:29 [INFO] [stdout] | [INFO] [stdout] 1083 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1149:37 [INFO] [stdout] | [INFO] [stdout] 1149 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1131:33 [INFO] [stdout] | [INFO] [stdout] 1131 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1149:37 [INFO] [stdout] | [INFO] [stdout] 1149 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1164:41 [INFO] [stdout] | [INFO] [stdout] 1164 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1173:41 [INFO] [stdout] | [INFO] [stdout] 1173 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1164:41 [INFO] [stdout] | [INFO] [stdout] 1164 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1173:41 [INFO] [stdout] | [INFO] [stdout] 1173 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1243:41 [INFO] [stdout] | [INFO] [stdout] 1243 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1250:45 [INFO] [stdout] | [INFO] [stdout] 1250 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1256:45 [INFO] [stdout] | [INFO] [stdout] 1256 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1243:41 [INFO] [stdout] | [INFO] [stdout] 1243 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1250:45 [INFO] [stdout] | [INFO] [stdout] 1250 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/parser.rs:1256:45 [INFO] [stdout] | [INFO] [stdout] 1256 | ... node: node, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:40:22 [INFO] [stdout] | [INFO] [stdout] 40 | pub const OMACROS: [&'static str; 15] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:58:26 [INFO] [stdout] | [INFO] [stdout] 58 | pub const OPEN_BLOCKS: [&'static str; 10] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:71:27 [INFO] [stdout] | [INFO] [stdout] 71 | pub const CLOSE_BLOCKS: [&'static str; 10] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:84:21 [INFO] [stdout] | [INFO] [stdout] 84 | pub const OPENER: [&'static str; 7] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:40:22 [INFO] [stdout] | [INFO] [stdout] 40 | pub const OMACROS: [&'static str; 15] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:58:26 [INFO] [stdout] | [INFO] [stdout] 58 | pub const OPEN_BLOCKS: [&'static str; 10] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:71:27 [INFO] [stdout] | [INFO] [stdout] 71 | pub const CLOSE_BLOCKS: [&'static str; 10] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/utils.rs:84:21 [INFO] [stdout] | [INFO] [stdout] 84 | pub const OPENER: [&'static str; 7] = [ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:221:9 [INFO] [stdout] | [INFO] [stdout] 221 | message: message, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:222:9 [INFO] [stdout] | [INFO] [stdout] 222 | tags: tags, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `tags` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:256:9 [INFO] [stdout] | [INFO] [stdout] 256 | label: label, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `label` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:221:9 [INFO] [stdout] | [INFO] [stdout] 221 | message: message, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `message` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:222:9 [INFO] [stdout] | [INFO] [stdout] 222 | tags: tags, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `tags` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils.rs:256:9 [INFO] [stdout] | [INFO] [stdout] 256 | label: label, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `label` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:296:29 [INFO] [stdout] | [INFO] [stdout] 296 | ... &flag_node, DiagnosticSeverity::ERROR, format!("Unknown flag type: <{}>", &flag), None [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `flag_node` [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 `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:319:17 [INFO] [stdout] | [INFO] [stdout] 319 | / if pflag { [INFO] [stdout] 320 | | if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] ... | [INFO] [stdout] 325 | | } [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] 319 ~ if pflag [INFO] [stdout] 320 ~ && let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 | } [INFO] [stdout] 324 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:320:21 [INFO] [stdout] | [INFO] [stdout] 320 | / if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 | | } [INFO] [stdout] 324 | | } [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] 320 ~ if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) [INFO] [stdout] 321 ~ && let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:397:77 [INFO] [stdout] | [INFO] [stdout] 397 | ... message: utils::undefined_message_from_kind(&parent_finded_kind), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `parent_finded_kind` [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: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/server.rs:414:21 [INFO] [stdout] | [INFO] [stdout] 414 | / ... match udo.udo_type { [INFO] [stdout] 415 | | ... UdoType::Legacy => { [INFO] [stdout] 416 | | ... 'xin_outer: for child_index in 0..n.child_count() { [INFO] [stdout] 417 | | ... let xin_node = n.child(child_index).and_then(|c| if c.kind() == "xin_statement" { Some(c) } else { None }); [INFO] [stdout] ... | [INFO] [stdout] 465 | | ... _ => { } [INFO] [stdout] 466 | | ... }; [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 414 ~ if udo.udo_type == UdoType::Legacy { [INFO] [stdout] 415 + 'xin_outer: for child_index in 0..n.child_count() { [INFO] [stdout] 416 + let xin_node = n.child(child_index).and_then(|c| if c.kind() == "xin_statement" { Some(c) } else { None }); [INFO] [stdout] 417 + if let Some(xin_node) = xin_node { [INFO] [stdout] 418 + let mut arg_count = 0; [INFO] [stdout] 419 + for xin_child in xin_node.named_children(&mut xin_node.walk()) { [INFO] [stdout] 420 + if matches!(xin_child.kind(), "type_identifier_legacy" | "typed_identifier") { [INFO] [stdout] 421 + let vdata = parser::get_variable_data_type(xin_child, &doc.text.to_string(), &doc.user_definitions.user_defined_types); [INFO] [stdout] 422 + if let Some(vd) = vdata { [INFO] [stdout] 423 + if arg_count < udo.inputs.len() { [INFO] [stdout] 424 + let source_type = &udo.inputs[arg_count].arg.data_type; [INFO] [stdout] 425 + let source_shape = &udo.inputs[arg_count].arg.data_shape; [INFO] [stdout] 426 + if vd.data_type != *source_type || vd.data_shape != *source_shape { [INFO] [stdout] 427 + let diag = utils::diagnostic_helper( [INFO] [stdout] 428 + &xin_child, DiagnosticSeverity::ERROR, format!("Positional argument type mismatch in udo signature. Should be: {:?} {:?}", source_type, source_shape), None [INFO] [stdout] 429 + ); [INFO] [stdout] 430 + [INFO] [stdout] 431 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 432 + diagnostics.push(diag); [INFO] [stdout] 433 + } [INFO] [stdout] 434 + } [INFO] [stdout] 435 + if *source_type == VarDataType::Void { [INFO] [stdout] 436 + break [INFO] [stdout] 437 + } [INFO] [stdout] 438 + arg_count += 1; [INFO] [stdout] 439 + } else { [INFO] [stdout] 440 + let diag = utils::diagnostic_helper( [INFO] [stdout] 441 + &xin_node, DiagnosticSeverity::ERROR, "Positional argument type mismatch in udo signature: too many arguments".to_string(), None [INFO] [stdout] 442 + ); [INFO] [stdout] 443 + [INFO] [stdout] 444 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 445 + diagnostics.push(diag); [INFO] [stdout] 446 + } [INFO] [stdout] 447 + } [INFO] [stdout] 448 + } [INFO] [stdout] 449 + } [INFO] [stdout] 450 + } [INFO] [stdout] 451 + if arg_count < udo.inputs.len() { [INFO] [stdout] 452 + let diag = utils::diagnostic_helper( [INFO] [stdout] 453 + &xin_node, DiagnosticSeverity::ERROR, "Positional argument type mismatch in udo signature: missing arguments".to_string(), None [INFO] [stdout] 454 + ); [INFO] [stdout] 455 + [INFO] [stdout] 456 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 457 + diagnostics.push(diag); [INFO] [stdout] 458 + } [INFO] [stdout] 459 + } [INFO] [stdout] 460 + break 'xin_outer; [INFO] [stdout] 461 + } [INFO] [stdout] 462 + } [INFO] [stdout] 463 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/server.rs:478:24 [INFO] [stdout] | [INFO] [stdout] 478 | if { [INFO] [stdout] | ________________________^ [INFO] [stdout] 479 | | !nodes_to_diagnostics.udo.contains(&node_type) && [INFO] [stdout] 480 | | !nodes_to_diagnostics.udt.contains(&node_type) && [INFO] [stdout] 481 | | !plugins.contains_key(&node_type) && [INFO] [stdout] 482 | | !is_in_completion && [INFO] [stdout] 483 | | !is_included_udo [INFO] [stdout] 484 | | } { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] = note: `#[warn(clippy::blocks_in_conditions)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 478 ~ if !nodes_to_diagnostics.udo.contains(&node_type) && [INFO] [stdout] 479 + !nodes_to_diagnostics.udt.contains(&node_type) && [INFO] [stdout] 480 + !plugins.contains_key(&node_type) && [INFO] [stdout] 481 + !is_in_completion && [INFO] [stdout] 482 ~ !is_included_udo { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:569:9 [INFO] [stdout] | [INFO] [stdout] 569 | / if let Some(doc) = dc.get(&uri) { [INFO] [stdout] 570 | | if let Some(node) = parser::find_node_at_position(&doc.tree, &pos) { [INFO] [stdout] 571 | | let node_kind = node.kind(); [INFO] [stdout] 572 | | let node_type = parser::get_node_name(node, &doc.text.to_string()).unwrap_or("".to_string()); // opcode key [INFO] [stdout] ... | [INFO] [stdout] 649 | | } [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] 569 ~ if let Some(doc) = dc.get(&uri) [INFO] [stdout] 570 ~ && let Some(node) = parser::find_node_at_position(&doc.tree, &pos) { [INFO] [stdout] 571 | let node_kind = node.kind(); [INFO] [stdout] ... [INFO] [stdout] 647 | } [INFO] [stdout] 648 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:623:25 [INFO] [stdout] | [INFO] [stdout] 623 | / if is_type { [INFO] [stdout] 624 | | if let Some(child_type_name) = parser::get_node_name(node, &doc.text.to_string()) { [INFO] [stdout] 625 | | if let Some(sd) = doc.user_definitions.user_defined_types.get(&child_type_name) { [INFO] [stdout] 626 | | let md = format!("## User-Defined Type\n```csound\n{}\n```", sd.udt_format); [INFO] [stdout] ... | [INFO] [stdout] 644 | | } [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] 623 ~ if is_type [INFO] [stdout] 624 ~ && let Some(child_type_name) = parser::get_node_name(node, &doc.text.to_string()) { [INFO] [stdout] 625 | if let Some(sd) = doc.user_definitions.user_defined_types.get(&child_type_name) { [INFO] [stdout] ... [INFO] [stdout] 641 | } [INFO] [stdout] 642 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:691:37 [INFO] [stdout] | [INFO] [stdout] 691 | / ... if let Some(udt) = udo_file.user_defined_types.get(&struct_type_name.clone()) { [INFO] [stdout] 692 | | ... if let Some(ref members) = udt.udt_members { [INFO] [stdout] 693 | | ... for (field_name, field_type) in members.iter() { [INFO] [stdout] 694 | | ... let documentation = format!( [INFO] [stdout] ... | [INFO] [stdout] 706 | | ... } [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] 691 ~ if let Some(udt) = udo_file.user_defined_types.get(&struct_type_name.clone()) [INFO] [stdout] 692 ~ && let Some(ref members) = udt.udt_members { [INFO] [stdout] 693 | for (field_name, field_type) in members.iter() { [INFO] [stdout] ... [INFO] [stdout] 704 | } [INFO] [stdout] 705 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:743:88 [INFO] [stdout] | [INFO] [stdout] 743 | ... ty.to_string(), CompletionItemKind::FIELD, format!("{}", ty), ty.to_string(), format!("Data type '{}'", ty) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `ty.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:752:92 [INFO] [stdout] | [INFO] [stdout] 752 | ... ty.to_string(), CompletionItemKind::FIELD, format!("{}", ty), ty.to_string(), documentation [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `ty.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/server.rs:795:58 [INFO] [stdout] | [INFO] [stdout] 795 | ... for (_, data) in list { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 795 - for (_, data) in list { [INFO] [stdout] 795 + for data in list.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/server.rs:821:45 [INFO] [stdout] | [INFO] [stdout] 821 | / ... { [INFO] [stdout] 822 | | ... pkind != "flag_content" && pkind != "struct_access" && [INFO] [stdout] 823 | | ... wnode.kind() != "legacy_udo_args" && pkind != "modern_udo_inputs" && [INFO] [stdout] 824 | | ... pkind != "ERROR" [INFO] [stdout] 825 | | ... } { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 821 ~ pkind != "flag_content" && pkind != "struct_access" && [INFO] [stdout] 822 + wnode.kind() != "legacy_udo_args" && pkind != "modern_udo_inputs" && [INFO] [stdout] 823 ~ pkind != "ERROR" { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:881:107 [INFO] [stdout] | [INFO] [stdout] 881 | ... documentation: Some(Documentation::String(format!("{}", data.description))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `data.description.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:679:45 [INFO] [stdout] | [INFO] [stdout] 679 | ... if let Some(ref members) = members { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 679 - if let Some(ref members) = members { [INFO] [stdout] 679 + if let Some(members) = members { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/server.rs:990:9 [INFO] [stdout] | [INFO] [stdout] 990 | / let mut lense = Vec::new(); [INFO] [stdout] 991 | | [INFO] [stdout] 992 | | lense.push(CodeLens { [INFO] [stdout] 993 | | range: Range { [INFO] [stdout] ... | [INFO] [stdout] 1041 | | data: None [INFO] [stdout] 1042 | | }); [INFO] [stdout] | |___________^ help: consider using the `vec![]` macro: `let lense = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:313:32 [INFO] [stdout] | [INFO] [stdout] 313 | fn get_udo_data_type(arg_list: &String) -> 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] 313 - fn get_udo_data_type(arg_list: &String) -> Vec { [INFO] [stdout] 313 + fn get_udo_data_type(arg_list: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:320:52 [INFO] [stdout] | [INFO] [stdout] 320 | let tokens: Vec<&str> = TOKENIZE_VAR.find_iter(&trimmed).map(|c| c.as_str()).collect(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `trimmed` [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/parser.rs:370:43 [INFO] [stdout] | [INFO] [stdout] 370 | let typed = get_node_name(vnode_type, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:375:64 [INFO] [stdout] | [INFO] [stdout] 375 | let nog = absolute_trimmed.strip_prefix("g").unwrap_or(&absolute_trimmed); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `absolute_trimmed` [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/parser.rs:383:57 [INFO] [stdout] | [INFO] [stdout] 383 | let var_type = trimmed.split("[").next().unwrap_or(&trimmed); [INFO] [stdout] | ^^^^^^^^ help: change this to: `trimmed` [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/parser.rs:407:47 [INFO] [stdout] | [INFO] [stdout] 407 | let dimension = SHAPE_VAR_REGEX.find_iter(&absolute_trimmed).count(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `absolute_trimmed` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/parser.rs:528:9 [INFO] [stdout] | [INFO] [stdout] 493 | / let check = if let Some(var) = map.get_mut(k) { [INFO] [stdout] 494 | | var.var_calls += 1; [INFO] [stdout] 495 | | let p = node.parent().unwrap(); [INFO] [stdout] 496 | | let pkind = p.kind(); [INFO] [stdout] ... | [INFO] [stdout] 527 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 528 | check [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 493 ~ [INFO] [stdout] 494 ~ if let Some(var) = map.get_mut(k) { [INFO] [stdout] 495 + var.var_calls += 1; [INFO] [stdout] 496 + let p = node.parent().unwrap(); [INFO] [stdout] 497 + let pkind = p.kind(); [INFO] [stdout] 498 + [INFO] [stdout] 499 + match acc { [INFO] [stdout] 500 + AccessVariableType::Read => { [INFO] [stdout] 501 + var.is_unused = false; [INFO] [stdout] 502 + if var.is_undefined { var.references.push(node_range); } [INFO] [stdout] 503 + }, [INFO] [stdout] 504 + AccessVariableType::Write => { [INFO] [stdout] 505 + if pkind == "label_statement" { var.references.clear(); } [INFO] [stdout] 506 + var.is_undefined = false; [INFO] [stdout] 507 + var.node_location = node.start_byte(); [INFO] [stdout] 508 + } [INFO] [stdout] 509 + AccessVariableType::WithoutDefinition => { [INFO] [stdout] 510 + var.is_undefined = false; [INFO] [stdout] 511 + var.is_unused = false; [INFO] [stdout] 512 + var.node_location = node.start_byte(); [INFO] [stdout] 513 + } [INFO] [stdout] 514 + AccessVariableType::Update => { [INFO] [stdout] 515 + var.is_unused = false; [INFO] [stdout] 516 + if var.is_undefined { var.references.push(node_range); } [INFO] [stdout] 517 + var.is_undefined = false; [INFO] [stdout] 518 + } [INFO] [stdout] 519 + } [INFO] [stdout] 520 + true [INFO] [stdout] 521 + } else { [INFO] [stdout] 522 + if acc == &AccessVariableType::WithoutDefinition { [INFO] [stdout] 523 + nodef_args.insert(k.clone()); // TODO: only for opcode arg [INFO] [stdout] 524 + true [INFO] [stdout] 525 + } else { [INFO] [stdout] 526 + false [INFO] [stdout] 527 + } [INFO] [stdout] 528 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/parser.rs:532:12 [INFO] [stdout] | [INFO] [stdout] 532 | if key == "" { return } [INFO] [stdout] | ^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/parser.rs:543:77 [INFO] [stdout] | [INFO] [stdout] 543 | let preferred_scope = if self.global_defined_vars.contains_key(key) { [INFO] [stdout] | _____________________________________________________________________________^ [INFO] [stdout] 544 | | Scope::Global [INFO] [stdout] 545 | | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/parser.rs:545:71 [INFO] [stdout] | [INFO] [stdout] 545 | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 546 | | Scope::Global [INFO] [stdout] 547 | | } else if key.starts_with("g") { [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: this `if` has identical blocks [INFO] [stdout] --> src/parser.rs:545:71 [INFO] [stdout] | [INFO] [stdout] 545 | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 546 | | Scope::Global [INFO] [stdout] 547 | | } else if key.starts_with("g") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/parser.rs:547:40 [INFO] [stdout] | [INFO] [stdout] 547 | } else if key.starts_with("g") { [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 548 | | Scope::Global [INFO] [stdout] 549 | | } else { [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:556:89 [INFO] [stdout] | [INFO] [stdout] 556 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:561:73 [INFO] [stdout] | [INFO] [stdout] 561 | node, local_map, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:568:89 [INFO] [stdout] | [INFO] [stdout] 568 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:574:89 [INFO] [stdout] | [INFO] [stdout] 574 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:606:71 [INFO] [stdout] | [INFO] [stdout] 606 | udv.data_type = get_variable_data_type(node_to_check, &text, &self.user_defined_types); [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: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/parser.rs:615:26 [INFO] [stdout] | [INFO] [stdout] 615 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` 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/parser.rs:628:94 [INFO] [stdout] | [INFO] [stdout] 628 | let child_name = child.child_by_field_name("name").and_then(|n| get_node_name(n, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:629:94 [INFO] [stdout] | [INFO] [stdout] 629 | let child_type = child.child_by_field_name("type").and_then(|n| get_node_name(n, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:636:54 [INFO] [stdout] | [INFO] [stdout] 636 | let cname = get_node_name(child, &text).unwrap_or("".to_string()); [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: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/parser.rs:650:9 [INFO] [stdout] | [INFO] [stdout] 650 | / if !self.user_defined_types.contains_key(&key.clone()) { [INFO] [stdout] 651 | | local_udt.udt_name = key.clone(); [INFO] [stdout] 652 | | local_udt.udt_format = struct_format; [INFO] [stdout] 653 | | self.user_defined_types.insert(key.clone(), local_udt); [INFO] [stdout] ... | [INFO] [stdout] 658 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using the `Entry` API: https://doc.rust-lang.org/std/collections/struct.HashMap.html#entry-api [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/parser.rs:656:17 [INFO] [stdout] | [INFO] [stdout] 656 | (*f).udt_format = struct_format; [INFO] [stdout] | ^^^^ help: try: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` 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/parser.rs:665:53 [INFO] [stdout] | [INFO] [stdout] 665 | let inputs_text = get_node_name(inputs, &text).unwrap(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:670:59 [INFO] [stdout] | [INFO] [stdout] 670 | let outputs_text = get_node_name(outputs, &text).unwrap(); [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 `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/parser.rs:688:33 [INFO] [stdout] | [INFO] [stdout] 688 | ... i.split(':').last().map(|s| s.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 688 - i.split(':').last().map(|s| s.to_string()) [INFO] [stdout] 688 + i.split(':').next_back().map(|s| s.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:740:5 [INFO] [stdout] | [INFO] [stdout] 740 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 740 - return true; [INFO] [stdout] 740 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:768:9 [INFO] [stdout] | [INFO] [stdout] 768 | return Some(OpcodeCheck::Opcode) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 768 - return Some(OpcodeCheck::Opcode) [INFO] [stdout] 768 + Some(OpcodeCheck::Opcode) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:770:9 [INFO] [stdout] | [INFO] [stdout] 770 | return Some(OpcodeCheck::Udo) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 770 - return Some(OpcodeCheck::Udo) [INFO] [stdout] 770 + Some(OpcodeCheck::Udo) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:774:39 [INFO] [stdout] | [INFO] [stdout] 774 | pub fn is_valid_type(type_identifier: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 774 - pub fn is_valid_type(type_identifier: &String) -> bool { [INFO] [stdout] 774 + pub fn is_valid_type(type_identifier: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/parser.rs:776:5 [INFO] [stdout] | [INFO] [stdout] 776 | / match trimmed { [INFO] [stdout] 777 | | "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" => true, [INFO] [stdout] 778 | | "a" | "i" | "k" | "S" | "f" | "w" | "b" => true, [INFO] [stdout] 779 | | _ => false [INFO] [stdout] 780 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 776 - match trimmed { [INFO] [stdout] 777 - "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" => true, [INFO] [stdout] 778 - "a" | "i" | "k" | "S" | "f" | "w" | "b" => true, [INFO] [stdout] 779 - _ => false [INFO] [stdout] 780 - } [INFO] [stdout] 776 + matches!(trimmed, "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" | "a" | "i" | "k" | "S" | "f" | "w" | "b") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:783:51 [INFO] [stdout] | [INFO] [stdout] 783 | fn is_valid_output_udo_types<'a>(type_identifier: &String, node: Node<'a>) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 783 - fn is_valid_output_udo_types<'a>(type_identifier: &String, node: Node<'a>) -> bool { [INFO] [stdout] 783 + fn is_valid_output_udo_types<'a>(type_identifier: &str, node: Node<'a>) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:788:13 [INFO] [stdout] | [INFO] [stdout] 788 | / if trimmed.eq_ignore_ascii_case("void") { [INFO] [stdout] 789 | | return true [INFO] [stdout] 790 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 787 ~ "modern_udo_outputs" [INFO] [stdout] 788 ~ if trimmed.eq_ignore_ascii_case("void") => { [INFO] [stdout] 789 | return true [INFO] [stdout] 790 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:793:13 [INFO] [stdout] | [INFO] [stdout] 793 | / if trimmed.contains('0') { [INFO] [stdout] 794 | | if trimmed.len() == 1 { [INFO] [stdout] 795 | | return true [INFO] [stdout] 796 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 799 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 792 ~ "udo_definition_legacy" [INFO] [stdout] 793 ~ if trimmed.contains('0') => { [INFO] [stdout] 794 | if trimmed.len() == 1 { [INFO] [stdout] ... [INFO] [stdout] 798 | } [INFO] [stdout] 799 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/parser.rs:794:17 [INFO] [stdout] | [INFO] [stdout] 794 | / if trimmed.len() == 1 { [INFO] [stdout] 795 | | return true [INFO] [stdout] 796 | | } else { [INFO] [stdout] 797 | | return false [INFO] [stdout] 798 | | } [INFO] [stdout] | |_________________^ help: you can reduce it to: `return trimmed.len() == 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:820:46 [INFO] [stdout] | [INFO] [stdout] 820 | fn is_valid_input_udo_types(type_identifier: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 820 - fn is_valid_input_udo_types(type_identifier: &String) -> bool { [INFO] [stdout] 820 + fn is_valid_input_udo_types(type_identifier: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:38 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p1.is_none()` [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 boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:55 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p2.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:72 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p3.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:858:62 [INFO] [stdout] | [INFO] [stdout] 858 | if let Some(node_name) = get_node_name(node, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:868:17 [INFO] [stdout] | [INFO] [stdout] 868 | / if let Some(p) = node.parent() { [INFO] [stdout] 869 | | if let Some(node_explicit_type) = node.child_by_field_name("type") { [INFO] [stdout] 870 | | let node_name = node.child_by_field_name("name").unwrap(); [INFO] [stdout] 871 | | if node_explicit_type.kind() == "identifier" { [INFO] [stdout] ... | [INFO] [stdout] 889 | | } [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] 868 ~ if let Some(p) = node.parent() [INFO] [stdout] 869 ~ && let Some(node_explicit_type) = node.child_by_field_name("type") { [INFO] [stdout] 870 | let node_name = node.child_by_field_name("name").unwrap(); [INFO] [stdout] ... [INFO] [stdout] 887 | } [INFO] [stdout] 888 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:875:61 [INFO] [stdout] | [INFO] [stdout] 875 | let name = get_node_name(node_name, &text).unwrap(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:876:68 [INFO] [stdout] | [INFO] [stdout] 876 | let ty = get_node_name(node_explicit_type, &text).unwrap(); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:909:17 [INFO] [stdout] | [INFO] [stdout] 909 | / ... if !should_skip { [INFO] [stdout] 910 | | ... if let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | | ... let name = name.split("[").next().unwrap(); [INFO] [stdout] ... | [INFO] [stdout] 916 | | ... } [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] 909 ~ if !should_skip [INFO] [stdout] 910 ~ && let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] ... [INFO] [stdout] 914 | } [INFO] [stdout] 915 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:910:21 [INFO] [stdout] | [INFO] [stdout] 910 | / ... if let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | | ... let name = name.split("[").next().unwrap(); [INFO] [stdout] 913 | | ... nodes_to_diagnostics.user_definitions.add_udv(node, &name.to_string(), text); [INFO] [stdout] 914 | | ... } [INFO] [stdout] 915 | | ... } [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] 910 ~ if let Some(name) = get_node_name(node, text) [INFO] [stdout] 911 ~ && !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | let name = name.split("[").next().unwrap(); [INFO] [stdout] 913 | nodes_to_diagnostics.user_definitions.add_udv(node, &name.to_string(), text); [INFO] [stdout] 914 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:919:21 [INFO] [stdout] | [INFO] [stdout] 919 | / match p.kind() { [INFO] [stdout] 920 | | "ERROR" => { [INFO] [stdout] 921 | | let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [INFO] [stdout] 922 | | let nkind = node.kind(); [INFO] [stdout] ... | [INFO] [stdout] 931 | | _ => { } [INFO] [stdout] 932 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 919 ~ if p.kind() == "ERROR" { [INFO] [stdout] 920 + let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [INFO] [stdout] 921 + let nkind = node.kind(); [INFO] [stdout] 922 + if scope == Scope::Score && nkind != "type_identifier_legacy" { [INFO] [stdout] 923 + nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 924 + node: node, [INFO] [stdout] 925 + error_type: GErrors::ScoreStatement [INFO] [stdout] 926 + } [INFO] [stdout] 927 + ); [INFO] [stdout] 928 + } [INFO] [stdout] 929 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:921:58 [INFO] [stdout] | [INFO] [stdout] 921 | ... let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:937:17 [INFO] [stdout] | [INFO] [stdout] 937 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 938 | | if let Some(name) = get_node_name(node_name, text) { [INFO] [stdout] 939 | | nodes_to_diagnostics.user_definitions.add_udv(node_name, &name, text); [INFO] [stdout] 940 | | } [INFO] [stdout] 941 | | } [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] 937 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 938 ~ && let Some(name) = get_node_name(node_name, text) { [INFO] [stdout] 939 | nodes_to_diagnostics.user_definitions.add_udv(node_name, &name, text); [INFO] [stdout] 940 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:944:18 [INFO] [stdout] | [INFO] [stdout] 944 | / if let Some(macro_name) = node.child_by_field_name("macro_identifier") { [INFO] [stdout] 945 | | if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 946 | | let mname = macro_name_text.trim().to_string(); [INFO] [stdout] 947 | | nodes_to_diagnostics.user_definitions.user_defined_macros [INFO] [stdout] ... | [INFO] [stdout] 961 | | } [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] 944 ~ if let Some(macro_name) = node.child_by_field_name("macro_identifier") [INFO] [stdout] 945 ~ && let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 946 | let mname = macro_name_text.trim().to_string(); [INFO] [stdout] ... [INFO] [stdout] 959 | }); [INFO] [stdout] 960 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:945:78 [INFO] [stdout] | [INFO] [stdout] 945 | if let Some(macro_name_text) = get_node_name(macro_name, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:965:17 [INFO] [stdout] | [INFO] [stdout] 965 | / if let Some(macro_name) = node.child_by_field_name("macro_name") { [INFO] [stdout] 966 | | if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... | [INFO] [stdout] 988 | | } [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] 965 ~ if let Some(macro_name) = node.child_by_field_name("macro_name") [INFO] [stdout] 966 ~ && let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] ... [INFO] [stdout] 986 | } [INFO] [stdout] 987 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:966:21 [INFO] [stdout] | [INFO] [stdout] 966 | / if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] 969 | | if let Some(values) = node.child_by_field_name("macro_values") { [INFO] [stdout] ... | [INFO] [stdout] 987 | | } [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] 966 ~ if let Some(macro_name_text) = get_node_name(macro_name, &text) [INFO] [stdout] 967 ~ && let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... [INFO] [stdout] 985 | } [INFO] [stdout] 986 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:966:78 [INFO] [stdout] | [INFO] [stdout] 966 | if let Some(macro_name_text) = get_node_name(macro_name, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:968:63 [INFO] [stdout] | [INFO] [stdout] 968 | ... let mid = get_node_name(macro_id, &text).unwrap_or_default(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:970:64 [INFO] [stdout] | [INFO] [stdout] 970 | ... let mv = get_node_name(values, &text).unwrap_or_default(); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:992:17 [INFO] [stdout] | [INFO] [stdout] 992 | / if let Some(node_type) = node.child_by_field_name("struct_name") { [INFO] [stdout] 993 | | if let Some(node_name) = get_node_name(node_type, &text) { [INFO] [stdout] 994 | | let node_key = node_name.clone(); [INFO] [stdout] 995 | | nodes_to_diagnostics.udt.insert(node_name); [INFO] [stdout] 996 | | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &text); [INFO] [stdout] 997 | | }; [INFO] [stdout] 998 | | } [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] 992 ~ if let Some(node_type) = node.child_by_field_name("struct_name") [INFO] [stdout] 993 ~ && let Some(node_name) = get_node_name(node_type, &text) { [INFO] [stdout] 994 | let node_key = node_name.clone(); [INFO] [stdout] 995 | nodes_to_diagnostics.udt.insert(node_name); [INFO] [stdout] 996 | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &text); [INFO] [stdout] 997 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:993:71 [INFO] [stdout] | [INFO] [stdout] 993 | if let Some(node_name) = get_node_name(node_type, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:996:88 [INFO] [stdout] | [INFO] [stdout] 996 | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1001:17 [INFO] [stdout] | [INFO] [stdout] 1001 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 1002 | | if let Some(op_name) = get_node_name(node_name, &text) { [INFO] [stdout] 1003 | | let node_key = op_name.clone(); [INFO] [stdout] 1004 | | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &text); [INFO] [stdout] 1005 | | } [INFO] [stdout] 1006 | | } [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] 1001 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 1002 ~ && let Some(op_name) = get_node_name(node_name, &text) { [INFO] [stdout] 1003 | let node_key = op_name.clone(); [INFO] [stdout] 1004 | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &text); [INFO] [stdout] 1005 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1002:69 [INFO] [stdout] | [INFO] [stdout] 1002 | if let Some(op_name) = get_node_name(node_name, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1004:88 [INFO] [stdout] | [INFO] [stdout] 1004 | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1009:65 [INFO] [stdout] | [INFO] [stdout] 1009 | if let Some(text_content) = get_node_name(node, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1038:79 [INFO] [stdout] | [INFO] [stdout] 1038 | c.child_by_field_name("id").and_then(|n| get_node_name(n, &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: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:1041:38 [INFO] [stdout] | [INFO] [stdout] 1041 | let is_valid_instr = name [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 1042 | | .as_deref() [INFO] [stdout] 1043 | | .and_then(|n| Some(n.trim() [INFO] [stdout] 1044 | | .strip_prefix("i") [INFO] [stdout] 1045 | | .is_some() && node.child_count() >= 3)); [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1041 ~ let is_valid_instr = name [INFO] [stdout] 1042 + .as_deref().map(|n| n.trim() [INFO] [stdout] 1043 + .strip_prefix("i") [INFO] [stdout] 1044 ~ .is_some() && node.child_count() >= 3); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1049:25 [INFO] [stdout] | [INFO] [stdout] 1049 | / if !condition { [INFO] [stdout] 1050 | | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1051 | | node: node, [INFO] [stdout] 1052 | | error_type: GErrors::MissingPfield [INFO] [stdout] 1053 | | }); [INFO] [stdout] 1054 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1048 ~ Some(condition) [INFO] [stdout] 1049 ~ if !condition => { [INFO] [stdout] 1050 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1053 | }); [INFO] [stdout] 1054 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:1047:17 [INFO] [stdout] | [INFO] [stdout] 1047 | / match is_valid_instr { [INFO] [stdout] 1048 | | Some(condition) => { [INFO] [stdout] 1049 | | if !condition { [INFO] [stdout] 1050 | | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... | [INFO] [stdout] 1056 | | None => { } [INFO] [stdout] 1057 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1047 ~ if let Some(condition) = is_valid_instr { [INFO] [stdout] 1048 + if !condition { [INFO] [stdout] 1049 + nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1050 + node: node, [INFO] [stdout] 1051 + error_type: GErrors::MissingPfield [INFO] [stdout] 1052 + }); [INFO] [stdout] 1053 + } [INFO] [stdout] 1054 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/parser.rs:1079:25 [INFO] [stdout] | [INFO] [stdout] 1067 | / let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] 1068 | | false [INFO] [stdout] 1069 | | } else { [INFO] [stdout] 1070 | | let p1 = p1.unwrap_or(""); [INFO] [stdout] ... | [INFO] [stdout] 1078 | | }; [INFO] [stdout] | |__________________________- unnecessary `let` binding [INFO] [stdout] 1079 | ans [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 1067 ~ [INFO] [stdout] 1068 ~ if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] 1069 + false [INFO] [stdout] 1070 + } else { [INFO] [stdout] 1071 + let p1 = p1.unwrap_or(""); [INFO] [stdout] 1072 + let p2 = p2.unwrap_or(""); [INFO] [stdout] 1073 + let p3 = p3.unwrap_or(""); [INFO] [stdout] 1074 + if !matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 != "duration" { [INFO] [stdout] 1075 + false [INFO] [stdout] 1076 + } else { [INFO] [stdout] 1077 + true [INFO] [stdout] 1078 + } [INFO] [stdout] 1079 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/parser.rs:1064:60 [INFO] [stdout] | [INFO] [stdout] 1064 | let p1 = node.field_name_for_child(0 + mode); [INFO] [stdout] | ^^^^^^^^ help: consider reducing it to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/parser.rs:1073:29 [INFO] [stdout] | [INFO] [stdout] 1073 | / if !matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 ... [INFO] [stdout] 1074 | | false [INFO] [stdout] 1075 | | } else { [INFO] [stdout] 1076 | | true [INFO] [stdout] 1077 | | } [INFO] [stdout] | |_____________________________^ help: you can reduce it to: `!(!matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 != "duration")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1090:17 [INFO] [stdout] | [INFO] [stdout] 1090 | / if let Some(c) = node.child_by_field_name("included_file") { [INFO] [stdout] 1091 | | if let Some(ifile) = get_node_name(c, &text) { [INFO] [stdout] 1092 | | [INFO] [stdout] 1093 | | let fpath = ifile [INFO] [stdout] ... | [INFO] [stdout] 1112 | | } [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] 1090 ~ if let Some(c) = node.child_by_field_name("included_file") [INFO] [stdout] 1091 ~ && let Some(ifile) = get_node_name(c, &text) { [INFO] [stdout] 1092 | [INFO] [stdout] ... [INFO] [stdout] 1110 | } [INFO] [stdout] 1111 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1091:59 [INFO] [stdout] | [INFO] [stdout] 1091 | if let Some(ifile) = get_node_name(c, &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: the borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1100:51 [INFO] [stdout] | [INFO] [stdout] 1100 | ... let uf = UdoFile::new(&pfile, uri.clone()); [INFO] [stdout] | ^^^^^^ help: change this to: `pfile` [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: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:1105:58 [INFO] [stdout] | [INFO] [stdout] 1105 | ... m.content_hash = uf.content_hash.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `uf.content_hash` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against true are unnecessary [INFO] [stdout] --> src/parser.rs:1145:38 [INFO] [stdout] | [INFO] [stdout] 1145 | ... .any(|c| c == true); [INFO] [stdout] | ^^^^^^^^^ help: try: `c` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1162:29 [INFO] [stdout] | [INFO] [stdout] 1162 | / ... if has_specific_node(node, "instr_udo_bounded_error") { [INFO] [stdout] 1163 | | ... nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1164 | | ... node: node, [INFO] [stdout] 1165 | | ... error_type: GErrors::InstrBlockSyntaxError [INFO] [stdout] 1166 | | ... } [INFO] [stdout] 1167 | | ... ); [INFO] [stdout] 1168 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1161 ~ "instr" [INFO] [stdout] 1162 ~ if has_specific_node(node, "instr_udo_bounded_error") => { [INFO] [stdout] 1163 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1167 | ); [INFO] [stdout] 1168 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1171:29 [INFO] [stdout] | [INFO] [stdout] 1171 | / ... if has_specific_node(node, "instr_udo_bounded_error") { [INFO] [stdout] 1172 | | ... nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1173 | | ... node: node, [INFO] [stdout] 1174 | | ... error_type: GErrors::UdoBlockSyntaxError [INFO] [stdout] 1175 | | ... } [INFO] [stdout] 1176 | | ... ); [INFO] [stdout] 1177 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1170 ~ "udo_definition_legacy" | "udo_definition_modern" [INFO] [stdout] 1171 ~ if has_specific_node(node, "instr_udo_bounded_error") => { [INFO] [stdout] 1172 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1176 | ); [INFO] [stdout] 1177 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1186:21 [INFO] [stdout] | [INFO] [stdout] 1186 | / if child.kind() == "flag_content" { [INFO] [stdout] 1187 | | if let (Some(fi), Some(ft)) = { [INFO] [stdout] 1188 | | let mut child_cursor = child.walk(); [INFO] [stdout] ... | [INFO] [stdout] 1201 | | } [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] 1186 ~ if child.kind() == "flag_content" [INFO] [stdout] 1187 ~ && let (Some(fi), Some(ft)) = { [INFO] [stdout] 1188 | let mut child_cursor = child.walk(); [INFO] [stdout] ... [INFO] [stdout] 1199 | nodes_to_diagnostics.flags.insert(flag.trim().to_string(), child); [INFO] [stdout] 1200 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1196:51 [INFO] [stdout] | [INFO] [stdout] 1196 | ... get_node_name(fi, &text).unwrap_or_default(), [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1197:51 [INFO] [stdout] | [INFO] [stdout] 1197 | ... get_node_name(ft, &text).unwrap_or_default() [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1220:62 [INFO] [stdout] | [INFO] [stdout] 1220 | if let Some(node_name) = get_node_name(node, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1228:54 [INFO] [stdout] | [INFO] [stdout] 1228 | let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1333:27 [INFO] [stdout] | [INFO] [stdout] 1333 | find_node_at_position(&tree, &Position { line: target_line as u32, character: current_char_utf8 as u32 }) [INFO] [stdout] | ^^^^^ help: change this to: `tree` [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 `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1347:21 [INFO] [stdout] | [INFO] [stdout] 1347 | if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1346 ~ "opcode_statement" [INFO] [stdout] 1347 ~ if is_valid_not_defined_arg(&gparent, text, udt) => { return Scope::Global; }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:1345:13 [INFO] [stdout] | [INFO] [stdout] 1345 | / match gparent.kind() { [INFO] [stdout] 1346 | | "opcode_statement" => { [INFO] [stdout] 1347 | | if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] 1348 | | }, [INFO] [stdout] 1349 | | _ => { } [INFO] [stdout] 1350 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1345 ~ if gparent.kind() == "opcode_statement" { [INFO] [stdout] 1346 + if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] 1347 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1353:9 [INFO] [stdout] | [INFO] [stdout] 1353 | / if let Some(node_child) = current_node.child_by_field_name("name") { [INFO] [stdout] 1354 | | if let Some(n) = get_node_name(node_child, &text) { [INFO] [stdout] 1355 | | match ckind { [INFO] [stdout] 1356 | | "instrument_definition" | "instr" => return Scope::Instr(n), [INFO] [stdout] ... | [INFO] [stdout] 1361 | | } [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] 1353 ~ if let Some(node_child) = current_node.child_by_field_name("name") [INFO] [stdout] 1354 ~ && let Some(n) = get_node_name(node_child, &text) { [INFO] [stdout] 1355 | match ckind { [INFO] [stdout] ... [INFO] [stdout] 1359 | } [INFO] [stdout] 1360 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1354:56 [INFO] [stdout] | [INFO] [stdout] 1354 | if let Some(n) = get_node_name(node_child, &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: omit braces around single expression condition [INFO] [stdout] --> src/parser.rs:1394:16 [INFO] [stdout] | [INFO] [stdout] 1394 | if { [INFO] [stdout] | ________________^ [INFO] [stdout] 1395 | | p_kind == "score_nestable_loop" || p_kind == "score_statement" || [INFO] [stdout] 1396 | | p_kind == "score_statement_instr" || p_kind == "score_statement_func" || [INFO] [stdout] 1397 | | p_kind == "score_statement_wm" [INFO] [stdout] 1398 | | } { return AccessVariableType::Write; } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1394 ~ if p_kind == "score_nestable_loop" || p_kind == "score_statement" || [INFO] [stdout] 1395 + p_kind == "score_statement_instr" || p_kind == "score_statement_func" || [INFO] [stdout] 1396 ~ p_kind == "score_statement_wm" { return AccessVariableType::Write; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/parser.rs:1401:12 [INFO] [stdout] | [INFO] [stdout] 1401 | if { [INFO] [stdout] | ____________^ [INFO] [stdout] 1402 | | p_kind == "xin_statement" || p_kind == "modern_udo_inputs" || [INFO] [stdout] 1403 | | p_kind == "for_loop" || p_kind == "macro_define" [INFO] [stdout] 1404 | | } { return AccessVariableType::Write; } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1401 ~ if p_kind == "xin_statement" || p_kind == "modern_udo_inputs" || [INFO] [stdout] 1402 ~ p_kind == "for_loop" || p_kind == "macro_define" { return AccessVariableType::Write; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:1407:13 [INFO] [stdout] | [INFO] [stdout] 1407 | / match parent.parent() { [INFO] [stdout] 1408 | | Some(gparent) => { [INFO] [stdout] 1409 | | match gparent.kind() { [INFO] [stdout] 1410 | | "opcode_statement" => { [INFO] [stdout] ... | [INFO] [stdout] 1418 | | None => { } [INFO] [stdout] 1419 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1407 ~ if let Some(gparent) = parent.parent() { [INFO] [stdout] 1408 + match gparent.kind() { [INFO] [stdout] 1409 + "opcode_statement" => { [INFO] [stdout] 1410 + if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1411 + return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1412 + } [INFO] [stdout] 1413 + }, [INFO] [stdout] 1414 + _ => { } [INFO] [stdout] 1415 + } [INFO] [stdout] 1416 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1411:29 [INFO] [stdout] | [INFO] [stdout] 1411 | / ... if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1412 | | ... return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1413 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1410 ~ "opcode_statement" [INFO] [stdout] 1411 ~ if is_valid_not_defined_arg(&gparent, text, udt) => { [INFO] [stdout] 1412 | return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1413 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:1409:21 [INFO] [stdout] | [INFO] [stdout] 1409 | / match gparent.kind() { [INFO] [stdout] 1410 | | "opcode_statement" => { [INFO] [stdout] 1411 | | if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1412 | | return AccessVariableType::WithoutDefinition; [INFO] [stdout] ... | [INFO] [stdout] 1415 | | _ => { } [INFO] [stdout] 1416 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1409 ~ if gparent.kind() == "opcode_statement" { [INFO] [stdout] 1410 + if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1411 + return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1412 + } [INFO] [stdout] 1413 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1427:21 [INFO] [stdout] | [INFO] [stdout] 1427 | / if let Some(op) = parent.child_by_field_name("operator") { [INFO] [stdout] 1428 | | if let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | | return AccessVariableType::Update; [INFO] [stdout] ... | [INFO] [stdout] 1433 | | } [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] 1427 ~ if let Some(op) = parent.child_by_field_name("operator") [INFO] [stdout] 1428 ~ && let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | return AccessVariableType::Update; [INFO] [stdout] 1431 | } [INFO] [stdout] 1432 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1428:25 [INFO] [stdout] | [INFO] [stdout] 1428 | / if let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | | return AccessVariableType::Update; [INFO] [stdout] 1431 | | } [INFO] [stdout] 1432 | | } [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] 1428 ~ if let Some(op_text) = get_node_name(op, text) [INFO] [stdout] 1429 ~ && ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | return AccessVariableType::Update; [INFO] [stdout] 1431 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1442:9 [INFO] [stdout] | [INFO] [stdout] 1442 | / if current_node.kind() == "identifier" { [INFO] [stdout] 1443 | | if let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | | return AccessVariableType::Read; [INFO] [stdout] ... | [INFO] [stdout] 1448 | | } [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] 1442 ~ if current_node.kind() == "identifier" [INFO] [stdout] 1443 ~ && let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | return AccessVariableType::Read; [INFO] [stdout] 1446 | } [INFO] [stdout] 1447 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1443:13 [INFO] [stdout] | [INFO] [stdout] 1443 | / if let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | | return AccessVariableType::Read; [INFO] [stdout] 1446 | | } [INFO] [stdout] 1447 | | } [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] 1443 ~ if let Some(out_node) = parent.child_by_field_name("outputs") [INFO] [stdout] 1444 ~ && out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | return AccessVariableType::Read; [INFO] [stdout] 1446 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1450:9 [INFO] [stdout] | [INFO] [stdout] 1450 | / if p_kind == "opcode_statement" { [INFO] [stdout] 1451 | | if let Some(op_node) = parent.child_by_field_name("op").or_else(|| parent.child_by_field_name("op_macro")) { [INFO] [stdout] 1452 | | if current_node.end_byte() <= op_node.start_byte() { [INFO] [stdout] 1453 | | return AccessVariableType::Write; [INFO] [stdout] ... | [INFO] [stdout] 1459 | | } [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] 1450 ~ if p_kind == "opcode_statement" [INFO] [stdout] 1451 ~ && let Some(op_node) = parent.child_by_field_name("op").or_else(|| parent.child_by_field_name("op_macro")) { [INFO] [stdout] 1452 | if current_node.end_byte() <= op_node.start_byte() { [INFO] [stdout] ... [INFO] [stdout] 1457 | } [INFO] [stdout] 1458 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1461:9 [INFO] [stdout] | [INFO] [stdout] 1461 | / if p_kind == "label_statement" { [INFO] [stdout] 1462 | | if let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1463 | | return AccessVariableType::Write [INFO] [stdout] 1464 | | } [INFO] [stdout] 1465 | | } [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] 1461 ~ if p_kind == "label_statement" [INFO] [stdout] 1462 ~ && let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1463 | return AccessVariableType::Write [INFO] [stdout] 1464 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1467:9 [INFO] [stdout] | [INFO] [stdout] 1467 | / if p_kind == "goto_statement" || p_kind == "rigoto_statement" { [INFO] [stdout] 1468 | | if let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1469 | | return AccessVariableType::Read [INFO] [stdout] 1470 | | } [INFO] [stdout] 1471 | | } [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] 1467 ~ if (p_kind == "goto_statement" || p_kind == "rigoto_statement") { [INFO] [stdout] 1468 ~ && let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1469 | return AccessVariableType::Read [INFO] [stdout] 1470 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1511:39 [INFO] [stdout] | [INFO] [stdout] 1511 | let mut qmatches = cursor.matches(&query, tree.root_node(), 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/parser.rs:1517:61 [INFO] [stdout] | [INFO] [stdout] 1517 | if let Some(token_type) = capture_to_token_type(&capture_name) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `capture_name` [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 function has too many arguments (11/7) [INFO] [stdout] --> src/parser.rs:1589:1 [INFO] [stdout] | [INFO] [stdout] 1589 | / pub fn get_injections( [INFO] [stdout] 1590 | | query_injection: &Query, [INFO] [stdout] 1591 | | tree: &Tree, [INFO] [stdout] 1592 | | text: &String, [INFO] [stdout] ... | [INFO] [stdout] 1600 | | json_query: &Query [INFO] [stdout] 1601 | | ) -> Vec<(u32, u32, u32, u32, u32)> [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` 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/parser.rs:1604:39 [INFO] [stdout] | [INFO] [stdout] 1604 | let mut qmatches = cursor.matches(&query_injection, tree.root_node(), text.as_bytes()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `query_injection` [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 `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1614:13 [INFO] [stdout] | [INFO] [stdout] 1614 | / if &(*p.key) == "injection.language" { [INFO] [stdout] 1615 | | if let Some(val) = &p.value { [INFO] [stdout] 1616 | | lang = val; [INFO] [stdout] 1617 | | } [INFO] [stdout] 1618 | | } [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] 1614 ~ if &(*p.key) == "injection.language" [INFO] [stdout] 1615 ~ && let Some(val) = &p.value { [INFO] [stdout] 1616 | lang = val; [INFO] [stdout] 1617 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1632:60 [INFO] [stdout] | [INFO] [stdout] 1632 | if let Some(py_tree) = py_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1633:61 [INFO] [stdout] | [INFO] [stdout] 1633 | let py_tokens = get_semantic_tokens(&py_query, &py_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `py_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/parser.rs:1633:82 [INFO] [stdout] | [INFO] [stdout] 1633 | let py_tokens = get_semantic_tokens(&py_query, &py_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1638:64 [INFO] [stdout] | [INFO] [stdout] 1638 | if let Some(html_tree) = html_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1639:63 [INFO] [stdout] | [INFO] [stdout] 1639 | let html_tokens = get_semantic_tokens(&html_query, &html_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `html_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/parser.rs:1639:88 [INFO] [stdout] | [INFO] [stdout] 1639 | let html_tokens = get_semantic_tokens(&html_query, &html_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1644:64 [INFO] [stdout] | [INFO] [stdout] 1644 | if let Some(json_tree) = json_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1645:63 [INFO] [stdout] | [INFO] [stdout] 1645 | let json_tokens = get_semantic_tokens(&json_query, &json_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `json_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/parser.rs:1645:88 [INFO] [stdout] | [INFO] [stdout] 1645 | let json_tokens = get_semantic_tokens(&json_query, &json_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1650:64 [INFO] [stdout] | [INFO] [stdout] 1650 | if let Some(csound_tree) = cs_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1651:65 [INFO] [stdout] | [INFO] [stdout] 1651 | let csound_tokens = get_semantic_tokens(&cs_query, &csound_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `cs_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/parser.rs:1651:90 [INFO] [stdout] | [INFO] [stdout] 1651 | let csound_tokens = get_semantic_tokens(&cs_query, &csound_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1746:21 [INFO] [stdout] | [INFO] [stdout] 1746 | if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1746 - if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] 1746 + if indent < 0 { 0 } else { return indent as usize } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1746:39 [INFO] [stdout] | [INFO] [stdout] 1746 | if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1746 - if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] 1746 + if indent < 0 { return 0 } else { indent as usize } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:1672:39 [INFO] [stdout] | [INFO] [stdout] 1672 | pub fn make_indent(tree: &Tree, text: &String, line: usize) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 1672 - pub fn make_indent(tree: &Tree, text: &String, line: usize) -> usize { [INFO] [stdout] 1672 + pub fn make_indent(tree: &Tree, text: &str, line: usize) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1722:13 [INFO] [stdout] | [INFO] [stdout] 1722 | / if OPEN_BLOCKS.iter().any(|k| *k == n.kind()) { [INFO] [stdout] 1723 | | if start_row < line { indent += 1; } [INFO] [stdout] 1724 | | } [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] 1722 ~ if OPEN_BLOCKS.iter().any(|k| *k == n.kind()) [INFO] [stdout] 1723 ~ && start_row < line { indent += 1; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1726:13 [INFO] [stdout] | [INFO] [stdout] 1726 | / if nkind == "ERROR" { [INFO] [stdout] 1727 | | if let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] 1728 | | indent += 1; [INFO] [stdout] 1729 | | } [INFO] [stdout] 1730 | | } [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] 1726 ~ if nkind == "ERROR" [INFO] [stdout] 1727 ~ && let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] 1728 | indent += 1; [INFO] [stdout] 1729 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/parser.rs:1727:24 [INFO] [stdout] | [INFO] [stdout] 1727 | if let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------- help: try: `if find_first_node_down_in_list(&n, &OPENER).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1732:13 [INFO] [stdout] | [INFO] [stdout] 1732 | / if CLOSE_BLOCKS.iter().any(|k| *k == n.kind()) { [INFO] [stdout] 1733 | | if indent > 0 { indent -= 1; } [INFO] [stdout] 1734 | | } [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] 1732 ~ if CLOSE_BLOCKS.iter().any(|k| *k == n.kind()) [INFO] [stdout] 1733 ~ && indent > 0 { indent -= 1; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1764:5 [INFO] [stdout] | [INFO] [stdout] 1764 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1764 - return false; [INFO] [stdout] 1764 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/parser.rs:1754:20 [INFO] [stdout] | [INFO] [stdout] 1754 | if let None = opdata.get(udo) { [INFO] [stdout] | -------^^^^------------------ help: try: `if opdata.get(udo).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:1758:34 [INFO] [stdout] | [INFO] [stdout] 1758 | description: format!("user-defined opcode" ) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"user-defined opcode".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1774:13 [INFO] [stdout] | [INFO] [stdout] 1774 | / if n.kind() == expected_kind { [INFO] [stdout] 1775 | | if !n.is_missing() { return true; } [INFO] [stdout] 1776 | | } [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] 1774 ~ if n.kind() == expected_kind [INFO] [stdout] 1775 ~ && !n.is_missing() { return true; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:1833:5 [INFO] [stdout] | [INFO] [stdout] 1833 | / node [INFO] [stdout] 1834 | | .child_by_field_name("outputs") [INFO] [stdout] 1835 | | .and_then(|out_arg| get_variable_data_type(out_arg, text, udt)) [INFO] [stdout] 1836 | | .and_then(|vdata| Some( [INFO] [stdout] 1837 | | (vdata.data_type == VarDataType::Opcode || vdata.data_type == VarDataType::Instr) && vdata.is_array [INFO] [stdout] 1838 | | )).unwrap_or(false) [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1833 ~ node [INFO] [stdout] 1834 + .child_by_field_name("outputs") [INFO] [stdout] 1835 ~ .and_then(|out_arg| get_variable_data_type(out_arg, text, udt)).map(|vdata| (vdata.data_type == VarDataType::Opcode || vdata.data_type == VarDataType::Instr) && vdata.is_array).unwrap_or(false) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/utils.rs:135:26 [INFO] [stdout] | [INFO] [stdout] 135 | std::fs::remove_file(&zip_archive_path)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `zip_archive_path` [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] --> src/utils.rs:148:35 [INFO] [stdout] | [INFO] [stdout] 148 | let dest_path = dest.join(&entry.file_name()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `entry.file_name()` [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: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/utils.rs:187:34 [INFO] [stdout] | [INFO] [stdout] 187 | let mut current_char_utf16 = 0 as usize; [INFO] [stdout] | ^^^^^^^^^^ help: try: `0_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/utils.rs:188:33 [INFO] [stdout] | [INFO] [stdout] 188 | let mut current_char_utf8 = 0 as usize; [INFO] [stdout] | ^^^^^^^^^^ help: try: `0_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils.rs:200:53 [INFO] [stdout] | [INFO] [stdout] 200 | pub fn position_to_start_byte(pos: &Position, text: &String) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 200 - pub fn position_to_start_byte(pos: &Position, text: &String) -> usize { [INFO] [stdout] 200 + pub fn position_to_start_byte(pos: &Position, text: &str) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/utils.rs:205:17 [INFO] [stdout] | [INFO] [stdout] 205 | if i == target_line as usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:230:31 [INFO] [stdout] | [INFO] [stdout] 230 | "rigoto_statement" => return "Undefined label".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 230 - "rigoto_statement" => return "Undefined label".to_string(), [INFO] [stdout] 230 + "rigoto_statement" => "Undefined label".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:231:31 [INFO] [stdout] | [INFO] [stdout] 231 | "macro_usage" => return "Undefined macro".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 231 - "macro_usage" => return "Undefined macro".to_string(), [INFO] [stdout] 231 + "macro_usage" => "Undefined macro".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:232:31 [INFO] [stdout] | [INFO] [stdout] 232 | _ => return "Undefined variable".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 - _ => return "Undefined variable".to_string(), [INFO] [stdout] 232 + _ => "Undefined variable".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:238:30 [INFO] [stdout] | [INFO] [stdout] 238 | "label_statement" => return "Unused label".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 238 - "label_statement" => return "Unused label".to_string(), [INFO] [stdout] 238 + "label_statement" => "Unused label".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:239:30 [INFO] [stdout] | [INFO] [stdout] 239 | "macro_usage" => return "Unused macro".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 239 - "macro_usage" => return "Unused macro".to_string(), [INFO] [stdout] 239 + "macro_usage" => "Unused macro".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:240:30 [INFO] [stdout] | [INFO] [stdout] 240 | _ => return "Unused variable".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 240 - _ => return "Unused variable".to_string(), [INFO] [stdout] 240 + _ => "Unused variable".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/assets.rs:26:36 [INFO] [stdout] | [INFO] [stdout] 26 | for entry in std::fs::read_dir(&opcodes_folder)? { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `opcodes_folder` [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: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/assets.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 41 | if let Some(content) = std::fs::read_to_string(&epath).ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] = note: `#[warn(clippy::match_result_ok)]` on by default [INFO] [stdout] help: consider matching on `Ok(content)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 41 - if let Some(content) = std::fs::read_to_string(&epath).ok() { [INFO] [stdout] 41 + if let Ok(content) = std::fs::read_to_string(&epath) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/assets.rs:42:53 [INFO] [stdout] | [INFO] [stdout] 42 | let content = expand_includes(&content, &examples_folder); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `examples_folder` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/assets.rs:110:40 [INFO] [stdout] | [INFO] [stdout] 110 | let op_path = manual_dir_path.join(&OPCODES_MD_DIR); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `OPCODES_MD_DIR` [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] --> src/assets.rs:111:40 [INFO] [stdout] | [INFO] [stdout] 111 | let ex_path = manual_dir_path.join(&EXAMPLES_DIR); [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `EXAMPLES_DIR` [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: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/assets.rs:160:71 [INFO] [stdout] | [INFO] [stdout] 160 | pub async fn read_csound_json_data(cj: &mut CsoundJsonData, base_dir: &PathBuf) -> Result<(), Box Result<(), Box> { [INFO] [stdout] 160 + pub async fn read_csound_json_data(cj: &mut CsoundJsonData, base_dir: &Path) -> Result<(), Box> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:47:37 [INFO] [stdout] | [INFO] [stdout] 47 | String::from_utf8_lossy(&c).to_string() [INFO] [stdout] | ^^ help: change this to: `c` [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 `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 79 | | if let Some(op_name) = parser::get_node_name(node_name, text) { [INFO] [stdout] 80 | | let node_key = op_name.clone(); [INFO] [stdout] 81 | | user_definitions.add_udo(node, &node_key, text); [INFO] [stdout] ... | [INFO] [stdout] 84 | | } [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] 78 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 79 ~ && let Some(op_name) = parser::get_node_name(node_name, text) { [INFO] [stdout] 80 | let node_key = op_name.clone(); [INFO] [stdout] 81 | user_definitions.add_udo(node, &node_key, text); [INFO] [stdout] 82 | udo_list.insert(node_key); [INFO] [stdout] 83 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:87:25 [INFO] [stdout] | [INFO] [stdout] 87 | / if let Some(node_type) = node.child_by_field_name("struct_name") { [INFO] [stdout] 88 | | if let Some(node_name) = parser::get_node_name(node_type, text) { [INFO] [stdout] 89 | | let node_key = node_name.clone(); [INFO] [stdout] 90 | | user_definitions.add_udt(node, &node_key, text); [INFO] [stdout] 91 | | type_list.insert(node_key); [INFO] [stdout] 92 | | }; [INFO] [stdout] 93 | | } [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] 87 ~ if let Some(node_type) = node.child_by_field_name("struct_name") [INFO] [stdout] 88 ~ && let Some(node_name) = parser::get_node_name(node_type, text) { [INFO] [stdout] 89 | let node_key = node_name.clone(); [INFO] [stdout] 90 | user_definitions.add_udt(node, &node_key, text); [INFO] [stdout] 91 | type_list.insert(node_key); [INFO] [stdout] 92 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:96:25 [INFO] [stdout] | [INFO] [stdout] 96 | / if let Some(macro_name) = node.child_by_field_name("macro_name") { [INFO] [stdout] 97 | | if let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | | let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... | [INFO] [stdout] 121 | | } [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] 96 ~ if let Some(macro_name) = node.child_by_field_name("macro_name") [INFO] [stdout] 97 ~ && let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] ... [INFO] [stdout] 119 | } [INFO] [stdout] 120 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:97:29 [INFO] [stdout] | [INFO] [stdout] 97 | / ... if let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | | ... if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | | ... let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] 100 | | ... if let Some(values) = node.child_by_field_name("macro_values") { [INFO] [stdout] ... | [INFO] [stdout] 120 | | ... } [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] 97 ~ if let Some(macro_name_text) = parser::get_node_name(macro_name, text) [INFO] [stdout] 98 ~ && let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... [INFO] [stdout] 118 | } [INFO] [stdout] 119 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:99:79 [INFO] [stdout] | [INFO] [stdout] 99 | ... let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:101:80 [INFO] [stdout] | [INFO] [stdout] 101 | ... let mv = parser::get_node_name(values, &text).unwrap_or_default(); [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: unneeded `return` statement [INFO] [stdout] --> src/resolve_udos.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 166 - return false; [INFO] [stdout] 166 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/resolve_udos.rs:154:28 [INFO] [stdout] | [INFO] [stdout] 154 | if let None = opdata.get(udo) { [INFO] [stdout] | -------^^^^------------------ help: try: `if opdata.get(udo).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/resolve_pulgins.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | return Ok(plugins) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 185 - return Ok(plugins) [INFO] [stdout] 185 + Ok(plugins) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_pulgins.rs:229:17 [INFO] [stdout] | [INFO] [stdout] 229 | / if epath.is_dir() { [INFO] [stdout] 230 | | if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | | if fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] ... | [INFO] [stdout] 236 | | } [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] 229 ~ if epath.is_dir() [INFO] [stdout] 230 ~ && let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | if fname.starts_with("csound-plugins-") { [INFO] [stdout] ... [INFO] [stdout] 234 | } [INFO] [stdout] 235 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_pulgins.rs:230:21 [INFO] [stdout] | [INFO] [stdout] 230 | / if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | | if fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] 233 | | tokio::fs::remove_dir_all(&epath).await?; [INFO] [stdout] 234 | | } [INFO] [stdout] 235 | | } [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] 230 ~ if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) [INFO] [stdout] 231 ~ && fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] 233 | tokio::fs::remove_dir_all(&epath).await?; [INFO] [stdout] 234 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_pulgins.rs:250:70 [INFO] [stdout] | [INFO] [stdout] 250 | let plug_opcodes = load_plugins_opcodes(&src_path, &op_path, &installed_plugins)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `installed_plugins` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/resolve_pulgins.rs:266:36 [INFO] [stdout] | [INFO] [stdout] 266 | for entry in std::fs::read_dir(&src_path)? { [INFO] [stdout] | ^^^^^^^^^ help: change this to: `src_path` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/resolve_pulgins.rs:317:25 [INFO] [stdout] | [INFO] [stdout] 316 | let content = re_bs.replace_all(&content, "\n\n").to_string(); [INFO] [stdout] | -------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 317 | content [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 316 ~ [INFO] [stdout] 317 ~ re_bs.replace_all(&content, "\n\n").to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/resolve_pulgins.rs:335:16 [INFO] [stdout] | [INFO] [stdout] 335 | if let None = opdata.get(opcode) { [INFO] [stdout] | -------^^^^--------------------- help: try: `if opdata.get(opcode).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:14:45 [INFO] [stdout] | [INFO] [stdout] 14 | let (service, socket) = LspService::new(|client| Backend::new(client)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Backend::new` [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: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:911:29 [INFO] [stdout] | [INFO] [stdout] 911 | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` 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/server.rs:296:29 [INFO] [stdout] | [INFO] [stdout] 296 | ... &flag_node, DiagnosticSeverity::ERROR, format!("Unknown flag type: <{}>", &flag), None [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `flag_node` [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 `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:319:17 [INFO] [stdout] | [INFO] [stdout] 319 | / if pflag { [INFO] [stdout] 320 | | if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] ... | [INFO] [stdout] 325 | | } [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] 319 ~ if pflag [INFO] [stdout] 320 ~ && let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 | } [INFO] [stdout] 324 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:320:21 [INFO] [stdout] | [INFO] [stdout] 320 | / if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) { [INFO] [stdout] 321 | | if let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 | | } [INFO] [stdout] 324 | | } [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] 320 ~ if let Some(entry) = doc.cached_included_udo_files.get_mut(ufile_path) [INFO] [stdout] 321 ~ && let Err(e) = entry.iterate_included_udo_file(&mut doc.internal_parsers.csound_parser) { [INFO] [stdout] 322 | self.client.log_message(MessageType::WARNING, format!("[WARNING]: {}", e)).await [INFO] [stdout] 323 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/server.rs:397:77 [INFO] [stdout] | [INFO] [stdout] 397 | ... message: utils::undefined_message_from_kind(&parent_finded_kind), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `parent_finded_kind` [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: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/server.rs:414:21 [INFO] [stdout] | [INFO] [stdout] 414 | / ... match udo.udo_type { [INFO] [stdout] 415 | | ... UdoType::Legacy => { [INFO] [stdout] 416 | | ... 'xin_outer: for child_index in 0..n.child_count() { [INFO] [stdout] 417 | | ... let xin_node = n.child(child_index).and_then(|c| if c.kind() == "xin_statement" { Some(c) } else { None }); [INFO] [stdout] ... | [INFO] [stdout] 465 | | ... _ => { } [INFO] [stdout] 466 | | ... }; [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 414 ~ if udo.udo_type == UdoType::Legacy { [INFO] [stdout] 415 + 'xin_outer: for child_index in 0..n.child_count() { [INFO] [stdout] 416 + let xin_node = n.child(child_index).and_then(|c| if c.kind() == "xin_statement" { Some(c) } else { None }); [INFO] [stdout] 417 + if let Some(xin_node) = xin_node { [INFO] [stdout] 418 + let mut arg_count = 0; [INFO] [stdout] 419 + for xin_child in xin_node.named_children(&mut xin_node.walk()) { [INFO] [stdout] 420 + if matches!(xin_child.kind(), "type_identifier_legacy" | "typed_identifier") { [INFO] [stdout] 421 + let vdata = parser::get_variable_data_type(xin_child, &doc.text.to_string(), &doc.user_definitions.user_defined_types); [INFO] [stdout] 422 + if let Some(vd) = vdata { [INFO] [stdout] 423 + if arg_count < udo.inputs.len() { [INFO] [stdout] 424 + let source_type = &udo.inputs[arg_count].arg.data_type; [INFO] [stdout] 425 + let source_shape = &udo.inputs[arg_count].arg.data_shape; [INFO] [stdout] 426 + if vd.data_type != *source_type || vd.data_shape != *source_shape { [INFO] [stdout] 427 + let diag = utils::diagnostic_helper( [INFO] [stdout] 428 + &xin_child, DiagnosticSeverity::ERROR, format!("Positional argument type mismatch in udo signature. Should be: {:?} {:?}", source_type, source_shape), None [INFO] [stdout] 429 + ); [INFO] [stdout] 430 + [INFO] [stdout] 431 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 432 + diagnostics.push(diag); [INFO] [stdout] 433 + } [INFO] [stdout] 434 + } [INFO] [stdout] 435 + if *source_type == VarDataType::Void { [INFO] [stdout] 436 + break [INFO] [stdout] 437 + } [INFO] [stdout] 438 + arg_count += 1; [INFO] [stdout] 439 + } else { [INFO] [stdout] 440 + let diag = utils::diagnostic_helper( [INFO] [stdout] 441 + &xin_node, DiagnosticSeverity::ERROR, "Positional argument type mismatch in udo signature: too many arguments".to_string(), None [INFO] [stdout] 442 + ); [INFO] [stdout] 443 + [INFO] [stdout] 444 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 445 + diagnostics.push(diag); [INFO] [stdout] 446 + } [INFO] [stdout] 447 + } [INFO] [stdout] 448 + } [INFO] [stdout] 449 + } [INFO] [stdout] 450 + } [INFO] [stdout] 451 + if arg_count < udo.inputs.len() { [INFO] [stdout] 452 + let diag = utils::diagnostic_helper( [INFO] [stdout] 453 + &xin_node, DiagnosticSeverity::ERROR, "Positional argument type mismatch in udo signature: missing arguments".to_string(), None [INFO] [stdout] 454 + ); [INFO] [stdout] 455 + [INFO] [stdout] 456 + if !parser::is_diagnostic_cached(&diag, &mut cached_diag) { [INFO] [stdout] 457 + diagnostics.push(diag); [INFO] [stdout] 458 + } [INFO] [stdout] 459 + } [INFO] [stdout] 460 + break 'xin_outer; [INFO] [stdout] 461 + } [INFO] [stdout] 462 + } [INFO] [stdout] 463 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/server.rs:478:24 [INFO] [stdout] | [INFO] [stdout] 478 | if { [INFO] [stdout] | ________________________^ [INFO] [stdout] 479 | | !nodes_to_diagnostics.udo.contains(&node_type) && [INFO] [stdout] 480 | | !nodes_to_diagnostics.udt.contains(&node_type) && [INFO] [stdout] 481 | | !plugins.contains_key(&node_type) && [INFO] [stdout] 482 | | !is_in_completion && [INFO] [stdout] 483 | | !is_included_udo [INFO] [stdout] 484 | | } { [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] = note: `#[warn(clippy::blocks_in_conditions)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 478 ~ if !nodes_to_diagnostics.udo.contains(&node_type) && [INFO] [stdout] 479 + !nodes_to_diagnostics.udt.contains(&node_type) && [INFO] [stdout] 480 + !plugins.contains_key(&node_type) && [INFO] [stdout] 481 + !is_in_completion && [INFO] [stdout] 482 ~ !is_included_udo { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:569:9 [INFO] [stdout] | [INFO] [stdout] 569 | / if let Some(doc) = dc.get(&uri) { [INFO] [stdout] 570 | | if let Some(node) = parser::find_node_at_position(&doc.tree, &pos) { [INFO] [stdout] 571 | | let node_kind = node.kind(); [INFO] [stdout] 572 | | let node_type = parser::get_node_name(node, &doc.text.to_string()).unwrap_or("".to_string()); // opcode key [INFO] [stdout] ... | [INFO] [stdout] 649 | | } [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] 569 ~ if let Some(doc) = dc.get(&uri) [INFO] [stdout] 570 ~ && let Some(node) = parser::find_node_at_position(&doc.tree, &pos) { [INFO] [stdout] 571 | let node_kind = node.kind(); [INFO] [stdout] ... [INFO] [stdout] 647 | } [INFO] [stdout] 648 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:623:25 [INFO] [stdout] | [INFO] [stdout] 623 | / if is_type { [INFO] [stdout] 624 | | if let Some(child_type_name) = parser::get_node_name(node, &doc.text.to_string()) { [INFO] [stdout] 625 | | if let Some(sd) = doc.user_definitions.user_defined_types.get(&child_type_name) { [INFO] [stdout] 626 | | let md = format!("## User-Defined Type\n```csound\n{}\n```", sd.udt_format); [INFO] [stdout] ... | [INFO] [stdout] 644 | | } [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] 623 ~ if is_type [INFO] [stdout] 624 ~ && let Some(child_type_name) = parser::get_node_name(node, &doc.text.to_string()) { [INFO] [stdout] 625 | if let Some(sd) = doc.user_definitions.user_defined_types.get(&child_type_name) { [INFO] [stdout] ... [INFO] [stdout] 641 | } [INFO] [stdout] 642 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/server.rs:691:37 [INFO] [stdout] | [INFO] [stdout] 691 | / ... if let Some(udt) = udo_file.user_defined_types.get(&struct_type_name.clone()) { [INFO] [stdout] 692 | | ... if let Some(ref members) = udt.udt_members { [INFO] [stdout] 693 | | ... for (field_name, field_type) in members.iter() { [INFO] [stdout] 694 | | ... let documentation = format!( [INFO] [stdout] ... | [INFO] [stdout] 706 | | ... } [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] 691 ~ if let Some(udt) = udo_file.user_defined_types.get(&struct_type_name.clone()) [INFO] [stdout] 692 ~ && let Some(ref members) = udt.udt_members { [INFO] [stdout] 693 | for (field_name, field_type) in members.iter() { [INFO] [stdout] ... [INFO] [stdout] 704 | } [INFO] [stdout] 705 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:743:88 [INFO] [stdout] | [INFO] [stdout] 743 | ... ty.to_string(), CompletionItemKind::FIELD, format!("{}", ty), ty.to_string(), format!("Data type '{}'", ty) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `ty.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:752:92 [INFO] [stdout] | [INFO] [stdout] 752 | ... ty.to_string(), CompletionItemKind::FIELD, format!("{}", ty), ty.to_string(), documentation [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `ty.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/server.rs:795:58 [INFO] [stdout] | [INFO] [stdout] 795 | ... for (_, data) in list { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 795 - for (_, data) in list { [INFO] [stdout] 795 + for data in list.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/server.rs:821:45 [INFO] [stdout] | [INFO] [stdout] 821 | / ... { [INFO] [stdout] 822 | | ... pkind != "flag_content" && pkind != "struct_access" && [INFO] [stdout] 823 | | ... wnode.kind() != "legacy_udo_args" && pkind != "modern_udo_inputs" && [INFO] [stdout] 824 | | ... pkind != "ERROR" [INFO] [stdout] 825 | | ... } { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 821 ~ pkind != "flag_content" && pkind != "struct_access" && [INFO] [stdout] 822 + wnode.kind() != "legacy_udo_args" && pkind != "modern_udo_inputs" && [INFO] [stdout] 823 ~ pkind != "ERROR" { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/server.rs:881:107 [INFO] [stdout] | [INFO] [stdout] 881 | ... documentation: Some(Documentation::String(format!("{}", data.description))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `data.description.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern creates a reference to a reference [INFO] [stdout] --> src/server.rs:679:45 [INFO] [stdout] | [INFO] [stdout] 679 | ... if let Some(ref members) = members { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 679 - if let Some(ref members) = members { [INFO] [stdout] 679 + if let Some(members) = members { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> src/server.rs:990:9 [INFO] [stdout] | [INFO] [stdout] 990 | / let mut lense = Vec::new(); [INFO] [stdout] 991 | | [INFO] [stdout] 992 | | lense.push(CodeLens { [INFO] [stdout] 993 | | range: Range { [INFO] [stdout] ... | [INFO] [stdout] 1041 | | data: None [INFO] [stdout] 1042 | | }); [INFO] [stdout] | |___________^ help: consider using the `vec![]` macro: `let lense = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:313:32 [INFO] [stdout] | [INFO] [stdout] 313 | fn get_udo_data_type(arg_list: &String) -> 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] 313 - fn get_udo_data_type(arg_list: &String) -> Vec { [INFO] [stdout] 313 + fn get_udo_data_type(arg_list: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:320:52 [INFO] [stdout] | [INFO] [stdout] 320 | let tokens: Vec<&str> = TOKENIZE_VAR.find_iter(&trimmed).map(|c| c.as_str()).collect(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `trimmed` [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/parser.rs:370:43 [INFO] [stdout] | [INFO] [stdout] 370 | let typed = get_node_name(vnode_type, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:375:64 [INFO] [stdout] | [INFO] [stdout] 375 | let nog = absolute_trimmed.strip_prefix("g").unwrap_or(&absolute_trimmed); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `absolute_trimmed` [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/parser.rs:383:57 [INFO] [stdout] | [INFO] [stdout] 383 | let var_type = trimmed.split("[").next().unwrap_or(&trimmed); [INFO] [stdout] | ^^^^^^^^ help: change this to: `trimmed` [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/parser.rs:407:47 [INFO] [stdout] | [INFO] [stdout] 407 | let dimension = SHAPE_VAR_REGEX.find_iter(&absolute_trimmed).count(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `absolute_trimmed` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/parser.rs:528:9 [INFO] [stdout] | [INFO] [stdout] 493 | / let check = if let Some(var) = map.get_mut(k) { [INFO] [stdout] 494 | | var.var_calls += 1; [INFO] [stdout] 495 | | let p = node.parent().unwrap(); [INFO] [stdout] 496 | | let pkind = p.kind(); [INFO] [stdout] ... | [INFO] [stdout] 527 | | }; [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 528 | check [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 493 ~ [INFO] [stdout] 494 ~ if let Some(var) = map.get_mut(k) { [INFO] [stdout] 495 + var.var_calls += 1; [INFO] [stdout] 496 + let p = node.parent().unwrap(); [INFO] [stdout] 497 + let pkind = p.kind(); [INFO] [stdout] 498 + [INFO] [stdout] 499 + match acc { [INFO] [stdout] 500 + AccessVariableType::Read => { [INFO] [stdout] 501 + var.is_unused = false; [INFO] [stdout] 502 + if var.is_undefined { var.references.push(node_range); } [INFO] [stdout] 503 + }, [INFO] [stdout] 504 + AccessVariableType::Write => { [INFO] [stdout] 505 + if pkind == "label_statement" { var.references.clear(); } [INFO] [stdout] 506 + var.is_undefined = false; [INFO] [stdout] 507 + var.node_location = node.start_byte(); [INFO] [stdout] 508 + } [INFO] [stdout] 509 + AccessVariableType::WithoutDefinition => { [INFO] [stdout] 510 + var.is_undefined = false; [INFO] [stdout] 511 + var.is_unused = false; [INFO] [stdout] 512 + var.node_location = node.start_byte(); [INFO] [stdout] 513 + } [INFO] [stdout] 514 + AccessVariableType::Update => { [INFO] [stdout] 515 + var.is_unused = false; [INFO] [stdout] 516 + if var.is_undefined { var.references.push(node_range); } [INFO] [stdout] 517 + var.is_undefined = false; [INFO] [stdout] 518 + } [INFO] [stdout] 519 + } [INFO] [stdout] 520 + true [INFO] [stdout] 521 + } else { [INFO] [stdout] 522 + if acc == &AccessVariableType::WithoutDefinition { [INFO] [stdout] 523 + nodef_args.insert(k.clone()); // TODO: only for opcode arg [INFO] [stdout] 524 + true [INFO] [stdout] 525 + } else { [INFO] [stdout] 526 + false [INFO] [stdout] 527 + } [INFO] [stdout] 528 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/parser.rs:532:12 [INFO] [stdout] | [INFO] [stdout] 532 | if key == "" { return } [INFO] [stdout] | ^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/parser.rs:543:77 [INFO] [stdout] | [INFO] [stdout] 543 | let preferred_scope = if self.global_defined_vars.contains_key(key) { [INFO] [stdout] | _____________________________________________________________________________^ [INFO] [stdout] 544 | | Scope::Global [INFO] [stdout] 545 | | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/parser.rs:545:71 [INFO] [stdout] | [INFO] [stdout] 545 | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 546 | | Scope::Global [INFO] [stdout] 547 | | } else if key.starts_with("g") { [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: this `if` has identical blocks [INFO] [stdout] --> src/parser.rs:545:71 [INFO] [stdout] | [INFO] [stdout] 545 | } else if is_global_syntax || physical_scope == Scope::Global { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 546 | | Scope::Global [INFO] [stdout] 547 | | } else if key.starts_with("g") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/parser.rs:547:40 [INFO] [stdout] | [INFO] [stdout] 547 | } else if key.starts_with("g") { [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 548 | | Scope::Global [INFO] [stdout] 549 | | } else { [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:556:89 [INFO] [stdout] | [INFO] [stdout] 556 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:561:73 [INFO] [stdout] | [INFO] [stdout] 561 | node, local_map, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:568:89 [INFO] [stdout] | [INFO] [stdout] 568 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:574:89 [INFO] [stdout] | [INFO] [stdout] 574 | node, &mut self.global_defined_vars, &mut self.vars_without_definition, &key, &access_type [INFO] [stdout] | ^^^^ help: change this to: `key` [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/parser.rs:606:71 [INFO] [stdout] | [INFO] [stdout] 606 | udv.data_type = get_variable_data_type(node_to_check, &text, &self.user_defined_types); [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: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/parser.rs:615:26 [INFO] [stdout] | [INFO] [stdout] 615 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` 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/parser.rs:628:94 [INFO] [stdout] | [INFO] [stdout] 628 | let child_name = child.child_by_field_name("name").and_then(|n| get_node_name(n, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:629:94 [INFO] [stdout] | [INFO] [stdout] 629 | let child_type = child.child_by_field_name("type").and_then(|n| get_node_name(n, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:636:54 [INFO] [stdout] | [INFO] [stdout] 636 | let cname = get_node_name(child, &text).unwrap_or("".to_string()); [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: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/parser.rs:650:9 [INFO] [stdout] | [INFO] [stdout] 650 | / if !self.user_defined_types.contains_key(&key.clone()) { [INFO] [stdout] 651 | | local_udt.udt_name = key.clone(); [INFO] [stdout] 652 | | local_udt.udt_format = struct_format; [INFO] [stdout] 653 | | self.user_defined_types.insert(key.clone(), local_udt); [INFO] [stdout] ... | [INFO] [stdout] 658 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using the `Entry` API: https://doc.rust-lang.org/std/collections/struct.HashMap.html#entry-api [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/parser.rs:656:17 [INFO] [stdout] | [INFO] [stdout] 656 | (*f).udt_format = struct_format; [INFO] [stdout] | ^^^^ help: try: `f` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` 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/parser.rs:665:53 [INFO] [stdout] | [INFO] [stdout] 665 | let inputs_text = get_node_name(inputs, &text).unwrap(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:670:59 [INFO] [stdout] | [INFO] [stdout] 670 | let outputs_text = get_node_name(outputs, &text).unwrap(); [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 `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/parser.rs:688:33 [INFO] [stdout] | [INFO] [stdout] 688 | ... i.split(':').last().map(|s| s.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 688 - i.split(':').last().map(|s| s.to_string()) [INFO] [stdout] 688 + i.split(':').next_back().map(|s| s.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:740:5 [INFO] [stdout] | [INFO] [stdout] 740 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 740 - return true; [INFO] [stdout] 740 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:768:9 [INFO] [stdout] | [INFO] [stdout] 768 | return Some(OpcodeCheck::Opcode) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 768 - return Some(OpcodeCheck::Opcode) [INFO] [stdout] 768 + Some(OpcodeCheck::Opcode) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:770:9 [INFO] [stdout] | [INFO] [stdout] 770 | return Some(OpcodeCheck::Udo) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 770 - return Some(OpcodeCheck::Udo) [INFO] [stdout] 770 + Some(OpcodeCheck::Udo) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:774:39 [INFO] [stdout] | [INFO] [stdout] 774 | pub fn is_valid_type(type_identifier: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 774 - pub fn is_valid_type(type_identifier: &String) -> bool { [INFO] [stdout] 774 + pub fn is_valid_type(type_identifier: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/parser.rs:776:5 [INFO] [stdout] | [INFO] [stdout] 776 | / match trimmed { [INFO] [stdout] 777 | | "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" => true, [INFO] [stdout] 778 | | "a" | "i" | "k" | "S" | "f" | "w" | "b" => true, [INFO] [stdout] 779 | | _ => false [INFO] [stdout] 780 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 776 - match trimmed { [INFO] [stdout] 777 - "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" => true, [INFO] [stdout] 778 - "a" | "i" | "k" | "S" | "f" | "w" | "b" => true, [INFO] [stdout] 779 - _ => false [INFO] [stdout] 780 - } [INFO] [stdout] 776 + matches!(trimmed, "InstrDef" | "Instr" | "Opcode" | "OpcodeDef" | "Complex" | "a" | "i" | "k" | "S" | "f" | "w" | "b") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:783:51 [INFO] [stdout] | [INFO] [stdout] 783 | fn is_valid_output_udo_types<'a>(type_identifier: &String, node: Node<'a>) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 783 - fn is_valid_output_udo_types<'a>(type_identifier: &String, node: Node<'a>) -> bool { [INFO] [stdout] 783 + fn is_valid_output_udo_types<'a>(type_identifier: &str, node: Node<'a>) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:788:13 [INFO] [stdout] | [INFO] [stdout] 788 | / if trimmed.eq_ignore_ascii_case("void") { [INFO] [stdout] 789 | | return true [INFO] [stdout] 790 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 787 ~ "modern_udo_outputs" [INFO] [stdout] 788 ~ if trimmed.eq_ignore_ascii_case("void") => { [INFO] [stdout] 789 | return true [INFO] [stdout] 790 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:793:13 [INFO] [stdout] | [INFO] [stdout] 793 | / if trimmed.contains('0') { [INFO] [stdout] 794 | | if trimmed.len() == 1 { [INFO] [stdout] 795 | | return true [INFO] [stdout] 796 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 799 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 792 ~ "udo_definition_legacy" [INFO] [stdout] 793 ~ if trimmed.contains('0') => { [INFO] [stdout] 794 | if trimmed.len() == 1 { [INFO] [stdout] ... [INFO] [stdout] 798 | } [INFO] [stdout] 799 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/parser.rs:794:17 [INFO] [stdout] | [INFO] [stdout] 794 | / if trimmed.len() == 1 { [INFO] [stdout] 795 | | return true [INFO] [stdout] 796 | | } else { [INFO] [stdout] 797 | | return false [INFO] [stdout] 798 | | } [INFO] [stdout] | |_________________^ help: you can reduce it to: `return trimmed.len() == 1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:820:46 [INFO] [stdout] | [INFO] [stdout] 820 | fn is_valid_input_udo_types(type_identifier: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 820 - fn is_valid_input_udo_types(type_identifier: &String) -> bool { [INFO] [stdout] 820 + fn is_valid_input_udo_types(type_identifier: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:38 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p1.is_none()` [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 boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:55 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p2.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser.rs:1067:72 [INFO] [stdout] | [INFO] [stdout] 1067 | let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `p3.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:858:62 [INFO] [stdout] | [INFO] [stdout] 858 | if let Some(node_name) = get_node_name(node, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:868:17 [INFO] [stdout] | [INFO] [stdout] 868 | / if let Some(p) = node.parent() { [INFO] [stdout] 869 | | if let Some(node_explicit_type) = node.child_by_field_name("type") { [INFO] [stdout] 870 | | let node_name = node.child_by_field_name("name").unwrap(); [INFO] [stdout] 871 | | if node_explicit_type.kind() == "identifier" { [INFO] [stdout] ... | [INFO] [stdout] 889 | | } [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] 868 ~ if let Some(p) = node.parent() [INFO] [stdout] 869 ~ && let Some(node_explicit_type) = node.child_by_field_name("type") { [INFO] [stdout] 870 | let node_name = node.child_by_field_name("name").unwrap(); [INFO] [stdout] ... [INFO] [stdout] 887 | } [INFO] [stdout] 888 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:875:61 [INFO] [stdout] | [INFO] [stdout] 875 | let name = get_node_name(node_name, &text).unwrap(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:876:68 [INFO] [stdout] | [INFO] [stdout] 876 | let ty = get_node_name(node_explicit_type, &text).unwrap(); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:909:17 [INFO] [stdout] | [INFO] [stdout] 909 | / ... if !should_skip { [INFO] [stdout] 910 | | ... if let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | | ... let name = name.split("[").next().unwrap(); [INFO] [stdout] ... | [INFO] [stdout] 916 | | ... } [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] 909 ~ if !should_skip [INFO] [stdout] 910 ~ && let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] ... [INFO] [stdout] 914 | } [INFO] [stdout] 915 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:910:21 [INFO] [stdout] | [INFO] [stdout] 910 | / ... if let Some(name) = get_node_name(node, text) { [INFO] [stdout] 911 | | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | | ... let name = name.split("[").next().unwrap(); [INFO] [stdout] 913 | | ... nodes_to_diagnostics.user_definitions.add_udv(node, &name.to_string(), text); [INFO] [stdout] 914 | | ... } [INFO] [stdout] 915 | | ... } [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] 910 ~ if let Some(name) = get_node_name(node, text) [INFO] [stdout] 911 ~ && !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] 912 | let name = name.split("[").next().unwrap(); [INFO] [stdout] 913 | nodes_to_diagnostics.user_definitions.add_udv(node, &name.to_string(), text); [INFO] [stdout] 914 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:919:21 [INFO] [stdout] | [INFO] [stdout] 919 | / match p.kind() { [INFO] [stdout] 920 | | "ERROR" => { [INFO] [stdout] 921 | | let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [INFO] [stdout] 922 | | let nkind = node.kind(); [INFO] [stdout] ... | [INFO] [stdout] 931 | | _ => { } [INFO] [stdout] 932 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 919 ~ if p.kind() == "ERROR" { [INFO] [stdout] 920 + let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [INFO] [stdout] 921 + let nkind = node.kind(); [INFO] [stdout] 922 + if scope == Scope::Score && nkind != "type_identifier_legacy" { [INFO] [stdout] 923 + nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 924 + node: node, [INFO] [stdout] 925 + error_type: GErrors::ScoreStatement [INFO] [stdout] 926 + } [INFO] [stdout] 927 + ); [INFO] [stdout] 928 + } [INFO] [stdout] 929 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:921:58 [INFO] [stdout] | [INFO] [stdout] 921 | ... let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:937:17 [INFO] [stdout] | [INFO] [stdout] 937 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 938 | | if let Some(name) = get_node_name(node_name, text) { [INFO] [stdout] 939 | | nodes_to_diagnostics.user_definitions.add_udv(node_name, &name, text); [INFO] [stdout] 940 | | } [INFO] [stdout] 941 | | } [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] 937 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 938 ~ && let Some(name) = get_node_name(node_name, text) { [INFO] [stdout] 939 | nodes_to_diagnostics.user_definitions.add_udv(node_name, &name, text); [INFO] [stdout] 940 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:944:18 [INFO] [stdout] | [INFO] [stdout] 944 | / if let Some(macro_name) = node.child_by_field_name("macro_identifier") { [INFO] [stdout] 945 | | if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 946 | | let mname = macro_name_text.trim().to_string(); [INFO] [stdout] 947 | | nodes_to_diagnostics.user_definitions.user_defined_macros [INFO] [stdout] ... | [INFO] [stdout] 961 | | } [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] 944 ~ if let Some(macro_name) = node.child_by_field_name("macro_identifier") [INFO] [stdout] 945 ~ && let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 946 | let mname = macro_name_text.trim().to_string(); [INFO] [stdout] ... [INFO] [stdout] 959 | }); [INFO] [stdout] 960 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:945:78 [INFO] [stdout] | [INFO] [stdout] 945 | if let Some(macro_name_text) = get_node_name(macro_name, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:965:17 [INFO] [stdout] | [INFO] [stdout] 965 | / if let Some(macro_name) = node.child_by_field_name("macro_name") { [INFO] [stdout] 966 | | if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... | [INFO] [stdout] 988 | | } [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] 965 ~ if let Some(macro_name) = node.child_by_field_name("macro_name") [INFO] [stdout] 966 ~ && let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] ... [INFO] [stdout] 986 | } [INFO] [stdout] 987 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:966:21 [INFO] [stdout] | [INFO] [stdout] 966 | / if let Some(macro_name_text) = get_node_name(macro_name, &text) { [INFO] [stdout] 967 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] 969 | | if let Some(values) = node.child_by_field_name("macro_values") { [INFO] [stdout] ... | [INFO] [stdout] 987 | | } [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] 966 ~ if let Some(macro_name_text) = get_node_name(macro_name, &text) [INFO] [stdout] 967 ~ && let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 968 | let mid = get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... [INFO] [stdout] 985 | } [INFO] [stdout] 986 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:966:78 [INFO] [stdout] | [INFO] [stdout] 966 | if let Some(macro_name_text) = get_node_name(macro_name, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:968:63 [INFO] [stdout] | [INFO] [stdout] 968 | ... let mid = get_node_name(macro_id, &text).unwrap_or_default(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:970:64 [INFO] [stdout] | [INFO] [stdout] 970 | ... let mv = get_node_name(values, &text).unwrap_or_default(); [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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:992:17 [INFO] [stdout] | [INFO] [stdout] 992 | / if let Some(node_type) = node.child_by_field_name("struct_name") { [INFO] [stdout] 993 | | if let Some(node_name) = get_node_name(node_type, &text) { [INFO] [stdout] 994 | | let node_key = node_name.clone(); [INFO] [stdout] 995 | | nodes_to_diagnostics.udt.insert(node_name); [INFO] [stdout] 996 | | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &text); [INFO] [stdout] 997 | | }; [INFO] [stdout] 998 | | } [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] 992 ~ if let Some(node_type) = node.child_by_field_name("struct_name") [INFO] [stdout] 993 ~ && let Some(node_name) = get_node_name(node_type, &text) { [INFO] [stdout] 994 | let node_key = node_name.clone(); [INFO] [stdout] 995 | nodes_to_diagnostics.udt.insert(node_name); [INFO] [stdout] 996 | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &text); [INFO] [stdout] 997 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:993:71 [INFO] [stdout] | [INFO] [stdout] 993 | if let Some(node_name) = get_node_name(node_type, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:996:88 [INFO] [stdout] | [INFO] [stdout] 996 | nodes_to_diagnostics.user_definitions.add_udt(node, &node_key, &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: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1001:17 [INFO] [stdout] | [INFO] [stdout] 1001 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 1002 | | if let Some(op_name) = get_node_name(node_name, &text) { [INFO] [stdout] 1003 | | let node_key = op_name.clone(); [INFO] [stdout] 1004 | | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &text); [INFO] [stdout] 1005 | | } [INFO] [stdout] 1006 | | } [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] 1001 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 1002 ~ && let Some(op_name) = get_node_name(node_name, &text) { [INFO] [stdout] 1003 | let node_key = op_name.clone(); [INFO] [stdout] 1004 | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &text); [INFO] [stdout] 1005 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1002:69 [INFO] [stdout] | [INFO] [stdout] 1002 | if let Some(op_name) = get_node_name(node_name, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1004:88 [INFO] [stdout] | [INFO] [stdout] 1004 | nodes_to_diagnostics.user_definitions.add_udo(node, &node_key, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1009:65 [INFO] [stdout] | [INFO] [stdout] 1009 | if let Some(text_content) = get_node_name(node, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1038:79 [INFO] [stdout] | [INFO] [stdout] 1038 | c.child_by_field_name("id").and_then(|n| get_node_name(n, &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: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:1041:38 [INFO] [stdout] | [INFO] [stdout] 1041 | let is_valid_instr = name [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 1042 | | .as_deref() [INFO] [stdout] 1043 | | .and_then(|n| Some(n.trim() [INFO] [stdout] 1044 | | .strip_prefix("i") [INFO] [stdout] 1045 | | .is_some() && node.child_count() >= 3)); [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1041 ~ let is_valid_instr = name [INFO] [stdout] 1042 + .as_deref().map(|n| n.trim() [INFO] [stdout] 1043 + .strip_prefix("i") [INFO] [stdout] 1044 ~ .is_some() && node.child_count() >= 3); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1049:25 [INFO] [stdout] | [INFO] [stdout] 1049 | / if !condition { [INFO] [stdout] 1050 | | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1051 | | node: node, [INFO] [stdout] 1052 | | error_type: GErrors::MissingPfield [INFO] [stdout] 1053 | | }); [INFO] [stdout] 1054 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1048 ~ Some(condition) [INFO] [stdout] 1049 ~ if !condition => { [INFO] [stdout] 1050 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1053 | }); [INFO] [stdout] 1054 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:1047:17 [INFO] [stdout] | [INFO] [stdout] 1047 | / match is_valid_instr { [INFO] [stdout] 1048 | | Some(condition) => { [INFO] [stdout] 1049 | | if !condition { [INFO] [stdout] 1050 | | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... | [INFO] [stdout] 1056 | | None => { } [INFO] [stdout] 1057 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1047 ~ if let Some(condition) = is_valid_instr { [INFO] [stdout] 1048 + if !condition { [INFO] [stdout] 1049 + nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1050 + node: node, [INFO] [stdout] 1051 + error_type: GErrors::MissingPfield [INFO] [stdout] 1052 + }); [INFO] [stdout] 1053 + } [INFO] [stdout] 1054 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/parser.rs:1079:25 [INFO] [stdout] | [INFO] [stdout] 1067 | / let ans = if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] 1068 | | false [INFO] [stdout] 1069 | | } else { [INFO] [stdout] 1070 | | let p1 = p1.unwrap_or(""); [INFO] [stdout] ... | [INFO] [stdout] 1078 | | }; [INFO] [stdout] | |__________________________- unnecessary `let` binding [INFO] [stdout] 1079 | ans [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 1067 ~ [INFO] [stdout] 1068 ~ if !p1.is_some() || !p2.is_some() || !p3.is_some() { [INFO] [stdout] 1069 + false [INFO] [stdout] 1070 + } else { [INFO] [stdout] 1071 + let p1 = p1.unwrap_or(""); [INFO] [stdout] 1072 + let p2 = p2.unwrap_or(""); [INFO] [stdout] 1073 + let p3 = p3.unwrap_or(""); [INFO] [stdout] 1074 + if !matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 != "duration" { [INFO] [stdout] 1075 + false [INFO] [stdout] 1076 + } else { [INFO] [stdout] 1077 + true [INFO] [stdout] 1078 + } [INFO] [stdout] 1079 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/parser.rs:1064:60 [INFO] [stdout] | [INFO] [stdout] 1064 | let p1 = node.field_name_for_child(0 + mode); [INFO] [stdout] | ^^^^^^^^ help: consider reducing it to: `mode` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/parser.rs:1073:29 [INFO] [stdout] | [INFO] [stdout] 1073 | / if !matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 ... [INFO] [stdout] 1074 | | false [INFO] [stdout] 1075 | | } else { [INFO] [stdout] 1076 | | true [INFO] [stdout] 1077 | | } [INFO] [stdout] | |_____________________________^ help: you can reduce it to: `!(!matches!(p1, "instr" | "statement_instr" | "statement_macro_instr") || p2 != "start_time" || p3 != "duration")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1090:17 [INFO] [stdout] | [INFO] [stdout] 1090 | / if let Some(c) = node.child_by_field_name("included_file") { [INFO] [stdout] 1091 | | if let Some(ifile) = get_node_name(c, &text) { [INFO] [stdout] 1092 | | [INFO] [stdout] 1093 | | let fpath = ifile [INFO] [stdout] ... | [INFO] [stdout] 1112 | | } [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] 1090 ~ if let Some(c) = node.child_by_field_name("included_file") [INFO] [stdout] 1091 ~ && let Some(ifile) = get_node_name(c, &text) { [INFO] [stdout] 1092 | [INFO] [stdout] ... [INFO] [stdout] 1110 | } [INFO] [stdout] 1111 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1091:59 [INFO] [stdout] | [INFO] [stdout] 1091 | if let Some(ifile) = get_node_name(c, &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: the borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1100:51 [INFO] [stdout] | [INFO] [stdout] 1100 | ... let uf = UdoFile::new(&pfile, uri.clone()); [INFO] [stdout] | ^^^^^^ help: change this to: `pfile` [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: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/parser.rs:1105:58 [INFO] [stdout] | [INFO] [stdout] 1105 | ... m.content_hash = uf.content_hash.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `uf.content_hash` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against true are unnecessary [INFO] [stdout] --> src/parser.rs:1145:38 [INFO] [stdout] | [INFO] [stdout] 1145 | ... .any(|c| c == true); [INFO] [stdout] | ^^^^^^^^^ help: try: `c` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1162:29 [INFO] [stdout] | [INFO] [stdout] 1162 | / ... if has_specific_node(node, "instr_udo_bounded_error") { [INFO] [stdout] 1163 | | ... nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1164 | | ... node: node, [INFO] [stdout] 1165 | | ... error_type: GErrors::InstrBlockSyntaxError [INFO] [stdout] 1166 | | ... } [INFO] [stdout] 1167 | | ... ); [INFO] [stdout] 1168 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1161 ~ "instr" [INFO] [stdout] 1162 ~ if has_specific_node(node, "instr_udo_bounded_error") => { [INFO] [stdout] 1163 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1167 | ); [INFO] [stdout] 1168 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1171:29 [INFO] [stdout] | [INFO] [stdout] 1171 | / ... if has_specific_node(node, "instr_udo_bounded_error") { [INFO] [stdout] 1172 | | ... nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] 1173 | | ... node: node, [INFO] [stdout] 1174 | | ... error_type: GErrors::UdoBlockSyntaxError [INFO] [stdout] 1175 | | ... } [INFO] [stdout] 1176 | | ... ); [INFO] [stdout] 1177 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1170 ~ "udo_definition_legacy" | "udo_definition_modern" [INFO] [stdout] 1171 ~ if has_specific_node(node, "instr_udo_bounded_error") => { [INFO] [stdout] 1172 | nodes_to_diagnostics.generic_errors.push(GenericError { [INFO] [stdout] ... [INFO] [stdout] 1176 | ); [INFO] [stdout] 1177 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1186:21 [INFO] [stdout] | [INFO] [stdout] 1186 | / if child.kind() == "flag_content" { [INFO] [stdout] 1187 | | if let (Some(fi), Some(ft)) = { [INFO] [stdout] 1188 | | let mut child_cursor = child.walk(); [INFO] [stdout] ... | [INFO] [stdout] 1201 | | } [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] 1186 ~ if child.kind() == "flag_content" [INFO] [stdout] 1187 ~ && let (Some(fi), Some(ft)) = { [INFO] [stdout] 1188 | let mut child_cursor = child.walk(); [INFO] [stdout] ... [INFO] [stdout] 1199 | nodes_to_diagnostics.flags.insert(flag.trim().to_string(), child); [INFO] [stdout] 1200 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1196:51 [INFO] [stdout] | [INFO] [stdout] 1196 | ... get_node_name(fi, &text).unwrap_or_default(), [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1197:51 [INFO] [stdout] | [INFO] [stdout] 1197 | ... get_node_name(ft, &text).unwrap_or_default() [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1220:62 [INFO] [stdout] | [INFO] [stdout] 1220 | if let Some(node_name) = get_node_name(node, &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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1228:54 [INFO] [stdout] | [INFO] [stdout] 1228 | let scope = find_scope(node, &text, &nodes_to_diagnostics.user_definitions.user_defined_types); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1333:27 [INFO] [stdout] | [INFO] [stdout] 1333 | find_node_at_position(&tree, &Position { line: target_line as u32, character: current_char_utf8 as u32 }) [INFO] [stdout] | ^^^^^ help: change this to: `tree` [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 `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1347:21 [INFO] [stdout] | [INFO] [stdout] 1347 | if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1346 ~ "opcode_statement" [INFO] [stdout] 1347 ~ if is_valid_not_defined_arg(&gparent, text, udt) => { return Scope::Global; }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:1345:13 [INFO] [stdout] | [INFO] [stdout] 1345 | / match gparent.kind() { [INFO] [stdout] 1346 | | "opcode_statement" => { [INFO] [stdout] 1347 | | if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] 1348 | | }, [INFO] [stdout] 1349 | | _ => { } [INFO] [stdout] 1350 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1345 ~ if gparent.kind() == "opcode_statement" { [INFO] [stdout] 1346 + if is_valid_not_defined_arg(&gparent, text, udt) { return Scope::Global; } [INFO] [stdout] 1347 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1353:9 [INFO] [stdout] | [INFO] [stdout] 1353 | / if let Some(node_child) = current_node.child_by_field_name("name") { [INFO] [stdout] 1354 | | if let Some(n) = get_node_name(node_child, &text) { [INFO] [stdout] 1355 | | match ckind { [INFO] [stdout] 1356 | | "instrument_definition" | "instr" => return Scope::Instr(n), [INFO] [stdout] ... | [INFO] [stdout] 1361 | | } [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] 1353 ~ if let Some(node_child) = current_node.child_by_field_name("name") [INFO] [stdout] 1354 ~ && let Some(n) = get_node_name(node_child, &text) { [INFO] [stdout] 1355 | match ckind { [INFO] [stdout] ... [INFO] [stdout] 1359 | } [INFO] [stdout] 1360 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1354:56 [INFO] [stdout] | [INFO] [stdout] 1354 | if let Some(n) = get_node_name(node_child, &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: omit braces around single expression condition [INFO] [stdout] --> src/parser.rs:1394:16 [INFO] [stdout] | [INFO] [stdout] 1394 | if { [INFO] [stdout] | ________________^ [INFO] [stdout] 1395 | | p_kind == "score_nestable_loop" || p_kind == "score_statement" || [INFO] [stdout] 1396 | | p_kind == "score_statement_instr" || p_kind == "score_statement_func" || [INFO] [stdout] 1397 | | p_kind == "score_statement_wm" [INFO] [stdout] 1398 | | } { return AccessVariableType::Write; } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1394 ~ if p_kind == "score_nestable_loop" || p_kind == "score_statement" || [INFO] [stdout] 1395 + p_kind == "score_statement_instr" || p_kind == "score_statement_func" || [INFO] [stdout] 1396 ~ p_kind == "score_statement_wm" { return AccessVariableType::Write; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: omit braces around single expression condition [INFO] [stdout] --> src/parser.rs:1401:12 [INFO] [stdout] | [INFO] [stdout] 1401 | if { [INFO] [stdout] | ____________^ [INFO] [stdout] 1402 | | p_kind == "xin_statement" || p_kind == "modern_udo_inputs" || [INFO] [stdout] 1403 | | p_kind == "for_loop" || p_kind == "macro_define" [INFO] [stdout] 1404 | | } { return AccessVariableType::Write; } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#blocks_in_conditions [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1401 ~ if p_kind == "xin_statement" || p_kind == "modern_udo_inputs" || [INFO] [stdout] 1402 ~ p_kind == "for_loop" || p_kind == "macro_define" { return AccessVariableType::Write; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/parser.rs:1407:13 [INFO] [stdout] | [INFO] [stdout] 1407 | / match parent.parent() { [INFO] [stdout] 1408 | | Some(gparent) => { [INFO] [stdout] 1409 | | match gparent.kind() { [INFO] [stdout] 1410 | | "opcode_statement" => { [INFO] [stdout] ... | [INFO] [stdout] 1418 | | None => { } [INFO] [stdout] 1419 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1407 ~ if let Some(gparent) = parent.parent() { [INFO] [stdout] 1408 + match gparent.kind() { [INFO] [stdout] 1409 + "opcode_statement" => { [INFO] [stdout] 1410 + if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1411 + return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1412 + } [INFO] [stdout] 1413 + }, [INFO] [stdout] 1414 + _ => { } [INFO] [stdout] 1415 + } [INFO] [stdout] 1416 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/parser.rs:1411:29 [INFO] [stdout] | [INFO] [stdout] 1411 | / ... if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1412 | | ... return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1413 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1410 ~ "opcode_statement" [INFO] [stdout] 1411 ~ if is_valid_not_defined_arg(&gparent, text, udt) => { [INFO] [stdout] 1412 | return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1413 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/parser.rs:1409:21 [INFO] [stdout] | [INFO] [stdout] 1409 | / match gparent.kind() { [INFO] [stdout] 1410 | | "opcode_statement" => { [INFO] [stdout] 1411 | | if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1412 | | return AccessVariableType::WithoutDefinition; [INFO] [stdout] ... | [INFO] [stdout] 1415 | | _ => { } [INFO] [stdout] 1416 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1409 ~ if gparent.kind() == "opcode_statement" { [INFO] [stdout] 1410 + if is_valid_not_defined_arg(&gparent, text, udt) { [INFO] [stdout] 1411 + return AccessVariableType::WithoutDefinition; [INFO] [stdout] 1412 + } [INFO] [stdout] 1413 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1427:21 [INFO] [stdout] | [INFO] [stdout] 1427 | / if let Some(op) = parent.child_by_field_name("operator") { [INFO] [stdout] 1428 | | if let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | | return AccessVariableType::Update; [INFO] [stdout] ... | [INFO] [stdout] 1433 | | } [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] 1427 ~ if let Some(op) = parent.child_by_field_name("operator") [INFO] [stdout] 1428 ~ && let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | return AccessVariableType::Update; [INFO] [stdout] 1431 | } [INFO] [stdout] 1432 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1428:25 [INFO] [stdout] | [INFO] [stdout] 1428 | / if let Some(op_text) = get_node_name(op, text) { [INFO] [stdout] 1429 | | if ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | | return AccessVariableType::Update; [INFO] [stdout] 1431 | | } [INFO] [stdout] 1432 | | } [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] 1428 ~ if let Some(op_text) = get_node_name(op, text) [INFO] [stdout] 1429 ~ && ["+=", "-=", "*=", "/=", "%="].contains(&op_text.as_str()) { [INFO] [stdout] 1430 | return AccessVariableType::Update; [INFO] [stdout] 1431 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1442:9 [INFO] [stdout] | [INFO] [stdout] 1442 | / if current_node.kind() == "identifier" { [INFO] [stdout] 1443 | | if let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | | return AccessVariableType::Read; [INFO] [stdout] ... | [INFO] [stdout] 1448 | | } [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] 1442 ~ if current_node.kind() == "identifier" [INFO] [stdout] 1443 ~ && let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | return AccessVariableType::Read; [INFO] [stdout] 1446 | } [INFO] [stdout] 1447 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1443:13 [INFO] [stdout] | [INFO] [stdout] 1443 | / if let Some(out_node) = parent.child_by_field_name("outputs") { [INFO] [stdout] 1444 | | if out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | | return AccessVariableType::Read; [INFO] [stdout] 1446 | | } [INFO] [stdout] 1447 | | } [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] 1443 ~ if let Some(out_node) = parent.child_by_field_name("outputs") [INFO] [stdout] 1444 ~ && out_node.kind() == "identifier" && out_node.id() == current_node.id() { [INFO] [stdout] 1445 | return AccessVariableType::Read; [INFO] [stdout] 1446 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1450:9 [INFO] [stdout] | [INFO] [stdout] 1450 | / if p_kind == "opcode_statement" { [INFO] [stdout] 1451 | | if let Some(op_node) = parent.child_by_field_name("op").or_else(|| parent.child_by_field_name("op_macro")) { [INFO] [stdout] 1452 | | if current_node.end_byte() <= op_node.start_byte() { [INFO] [stdout] 1453 | | return AccessVariableType::Write; [INFO] [stdout] ... | [INFO] [stdout] 1459 | | } [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] 1450 ~ if p_kind == "opcode_statement" [INFO] [stdout] 1451 ~ && let Some(op_node) = parent.child_by_field_name("op").or_else(|| parent.child_by_field_name("op_macro")) { [INFO] [stdout] 1452 | if current_node.end_byte() <= op_node.start_byte() { [INFO] [stdout] ... [INFO] [stdout] 1457 | } [INFO] [stdout] 1458 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1461:9 [INFO] [stdout] | [INFO] [stdout] 1461 | / if p_kind == "label_statement" { [INFO] [stdout] 1462 | | if let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1463 | | return AccessVariableType::Write [INFO] [stdout] 1464 | | } [INFO] [stdout] 1465 | | } [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] 1461 ~ if p_kind == "label_statement" [INFO] [stdout] 1462 ~ && let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1463 | return AccessVariableType::Write [INFO] [stdout] 1464 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1467:9 [INFO] [stdout] | [INFO] [stdout] 1467 | / if p_kind == "goto_statement" || p_kind == "rigoto_statement" { [INFO] [stdout] 1468 | | if let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1469 | | return AccessVariableType::Read [INFO] [stdout] 1470 | | } [INFO] [stdout] 1471 | | } [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] 1467 ~ if (p_kind == "goto_statement" || p_kind == "rigoto_statement") { [INFO] [stdout] 1468 ~ && let Some(op_node) = parent.child_by_field_name("label_name") { [INFO] [stdout] 1469 | return AccessVariableType::Read [INFO] [stdout] 1470 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1511:39 [INFO] [stdout] | [INFO] [stdout] 1511 | let mut qmatches = cursor.matches(&query, tree.root_node(), 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/parser.rs:1517:61 [INFO] [stdout] | [INFO] [stdout] 1517 | if let Some(token_type) = capture_to_token_type(&capture_name) { [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `capture_name` [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 function has too many arguments (11/7) [INFO] [stdout] --> src/parser.rs:1589:1 [INFO] [stdout] | [INFO] [stdout] 1589 | / pub fn get_injections( [INFO] [stdout] 1590 | | query_injection: &Query, [INFO] [stdout] 1591 | | tree: &Tree, [INFO] [stdout] 1592 | | text: &String, [INFO] [stdout] ... | [INFO] [stdout] 1600 | | json_query: &Query [INFO] [stdout] 1601 | | ) -> Vec<(u32, u32, u32, u32, u32)> [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` 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/parser.rs:1604:39 [INFO] [stdout] | [INFO] [stdout] 1604 | let mut qmatches = cursor.matches(&query_injection, tree.root_node(), text.as_bytes()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `query_injection` [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 `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1614:13 [INFO] [stdout] | [INFO] [stdout] 1614 | / if &(*p.key) == "injection.language" { [INFO] [stdout] 1615 | | if let Some(val) = &p.value { [INFO] [stdout] 1616 | | lang = val; [INFO] [stdout] 1617 | | } [INFO] [stdout] 1618 | | } [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] 1614 ~ if &(*p.key) == "injection.language" [INFO] [stdout] 1615 ~ && let Some(val) = &p.value { [INFO] [stdout] 1616 | lang = val; [INFO] [stdout] 1617 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1632:60 [INFO] [stdout] | [INFO] [stdout] 1632 | if let Some(py_tree) = py_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1633:61 [INFO] [stdout] | [INFO] [stdout] 1633 | let py_tokens = get_semantic_tokens(&py_query, &py_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `py_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/parser.rs:1633:82 [INFO] [stdout] | [INFO] [stdout] 1633 | let py_tokens = get_semantic_tokens(&py_query, &py_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1638:64 [INFO] [stdout] | [INFO] [stdout] 1638 | if let Some(html_tree) = html_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1639:63 [INFO] [stdout] | [INFO] [stdout] 1639 | let html_tokens = get_semantic_tokens(&html_query, &html_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `html_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/parser.rs:1639:88 [INFO] [stdout] | [INFO] [stdout] 1639 | let html_tokens = get_semantic_tokens(&html_query, &html_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1644:64 [INFO] [stdout] | [INFO] [stdout] 1644 | if let Some(json_tree) = json_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1645:63 [INFO] [stdout] | [INFO] [stdout] 1645 | let json_tokens = get_semantic_tokens(&json_query, &json_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `json_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/parser.rs:1645:88 [INFO] [stdout] | [INFO] [stdout] 1645 | let json_tokens = get_semantic_tokens(&json_query, &json_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/parser.rs:1650:64 [INFO] [stdout] | [INFO] [stdout] 1650 | if let Some(csound_tree) = cs_parser.parse(&block, None) { [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser.rs:1651:65 [INFO] [stdout] | [INFO] [stdout] 1651 | let csound_tokens = get_semantic_tokens(&cs_query, &csound_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `cs_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/parser.rs:1651:90 [INFO] [stdout] | [INFO] [stdout] 1651 | let csound_tokens = get_semantic_tokens(&cs_query, &csound_tree, &block, Some(start_position)); [INFO] [stdout] | ^^^^^^ help: change this to: `block` [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: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1746:21 [INFO] [stdout] | [INFO] [stdout] 1746 | if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1746 - if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] 1746 + if indent < 0 { 0 } else { return indent as usize } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1746:39 [INFO] [stdout] | [INFO] [stdout] 1746 | if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1746 - if indent < 0 { return 0 } else { return indent as usize }; [INFO] [stdout] 1746 + if indent < 0 { return 0 } else { indent as usize } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser.rs:1672:39 [INFO] [stdout] | [INFO] [stdout] 1672 | pub fn make_indent(tree: &Tree, text: &String, line: usize) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 1672 - pub fn make_indent(tree: &Tree, text: &String, line: usize) -> usize { [INFO] [stdout] 1672 + pub fn make_indent(tree: &Tree, text: &str, line: usize) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1722:13 [INFO] [stdout] | [INFO] [stdout] 1722 | / if OPEN_BLOCKS.iter().any(|k| *k == n.kind()) { [INFO] [stdout] 1723 | | if start_row < line { indent += 1; } [INFO] [stdout] 1724 | | } [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] 1722 ~ if OPEN_BLOCKS.iter().any(|k| *k == n.kind()) [INFO] [stdout] 1723 ~ && start_row < line { indent += 1; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1726:13 [INFO] [stdout] | [INFO] [stdout] 1726 | / if nkind == "ERROR" { [INFO] [stdout] 1727 | | if let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] 1728 | | indent += 1; [INFO] [stdout] 1729 | | } [INFO] [stdout] 1730 | | } [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] 1726 ~ if nkind == "ERROR" [INFO] [stdout] 1727 ~ && let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] 1728 | indent += 1; [INFO] [stdout] 1729 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/parser.rs:1727:24 [INFO] [stdout] | [INFO] [stdout] 1727 | if let Some(_) = find_first_node_down_in_list(&n, &OPENER) { [INFO] [stdout] | -------^^^^^^^-------------------------------------------- help: try: `if find_first_node_down_in_list(&n, &OPENER).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1732:13 [INFO] [stdout] | [INFO] [stdout] 1732 | / if CLOSE_BLOCKS.iter().any(|k| *k == n.kind()) { [INFO] [stdout] 1733 | | if indent > 0 { indent -= 1; } [INFO] [stdout] 1734 | | } [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] 1732 ~ if CLOSE_BLOCKS.iter().any(|k| *k == n.kind()) [INFO] [stdout] 1733 ~ && indent > 0 { indent -= 1; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/parser.rs:1764:5 [INFO] [stdout] | [INFO] [stdout] 1764 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 1764 - return false; [INFO] [stdout] 1764 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/parser.rs:1754:20 [INFO] [stdout] | [INFO] [stdout] 1754 | if let None = opdata.get(udo) { [INFO] [stdout] | -------^^^^------------------ help: try: `if opdata.get(udo).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/parser.rs:1758:34 [INFO] [stdout] | [INFO] [stdout] 1758 | description: format!("user-defined opcode" ) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"user-defined opcode".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/parser.rs:1774:13 [INFO] [stdout] | [INFO] [stdout] 1774 | / if n.kind() == expected_kind { [INFO] [stdout] 1775 | | if !n.is_missing() { return true; } [INFO] [stdout] 1776 | | } [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] 1774 ~ if n.kind() == expected_kind [INFO] [stdout] 1775 ~ && !n.is_missing() { return true; } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/parser.rs:1833:5 [INFO] [stdout] | [INFO] [stdout] 1833 | / node [INFO] [stdout] 1834 | | .child_by_field_name("outputs") [INFO] [stdout] 1835 | | .and_then(|out_arg| get_variable_data_type(out_arg, text, udt)) [INFO] [stdout] 1836 | | .and_then(|vdata| Some( [INFO] [stdout] 1837 | | (vdata.data_type == VarDataType::Opcode || vdata.data_type == VarDataType::Instr) && vdata.is_array [INFO] [stdout] 1838 | | )).unwrap_or(false) [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1833 ~ node [INFO] [stdout] 1834 + .child_by_field_name("outputs") [INFO] [stdout] 1835 ~ .and_then(|out_arg| get_variable_data_type(out_arg, text, udt)).map(|vdata| (vdata.data_type == VarDataType::Opcode || vdata.data_type == VarDataType::Instr) && vdata.is_array).unwrap_or(false) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/utils.rs:135:26 [INFO] [stdout] | [INFO] [stdout] 135 | std::fs::remove_file(&zip_archive_path)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `zip_archive_path` [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] --> src/utils.rs:148:35 [INFO] [stdout] | [INFO] [stdout] 148 | let dest_path = dest.join(&entry.file_name()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `entry.file_name()` [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: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/utils.rs:187:34 [INFO] [stdout] | [INFO] [stdout] 187 | let mut current_char_utf16 = 0 as usize; [INFO] [stdout] | ^^^^^^^^^^ help: try: `0_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `usize` is unnecessary [INFO] [stdout] --> src/utils.rs:188:33 [INFO] [stdout] | [INFO] [stdout] 188 | let mut current_char_utf8 = 0 as usize; [INFO] [stdout] | ^^^^^^^^^^ help: try: `0_usize` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils.rs:200:53 [INFO] [stdout] | [INFO] [stdout] 200 | pub fn position_to_start_byte(pos: &Position, text: &String) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 200 - pub fn position_to_start_byte(pos: &Position, text: &String) -> usize { [INFO] [stdout] 200 + pub fn position_to_start_byte(pos: &Position, text: &str) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/utils.rs:205:17 [INFO] [stdout] | [INFO] [stdout] 205 | if i == target_line as usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `target_line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:230:31 [INFO] [stdout] | [INFO] [stdout] 230 | "rigoto_statement" => return "Undefined label".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 230 - "rigoto_statement" => return "Undefined label".to_string(), [INFO] [stdout] 230 + "rigoto_statement" => "Undefined label".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:231:31 [INFO] [stdout] | [INFO] [stdout] 231 | "macro_usage" => return "Undefined macro".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 231 - "macro_usage" => return "Undefined macro".to_string(), [INFO] [stdout] 231 + "macro_usage" => "Undefined macro".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:232:31 [INFO] [stdout] | [INFO] [stdout] 232 | _ => return "Undefined variable".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 232 - _ => return "Undefined variable".to_string(), [INFO] [stdout] 232 + _ => "Undefined variable".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:238:30 [INFO] [stdout] | [INFO] [stdout] 238 | "label_statement" => return "Unused label".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 238 - "label_statement" => return "Unused label".to_string(), [INFO] [stdout] 238 + "label_statement" => "Unused label".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:239:30 [INFO] [stdout] | [INFO] [stdout] 239 | "macro_usage" => return "Unused macro".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 239 - "macro_usage" => return "Unused macro".to_string(), [INFO] [stdout] 239 + "macro_usage" => "Unused macro".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/utils.rs:240:30 [INFO] [stdout] | [INFO] [stdout] 240 | _ => return "Unused variable".to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 240 - _ => return "Unused variable".to_string(), [INFO] [stdout] 240 + _ => "Unused variable".to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/assets.rs:26:36 [INFO] [stdout] | [INFO] [stdout] 26 | for entry in std::fs::read_dir(&opcodes_folder)? { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `opcodes_folder` [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: matching on `Some` with `ok()` is redundant [INFO] [stdout] --> src/assets.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 41 | if let Some(content) = std::fs::read_to_string(&epath).ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_result_ok [INFO] [stdout] = note: `#[warn(clippy::match_result_ok)]` on by default [INFO] [stdout] help: consider matching on `Ok(content)` and removing the call to `ok` instead [INFO] [stdout] | [INFO] [stdout] 41 - if let Some(content) = std::fs::read_to_string(&epath).ok() { [INFO] [stdout] 41 + if let Ok(content) = std::fs::read_to_string(&epath) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/assets.rs:42:53 [INFO] [stdout] | [INFO] [stdout] 42 | let content = expand_includes(&content, &examples_folder); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: change this to: `examples_folder` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/assets.rs:110:40 [INFO] [stdout] | [INFO] [stdout] 110 | let op_path = manual_dir_path.join(&OPCODES_MD_DIR); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `OPCODES_MD_DIR` [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] --> src/assets.rs:111:40 [INFO] [stdout] | [INFO] [stdout] 111 | let ex_path = manual_dir_path.join(&EXAMPLES_DIR); [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `EXAMPLES_DIR` [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: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/assets.rs:160:71 [INFO] [stdout] | [INFO] [stdout] 160 | pub async fn read_csound_json_data(cj: &mut CsoundJsonData, base_dir: &PathBuf) -> Result<(), Box Result<(), Box> { [INFO] [stdout] 160 + pub async fn read_csound_json_data(cj: &mut CsoundJsonData, base_dir: &Path) -> Result<(), Box> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:47:37 [INFO] [stdout] | [INFO] [stdout] 47 | String::from_utf8_lossy(&c).to_string() [INFO] [stdout] | ^^ help: change this to: `c` [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 `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | / if let Some(node_name) = node.child_by_field_name("name") { [INFO] [stdout] 79 | | if let Some(op_name) = parser::get_node_name(node_name, text) { [INFO] [stdout] 80 | | let node_key = op_name.clone(); [INFO] [stdout] 81 | | user_definitions.add_udo(node, &node_key, text); [INFO] [stdout] ... | [INFO] [stdout] 84 | | } [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] 78 ~ if let Some(node_name) = node.child_by_field_name("name") [INFO] [stdout] 79 ~ && let Some(op_name) = parser::get_node_name(node_name, text) { [INFO] [stdout] 80 | let node_key = op_name.clone(); [INFO] [stdout] 81 | user_definitions.add_udo(node, &node_key, text); [INFO] [stdout] 82 | udo_list.insert(node_key); [INFO] [stdout] 83 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:87:25 [INFO] [stdout] | [INFO] [stdout] 87 | / if let Some(node_type) = node.child_by_field_name("struct_name") { [INFO] [stdout] 88 | | if let Some(node_name) = parser::get_node_name(node_type, text) { [INFO] [stdout] 89 | | let node_key = node_name.clone(); [INFO] [stdout] 90 | | user_definitions.add_udt(node, &node_key, text); [INFO] [stdout] 91 | | type_list.insert(node_key); [INFO] [stdout] 92 | | }; [INFO] [stdout] 93 | | } [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] 87 ~ if let Some(node_type) = node.child_by_field_name("struct_name") [INFO] [stdout] 88 ~ && let Some(node_name) = parser::get_node_name(node_type, text) { [INFO] [stdout] 89 | let node_key = node_name.clone(); [INFO] [stdout] 90 | user_definitions.add_udt(node, &node_key, text); [INFO] [stdout] 91 | type_list.insert(node_key); [INFO] [stdout] 92 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:96:25 [INFO] [stdout] | [INFO] [stdout] 96 | / if let Some(macro_name) = node.child_by_field_name("macro_name") { [INFO] [stdout] 97 | | if let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | | let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... | [INFO] [stdout] 121 | | } [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] 96 ~ if let Some(macro_name) = node.child_by_field_name("macro_name") [INFO] [stdout] 97 ~ && let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] ... [INFO] [stdout] 119 | } [INFO] [stdout] 120 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_udos.rs:97:29 [INFO] [stdout] | [INFO] [stdout] 97 | / ... if let Some(macro_name_text) = parser::get_node_name(macro_name, text) { [INFO] [stdout] 98 | | ... if let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | | ... let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] 100 | | ... if let Some(values) = node.child_by_field_name("macro_values") { [INFO] [stdout] ... | [INFO] [stdout] 120 | | ... } [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] 97 ~ if let Some(macro_name_text) = parser::get_node_name(macro_name, text) [INFO] [stdout] 98 ~ && let Some(macro_id) = macro_name.child_by_field_name("id") { [INFO] [stdout] 99 | let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [INFO] [stdout] ... [INFO] [stdout] 118 | } [INFO] [stdout] 119 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:99:79 [INFO] [stdout] | [INFO] [stdout] 99 | ... let mid = parser::get_node_name(macro_id, &text).unwrap_or_default(); [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_udos.rs:101:80 [INFO] [stdout] | [INFO] [stdout] 101 | ... let mv = parser::get_node_name(values, &text).unwrap_or_default(); [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: unneeded `return` statement [INFO] [stdout] --> src/resolve_udos.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 166 - return false; [INFO] [stdout] 166 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/resolve_udos.rs:154:28 [INFO] [stdout] | [INFO] [stdout] 154 | if let None = opdata.get(udo) { [INFO] [stdout] | -------^^^^------------------ help: try: `if opdata.get(udo).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/resolve_pulgins.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | return Ok(plugins) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 185 - return Ok(plugins) [INFO] [stdout] 185 + Ok(plugins) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_pulgins.rs:229:17 [INFO] [stdout] | [INFO] [stdout] 229 | / if epath.is_dir() { [INFO] [stdout] 230 | | if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | | if fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] ... | [INFO] [stdout] 236 | | } [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] 229 ~ if epath.is_dir() [INFO] [stdout] 230 ~ && let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | if fname.starts_with("csound-plugins-") { [INFO] [stdout] ... [INFO] [stdout] 234 | } [INFO] [stdout] 235 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/resolve_pulgins.rs:230:21 [INFO] [stdout] | [INFO] [stdout] 230 | / if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) { [INFO] [stdout] 231 | | if fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] 233 | | tokio::fs::remove_dir_all(&epath).await?; [INFO] [stdout] 234 | | } [INFO] [stdout] 235 | | } [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] 230 ~ if let Some(fname) = epath.file_name().and_then(|n| n.to_str()) [INFO] [stdout] 231 ~ && fname.starts_with("csound-plugins-") { [INFO] [stdout] 232 | utils::copy_dir_recursively(&epath, &plugins_dir_path).await?; [INFO] [stdout] 233 | tokio::fs::remove_dir_all(&epath).await?; [INFO] [stdout] 234 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/resolve_pulgins.rs:250:70 [INFO] [stdout] | [INFO] [stdout] 250 | let plug_opcodes = load_plugins_opcodes(&src_path, &op_path, &installed_plugins)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `installed_plugins` [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 borrowed expression implements the required traits [INFO] [stdout] --> src/resolve_pulgins.rs:266:36 [INFO] [stdout] | [INFO] [stdout] 266 | for entry in std::fs::read_dir(&src_path)? { [INFO] [stdout] | ^^^^^^^^^ help: change this to: `src_path` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/resolve_pulgins.rs:317:25 [INFO] [stdout] | [INFO] [stdout] 316 | let content = re_bs.replace_all(&content, "\n\n").to_string(); [INFO] [stdout] | -------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 317 | content [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 316 ~ [INFO] [stdout] 317 ~ re_bs.replace_all(&content, "\n\n").to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/resolve_pulgins.rs:335:16 [INFO] [stdout] | [INFO] [stdout] 335 | if let None = opdata.get(opcode) { [INFO] [stdout] | -------^^^^--------------------- help: try: `if opdata.get(opcode).is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:14:45 [INFO] [stdout] | [INFO] [stdout] 14 | let (service, socket) = LspService::new(|client| Backend::new(client)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Backend::new` [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: useless use of `vec!` [INFO] [stdout] --> src/parser.rs:911:29 [INFO] [stdout] | [INFO] [stdout] 911 | ... if !vec!["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"].contains(&name.as_str()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["CsScore", "CsoundSynthesizer", "CsoundSynthesiser", "CsOptions", "CsInstruments"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 09s [INFO] running `Command { std: "docker" "inspect" "f3c2537b04fe191894591972a40cc2c7c5c0573dde57caeb41f8351251b29b9c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f3c2537b04fe191894591972a40cc2c7c5c0573dde57caeb41f8351251b29b9c", kill_on_drop: false }` [INFO] [stdout] f3c2537b04fe191894591972a40cc2c7c5c0573dde57caeb41f8351251b29b9c