[INFO] fetching crate swayscan 0.2.9...
[INFO] testing swayscan-0.2.9 against master#c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38 for pr-146098-8
[INFO] extracting crate swayscan 0.2.9 into /workspace/builds/worker-1-tc1/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-1-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate swayscan 0.2.9 on toolchain c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "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" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: file `/workspace/builds/worker-1-tc1/source/src/main.rs` found to be present in multiple build targets:
[INFO] [stderr]   * `bin` target `forc-swayscan`
[INFO] [stderr]   * `bin` target `swayscan`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded wit-bindgen-rt v0.39.0
[INFO] [stderr]   Downloaded windows-targets v0.53.2
[INFO] [stderr]   Downloaded in_definite v1.0.0
[INFO] [stderr]   Downloaded sway-utils v0.68.9
[INFO] [stderr]   Downloaded proc-macro2 v1.0.95
[INFO] [stderr]   Downloaded android-tzdata v0.1.1
[INFO] [stderr]   Downloaded phf v0.11.3
[INFO] [stderr]   Downloaded structopt-derive v0.4.18
[INFO] [stderr]   Downloaded heck v0.3.3
[INFO] [stderr]   Downloaded anyhow v1.0.98
[INFO] [stderr]   Downloaded fuel-merkle v0.60.2
[INFO] [stderr]   Downloaded serde_json v1.0.141
[INFO] [stderr]   Downloaded cc v1.2.30
[INFO] [stderr]   Downloaded clap_builder v4.5.41
[INFO] [stderr]   Downloaded chrono v0.4.41
[INFO] [stderr]   Downloaded syn v2.0.104
[INFO] [stderr]   Downloaded winnow v0.7.12
[INFO] [stderr]   Downloaded indexmap v2.10.0
[INFO] [stderr]   Downloaded cfg-if v1.0.1
[INFO] [stderr]   Downloaded hashbrown v0.15.4
[INFO] [stderr]   Downloaded rustversion v1.0.21
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.26
[INFO] [stderr]   Downloaded fuel-tx v0.60.2
[INFO] [stderr]   Downloaded unicode-bidi v0.3.18
[INFO] [stderr]   Downloaded libc v0.2.174
[INFO] [stderr]   Downloaded structopt v0.3.26
[INFO] [stderr]   Downloaded clap v4.5.41
[INFO] [stderr]   Downloaded sway-error v0.68.9
[INFO] [stderr]   Downloaded sway-parse v0.68.9
[INFO] [stderr]   Downloaded tempfile v3.20.0
[INFO] [stderr]   Downloaded bitflags v2.9.1
[INFO] [stderr]   Downloaded unicode-ident v1.0.18
[INFO] [stderr]   Downloaded siphasher v1.0.1
[INFO] [stderr]   Downloaded sway-ast v0.68.9
[INFO] [stderr]   Downloaded tinyvec v1.9.0
[INFO] [stderr]   Downloaded fuel-storage v0.60.2
[INFO] [stderr]   Downloaded redox_syscall v0.5.13
[INFO] [stderr]   Downloaded sway-types v0.68.9
[INFO] [stderr]   Downloaded phf_shared v0.11.3
[INFO] [stderr]   Downloaded anstream v0.6.19
[INFO] [stderr]   Downloaded clap_derive v4.5.41
[INFO] [stderr]   Downloaded fuel-asm v0.60.2
[INFO] [stderr]   Downloaded linux-raw-sys v0.9.4
[INFO] [stderr]   Downloaded thiserror-impl v2.0.12
[INFO] [stderr]   Downloaded fuel-crypto v0.60.2
[INFO] [stderr]   Downloaded log v0.4.27
[INFO] [stderr]   Downloaded uuid v1.17.0
[INFO] [stderr]   Downloaded phf_generator v0.11.3
[INFO] [stderr]   Downloaded postcard v1.1.2
[INFO] [stderr]   Downloaded rustix v1.0.8
[INFO] [stderr]   Downloaded phf_macros v0.11.3
[INFO] [stderr]   Downloaded wasi v0.14.2+wasi-0.2.4
[INFO] [stderr]   Downloaded extension-trait v1.0.2
[INFO] [stderr]   Downloaded anstyle-query v1.1.3
[INFO] [stderr]   Downloaded anstyle-wincon v3.0.9
[INFO] [stderr]   Downloaded sway-features v0.68.9
[INFO] [stderr]   Downloaded fuel-derive v0.60.2
[INFO] [stderr]   Downloaded fuel-types v0.60.2
[INFO] [stderr]   Downloaded thiserror v2.0.12
[INFO] [stderr]   Downloaded errno v0.3.13
[INFO] [stderr]   Downloaded zerocopy v0.8.26
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 11d0f4f637e6f41498e77662c2d44e76f1d542d95a415b6f7539da7f69d14dd6
[INFO] running `Command { std: "docker" "start" "-a" "11d0f4f637e6f41498e77662c2d44e76f1d542d95a415b6f7539da7f69d14dd6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "11d0f4f637e6f41498e77662c2d44e76f1d542d95a415b6f7539da7f69d14dd6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "11d0f4f637e6f41498e77662c2d44e76f1d542d95a415b6f7539da7f69d14dd6", kill_on_drop: false }`
[INFO] [stdout] 11d0f4f637e6f41498e77662c2d44e76f1d542d95a415b6f7539da7f69d14dd6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 21e04420f88e899170cdcc7daf6b8ea329e48d044447ee89f93e13dd03695d56
[INFO] running `Command { std: "docker" "start" "-a" "21e04420f88e899170cdcc7daf6b8ea329e48d044447ee89f93e13dd03695d56", 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 unicode-ident v1.0.18
[INFO] [stderr]    Compiling cfg-if v1.0.1
[INFO] [stderr]    Compiling typenum v1.18.0
[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 serde v1.0.219
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling semver v1.0.26
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling base16ct v0.2.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling cc v1.2.30
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling keccak v0.1.5
[INFO] [stderr]    Compiling rustversion v1.0.21
[INFO] [stderr]    Compiling radium v0.7.0
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]    Compiling tap v1.0.1
[INFO] [stderr]    Compiling bech32 v0.9.1
[INFO] [stderr]    Compiling base64 v0.21.7
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling wyz v0.5.1
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling funty v2.0.0
[INFO] [stderr]    Compiling hash32 v0.2.1
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling stable_deref_trait v1.2.0
[INFO] [stderr]    Compiling hashbrown v0.15.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling unicode-xid v0.2.6
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling heapless v0.7.17
[INFO] [stderr]    Compiling fuel-storage v0.60.2
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling winnow v0.7.12
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling base64ct v1.6.0
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling siphasher v1.0.1
[INFO] [stderr]    Compiling anstyle-parse v0.2.7
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling colorchoice v1.0.4
[INFO] [stderr]    Compiling anstyle-query v1.1.3
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.1
[INFO] [stderr]    Compiling anstyle v1.0.11
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling bitvec v1.0.1
[INFO] [stderr]    Compiling ff v0.13.1
[INFO] [stderr]    Compiling parking_lot v0.12.4
[INFO] [stderr]    Compiling group v0.13.0
[INFO] [stderr]    Compiling in_definite v1.0.0
[INFO] [stderr]    Compiling anstream v0.6.19
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling clap_lex v0.7.5
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling indexmap v2.10.0
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling clap_builder v4.5.41
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling secp256k1-sys v0.10.1
[INFO] [stderr]    Compiling unicode-segmentation v1.12.0
[INFO] [stderr]    Compiling serde_json v1.0.141
[INFO] [stderr]    Compiling textwrap v0.11.0
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling anyhow v1.0.98
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]    Compiling clap v2.34.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.63
[INFO] [stderr]    Compiling itoa v1.0.15
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]    Compiling ryu v1.0.20
[INFO] [stderr]    Compiling unicode-bidi v0.3.18
[INFO] [stderr]    Compiling colored v2.2.0
[INFO] [stderr]    Compiling hashbrown v0.13.2
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling strum_macros v0.24.3
[INFO] [stderr]    Compiling structopt-derive v0.4.18
[INFO] [stderr]    Compiling secp256k1 v0.30.0
[INFO] [stderr]    Compiling zeroize_derive v1.4.2
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling fuel-derive v0.60.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling enum-ordinalize-derive v4.3.1
[INFO] [stderr]    Compiling derive_more-impl v1.0.0
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling clap_derive v4.5.41
[INFO] [stderr]    Compiling phf_macros v0.11.3
[INFO] [stderr]    Compiling extension-trait v1.0.2
[INFO] [stderr]    Compiling enum-ordinalize v4.3.0
[INFO] [stderr]    Compiling educe v0.6.0
[INFO] [stderr]    Compiling zeroize v1.8.1
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling structopt v0.3.26
[INFO] [stderr]    Compiling der v0.7.10
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]    Compiling strum v0.24.1
[INFO] [stderr]    Compiling derive_more v1.0.0
[INFO] [stderr]    Compiling cobs v0.3.0
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.6
[INFO] [stderr]    Compiling crypto-bigint v0.5.5
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling clap v4.5.41
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling signature v2.2.0
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling ripemd v0.1.3
[INFO] [stderr]    Compiling sha3 v0.10.8
[INFO] [stderr]    Compiling ed25519 v2.2.3
[INFO] [stderr]    Compiling rfc6979 v0.4.0
[INFO] [stderr]    Compiling pbkdf2 v0.12.2
[INFO] [stderr]    Compiling bs58 v0.5.1
[INFO] [stderr]    Compiling fuel-merkle v0.60.2
[INFO] [stderr]    Compiling spki v0.7.3
[INFO] [stderr]    Compiling sec1 v0.7.3
[INFO] [stderr]    Compiling pkcs8 v0.10.2
[INFO] [stderr]    Compiling ed25519-dalek v2.2.0
[INFO] [stderr]    Compiling elliptic-curve v0.13.8
[INFO] [stderr]    Compiling ecdsa v0.16.9
[INFO] [stderr]    Compiling primeorder v0.13.6
[INFO] [stderr]    Compiling k256 v0.13.4
[INFO] [stderr]    Compiling p256 v0.13.2
[INFO] [stderr]    Compiling coins-core v0.8.7
[INFO] [stderr]    Compiling fuel-types v0.60.2
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling bitflags v2.9.1
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling sway-utils v0.68.9
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling uuid v1.17.0
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling postcard v1.1.2
[INFO] [stderr]    Compiling coins-bip32 v0.8.7
[INFO] [stderr]    Compiling coins-bip39 v0.8.7
[INFO] [stderr]    Compiling fuel-crypto v0.60.2
[INFO] [stderr]    Compiling fuel-asm 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-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, Estima...
[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, Estima...
[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<Finding> {
[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<Finding> {
[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: 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<Finding> {
[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: 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 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<Finding> {
[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/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/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/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/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/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<Finding> {
[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<Finding> {
[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 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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<Finding> {
[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/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/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<Finding> {
[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<Finding> {
[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/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/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: 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<Finding> {
[INFO] [stdout]    |                                                                                              ^^^ help: if this is intentional, prefix it with an underscore: `_ast`
[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: `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<Finding> {
[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 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[INFO] [stdout]    |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_ast`
[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/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<Finding> {
[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<Finding> {
[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<Finding> {
[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: 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: `control_flow_nodes`
[INFO] [stdout]    --> src/analyzer.rs:667:9
[INFO] [stdout]     |
[INFO] [stdout] 667 |         control_flow_nodes: &mut Vec<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: `access_controls`
[INFO] [stdout]    --> src/analyzer.rs:818:9
[INFO] [stdout]     |
[INFO] [stdout] 818 |         access_controls: &mut Vec<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_reentrancy_vulns`
[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<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: variable `count` is assigned to, but never used
[INFO] [stdout]   --> src/utils.rs:63:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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<SwayExpression>),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 75 |     Let(LetStatement),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 76 |     Return(Option<Box<SwayExpression>>),
[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<SwayStatement>),
[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<SwayType>,
[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<SwayExpression>,
[INFO] [stdout] 145 |     pub message: Option<String>,
[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<SwayExpression>,
[INFO] [stdout] 151 |     pub message: Option<String>,
[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<SwayStatement>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 171 |     Array(Vec<SwayExpression>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 172 |     Tuple(Vec<SwayExpression>),
[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<SwayExpression>),
[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<SwayPattern>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 260 |     Struct(StructPattern),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 261 |     Or(Vec<SwayPattern>),
[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<StructPatternField>,
[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<String>,
[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<SwayStructField>,
[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<SwayEnumVariant>,
[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<SwayType>,
[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<SwayTraitFunction>,
[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<SwayParameter>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 329 |     pub return_type: Option<SwayType>,
[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<SwayExpression>,
[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<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn report_text(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn report_json(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn report_sarif(&self, _findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn report_csv(&self, _findings: Vec<Finding>) -> 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<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn report_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn scanner_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn detector_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn validation_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn file_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn serialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn deserialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn unknown_error(message: impl Into<String>) -> 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<String, Vec<String>>,
[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<String>,
[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<AccessControlCheck>,
[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<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 81 |     pub predecessors: Vec<String>,
[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<SwayStatement>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 88 |     pub else_branch: Option<Vec<SwayStatement>>,
[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<SwayStatement>,
[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<SwayStatement>,
[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<SwayExpression>,
[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<String>, Vec<String>) {
[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<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn std::error::Error>> {
[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<P: AsRef<Path>>(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:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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<SwayExpression>),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 75 |     Let(LetStatement),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 76 |     Return(Option<Box<SwayExpression>>),
[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<SwayStatement>),
[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<SwayType>,
[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<SwayExpression>,
[INFO] [stdout] 145 |     pub message: Option<String>,
[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<SwayExpression>,
[INFO] [stdout] 151 |     pub message: Option<String>,
[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<SwayStatement>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 171 |     Array(Vec<SwayExpression>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 172 |     Tuple(Vec<SwayExpression>),
[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<SwayExpression>),
[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<SwayPattern>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 260 |     Struct(StructPattern),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 261 |     Or(Vec<SwayPattern>),
[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<StructPatternField>,
[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<String>,
[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<SwayStructField>,
[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<SwayEnumVariant>,
[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<SwayType>,
[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<SwayTraitFunction>,
[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<SwayParameter>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 329 |     pub return_type: Option<SwayType>,
[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<SwayExpression>,
[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<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn report_text(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn report_json(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn report_sarif(&self, _findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn report_csv(&self, _findings: Vec<Finding>) -> 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<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn report_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn scanner_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn detector_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn validation_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn file_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn serialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn deserialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn unknown_error(message: impl Into<String>) -> 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<String, Vec<String>>,
[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<String>,
[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<AccessControlCheck>,
[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<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 81 |     pub predecessors: Vec<String>,
[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<SwayStatement>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 88 |     pub else_branch: Option<Vec<SwayStatement>>,
[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<SwayStatement>,
[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<SwayStatement>,
[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<SwayExpression>,
[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<String>, Vec<String>) {
[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<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn std::error::Error>> {
[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<P: AsRef<Path>>(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 1m 29s
[INFO] running `Command { std: "docker" "inspect" "21e04420f88e899170cdcc7daf6b8ea329e48d044447ee89f93e13dd03695d56", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "21e04420f88e899170cdcc7daf6b8ea329e48d044447ee89f93e13dd03695d56", kill_on_drop: false }`
[INFO] [stdout] 21e04420f88e899170cdcc7daf6b8ea329e48d044447ee89f93e13dd03695d56
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4d94d5985bf8dcd2ad159344d2af11c48a0d853c8fbdec2bca4fc9866419f69e
[INFO] running `Command { std: "docker" "start" "-a" "4d94d5985bf8dcd2ad159344d2af11c48a0d853c8fbdec2bca4fc9866419f69e", 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 rustix v1.0.8
[INFO] [stderr]    Compiling linux-raw-sys v0.9.4
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling fuel-asm v0.60.2
[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-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] 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] [stderr] error: could not compile `swayscan` (test "integration_tests") due to 3 previous errors; 1 warning emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[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, Estima...
[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 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/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/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/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: `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, Estima...
[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 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, Estima...
[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 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/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/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/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: `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, Estima...
[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: `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 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<Finding> {
[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<Finding> {
[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 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<Finding> {
[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: 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 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<Finding> {
[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/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<Finding> {
[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<Finding> {
[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/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 variable: `ast`
[INFO] [stdout]   --> src/detectors/division_before_multiplication.rs:15:105
[INFO] [stdout]    |
[INFO] [stdout] 15 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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<Finding> {
[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<Finding> {
[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<Finding> {
[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/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/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: 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: 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/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<Finding> {
[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/access_control.rs:14:89
[INFO] [stdout]    |
[INFO] [stdout] 14 |     fn analyze_function_access_control(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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/boolean_comparison.rs:14:93
[INFO] [stdout]    |
[INFO] [stdout] 14 |     fn analyze_function_boolean_comparison(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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/reentrancy.rs:14:85
[INFO] [stdout]    |
[INFO] [stdout] 14 |     fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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: `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<Finding> {
[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<Finding> {
[INFO] [stdout]    |                                                                                       ^^^ help: if this is intentional, prefix it with an underscore: `_ast`
[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/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<Finding> {
[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/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: 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<Finding> {
[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: 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<Finding> {
[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<Finding> {
[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/reentrancy.rs:14:85
[INFO] [stdout]    |
[INFO] [stdout] 14 |     fn analyze_function_reentrancy(&self, function: &SwayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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: `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<Finding> {
[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<Finding> {
[INFO] [stdout]    |                                                                                       ^^^ help: if this is intentional, prefix it with an underscore: `_ast`
[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/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<Finding> {
[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/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/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/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/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/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 variable: `control_flow_nodes`
[INFO] [stdout]    --> src/analyzer.rs:667:9
[INFO] [stdout]     |
[INFO] [stdout] 667 |         control_flow_nodes: &mut Vec<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: 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: unused variable: `access_controls`
[INFO] [stdout]    --> src/analyzer.rs:818:9
[INFO] [stdout]     |
[INFO] [stdout] 818 |         access_controls: &mut Vec<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[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/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<Finding> {
[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<Finding> {
[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 | ...ayFunction, file: &SwayFile, ast: &SwayAst) -> Option<Finding> {
[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<Finding> {
[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<Finding> {
[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<Finding> {
[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: `control_flow_nodes`
[INFO] [stdout]    --> src/analyzer.rs:667:9
[INFO] [stdout]     |
[INFO] [stdout] 667 |         control_flow_nodes: &mut Vec<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: `access_controls`
[INFO] [stdout]    --> src/analyzer.rs:818:9
[INFO] [stdout]     |
[INFO] [stdout] 818 |         access_controls: &mut Vec<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[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:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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<SwayExpression>),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 75 |     Let(LetStatement),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 76 |     Return(Option<Box<SwayExpression>>),
[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<SwayStatement>),
[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<SwayType>,
[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<SwayExpression>,
[INFO] [stdout] 145 |     pub message: Option<String>,
[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<SwayExpression>,
[INFO] [stdout] 151 |     pub message: Option<String>,
[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<SwayStatement>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 171 |     Array(Vec<SwayExpression>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 172 |     Tuple(Vec<SwayExpression>),
[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<SwayExpression>),
[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<SwayPattern>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 260 |     Struct(StructPattern),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 261 |     Or(Vec<SwayPattern>),
[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<StructPatternField>,
[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<String>,
[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<SwayStructField>,
[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<SwayEnumVariant>,
[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<SwayType>,
[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<SwayTraitFunction>,
[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<SwayParameter>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 329 |     pub return_type: Option<SwayType>,
[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<SwayExpression>,
[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<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn report_text(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn report_json(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn report_sarif(&self, _findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn report_csv(&self, _findings: Vec<Finding>) -> 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<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn report_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn scanner_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn detector_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn validation_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn file_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn serialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn deserialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn unknown_error(message: impl Into<String>) -> 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<String, Vec<String>>,
[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<String>,
[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<AccessControlCheck>,
[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<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 81 |     pub predecessors: Vec<String>,
[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<SwayStatement>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 88 |     pub else_branch: Option<Vec<SwayStatement>>,
[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<SwayStatement>,
[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: 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: 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<SwayStatement>,
[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<SwayExpression>,
[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<String>, Vec<String>) {
[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<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn std::error::Error>> {
[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<P: AsRef<Path>>(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:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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<SwayExpression>),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 75 |     Let(LetStatement),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 76 |     Return(Option<Box<SwayExpression>>),
[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<SwayStatement>),
[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<SwayType>,
[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<SwayExpression>,
[INFO] [stdout] 145 |     pub message: Option<String>,
[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<SwayExpression>,
[INFO] [stdout] 151 |     pub message: Option<String>,
[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<SwayStatement>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 171 |     Array(Vec<SwayExpression>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 172 |     Tuple(Vec<SwayExpression>),
[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<SwayExpression>),
[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<SwayPattern>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 260 |     Struct(StructPattern),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 261 |     Or(Vec<SwayPattern>),
[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<StructPatternField>,
[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<String>,
[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<SwayStructField>,
[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<SwayEnumVariant>,
[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<SwayType>,
[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<SwayTraitFunction>,
[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<SwayParameter>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 329 |     pub return_type: Option<SwayType>,
[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<SwayExpression>,
[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<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn report_text(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn report_json(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn report_sarif(&self, _findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn report_csv(&self, _findings: Vec<Finding>) -> 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<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn report_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn scanner_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn detector_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn validation_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn file_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn serialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn deserialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn unknown_error(message: impl Into<String>) -> 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<String, Vec<String>>,
[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<String>,
[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<AccessControlCheck>,
[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<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 81 |     pub predecessors: Vec<String>,
[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<SwayStatement>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 88 |     pub else_branch: Option<Vec<SwayStatement>>,
[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<SwayStatement>,
[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<SwayStatement>,
[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<SwayExpression>,
[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<String>, Vec<String>) {
[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<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn std::error::Error>> {
[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<P: AsRef<Path>>(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: `control_flow_nodes`
[INFO] [stdout]    --> src/analyzer.rs:667:9
[INFO] [stdout]     |
[INFO] [stdout] 667 |         control_flow_nodes: &mut Vec<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: `access_controls`
[INFO] [stdout]    --> src/analyzer.rs:818:9
[INFO] [stdout]     |
[INFO] [stdout] 818 |         access_controls: &mut Vec<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[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:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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<SwayExpression>),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 75 |     Let(LetStatement),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 76 |     Return(Option<Box<SwayExpression>>),
[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<SwayStatement>),
[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<SwayType>,
[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<SwayExpression>,
[INFO] [stdout] 145 |     pub message: Option<String>,
[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<SwayExpression>,
[INFO] [stdout] 151 |     pub message: Option<String>,
[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<SwayStatement>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 171 |     Array(Vec<SwayExpression>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 172 |     Tuple(Vec<SwayExpression>),
[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<SwayExpression>),
[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<SwayPattern>),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 260 |     Struct(StructPattern),
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 261 |     Or(Vec<SwayPattern>),
[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<StructPatternField>,
[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<String>,
[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<SwayStructField>,
[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<SwayEnumVariant>,
[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<SwayType>,
[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<SwayTraitFunction>,
[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<SwayParameter>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 329 |     pub return_type: Option<SwayType>,
[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<SwayExpression>,
[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<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn report_text(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     fn report_json(&self, findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn report_sarif(&self, _findings: Vec<Finding>) -> Result<(), SwayscanError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     fn report_csv(&self, _findings: Vec<Finding>) -> 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<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn report_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn scanner_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn detector_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn validation_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn file_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn serialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn deserialization_error(message: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn unknown_error(message: impl Into<String>) -> 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<String, Vec<String>>,
[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<String>,
[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<AccessControlCheck>,
[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<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 81 |     pub predecessors: Vec<String>,
[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<SwayStatement>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 88 |     pub else_branch: Option<Vec<SwayStatement>>,
[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<SwayStatement>,
[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<SwayStatement>,
[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<SwayExpression>,
[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<String>, Vec<String>) {
[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<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn std::error::Error>> {
[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<P: AsRef<Path>>(path: P) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[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<ControlFlowNode>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_control_flow_nodes`
[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: 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: `access_controls`
[INFO] [stdout]    --> src/analyzer.rs:818:9
[INFO] [stdout]     |
[INFO] [stdout] 818 |         access_controls: &mut Vec<AccessControlCheck>,
[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<ReentrancyVulnerability>,
[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:9
[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: value assigned to `count` is never read
[INFO] [stdout]   --> src/utils.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |         count += 1;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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<PathBuf>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub parallel: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub fail_on: Option<SeverityLevel>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 22 |     pub baseline: Option<PathBuf>,
[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<String> {
[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<String>) -> 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<String, String>,
[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<dyn Detector>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn get_all_detectors(&self) -> Vec<&Box<dyn Detector>> {
[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<DetectorInfo> {
[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<String> {
[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<String>,
[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<String>,
[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<String>,
[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<SwayStruct>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub enums: Vec<SwayEnum>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub traits: Vec<SwayTrait>,
[INFO] [stdout] 20 |     pub constants: Vec<SwayConstant>,
[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<SwayType>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub is_storage_function: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub storage_reads: Vec<String>,
[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]    |         ^^^^^^^^^
[WARN] too many lines in the log, truncating it
