[INFO] fetching crate swayscan 0.2.9... [INFO] testing swayscan-0.2.9 against try#b83b707f97d809763b7861afa7638871f3339a33 for pr-145838-1 [INFO] extracting crate swayscan 0.2.9 into /workspace/builds/worker-0-tc2/source [INFO] started tweaking crates.io crate swayscan 0.2.9 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate swayscan 0.2.9 [INFO] tweaked toml for crates.io crate swayscan 0.2.9 written to /workspace/builds/worker-0-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate swayscan 0.2.9 on toolchain b83b707f97d809763b7861afa7638871f3339a33 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate swayscan 0.2.9 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" "+b83b707f97d809763b7861afa7638871f3339a33" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: file `/workspace/builds/worker-0-tc2/source/src/main.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `forc-swayscan` [INFO] [stderr] * `bin` target `swayscan` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] ccd29a5a433a98a8b52ed2109f6031af8296dfe6c4599448348f73412338ddf7 [INFO] running `Command { std: "docker" "start" "-a" "ccd29a5a433a98a8b52ed2109f6031af8296dfe6c4599448348f73412338ddf7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "ccd29a5a433a98a8b52ed2109f6031af8296dfe6c4599448348f73412338ddf7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ccd29a5a433a98a8b52ed2109f6031af8296dfe6c4599448348f73412338ddf7", kill_on_drop: false }` [INFO] [stdout] ccd29a5a433a98a8b52ed2109f6031af8296dfe6c4599448348f73412338ddf7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f694a17eb4b10d35129b543fdf643f66a78f7e3b5a5100fc43ebaef9489ce9e7 [INFO] running `Command { std: "docker" "start" "-a" "f694a17eb4b10d35129b543fdf643f66a78f7e3b5a5100fc43ebaef9489ce9e7", kill_on_drop: false }` [INFO] [stderr] warning: file `/opt/rustwide/workdir/src/main.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `forc-swayscan` [INFO] [stderr] * `bin` target `swayscan` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling cfg-if v1.0.1 [INFO] [stderr] Compiling subtle v2.6.1 [INFO] [stderr] Compiling const-oid v0.9.6 [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling base16ct v0.2.0 [INFO] [stderr] Compiling hex v0.4.3 [INFO] [stderr] Compiling cc v1.2.30 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling radium v0.7.0 [INFO] [stderr] Compiling rustversion v1.0.21 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Compiling bech32 v0.9.1 [INFO] [stderr] Compiling tap v1.0.1 [INFO] [stderr] Compiling thiserror v2.0.12 [INFO] [stderr] Compiling wyz v0.5.1 [INFO] [stderr] Compiling heapless v0.7.17 [INFO] [stderr] Compiling heck v0.4.1 [INFO] [stderr] Compiling byteorder v1.5.0 [INFO] [stderr] Compiling funty v2.0.0 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling hash32 v0.2.1 [INFO] [stderr] Compiling hashbrown v0.15.4 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Compiling stable_deref_trait v1.2.0 [INFO] [stderr] Compiling unicode-xid v0.2.6 [INFO] [stderr] Compiling hashbrown v0.13.2 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling same-file v1.0.6 [INFO] [stderr] Compiling getrandom v0.2.16 [INFO] [stderr] Compiling bitvec v1.0.1 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling ff v0.13.1 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling group v0.13.0 [INFO] [stderr] Compiling indexmap v2.10.0 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling allocator-api2 v0.2.21 [INFO] [stderr] Compiling fuel-storage v0.60.2 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling secp256k1-sys v0.10.1 [INFO] [stderr] Compiling winnow v0.7.12 [INFO] [stderr] Compiling base64ct v1.6.0 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Compiling walkdir v2.5.0 [INFO] [stderr] Compiling utf8parse v0.2.2 [INFO] [stderr] Compiling siphasher v1.0.1 [INFO] [stderr] Compiling strsim v0.11.1 [INFO] [stderr] Compiling anstyle-parse v0.2.7 [INFO] [stderr] Compiling parking_lot v0.12.4 [INFO] [stderr] Compiling anstyle-query v1.1.3 [INFO] [stderr] Compiling colorchoice v1.0.4 [INFO] [stderr] Compiling is_terminal_polyfill v1.70.1 [INFO] [stderr] Compiling anstyle v1.0.11 [INFO] [stderr] Compiling anstream v0.6.19 [INFO] [stderr] Compiling phf_shared v0.11.3 [INFO] [stderr] Compiling in_definite v1.0.0 [INFO] [stderr] Compiling clap_lex v0.7.5 [INFO] [stderr] Compiling heck v0.5.0 [INFO] [stderr] Compiling clap_builder v4.5.41 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling unicode-segmentation v1.12.0 [INFO] [stderr] Compiling unicode-width v0.1.14 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling phf_generator v0.11.3 [INFO] [stderr] Compiling textwrap v0.11.0 [INFO] [stderr] Compiling heck v0.3.3 [INFO] [stderr] Compiling aho-corasick v1.1.3 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling anyhow v1.0.98 [INFO] [stderr] Compiling regex-syntax v0.8.5 [INFO] [stderr] Compiling serde_json v1.0.141 [INFO] [stderr] Compiling clap v2.34.0 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling unicode-bidi v0.3.18 [INFO] [stderr] Compiling secp256k1 v0.30.0 [INFO] [stderr] Compiling strum_macros v0.24.3 [INFO] [stderr] Compiling structopt-derive v0.4.18 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling zeroize v1.8.1 [INFO] [stderr] Compiling der v0.7.10 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling crypto-common v0.1.6 [INFO] [stderr] Compiling block-buffer v0.10.4 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling crypto-bigint v0.5.5 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling signature v2.2.0 [INFO] [stderr] Compiling hmac v0.12.1 [INFO] [stderr] Compiling bs58 v0.5.1 [INFO] [stderr] Compiling spki v0.7.3 [INFO] [stderr] Compiling pkcs8 v0.10.2 [INFO] [stderr] Compiling sec1 v0.7.3 [INFO] [stderr] Compiling rfc6979 v0.4.0 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling sha3 v0.10.8 [INFO] [stderr] Compiling ripemd v0.1.3 [INFO] [stderr] Compiling thiserror-impl v2.0.12 [INFO] [stderr] Compiling fuel-derive v0.60.2 [INFO] [stderr] Compiling pbkdf2 v0.12.2 [INFO] [stderr] Compiling ed25519 v2.2.3 [INFO] [stderr] Compiling enum-ordinalize-derive v4.3.1 [INFO] [stderr] Compiling elliptic-curve v0.13.8 [INFO] [stderr] Compiling enum-ordinalize v4.3.0 [INFO] [stderr] Compiling strum v0.24.1 [INFO] [stderr] Compiling derive_more v0.99.20 [INFO] [stderr] Compiling derive_more-impl v1.0.0 [INFO] [stderr] Compiling ed25519-dalek v2.2.0 [INFO] [stderr] Compiling ecdsa v0.16.9 [INFO] [stderr] Compiling primeorder v0.13.6 [INFO] [stderr] Compiling cobs v0.3.0 [INFO] [stderr] Compiling educe v0.6.0 [INFO] [stderr] Compiling clap_derive v4.5.41 [INFO] [stderr] Compiling extension-trait v1.0.2 [INFO] [stderr] Compiling k256 v0.13.4 [INFO] [stderr] Compiling p256 v0.13.2 [INFO] [stderr] Compiling phf_macros v0.11.3 [INFO] [stderr] Compiling fuel-merkle v0.60.2 [INFO] [stderr] Compiling regex-automata v0.4.9 [INFO] [stderr] Compiling derive_more v1.0.0 [INFO] [stderr] Compiling structopt v0.3.26 [INFO] [stderr] Compiling colored v2.2.0 [INFO] [stderr] Compiling phf v0.11.3 [INFO] [stderr] Compiling clap v4.5.41 [INFO] [stderr] Compiling coins-core v0.8.7 [INFO] [stderr] Compiling fuel-types v0.60.2 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling num-bigint v0.4.6 [INFO] [stderr] Compiling sway-utils v0.68.9 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling regex v1.11.1 [INFO] [stderr] Compiling coins-bip32 v0.8.7 [INFO] [stderr] Compiling chrono v0.4.41 [INFO] [stderr] Compiling postcard v1.1.2 [INFO] [stderr] Compiling coins-bip39 v0.8.7 [INFO] [stderr] Compiling fuel-asm v0.60.2 [INFO] [stderr] Compiling uuid v1.17.0 [INFO] [stderr] Compiling fuel-crypto v0.60.2 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling fuel-tx v0.60.2 [INFO] [stderr] Compiling sway-types v0.68.9 [INFO] [stderr] Compiling sway-error v0.68.9 [INFO] [stderr] Compiling sway-ast v0.68.9 [INFO] [stderr] Compiling sway-features v0.68.9 [INFO] [stderr] Compiling sway-parse v0.68.9 [INFO] [stderr] Compiling swayscan v0.2.9 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 143 | pub struct RequireStatement { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 144 | pub condition: Box, [INFO] [stdout] 145 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RequireStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 149 | pub struct AssertStatement { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 150 | pub condition: Box, [INFO] [stdout] 151 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AssertStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 161 | pub enum ExpressionKind { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 162 | Literal(LiteralExpression), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 163 | Variable(String), [INFO] [stdout] 164 | FunctionCall(FunctionCallExpression), [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 165 | MethodCall(MethodCallExpression), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 166 | Binary(BinaryExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 167 | Unary(UnaryExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 168 | If(IfExpression), [INFO] [stdout] | ^^ [INFO] [stdout] 169 | Match(MatchExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 170 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 171 | Array(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 172 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 173 | Struct(StructExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 174 | Index(IndexExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 175 | Field(FieldExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 176 | Parenthesized(Box), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExpressionKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 180 | pub struct LiteralExpression { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] 181 | pub value: String, [INFO] [stdout] 182 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LiteralExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `struct_name` is never read [INFO] [stdout] --> src/parser.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 225 | pub struct StructExpression { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 226 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/parser.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 231 | pub struct StructField { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 232 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 249 | pub struct SwayPattern { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 250 | pub kind: PatternKind, [INFO] [stdout] 251 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Literal`, `Variable`, `Wildcard`, `Tuple`, `Struct`, and `Or` are never constructed [INFO] [stdout] --> src/parser.rs:256:5 [INFO] [stdout] | [INFO] [stdout] 255 | pub enum PatternKind { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] 256 | Literal(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 257 | Variable(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 258 | Wildcard, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 259 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 260 | Struct(StructPattern), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 261 | Or(Vec), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `PatternKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `struct_name` and `fields` are never read [INFO] [stdout] --> src/parser.rs:266:9 [INFO] [stdout] | [INFO] [stdout] 265 | pub struct StructPattern { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 266 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 267 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `pattern` are never read [INFO] [stdout] --> src/parser.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct StructPatternField { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 272 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 273 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPatternField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `items` and `span` are never read [INFO] [stdout] --> src/parser.rs:286:9 [INFO] [stdout] | [INFO] [stdout] 284 | pub struct SwayImport { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 285 | pub module: String, [INFO] [stdout] 286 | pub items: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 287 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayImport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 291 | pub struct SwayStruct { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 292 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 293 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 294 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStruct` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, and `span` are never read [INFO] [stdout] --> src/parser.rs:299:9 [INFO] [stdout] | [INFO] [stdout] 298 | pub struct SwayStructField { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 299 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 300 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 301 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `variants`, and `span` are never read [INFO] [stdout] --> src/parser.rs:306:9 [INFO] [stdout] | [INFO] [stdout] 305 | pub struct SwayEnum { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 306 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 307 | pub variants: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 308 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnum` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 312 | pub struct SwayEnumVariant { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 313 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 314 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 315 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnumVariant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `functions` and `span` are never read [INFO] [stdout] --> src/parser.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 319 | pub struct SwayTrait { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 320 | pub name: String, [INFO] [stdout] 321 | pub functions: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 322 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTrait` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `parameters`, `return_type`, and `span` are never read [INFO] [stdout] --> src/parser.rs:327:9 [INFO] [stdout] | [INFO] [stdout] 326 | pub struct SwayTraitFunction { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 327 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 328 | pub parameters: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 329 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 330 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTraitFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `value`, and `span` are never read [INFO] [stdout] --> src/parser.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 334 | pub struct SwayConstant { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 335 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 336 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 337 | pub value: SwayExpression, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 338 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayConstant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `arguments`, and `span` are never read [INFO] [stdout] --> src/parser.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 342 | pub struct SwayExternalCall { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 343 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 344 | pub arguments: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 345 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayExternalCall` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `start` and `end` are never used [INFO] [stdout] --> src/parser.rs:359:12 [INFO] [stdout] | [INFO] [stdout] 354 | impl Span { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 359 | pub fn start(&self) -> usize { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | pub fn end(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_function_by_name`, `get_storage_field_by_name`, `get_all_functions`, and `get_all_storage_fields` are never used [INFO] [stdout] --> src/parser.rs:596:12 [INFO] [stdout] | [INFO] [stdout] 425 | impl SwayAst { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 596 | pub fn get_function_by_name(&self, name: &str) -> Option<&SwayFunction> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 600 | pub fn get_storage_field_by_name(&self, name: &str) -> Option<&SwayStorageField> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 604 | pub fn get_all_functions(&self) -> &[SwayFunction] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 608 | pub fn get_all_storage_fields(&self) -> &[SwayStorageField] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `sort_order` is never read [INFO] [stdout] --> src/reporter.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Reporter { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 7 | output_format: OutputFormat, [INFO] [stdout] 8 | sort_order: SortOrder, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `format_detector_name`, `report_ungrouped`, `report_text`, `report_json`, `report_sarif`, and `report_csv` are never used [INFO] [stdout] --> src/reporter.rs:147:8 [INFO] [stdout] | [INFO] [stdout] 11 | impl Reporter { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 147 | fn format_detector_name(&self, name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 184 | pub fn report_ungrouped(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn report_text(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn report_json(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 228 | fn report_sarif(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | fn report_csv(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/error.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum SwayscanError { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 13 | ParseError(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | Analysis(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | Report(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Scanner(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Detector(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | Validation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | File(String), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Serialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 43 | Deserialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | Unknown(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayscanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/error.rs:54:12 [INFO] [stdout] | [INFO] [stdout] 49 | impl SwayscanError { [INFO] [stdout] | ------------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn analysis_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | pub fn report_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn scanner_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn detector_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn validation_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn file_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn serialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn deserialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn unknown_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `storage_dependencies` is never read [INFO] [stdout] --> src/analyzer.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct StorageAnalysis { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | pub storage_dependencies: HashMap>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `span`, `is_public`, and `access_patterns` are never read [INFO] [stdout] --> src/analyzer.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct StorageFieldInfo { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 52 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 55 | pub is_public: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 56 | pub access_patterns: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageFieldInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, and `context` are never read [INFO] [stdout] --> src/analyzer.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct StorageRead { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 61 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 62 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 63 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageRead` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, `context`, and `access_control` are never read [INFO] [stdout] --> src/analyzer.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct StorageWrite { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 69 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 70 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 72 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 73 | pub access_control: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageWrite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `node_id`, `statement`, `successors`, and `predecessors` are never read [INFO] [stdout] --> src/analyzer.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 77 | pub struct ControlFlowNode { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 78 | pub node_id: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 79 | pub statement: SwayStatement, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 80 | pub successors: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 81 | pub predecessors: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ControlFlowNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `condition`, `then_branch`, `else_branch`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 85 | pub struct ConditionalBranch { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 86 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 87 | pub then_branch: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 88 | pub else_branch: Option>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 89 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConditionalBranch` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `loop_type`, `condition`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 93 | pub struct LoopStructure { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 94 | pub loop_type: LoopType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 95 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 96 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 97 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopStructure` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Loop` is never constructed [INFO] [stdout] --> src/analyzer.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 101 | pub enum LoopType { [INFO] [stdout] | -------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 104 | Loop, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `handler_type`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 108 | pub struct ExceptionHandler { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 109 | pub handler_type: ExceptionType, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 110 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 111 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Revert` is never constructed [INFO] [stdout] --> src/analyzer.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 115 | pub enum ExceptionType { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 118 | Revert, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `check_type`, `condition`, `function`, `span`, and `is_effective` are never read [INFO] [stdout] --> src/analyzer.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 122 | pub struct AccessControlCheck { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 123 | pub check_type: AccessControlType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 124 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 125 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 126 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 127 | pub is_effective: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/analyzer.rs:135:12 [INFO] [stdout] | [INFO] [stdout] 135 | Custom(String), [INFO] [stdout] | ------ ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 135 - Custom(String), [INFO] [stdout] 135 + Custom(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `OwnerCheck`, `RoleCheck`, and `PermissionCheck` are never constructed [INFO] [stdout] --> src/analyzer.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 131 | pub enum AccessControlType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] 132 | OwnerCheck, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 133 | RoleCheck, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 134 | PermissionCheck, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `external_call`, `state_change`, `span`, and `severity` are never read [INFO] [stdout] --> src/analyzer.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 139 | pub struct ReentrancyVulnerability { [INFO] [stdout] | ----------------------- fields in this struct [INFO] [stdout] 140 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 141 | pub external_call: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 142 | pub state_change: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 143 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 144 | pub severity: ReentrancySeverity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancyVulnerability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzer.rs:149:5 [INFO] [stdout] | [INFO] [stdout] 148 | pub enum ReentrancySeverity { [INFO] [stdout] | ------------------ variants in this enum [INFO] [stdout] 149 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 150 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 151 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancySeverity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `call`, `span`, `is_checked`, and `return_value_handled` are never read [INFO] [stdout] --> src/analyzer.rs:156:9 [INFO] [stdout] | [INFO] [stdout] 155 | pub struct ExternalCallAnalysis { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 156 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 157 | pub call: SwayExpression, [INFO] [stdout] | ^^^^ [INFO] [stdout] 158 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 159 | pub is_checked: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 160 | pub return_value_handled: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExternalCallAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `operation`, `operands`, `span`, `overflow_risk`, and `underflow_risk` are never read [INFO] [stdout] --> src/analyzer.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct ArithmeticAnalysis { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 165 | pub operation: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 166 | pub operands: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 167 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 168 | pub overflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 169 | pub underflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ArithmeticAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_access_control`, `get_function_content`, `has_reentrancy_vulnerability`, `has_unchecked_external_call`, and `get_storage_operations` are never used [INFO] [stdout] --> src/analyzer.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl SwayAstAnalyzer { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 311 | pub fn has_access_control(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | fn get_function_content(&self, function: &SwayFunction) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 351 | pub fn has_reentrancy_vulnerability(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub fn has_unchecked_external_call(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 369 | pub fn get_storage_operations(&self, function_name: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SwayscanConfig` is never constructed [INFO] [stdout] --> src/config.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct SwayscanConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorConfig` is never constructed [INFO] [stdout] --> src/config.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct DetectorConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputConfig` is never constructed [INFO] [stdout] --> src/config.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct OutputConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisConfig` is never constructed [INFO] [stdout] --> src/config.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct AnalysisConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_from_file` is never used [INFO] [stdout] --> src/config.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl SwayscanConfig { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 60 | pub fn load_from_file>(path: P) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn format_duration(duration: Duration) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_sway_file` is never used [INFO] [stdout] --> src/utils.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn is_sway_file>(path: P) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pluralize` is never used [INFO] [stdout] --> src/utils.rs:23:8 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn pluralize(count: usize, singular: &str, plural: &str) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Timer` is never constructed [INFO] [stdout] --> src/utils.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct Timer { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `elapsed`, and `elapsed_ms` are never used [INFO] [stdout] --> src/utils.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl Timer { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn elapsed(&self) -> Duration { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn elapsed_ms(&self) -> u128 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `truncate_string` is never used [INFO] [stdout] --> src/utils.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | pub fn truncate_string(s: &str, max_len: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `byte_offset_to_line` is never used [INFO] [stdout] --> src/utils.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | pub fn byte_offset_to_line(content: &str, offset: usize) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 143 | pub struct RequireStatement { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 144 | pub condition: Box, [INFO] [stdout] 145 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RequireStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 149 | pub struct AssertStatement { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 150 | pub condition: Box, [INFO] [stdout] 151 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AssertStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 161 | pub enum ExpressionKind { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 162 | Literal(LiteralExpression), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 163 | Variable(String), [INFO] [stdout] 164 | FunctionCall(FunctionCallExpression), [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 165 | MethodCall(MethodCallExpression), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 166 | Binary(BinaryExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 167 | Unary(UnaryExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 168 | If(IfExpression), [INFO] [stdout] | ^^ [INFO] [stdout] 169 | Match(MatchExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 170 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 171 | Array(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 172 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 173 | Struct(StructExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 174 | Index(IndexExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 175 | Field(FieldExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 176 | Parenthesized(Box), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExpressionKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 180 | pub struct LiteralExpression { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] 181 | pub value: String, [INFO] [stdout] 182 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LiteralExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `struct_name` is never read [INFO] [stdout] --> src/parser.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 225 | pub struct StructExpression { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 226 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/parser.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 231 | pub struct StructField { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 232 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 249 | pub struct SwayPattern { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 250 | pub kind: PatternKind, [INFO] [stdout] 251 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Literal`, `Variable`, `Wildcard`, `Tuple`, `Struct`, and `Or` are never constructed [INFO] [stdout] --> src/parser.rs:256:5 [INFO] [stdout] | [INFO] [stdout] 255 | pub enum PatternKind { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] 256 | Literal(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 257 | Variable(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 258 | Wildcard, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 259 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 260 | Struct(StructPattern), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 261 | Or(Vec), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `PatternKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `struct_name` and `fields` are never read [INFO] [stdout] --> src/parser.rs:266:9 [INFO] [stdout] | [INFO] [stdout] 265 | pub struct StructPattern { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 266 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 267 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `pattern` are never read [INFO] [stdout] --> src/parser.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct StructPatternField { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 272 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 273 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPatternField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `items` and `span` are never read [INFO] [stdout] --> src/parser.rs:286:9 [INFO] [stdout] | [INFO] [stdout] 284 | pub struct SwayImport { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 285 | pub module: String, [INFO] [stdout] 286 | pub items: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 287 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayImport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 291 | pub struct SwayStruct { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 292 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 293 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 294 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStruct` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, and `span` are never read [INFO] [stdout] --> src/parser.rs:299:9 [INFO] [stdout] | [INFO] [stdout] 298 | pub struct SwayStructField { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 299 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 300 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 301 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `variants`, and `span` are never read [INFO] [stdout] --> src/parser.rs:306:9 [INFO] [stdout] | [INFO] [stdout] 305 | pub struct SwayEnum { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 306 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 307 | pub variants: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 308 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnum` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 312 | pub struct SwayEnumVariant { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 313 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 314 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 315 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnumVariant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `functions` and `span` are never read [INFO] [stdout] --> src/parser.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 319 | pub struct SwayTrait { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 320 | pub name: String, [INFO] [stdout] 321 | pub functions: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 322 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTrait` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `parameters`, `return_type`, and `span` are never read [INFO] [stdout] --> src/parser.rs:327:9 [INFO] [stdout] | [INFO] [stdout] 326 | pub struct SwayTraitFunction { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 327 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 328 | pub parameters: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 329 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 330 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTraitFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `value`, and `span` are never read [INFO] [stdout] --> src/parser.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 334 | pub struct SwayConstant { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 335 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 336 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 337 | pub value: SwayExpression, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 338 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayConstant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `arguments`, and `span` are never read [INFO] [stdout] --> src/parser.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 342 | pub struct SwayExternalCall { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 343 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 344 | pub arguments: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 345 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayExternalCall` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `start` and `end` are never used [INFO] [stdout] --> src/parser.rs:359:12 [INFO] [stdout] | [INFO] [stdout] 354 | impl Span { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 359 | pub fn start(&self) -> usize { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | pub fn end(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_function_by_name`, `get_storage_field_by_name`, `get_all_functions`, and `get_all_storage_fields` are never used [INFO] [stdout] --> src/parser.rs:596:12 [INFO] [stdout] | [INFO] [stdout] 425 | impl SwayAst { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 596 | pub fn get_function_by_name(&self, name: &str) -> Option<&SwayFunction> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 600 | pub fn get_storage_field_by_name(&self, name: &str) -> Option<&SwayStorageField> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 604 | pub fn get_all_functions(&self) -> &[SwayFunction] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 608 | pub fn get_all_storage_fields(&self) -> &[SwayStorageField] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `sort_order` is never read [INFO] [stdout] --> src/reporter.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Reporter { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 7 | output_format: OutputFormat, [INFO] [stdout] 8 | sort_order: SortOrder, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `format_detector_name`, `report_ungrouped`, `report_text`, `report_json`, `report_sarif`, and `report_csv` are never used [INFO] [stdout] --> src/reporter.rs:147:8 [INFO] [stdout] | [INFO] [stdout] 11 | impl Reporter { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 147 | fn format_detector_name(&self, name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 184 | pub fn report_ungrouped(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn report_text(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn report_json(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 228 | fn report_sarif(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | fn report_csv(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/error.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum SwayscanError { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 13 | ParseError(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | Analysis(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | Report(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Scanner(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Detector(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | Validation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | File(String), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Serialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 43 | Deserialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | Unknown(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayscanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/error.rs:54:12 [INFO] [stdout] | [INFO] [stdout] 49 | impl SwayscanError { [INFO] [stdout] | ------------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn analysis_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | pub fn report_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn scanner_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn detector_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn validation_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn file_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn serialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn deserialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn unknown_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `storage_dependencies` is never read [INFO] [stdout] --> src/analyzer.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct StorageAnalysis { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | pub storage_dependencies: HashMap>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `span`, `is_public`, and `access_patterns` are never read [INFO] [stdout] --> src/analyzer.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct StorageFieldInfo { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 52 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 55 | pub is_public: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 56 | pub access_patterns: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageFieldInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, and `context` are never read [INFO] [stdout] --> src/analyzer.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct StorageRead { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 61 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 62 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 63 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageRead` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, `context`, and `access_control` are never read [INFO] [stdout] --> src/analyzer.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct StorageWrite { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 69 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 70 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 72 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 73 | pub access_control: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageWrite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `node_id`, `statement`, `successors`, and `predecessors` are never read [INFO] [stdout] --> src/analyzer.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 77 | pub struct ControlFlowNode { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 78 | pub node_id: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 79 | pub statement: SwayStatement, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 80 | pub successors: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 81 | pub predecessors: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ControlFlowNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `condition`, `then_branch`, `else_branch`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 85 | pub struct ConditionalBranch { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 86 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 87 | pub then_branch: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 88 | pub else_branch: Option>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 89 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConditionalBranch` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `loop_type`, `condition`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 93 | pub struct LoopStructure { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 94 | pub loop_type: LoopType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 95 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 96 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 97 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopStructure` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Loop` is never constructed [INFO] [stdout] --> src/analyzer.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 101 | pub enum LoopType { [INFO] [stdout] | -------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 104 | Loop, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `handler_type`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 108 | pub struct ExceptionHandler { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 109 | pub handler_type: ExceptionType, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 110 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 111 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Revert` is never constructed [INFO] [stdout] --> src/analyzer.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 115 | pub enum ExceptionType { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 118 | Revert, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `check_type`, `condition`, `function`, `span`, and `is_effective` are never read [INFO] [stdout] --> src/analyzer.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 122 | pub struct AccessControlCheck { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 123 | pub check_type: AccessControlType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 124 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 125 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 126 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 127 | pub is_effective: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/analyzer.rs:135:12 [INFO] [stdout] | [INFO] [stdout] 135 | Custom(String), [INFO] [stdout] | ------ ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 135 - Custom(String), [INFO] [stdout] 135 + Custom(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `OwnerCheck`, `RoleCheck`, and `PermissionCheck` are never constructed [INFO] [stdout] --> src/analyzer.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 131 | pub enum AccessControlType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] 132 | OwnerCheck, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 133 | RoleCheck, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 134 | PermissionCheck, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `external_call`, `state_change`, `span`, and `severity` are never read [INFO] [stdout] --> src/analyzer.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 139 | pub struct ReentrancyVulnerability { [INFO] [stdout] | ----------------------- fields in this struct [INFO] [stdout] 140 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 141 | pub external_call: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 142 | pub state_change: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 143 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 144 | pub severity: ReentrancySeverity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancyVulnerability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzer.rs:149:5 [INFO] [stdout] | [INFO] [stdout] 148 | pub enum ReentrancySeverity { [INFO] [stdout] | ------------------ variants in this enum [INFO] [stdout] 149 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 150 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 151 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancySeverity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `call`, `span`, `is_checked`, and `return_value_handled` are never read [INFO] [stdout] --> src/analyzer.rs:156:9 [INFO] [stdout] | [INFO] [stdout] 155 | pub struct ExternalCallAnalysis { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 156 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 157 | pub call: SwayExpression, [INFO] [stdout] | ^^^^ [INFO] [stdout] 158 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 159 | pub is_checked: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 160 | pub return_value_handled: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExternalCallAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `operation`, `operands`, `span`, `overflow_risk`, and `underflow_risk` are never read [INFO] [stdout] --> src/analyzer.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct ArithmeticAnalysis { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 165 | pub operation: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 166 | pub operands: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 167 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 168 | pub overflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 169 | pub underflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ArithmeticAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_access_control`, `get_function_content`, `has_reentrancy_vulnerability`, `has_unchecked_external_call`, and `get_storage_operations` are never used [INFO] [stdout] --> src/analyzer.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl SwayAstAnalyzer { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 311 | pub fn has_access_control(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | fn get_function_content(&self, function: &SwayFunction) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 351 | pub fn has_reentrancy_vulnerability(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub fn has_unchecked_external_call(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 369 | pub fn get_storage_operations(&self, function_name: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SwayscanConfig` is never constructed [INFO] [stdout] --> src/config.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct SwayscanConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorConfig` is never constructed [INFO] [stdout] --> src/config.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct DetectorConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputConfig` is never constructed [INFO] [stdout] --> src/config.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct OutputConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisConfig` is never constructed [INFO] [stdout] --> src/config.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct AnalysisConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_from_file` is never used [INFO] [stdout] --> src/config.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl SwayscanConfig { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 60 | pub fn load_from_file>(path: P) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn format_duration(duration: Duration) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_sway_file` is never used [INFO] [stdout] --> src/utils.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn is_sway_file>(path: P) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pluralize` is never used [INFO] [stdout] --> src/utils.rs:23:8 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn pluralize(count: usize, singular: &str, plural: &str) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Timer` is never constructed [INFO] [stdout] --> src/utils.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct Timer { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `elapsed`, and `elapsed_ms` are never used [INFO] [stdout] --> src/utils.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl Timer { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn elapsed(&self) -> Duration { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn elapsed_ms(&self) -> u128 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `truncate_string` is never used [INFO] [stdout] --> src/utils.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | pub fn truncate_string(s: &str, max_len: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `byte_offset_to_line` is never used [INFO] [stdout] --> src/utils.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | pub fn byte_offset_to_line(content: &str, offset: usize) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 26s [INFO] running `Command { std: "docker" "inspect" "f694a17eb4b10d35129b543fdf643f66a78f7e3b5a5100fc43ebaef9489ce9e7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f694a17eb4b10d35129b543fdf643f66a78f7e3b5a5100fc43ebaef9489ce9e7", kill_on_drop: false }` [INFO] [stdout] f694a17eb4b10d35129b543fdf643f66a78f7e3b5a5100fc43ebaef9489ce9e7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 59f9228d4f446b2205caecee722e2d64eab736c6b1c1d1b30e61d1a9460a2a2e [INFO] running `Command { std: "docker" "start" "-a" "59f9228d4f446b2205caecee722e2d64eab736c6b1c1d1b30e61d1a9460a2a2e", kill_on_drop: false }` [INFO] [stderr] warning: file `/opt/rustwide/workdir/src/main.rs` found to be present in multiple build targets: [INFO] [stderr] * `bin` target `forc-swayscan` [INFO] [stderr] * `bin` target `swayscan` [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling fuel-asm v0.60.2 [INFO] [stderr] Compiling rustix v1.0.8 [INFO] [stderr] Compiling tempfile v3.20.0 [INFO] [stderr] Compiling fuel-tx v0.60.2 [INFO] [stderr] Compiling sway-types v0.68.9 [INFO] [stderr] Compiling sway-error v0.68.9 [INFO] [stderr] Compiling sway-features v0.68.9 [INFO] [stderr] Compiling sway-ast v0.68.9 [INFO] [stderr] Compiling sway-parse v0.68.9 [INFO] [stderr] Compiling swayscan v0.2.9 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0432]: unresolved import `swayscan` [INFO] [stdout] --> tests/integration_tests.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use swayscan::{Scanner, SwayFile}; [INFO] [stdout] | ^^^^^^^^ use of unresolved module or unlinked crate `swayscan` [INFO] [stdout] | [INFO] [stdout] = help: if you wanted to use a crate named `swayscan`, use `cargo add swayscan` to add it to your `Cargo.toml` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `swayscan` [INFO] [stdout] --> tests/integration_tests.rs:104:42 [INFO] [stdout] | [INFO] [stdout] 104 | .filter(|f| matches!(f.severity, swayscan::Severity::High | swayscan::Severity::Critical)) [INFO] [stdout] | ^^^^^^^^ use of unresolved module or unlinked crate `swayscan` [INFO] [stdout] | [INFO] [stdout] = help: if you wanted to use a crate named `swayscan`, use `cargo add swayscan` to add it to your `Cargo.toml` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `swayscan` [INFO] [stdout] --> tests/integration_tests.rs:104:69 [INFO] [stdout] | [INFO] [stdout] 104 | .filter(|f| matches!(f.severity, swayscan::Severity::High | swayscan::Severity::Critical)) [INFO] [stdout] | ^^^^^^^^ use of unresolved module or unlinked crate `swayscan` [INFO] [stdout] | [INFO] [stdout] = help: if you wanted to use a crate named `swayscan`, use `cargo add swayscan` to add it to your `Cargo.toml` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> tests/integration_tests.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0432, E0433. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0432`. [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `swayscan` (test "integration_tests") due to 3 previous errors; 1 warning emitted [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ArgAction`, `Arg`, and `Command` [INFO] [stdout] --> src/cli.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use clap::{Arg, ArgAction, ArgMatches, Command}; [INFO] [stdout] | ^^^ ^^^^^^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/access_control.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/reentrancy.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `extract_code_snippet` [INFO] [stdout] --> src/detectors/input_validation.rs:1:80 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::detectors::{Detector, Finding, Severity, Category, AnalysisContext, extract_code_snippet, Reference, ReferenceType, EstimatedE... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ExpressionKind`, `StatementKind`, `SwayExpression`, `SwayParameter`, and `SwayStatement` [INFO] [stdout] --> src/detectors/input_validation.rs:3:45 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::parser::{SwayFile, SwayFunction, SwayParameter, SwayStatement, StatementKind, SwayExpression, ExpressionKind}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/detectors/input_validation.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/utxo_vulnerabilities.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/price_oracle_manipulation.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:6:20 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `byte_offset_to_line` [INFO] [stdout] --> src/detectors/strict_equality.rs:5:20 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::utils::{byte_offset_to_line, byte_offset_to_line_col}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/parser.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/error.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io` [INFO] [stdout] --> src/error.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::io; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FunctionVisibility`, `SwayParameter`, `SwayStorageField`, and `SwayType` [INFO] [stdout] --> src/analyzer.rs:1:85 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::parser::{SwayFile, SwayAst, SwayFunction, SwayStatement, SwayExpression, SwayStorageField, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 2 | SwayParameter, SwayType, StatementKind, ExpressionKind, FunctionVisibility, Span}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 143 | pub struct RequireStatement { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 144 | pub condition: Box, [INFO] [stdout] 145 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RequireStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 149 | pub struct AssertStatement { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 150 | pub condition: Box, [INFO] [stdout] 151 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AssertStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 161 | pub enum ExpressionKind { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 162 | Literal(LiteralExpression), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 163 | Variable(String), [INFO] [stdout] 164 | FunctionCall(FunctionCallExpression), [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 165 | MethodCall(MethodCallExpression), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 166 | Binary(BinaryExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 167 | Unary(UnaryExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 168 | If(IfExpression), [INFO] [stdout] | ^^ [INFO] [stdout] 169 | Match(MatchExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 170 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 171 | Array(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 172 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 173 | Struct(StructExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 174 | Index(IndexExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 175 | Field(FieldExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 176 | Parenthesized(Box), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExpressionKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 180 | pub struct LiteralExpression { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] 181 | pub value: String, [INFO] [stdout] 182 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LiteralExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `struct_name` is never read [INFO] [stdout] --> src/parser.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 225 | pub struct StructExpression { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 226 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/parser.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 231 | pub struct StructField { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 232 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 249 | pub struct SwayPattern { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 250 | pub kind: PatternKind, [INFO] [stdout] 251 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Literal`, `Variable`, `Wildcard`, `Tuple`, `Struct`, and `Or` are never constructed [INFO] [stdout] --> src/parser.rs:256:5 [INFO] [stdout] | [INFO] [stdout] 255 | pub enum PatternKind { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] 256 | Literal(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 257 | Variable(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 258 | Wildcard, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 259 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 260 | Struct(StructPattern), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 261 | Or(Vec), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `PatternKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `struct_name` and `fields` are never read [INFO] [stdout] --> src/parser.rs:266:9 [INFO] [stdout] | [INFO] [stdout] 265 | pub struct StructPattern { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 266 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 267 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `pattern` are never read [INFO] [stdout] --> src/parser.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct StructPatternField { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 272 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 273 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPatternField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `items` and `span` are never read [INFO] [stdout] --> src/parser.rs:286:9 [INFO] [stdout] | [INFO] [stdout] 284 | pub struct SwayImport { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 285 | pub module: String, [INFO] [stdout] 286 | pub items: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 287 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayImport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 291 | pub struct SwayStruct { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 292 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 293 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 294 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStruct` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, and `span` are never read [INFO] [stdout] --> src/parser.rs:299:9 [INFO] [stdout] | [INFO] [stdout] 298 | pub struct SwayStructField { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 299 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 300 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 301 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `variants`, and `span` are never read [INFO] [stdout] --> src/parser.rs:306:9 [INFO] [stdout] | [INFO] [stdout] 305 | pub struct SwayEnum { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 306 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 307 | pub variants: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 308 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnum` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 312 | pub struct SwayEnumVariant { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 313 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 314 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 315 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnumVariant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `functions` and `span` are never read [INFO] [stdout] --> src/parser.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 319 | pub struct SwayTrait { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 320 | pub name: String, [INFO] [stdout] 321 | pub functions: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 322 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTrait` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `parameters`, `return_type`, and `span` are never read [INFO] [stdout] --> src/parser.rs:327:9 [INFO] [stdout] | [INFO] [stdout] 326 | pub struct SwayTraitFunction { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 327 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 328 | pub parameters: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 329 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 330 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTraitFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `value`, and `span` are never read [INFO] [stdout] --> src/parser.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 334 | pub struct SwayConstant { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 335 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 336 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 337 | pub value: SwayExpression, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 338 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayConstant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `arguments`, and `span` are never read [INFO] [stdout] --> src/parser.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 342 | pub struct SwayExternalCall { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 343 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 344 | pub arguments: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 345 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayExternalCall` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `start` and `end` are never used [INFO] [stdout] --> src/parser.rs:359:12 [INFO] [stdout] | [INFO] [stdout] 354 | impl Span { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 359 | pub fn start(&self) -> usize { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | pub fn end(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_function_by_name`, `get_storage_field_by_name`, `get_all_functions`, and `get_all_storage_fields` are never used [INFO] [stdout] --> src/parser.rs:596:12 [INFO] [stdout] | [INFO] [stdout] 425 | impl SwayAst { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 596 | pub fn get_function_by_name(&self, name: &str) -> Option<&SwayFunction> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 600 | pub fn get_storage_field_by_name(&self, name: &str) -> Option<&SwayStorageField> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 604 | pub fn get_all_functions(&self) -> &[SwayFunction] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 608 | pub fn get_all_storage_fields(&self) -> &[SwayStorageField] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `sort_order` is never read [INFO] [stdout] --> src/reporter.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Reporter { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 7 | output_format: OutputFormat, [INFO] [stdout] 8 | sort_order: SortOrder, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `format_detector_name`, `report_ungrouped`, `report_text`, `report_json`, `report_sarif`, and `report_csv` are never used [INFO] [stdout] --> src/reporter.rs:147:8 [INFO] [stdout] | [INFO] [stdout] 11 | impl Reporter { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 147 | fn format_detector_name(&self, name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 184 | pub fn report_ungrouped(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn report_text(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn report_json(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 228 | fn report_sarif(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | fn report_csv(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/error.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum SwayscanError { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 13 | ParseError(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | Analysis(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | Report(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Scanner(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Detector(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | Validation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | File(String), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Serialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 43 | Deserialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | Unknown(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayscanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/error.rs:54:12 [INFO] [stdout] | [INFO] [stdout] 49 | impl SwayscanError { [INFO] [stdout] | ------------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn analysis_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | pub fn report_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn scanner_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn detector_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn validation_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn file_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn serialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn deserialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn unknown_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `storage_dependencies` is never read [INFO] [stdout] --> src/analyzer.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct StorageAnalysis { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | pub storage_dependencies: HashMap>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `span`, `is_public`, and `access_patterns` are never read [INFO] [stdout] --> src/analyzer.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct StorageFieldInfo { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 52 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 55 | pub is_public: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 56 | pub access_patterns: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageFieldInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, and `context` are never read [INFO] [stdout] --> src/analyzer.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct StorageRead { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 61 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 62 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 63 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageRead` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, `context`, and `access_control` are never read [INFO] [stdout] --> src/analyzer.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct StorageWrite { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 69 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 70 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 72 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 73 | pub access_control: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageWrite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `node_id`, `statement`, `successors`, and `predecessors` are never read [INFO] [stdout] --> src/analyzer.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 77 | pub struct ControlFlowNode { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 78 | pub node_id: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 79 | pub statement: SwayStatement, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 80 | pub successors: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 81 | pub predecessors: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ControlFlowNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `condition`, `then_branch`, `else_branch`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 85 | pub struct ConditionalBranch { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 86 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 87 | pub then_branch: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 88 | pub else_branch: Option>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 89 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConditionalBranch` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `loop_type`, `condition`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 93 | pub struct LoopStructure { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 94 | pub loop_type: LoopType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 95 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 96 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 97 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopStructure` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Loop` is never constructed [INFO] [stdout] --> src/analyzer.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 101 | pub enum LoopType { [INFO] [stdout] | -------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 104 | Loop, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `handler_type`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 108 | pub struct ExceptionHandler { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 109 | pub handler_type: ExceptionType, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 110 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 111 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Revert` is never constructed [INFO] [stdout] --> src/analyzer.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 115 | pub enum ExceptionType { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 118 | Revert, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `check_type`, `condition`, `function`, `span`, and `is_effective` are never read [INFO] [stdout] --> src/analyzer.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 122 | pub struct AccessControlCheck { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 123 | pub check_type: AccessControlType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 124 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 125 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 126 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 127 | pub is_effective: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/analyzer.rs:135:12 [INFO] [stdout] | [INFO] [stdout] 135 | Custom(String), [INFO] [stdout] | ------ ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 135 - Custom(String), [INFO] [stdout] 135 + Custom(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `OwnerCheck`, `RoleCheck`, and `PermissionCheck` are never constructed [INFO] [stdout] --> src/analyzer.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 131 | pub enum AccessControlType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] 132 | OwnerCheck, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 133 | RoleCheck, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 134 | PermissionCheck, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `external_call`, `state_change`, `span`, and `severity` are never read [INFO] [stdout] --> src/analyzer.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 139 | pub struct ReentrancyVulnerability { [INFO] [stdout] | ----------------------- fields in this struct [INFO] [stdout] 140 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 141 | pub external_call: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 142 | pub state_change: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 143 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 144 | pub severity: ReentrancySeverity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancyVulnerability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzer.rs:149:5 [INFO] [stdout] | [INFO] [stdout] 148 | pub enum ReentrancySeverity { [INFO] [stdout] | ------------------ variants in this enum [INFO] [stdout] 149 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 150 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 151 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancySeverity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `call`, `span`, `is_checked`, and `return_value_handled` are never read [INFO] [stdout] --> src/analyzer.rs:156:9 [INFO] [stdout] | [INFO] [stdout] 155 | pub struct ExternalCallAnalysis { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 156 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 157 | pub call: SwayExpression, [INFO] [stdout] | ^^^^ [INFO] [stdout] 158 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 159 | pub is_checked: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 160 | pub return_value_handled: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExternalCallAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `operation`, `operands`, `span`, `overflow_risk`, and `underflow_risk` are never read [INFO] [stdout] --> src/analyzer.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct ArithmeticAnalysis { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 165 | pub operation: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 166 | pub operands: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 167 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 168 | pub overflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 169 | pub underflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ArithmeticAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_access_control`, `get_function_content`, `has_reentrancy_vulnerability`, `has_unchecked_external_call`, and `get_storage_operations` are never used [INFO] [stdout] --> src/analyzer.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl SwayAstAnalyzer { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 311 | pub fn has_access_control(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | fn get_function_content(&self, function: &SwayFunction) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 351 | pub fn has_reentrancy_vulnerability(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub fn has_unchecked_external_call(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 369 | pub fn get_storage_operations(&self, function_name: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SwayscanConfig` is never constructed [INFO] [stdout] --> src/config.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct SwayscanConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorConfig` is never constructed [INFO] [stdout] --> src/config.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct DetectorConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputConfig` is never constructed [INFO] [stdout] --> src/config.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct OutputConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisConfig` is never constructed [INFO] [stdout] --> src/config.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct AnalysisConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_from_file` is never used [INFO] [stdout] --> src/config.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl SwayscanConfig { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 60 | pub fn load_from_file>(path: P) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn format_duration(duration: Duration) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_sway_file` is never used [INFO] [stdout] --> src/utils.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn is_sway_file>(path: P) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pluralize` is never used [INFO] [stdout] --> src/utils.rs:23:8 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn pluralize(count: usize, singular: &str, plural: &str) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Timer` is never constructed [INFO] [stdout] --> src/utils.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct Timer { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `elapsed`, and `elapsed_ms` are never used [INFO] [stdout] --> src/utils.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl Timer { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn elapsed(&self) -> Duration { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn elapsed_ms(&self) -> u128 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `truncate_string` is never used [INFO] [stdout] --> src/utils.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | pub fn truncate_string(s: &str, max_len: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `byte_offset_to_line` is never used [INFO] [stdout] --> src/utils.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | pub fn byte_offset_to_line(content: &str, offset: usize) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 143 | pub struct RequireStatement { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 144 | pub condition: Box, [INFO] [stdout] 145 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RequireStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 149 | pub struct AssertStatement { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 150 | pub condition: Box, [INFO] [stdout] 151 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AssertStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 161 | pub enum ExpressionKind { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 162 | Literal(LiteralExpression), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 163 | Variable(String), [INFO] [stdout] 164 | FunctionCall(FunctionCallExpression), [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 165 | MethodCall(MethodCallExpression), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 166 | Binary(BinaryExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 167 | Unary(UnaryExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 168 | If(IfExpression), [INFO] [stdout] | ^^ [INFO] [stdout] 169 | Match(MatchExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 170 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 171 | Array(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 172 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 173 | Struct(StructExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 174 | Index(IndexExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 175 | Field(FieldExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 176 | Parenthesized(Box), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExpressionKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 180 | pub struct LiteralExpression { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] 181 | pub value: String, [INFO] [stdout] 182 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LiteralExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `struct_name` is never read [INFO] [stdout] --> src/parser.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 225 | pub struct StructExpression { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 226 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/parser.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 231 | pub struct StructField { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 232 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 249 | pub struct SwayPattern { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 250 | pub kind: PatternKind, [INFO] [stdout] 251 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Literal`, `Variable`, `Wildcard`, `Tuple`, `Struct`, and `Or` are never constructed [INFO] [stdout] --> src/parser.rs:256:5 [INFO] [stdout] | [INFO] [stdout] 255 | pub enum PatternKind { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] 256 | Literal(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 257 | Variable(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 258 | Wildcard, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 259 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 260 | Struct(StructPattern), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 261 | Or(Vec), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `PatternKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `struct_name` and `fields` are never read [INFO] [stdout] --> src/parser.rs:266:9 [INFO] [stdout] | [INFO] [stdout] 265 | pub struct StructPattern { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 266 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 267 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `pattern` are never read [INFO] [stdout] --> src/parser.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct StructPatternField { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 272 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 273 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPatternField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `items` and `span` are never read [INFO] [stdout] --> src/parser.rs:286:9 [INFO] [stdout] | [INFO] [stdout] 284 | pub struct SwayImport { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 285 | pub module: String, [INFO] [stdout] 286 | pub items: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 287 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayImport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 291 | pub struct SwayStruct { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 292 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 293 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 294 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStruct` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, and `span` are never read [INFO] [stdout] --> src/parser.rs:299:9 [INFO] [stdout] | [INFO] [stdout] 298 | pub struct SwayStructField { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 299 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 300 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 301 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `variants`, and `span` are never read [INFO] [stdout] --> src/parser.rs:306:9 [INFO] [stdout] | [INFO] [stdout] 305 | pub struct SwayEnum { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 306 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 307 | pub variants: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 308 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnum` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 312 | pub struct SwayEnumVariant { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 313 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 314 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 315 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnumVariant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `functions` and `span` are never read [INFO] [stdout] --> src/parser.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 319 | pub struct SwayTrait { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 320 | pub name: String, [INFO] [stdout] 321 | pub functions: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 322 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTrait` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `parameters`, `return_type`, and `span` are never read [INFO] [stdout] --> src/parser.rs:327:9 [INFO] [stdout] | [INFO] [stdout] 326 | pub struct SwayTraitFunction { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 327 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 328 | pub parameters: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 329 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 330 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTraitFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `value`, and `span` are never read [INFO] [stdout] --> src/parser.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 334 | pub struct SwayConstant { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 335 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 336 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 337 | pub value: SwayExpression, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 338 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayConstant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `arguments`, and `span` are never read [INFO] [stdout] --> src/parser.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 342 | pub struct SwayExternalCall { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 343 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 344 | pub arguments: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 345 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayExternalCall` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `start` and `end` are never used [INFO] [stdout] --> src/parser.rs:359:12 [INFO] [stdout] | [INFO] [stdout] 354 | impl Span { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 359 | pub fn start(&self) -> usize { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | pub fn end(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_function_by_name`, `get_storage_field_by_name`, `get_all_functions`, and `get_all_storage_fields` are never used [INFO] [stdout] --> src/parser.rs:596:12 [INFO] [stdout] | [INFO] [stdout] 425 | impl SwayAst { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 596 | pub fn get_function_by_name(&self, name: &str) -> Option<&SwayFunction> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 600 | pub fn get_storage_field_by_name(&self, name: &str) -> Option<&SwayStorageField> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 604 | pub fn get_all_functions(&self) -> &[SwayFunction] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 608 | pub fn get_all_storage_fields(&self) -> &[SwayStorageField] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `sort_order` is never read [INFO] [stdout] --> src/reporter.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Reporter { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 7 | output_format: OutputFormat, [INFO] [stdout] 8 | sort_order: SortOrder, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `format_detector_name`, `report_ungrouped`, `report_text`, `report_json`, `report_sarif`, and `report_csv` are never used [INFO] [stdout] --> src/reporter.rs:147:8 [INFO] [stdout] | [INFO] [stdout] 11 | impl Reporter { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 147 | fn format_detector_name(&self, name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 184 | pub fn report_ungrouped(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn report_text(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn report_json(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 228 | fn report_sarif(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | fn report_csv(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/error.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum SwayscanError { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 13 | ParseError(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | Analysis(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | Report(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Scanner(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Detector(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | Validation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | File(String), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Serialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 43 | Deserialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | Unknown(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayscanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/error.rs:54:12 [INFO] [stdout] | [INFO] [stdout] 49 | impl SwayscanError { [INFO] [stdout] | ------------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn analysis_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | pub fn report_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn scanner_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn detector_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn validation_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn file_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn serialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn deserialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn unknown_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `storage_dependencies` is never read [INFO] [stdout] --> src/analyzer.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct StorageAnalysis { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | pub storage_dependencies: HashMap>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `span`, `is_public`, and `access_patterns` are never read [INFO] [stdout] --> src/analyzer.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct StorageFieldInfo { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 52 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 55 | pub is_public: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 56 | pub access_patterns: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageFieldInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, and `context` are never read [INFO] [stdout] --> src/analyzer.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct StorageRead { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 61 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 62 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 63 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageRead` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, `context`, and `access_control` are never read [INFO] [stdout] --> src/analyzer.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct StorageWrite { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 69 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 70 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 72 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 73 | pub access_control: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageWrite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `node_id`, `statement`, `successors`, and `predecessors` are never read [INFO] [stdout] --> src/analyzer.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 77 | pub struct ControlFlowNode { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 78 | pub node_id: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 79 | pub statement: SwayStatement, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 80 | pub successors: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 81 | pub predecessors: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ControlFlowNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `condition`, `then_branch`, `else_branch`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 85 | pub struct ConditionalBranch { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 86 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 87 | pub then_branch: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 88 | pub else_branch: Option>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 89 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConditionalBranch` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `loop_type`, `condition`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 93 | pub struct LoopStructure { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 94 | pub loop_type: LoopType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 95 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 96 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 97 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopStructure` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Loop` is never constructed [INFO] [stdout] --> src/analyzer.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 101 | pub enum LoopType { [INFO] [stdout] | -------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 104 | Loop, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `handler_type`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 108 | pub struct ExceptionHandler { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 109 | pub handler_type: ExceptionType, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 110 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 111 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Revert` is never constructed [INFO] [stdout] --> src/analyzer.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 115 | pub enum ExceptionType { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 118 | Revert, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `check_type`, `condition`, `function`, `span`, and `is_effective` are never read [INFO] [stdout] --> src/analyzer.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 122 | pub struct AccessControlCheck { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 123 | pub check_type: AccessControlType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 124 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 125 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 126 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 127 | pub is_effective: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/analyzer.rs:135:12 [INFO] [stdout] | [INFO] [stdout] 135 | Custom(String), [INFO] [stdout] | ------ ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 135 - Custom(String), [INFO] [stdout] 135 + Custom(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `OwnerCheck`, `RoleCheck`, and `PermissionCheck` are never constructed [INFO] [stdout] --> src/analyzer.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 131 | pub enum AccessControlType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] 132 | OwnerCheck, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 133 | RoleCheck, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 134 | PermissionCheck, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `external_call`, `state_change`, `span`, and `severity` are never read [INFO] [stdout] --> src/analyzer.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 139 | pub struct ReentrancyVulnerability { [INFO] [stdout] | ----------------------- fields in this struct [INFO] [stdout] 140 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 141 | pub external_call: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 142 | pub state_change: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 143 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 144 | pub severity: ReentrancySeverity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancyVulnerability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzer.rs:149:5 [INFO] [stdout] | [INFO] [stdout] 148 | pub enum ReentrancySeverity { [INFO] [stdout] | ------------------ variants in this enum [INFO] [stdout] 149 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 150 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 151 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancySeverity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `call`, `span`, `is_checked`, and `return_value_handled` are never read [INFO] [stdout] --> src/analyzer.rs:156:9 [INFO] [stdout] | [INFO] [stdout] 155 | pub struct ExternalCallAnalysis { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 156 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 157 | pub call: SwayExpression, [INFO] [stdout] | ^^^^ [INFO] [stdout] 158 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 159 | pub is_checked: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 160 | pub return_value_handled: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExternalCallAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `operation`, `operands`, `span`, `overflow_risk`, and `underflow_risk` are never read [INFO] [stdout] --> src/analyzer.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct ArithmeticAnalysis { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 165 | pub operation: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 166 | pub operands: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 167 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 168 | pub overflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 169 | pub underflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ArithmeticAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_access_control`, `get_function_content`, `has_reentrancy_vulnerability`, `has_unchecked_external_call`, and `get_storage_operations` are never used [INFO] [stdout] --> src/analyzer.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl SwayAstAnalyzer { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 311 | pub fn has_access_control(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | fn get_function_content(&self, function: &SwayFunction) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 351 | pub fn has_reentrancy_vulnerability(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub fn has_unchecked_external_call(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 369 | pub fn get_storage_operations(&self, function_name: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SwayscanConfig` is never constructed [INFO] [stdout] --> src/config.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct SwayscanConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorConfig` is never constructed [INFO] [stdout] --> src/config.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct DetectorConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputConfig` is never constructed [INFO] [stdout] --> src/config.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct OutputConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisConfig` is never constructed [INFO] [stdout] --> src/config.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct AnalysisConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_from_file` is never used [INFO] [stdout] --> src/config.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl SwayscanConfig { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 60 | pub fn load_from_file>(path: P) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn format_duration(duration: Duration) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_sway_file` is never used [INFO] [stdout] --> src/utils.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn is_sway_file>(path: P) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pluralize` is never used [INFO] [stdout] --> src/utils.rs:23:8 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn pluralize(count: usize, singular: &str, plural: &str) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Timer` is never constructed [INFO] [stdout] --> src/utils.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct Timer { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `elapsed`, and `elapsed_ms` are never used [INFO] [stdout] --> src/utils.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl Timer { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn elapsed(&self) -> Duration { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn elapsed_ms(&self) -> u128 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `truncate_string` is never used [INFO] [stdout] --> src/utils.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | pub fn truncate_string(s: &str, max_len: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `byte_offset_to_line` is never used [INFO] [stdout] --> src/utils.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | pub fn byte_offset_to_line(content: &str, offset: usize) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/access_control.rs:14:89 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/reentrancy.rs:14:85 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `desc` [INFO] [stdout] --> src/detectors/reentrancy.rs:182:22 [INFO] [stdout] | [INFO] [stdout] 182 | for (i, (op, desc)) in op_timeline.iter().enumerate() { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_desc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/detectors/input_validation.rs:80:74 [INFO] [stdout] | [INFO] [stdout] 80 | fn analyze_function_input_validation(&self, function: &SwayFunction, file: &SwayFile) -> InputValidationAnalysis { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/detectors/input_validation.rs:117:22 [INFO] [stdout] | [INFO] [stdout] 117 | for (i, param) in param_list.iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/cryptographic.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/arbitrary_asset_transfer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/flash_loan_attacks.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/logic_errors.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/unchecked_external_calls.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:14:13 [INFO] [stdout] | [INFO] [stdout] 14 | let mut found = false; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/weak_prng.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/unprotected_storage.rs:12:94 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_unprotected_storage(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/boolean_comparison.rs:14:93 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/division_before_multiplication.rs:15:105 [INFO] [stdout] | [INFO] [stdout] 15 | fn analyze_function_division_before_multiplication(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/external_call_in_loop.rs:14:96 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_external_call_in_loop(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/locked_native_asset.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/missing_logs.rs:12:87 [INFO] [stdout] | [INFO] [stdout] 12 | fn analyze_function_missing_logs(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/smart_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ast` [INFO] [stdout] --> src/detectors/strict_equality.rs:14:90 [INFO] [stdout] | [INFO] [stdout] 14 | fn analyze_function_strict_equality(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_ast` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/detectors/sway_analyzer.rs:15:13 [INFO] [stdout] | [INFO] [stdout] 15 | let mut line_number = function.span.start; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_braces` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:91:29 [INFO] [stdout] | [INFO] [stdout] 91 | ... in_braces = false; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `storage_stmt` [INFO] [stdout] --> src/detectors/ast_visitor.rs:140:36 [INFO] [stdout] | [INFO] [stdout] 140 | StatementKind::Storage(storage_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_storage_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:145:9 [INFO] [stdout] | [INFO] [stdout] 143 | pub struct RequireStatement { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 144 | pub condition: Box, [INFO] [stdout] 145 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RequireStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> src/parser.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 149 | pub struct AssertStatement { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 150 | pub condition: Box, [INFO] [stdout] 151 | pub message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AssertStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 161 | pub enum ExpressionKind { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 162 | Literal(LiteralExpression), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 163 | Variable(String), [INFO] [stdout] 164 | FunctionCall(FunctionCallExpression), [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 165 | MethodCall(MethodCallExpression), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 166 | Binary(BinaryExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 167 | Unary(UnaryExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 168 | If(IfExpression), [INFO] [stdout] | ^^ [INFO] [stdout] 169 | Match(MatchExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 170 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 171 | Array(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 172 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 173 | Struct(StructExpression), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 174 | Index(IndexExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 175 | Field(FieldExpression), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 176 | Parenthesized(Box), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExpressionKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 180 | pub struct LiteralExpression { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] 181 | pub value: String, [INFO] [stdout] 182 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LiteralExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `struct_name` is never read [INFO] [stdout] --> src/parser.rs:226:9 [INFO] [stdout] | [INFO] [stdout] 225 | pub struct StructExpression { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 226 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructExpression` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `name` is never read [INFO] [stdout] --> src/parser.rs:232:9 [INFO] [stdout] | [INFO] [stdout] 231 | pub struct StructField { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 232 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 249 | pub struct SwayPattern { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 250 | pub kind: PatternKind, [INFO] [stdout] 251 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Literal`, `Variable`, `Wildcard`, `Tuple`, `Struct`, and `Or` are never constructed [INFO] [stdout] --> src/parser.rs:256:5 [INFO] [stdout] | [INFO] [stdout] 255 | pub enum PatternKind { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] 256 | Literal(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 257 | Variable(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 258 | Wildcard, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 259 | Tuple(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 260 | Struct(StructPattern), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 261 | Or(Vec), [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `PatternKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `struct_name` and `fields` are never read [INFO] [stdout] --> src/parser.rs:266:9 [INFO] [stdout] | [INFO] [stdout] 265 | pub struct StructPattern { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 266 | pub struct_name: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 267 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `pattern` are never read [INFO] [stdout] --> src/parser.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct StructPatternField { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 272 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 273 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StructPatternField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `items` and `span` are never read [INFO] [stdout] --> src/parser.rs:286:9 [INFO] [stdout] | [INFO] [stdout] 284 | pub struct SwayImport { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 285 | pub module: String, [INFO] [stdout] 286 | pub items: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 287 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayImport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 291 | pub struct SwayStruct { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 292 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 293 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 294 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStruct` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, and `span` are never read [INFO] [stdout] --> src/parser.rs:299:9 [INFO] [stdout] | [INFO] [stdout] 298 | pub struct SwayStructField { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 299 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 300 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 301 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStructField` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `variants`, and `span` are never read [INFO] [stdout] --> src/parser.rs:306:9 [INFO] [stdout] | [INFO] [stdout] 305 | pub struct SwayEnum { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 306 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 307 | pub variants: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 308 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnum` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `fields`, and `span` are never read [INFO] [stdout] --> src/parser.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 312 | pub struct SwayEnumVariant { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 313 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 314 | pub fields: Vec, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 315 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayEnumVariant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `functions` and `span` are never read [INFO] [stdout] --> src/parser.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 319 | pub struct SwayTrait { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 320 | pub name: String, [INFO] [stdout] 321 | pub functions: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 322 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTrait` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `parameters`, `return_type`, and `span` are never read [INFO] [stdout] --> src/parser.rs:327:9 [INFO] [stdout] | [INFO] [stdout] 326 | pub struct SwayTraitFunction { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 327 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 328 | pub parameters: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 329 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 330 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayTraitFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `value`, and `span` are never read [INFO] [stdout] --> src/parser.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 334 | pub struct SwayConstant { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 335 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 336 | pub type_: SwayType, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 337 | pub value: SwayExpression, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 338 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayConstant` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `arguments`, and `span` are never read [INFO] [stdout] --> src/parser.rs:343:9 [INFO] [stdout] | [INFO] [stdout] 342 | pub struct SwayExternalCall { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 343 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 344 | pub arguments: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 345 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayExternalCall` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `start` and `end` are never used [INFO] [stdout] --> src/parser.rs:359:12 [INFO] [stdout] | [INFO] [stdout] 354 | impl Span { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 359 | pub fn start(&self) -> usize { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | pub fn end(&self) -> usize { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_function_by_name`, `get_storage_field_by_name`, `get_all_functions`, and `get_all_storage_fields` are never used [INFO] [stdout] --> src/parser.rs:596:12 [INFO] [stdout] | [INFO] [stdout] 425 | impl SwayAst { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 596 | pub fn get_function_by_name(&self, name: &str) -> Option<&SwayFunction> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 600 | pub fn get_storage_field_by_name(&self, name: &str) -> Option<&SwayStorageField> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 604 | pub fn get_all_functions(&self) -> &[SwayFunction] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 608 | pub fn get_all_storage_fields(&self) -> &[SwayStorageField] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `sort_order` is never read [INFO] [stdout] --> src/reporter.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Reporter { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 7 | output_format: OutputFormat, [INFO] [stdout] 8 | sort_order: SortOrder, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `format_detector_name`, `report_ungrouped`, `report_text`, `report_json`, `report_sarif`, and `report_csv` are never used [INFO] [stdout] --> src/reporter.rs:147:8 [INFO] [stdout] | [INFO] [stdout] 11 | impl Reporter { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 147 | fn format_detector_name(&self, name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 184 | pub fn report_ungrouped(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn report_text(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn report_json(&self, findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 228 | fn report_sarif(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 233 | fn report_csv(&self, _findings: Vec) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/error.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum SwayscanError { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 13 | ParseError(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | Analysis(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | Report(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Scanner(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Detector(String), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | Validation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | File(String), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Serialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 43 | Deserialization(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | Unknown(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayscanError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/error.rs:54:12 [INFO] [stdout] | [INFO] [stdout] 49 | impl SwayscanError { [INFO] [stdout] | ------------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn analysis_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | pub fn report_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | pub fn scanner_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn detector_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn validation_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn file_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn serialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | pub fn deserialization_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn unknown_error(message: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `storage_dependencies` is never read [INFO] [stdout] --> src/analyzer.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct StorageAnalysis { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | pub storage_dependencies: HashMap>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `type_`, `span`, `is_public`, and `access_patterns` are never read [INFO] [stdout] --> src/analyzer.rs:52:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct StorageFieldInfo { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 52 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 55 | pub is_public: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 56 | pub access_patterns: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageFieldInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, and `context` are never read [INFO] [stdout] --> src/analyzer.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct StorageRead { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 61 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 62 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 63 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 64 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageRead` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `field`, `function`, `span`, `context`, and `access_control` are never read [INFO] [stdout] --> src/analyzer.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct StorageWrite { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 69 | pub field: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 70 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 72 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 73 | pub access_control: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageWrite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `node_id`, `statement`, `successors`, and `predecessors` are never read [INFO] [stdout] --> src/analyzer.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 77 | pub struct ControlFlowNode { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 78 | pub node_id: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 79 | pub statement: SwayStatement, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 80 | pub successors: Vec, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 81 | pub predecessors: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ControlFlowNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `condition`, `then_branch`, `else_branch`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 85 | pub struct ConditionalBranch { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 86 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 87 | pub then_branch: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 88 | pub else_branch: Option>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 89 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConditionalBranch` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `loop_type`, `condition`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:94:9 [INFO] [stdout] | [INFO] [stdout] 93 | pub struct LoopStructure { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 94 | pub loop_type: LoopType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 95 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 96 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 97 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopStructure` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Loop` is never constructed [INFO] [stdout] --> src/analyzer.rs:104:5 [INFO] [stdout] | [INFO] [stdout] 101 | pub enum LoopType { [INFO] [stdout] | -------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 104 | Loop, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LoopType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `handler_type`, `body`, and `span` are never read [INFO] [stdout] --> src/analyzer.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 108 | pub struct ExceptionHandler { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 109 | pub handler_type: ExceptionType, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 110 | pub body: Vec, [INFO] [stdout] | ^^^^ [INFO] [stdout] 111 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Revert` is never constructed [INFO] [stdout] --> src/analyzer.rs:118:5 [INFO] [stdout] | [INFO] [stdout] 115 | pub enum ExceptionType { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 118 | Revert, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExceptionType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `check_type`, `condition`, `function`, `span`, and `is_effective` are never read [INFO] [stdout] --> src/analyzer.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 122 | pub struct AccessControlCheck { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 123 | pub check_type: AccessControlType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 124 | pub condition: SwayExpression, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 125 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 126 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 127 | pub is_effective: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/analyzer.rs:135:12 [INFO] [stdout] | [INFO] [stdout] 135 | Custom(String), [INFO] [stdout] | ------ ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 135 - Custom(String), [INFO] [stdout] 135 + Custom(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `OwnerCheck`, `RoleCheck`, and `PermissionCheck` are never constructed [INFO] [stdout] --> src/analyzer.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 131 | pub enum AccessControlType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] 132 | OwnerCheck, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 133 | RoleCheck, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 134 | PermissionCheck, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AccessControlType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `external_call`, `state_change`, `span`, and `severity` are never read [INFO] [stdout] --> src/analyzer.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 139 | pub struct ReentrancyVulnerability { [INFO] [stdout] | ----------------------- fields in this struct [INFO] [stdout] 140 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 141 | pub external_call: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 142 | pub state_change: SwayExpression, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 143 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 144 | pub severity: ReentrancySeverity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancyVulnerability` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzer.rs:149:5 [INFO] [stdout] | [INFO] [stdout] 148 | pub enum ReentrancySeverity { [INFO] [stdout] | ------------------ variants in this enum [INFO] [stdout] 149 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 150 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 151 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ReentrancySeverity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `function`, `call`, `span`, `is_checked`, and `return_value_handled` are never read [INFO] [stdout] --> src/analyzer.rs:156:9 [INFO] [stdout] | [INFO] [stdout] 155 | pub struct ExternalCallAnalysis { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 156 | pub function: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 157 | pub call: SwayExpression, [INFO] [stdout] | ^^^^ [INFO] [stdout] 158 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 159 | pub is_checked: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 160 | pub return_value_handled: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ExternalCallAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `operation`, `operands`, `span`, `overflow_risk`, and `underflow_risk` are never read [INFO] [stdout] --> src/analyzer.rs:165:9 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct ArithmeticAnalysis { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 165 | pub operation: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 166 | pub operands: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 167 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] 168 | pub overflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 169 | pub underflow_risk: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ArithmeticAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_access_control`, `get_function_content`, `has_reentrancy_vulnerability`, `has_unchecked_external_call`, and `get_storage_operations` are never used [INFO] [stdout] --> src/analyzer.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl SwayAstAnalyzer { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 311 | pub fn has_access_control(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | fn get_function_content(&self, function: &SwayFunction) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 351 | pub fn has_reentrancy_vulnerability(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub fn has_unchecked_external_call(&self, function_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 369 | pub fn get_storage_operations(&self, function_name: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SwayscanConfig` is never constructed [INFO] [stdout] --> src/config.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct SwayscanConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorConfig` is never constructed [INFO] [stdout] --> src/config.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct DetectorConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OutputConfig` is never constructed [INFO] [stdout] --> src/config.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct OutputConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisConfig` is never constructed [INFO] [stdout] --> src/config.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct AnalysisConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_from_file` is never used [INFO] [stdout] --> src/config.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl SwayscanConfig { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 60 | pub fn load_from_file>(path: P) -> Result> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | pub fn format_duration(duration: Duration) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_sway_file` is never used [INFO] [stdout] --> src/utils.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 15 | pub fn is_sway_file>(path: P) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pluralize` is never used [INFO] [stdout] --> src/utils.rs:23:8 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn pluralize(count: usize, singular: &str, plural: &str) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Timer` is never constructed [INFO] [stdout] --> src/utils.rs:31:12 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct Timer { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `elapsed`, and `elapsed_ms` are never used [INFO] [stdout] --> src/utils.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl Timer { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 36 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn elapsed(&self) -> Duration { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn elapsed_ms(&self) -> u128 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `truncate_string` is never used [INFO] [stdout] --> src/utils.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | pub fn truncate_string(s: &str, max_len: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `byte_offset_to_line` is never used [INFO] [stdout] --> src/utils.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | pub fn byte_offset_to_line(content: &str, offset: usize) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/parser.rs:398:13 [INFO] [stdout] | [INFO] [stdout] 398 | let mut ast = Self::create_simple_ast(&content)?; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `require_stmt` [INFO] [stdout] --> src/analyzer.rs:700:36 [INFO] [stdout] | [INFO] [stdout] 700 | StatementKind::Require(require_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_require_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `assert_stmt` [INFO] [stdout] --> src/analyzer.rs:707:35 [INFO] [stdout] | [INFO] [stdout] 707 | StatementKind::Assert(assert_stmt) => { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_assert_stmt` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `control_flow_nodes` [INFO] [stdout] --> src/analyzer.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | control_flow_nodes: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `access_controls` [INFO] [stdout] --> src/analyzer.rs:818:9 [INFO] [stdout] | [INFO] [stdout] 818 | access_controls: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_access_controls` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `reentrancy_vulns` [INFO] [stdout] --> src/analyzer.rs:819:9 [INFO] [stdout] | [INFO] [stdout] 819 | reentrancy_vulns: &mut Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `count` is assigned to, but never used [INFO] [stdout] --> src/utils.rs:63:13 [INFO] [stdout] | [INFO] [stdout] 63 | let mut count = 0; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: consider using `_count` instead [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `config`, `parallel`, `fail_on`, `baseline`, and `dry_run` are never read [INFO] [stdout] --> src/cli.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct Args { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub config: Option, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 20 | pub parallel: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 21 | pub fail_on: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 22 | pub baseline: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 27 | pub dry_run: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `should_run_all_detectors`, `get_thread_count`, and `meets_confidence_threshold` are never used [INFO] [stdout] --> src/cli.rs:198:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl Args { [INFO] [stdout] | --------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 198 | pub fn should_run_all_detectors(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 202 | pub fn get_thread_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn meets_confidence_threshold(&self, confidence: f64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `generate_pdf_report` and `extract_function_name_from_finding` are never used [INFO] [stdout] --> src/scanner.rs:157:8 [INFO] [stdout] | [INFO] [stdout] 17 | impl Scanner { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | fn generate_pdf_report(&self, _findings: &[Finding], _output_path: &std::path::Path) -> Result<(), SwayscanError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 363 | fn extract_function_name_from_finding(&self, finding: &Finding, file: &SwayFile) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `with_range` and `with_impact` are never used [INFO] [stdout] --> src/detectors/mod.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 133 | impl Finding { [INFO] [stdout] | ------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 200 | pub fn with_range(mut self, end_line: usize, end_column: usize) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 206 | pub fn with_impact(mut self, impact: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `score` is never used [INFO] [stdout] --> src/detectors/mod.rs:253:12 [INFO] [stdout] | [INFO] [stdout] 243 | impl Severity { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 253 | pub fn score(&self) -> u8 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `description`, `category`, `default_severity`, `requires_dependencies`, and `is_experimental` are never used [INFO] [stdout] --> src/detectors/mod.rs:265:8 [INFO] [stdout] | [INFO] [stdout] 263 | pub trait Detector: Send + Sync { [INFO] [stdout] | -------- methods in this trait [INFO] [stdout] 264 | fn name(&self) -> &'static str; [INFO] [stdout] 265 | fn description(&self) -> &'static str; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 266 | fn category(&self) -> Category; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 267 | fn default_severity(&self) -> Severity; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | fn requires_dependencies(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 279 | fn is_experimental(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `confidence_threshold` and `custom_config` are never read [INFO] [stdout] --> src/detectors/mod.rs:292:9 [INFO] [stdout] | [INFO] [stdout] 290 | pub struct DetectorMetadata { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] 291 | pub enabled: bool, [INFO] [stdout] 292 | pub confidence_threshold: f64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 293 | pub custom_config: HashMap, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DetectorMetadata` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_detector`, `get_all_detectors`, `list_available_detectors`, `detector_count`, and `get_detector_info` are never used [INFO] [stdout] --> src/detectors/mod.rs:341:12 [INFO] [stdout] | [INFO] [stdout] 296 | impl DetectorRegistry { [INFO] [stdout] | --------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 341 | pub fn get_detector(&self, name: &str) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 345 | pub fn get_all_detectors(&self) -> Vec<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 364 | pub fn list_available_detectors(&self) -> Vec<&str> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn detector_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 372 | pub fn get_detector_info(&self, name: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DetectorInfo` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:385:12 [INFO] [stdout] | [INFO] [stdout] 385 | pub struct DetectorInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_code_snippet` is never used [INFO] [stdout] --> src/detectors/mod.rs:401:8 [INFO] [stdout] | [INFO] [stdout] 401 | pub fn extract_code_snippet(content: &str, line: usize, context_lines: usize) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_numeric_literal` is never used [INFO] [stdout] --> src/detectors/mod.rs:421:8 [INFO] [stdout] | [INFO] [stdout] 421 | pub fn is_numeric_literal(expr: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_large_number` is never used [INFO] [stdout] --> src/detectors/mod.rs:425:8 [INFO] [stdout] | [INFO] [stdout] 425 | pub fn is_large_number(value: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_access_control_patterns` is never used [INFO] [stdout] --> src/detectors/mod.rs:429:8 [INFO] [stdout] | [INFO] [stdout] 429 | pub fn has_access_control_patterns(function_name: &str, content: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_cyclomatic_complexity` is never used [INFO] [stdout] --> src/detectors/mod.rs:448:8 [INFO] [stdout] | [INFO] [stdout] 448 | pub fn calculate_cyclomatic_complexity(content: &str) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `detect_external_calls` is never used [INFO] [stdout] --> src/detectors/mod.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn detect_external_calls(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnalysisStatistics` is never constructed [INFO] [stdout] --> src/detectors/mod.rs:482:12 [INFO] [stdout] | [INFO] [stdout] 482 | pub struct AnalysisStatistics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_findings` are never used [INFO] [stdout] --> src/detectors/mod.rs:494:12 [INFO] [stdout] | [INFO] [stdout] 493 | impl AnalysisStatistics { [INFO] [stdout] | ----------------------- associated items in this implementation [INFO] [stdout] 494 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 507 | pub fn add_findings(&mut self, findings: &[Finding]) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `grouping_key` is never used [INFO] [stdout] --> src/detectors/mod.rs:594:12 [INFO] [stdout] | [INFO] [stdout] 538 | impl GroupedFinding { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 594 | pub fn grouping_key(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_reentrancy_patterns` is never used [INFO] [stdout] --> src/detectors/reentrancy.rs:420:8 [INFO] [stdout] | [INFO] [stdout] 418 | impl ReentrancyVisitor { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] 419 | /// Analyze reentrancy patterns in the function [INFO] [stdout] 420 | fn analyze_reentrancy_patterns(&mut self, function: &SwayFunction) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `ast_analyzer` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InputValidationDetector { [INFO] [stdout] | ----------------------- field in this struct [INFO] [stdout] 8 | ast_analyzer: SwayAstAnalyzer, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `validation_type` is never read [INFO] [stdout] --> src/detectors/input_validation.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ParameterAnalysis { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 26 | pub validation_type: Option, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ParameterAnalysis` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `check_type`, `parameter`, `condition`, and `effectiveness` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub struct ValidationCheck { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 32 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | pub check_type: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 34 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 35 | pub condition: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 36 | pub effectiveness: f64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ValidationCheck` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `line`, `description`, `risk_level`, and `parameters_used` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 40 | pub struct RiskyOperation { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 41 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 42 | pub operation_type: String, [INFO] [stdout] 43 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 44 | pub risk_level: RiskLevel, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | pub parameters_used: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskyOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `parameter`, `type_`, `line`, and `description` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 49 | pub struct MissingValidation { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 50 | pub parameter: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 51 | pub type_: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 52 | pub line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] 53 | pub risk_level: RiskLevel, [INFO] [stdout] 54 | pub description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MissingValidation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pattern_type`, `severity`, and `confidence` are never read [INFO] [stdout] --> src/detectors/input_validation.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct RiskPattern { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 59 | pub pattern_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 60 | pub severity: Severity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 61 | pub description: String, [INFO] [stdout] 62 | pub confidence: f64, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RiskPattern` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `has_deadline_check` is never read [INFO] [stdout] --> src/detectors/business_logic.rs:23:13 [INFO] [stdout] | [INFO] [stdout] 15 | struct BizState { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | has_deadline_check: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 16 | struct ImportInfo { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 20 | line: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `module_imports` is never read [INFO] [stdout] --> src/detectors/unused_import.rs:27:13 [INFO] [stdout] | [INFO] [stdout] 24 | struct ImportState { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | module_imports: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ImportState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `finding_type`, `severity`, and `context` are never read [INFO] [stdout] --> src/detectors/ast_visitor.rs:15:9 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct AstFinding { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 15 | pub finding_type: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 16 | pub severity: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub context: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `AstFinding` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BaseAstVisitor` is never constructed [INFO] [stdout] --> src/detectors/ast_visitor.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 44 | pub struct BaseAstVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated functions are never used [INFO] [stdout] --> src/detectors/ast_visitor.rs:291:12 [INFO] [stdout] | [INFO] [stdout] 262 | impl SemanticAnalyzer { [INFO] [stdout] | --------------------- associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 291 | pub fn is_binary_operation(expr: &SwayExpression, operator: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 300 | pub fn is_literal(expr: &SwayExpression, value: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 318 | pub fn is_comparison_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 330 | pub fn is_arithmetic_operation(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 342 | pub fn is_storage_access(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 368 | pub fn is_require_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 373 | pub fn is_assert_statement(expr: &SwayExpression) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `structs`, `enums`, and `constants` are never read [INFO] [stdout] --> src/parser.rs:17:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SwayAst { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 17 | pub structs: Vec, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 18 | pub enums: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 19 | pub traits: Vec, [INFO] [stdout] 20 | pub constants: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayAst` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/parser.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 24 | pub struct SwayFunction { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | pub return_type: Option, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | pub is_storage_function: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 32 | pub storage_reads: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub is_payable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 37 | pub is_test: bool, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | pub is_script: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 39 | pub is_contract: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Internal` is never constructed [INFO] [stdout] --> src/parser.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 44 | pub enum FunctionVisibility { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Internal, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FunctionVisibility` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `span` is never read [INFO] [stdout] --> src/parser.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 51 | pub struct SwayParameter { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 54 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayParameter` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `is_reference`, `is_mutable`, and `span` are never read [INFO] [stdout] --> src/parser.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub struct SwayType { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 59 | pub name: String, [INFO] [stdout] 60 | pub is_reference: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 61 | pub is_mutable: bool, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 62 | pub span: Span, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `line_number` is never read [INFO] [stdout] --> src/parser.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct SwayStatement { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 69 | pub line_number: usize, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SwayStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/parser.rs:74:5 [INFO] [stdout] | [INFO] [stdout] 73 | pub enum StatementKind { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 74 | Expression(Box), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 75 | Let(LetStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 76 | Return(Option>), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 77 | Break, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 78 | Continue, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 79 | If(IfStatement), [INFO] [stdout] | ^^ [INFO] [stdout] 80 | While(WhileStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 81 | For(ForStatement), [INFO] [stdout] | ^^^ [INFO] [stdout] 82 | Match(MatchStatement), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 83 | Block(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 84 | Storage(StorageStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 85 | Require(RequireStatement), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 86 | Assert(AssertStatement), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StatementKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `type_` is never read [INFO] [stdout] --> src/parser.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 90 | pub struct LetStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 91 | pub pattern: SwayPattern, [INFO] [stdout] 92 | pub type_: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LetStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:111:9 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ForStatement { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 111 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ForStatement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `pattern` is never read [INFO] [stdout] --> src/parser.rs:124:9 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct MatchArm { [INFO] [stdout] | -------- field in this struct [INFO] [stdout] 124 | pub pattern: SwayPattern, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MatchArm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Read` is never constructed [INFO] [stdout] --> src/parser.rs:137:5 [INFO] [stdout] | [INFO] [stdout] 136 | pub enum StorageOperation { [INFO] [stdout] | ---------------- variant in this enum [INFO] [stdout] 137 | Read, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StorageOperation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [WARN] too many lines in the log, truncating it