[INFO] cloning repository https://github.com/lostbombus/twordle
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/lostbombus/twordle" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flostbombus%2Ftwordle", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flostbombus%2Ftwordle'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 065259b16c5b02cc8353f5ea2c95410fe00ce3a0
[INFO] testing lostbombus/twordle against 1.98.0-beta.1 for beta-1.98-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flostbombus%2Ftwordle" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/lostbombus/twordle
[INFO] finished tweaking git repo https://github.com/lostbombus/twordle
[INFO] tweaked toml for git repo https://github.com/lostbombus/twordle written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/lostbombus/twordle on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/lostbombus/twordle 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" "+1.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d
[INFO] running `Command { std: "docker" "start" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling lru v0.16.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling object v0.37.3
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling gimli v0.32.3
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling color-spantrace v0.3.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling rustc-demangle v0.1.27
[INFO] [stderr]    Compiling chacha20 v0.10.0
[INFO] [stderr]    Compiling tracing-error v0.2.1
[INFO] [stderr]    Compiling rand v0.10.1
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling addr2line v0.25.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling backtrace v0.3.76
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling color-eyre v0.6.5
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling twordle v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `CharMatch`
[INFO] [stdout]  --> src/twordle.rs:3:19
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::word::{CharMatch, Word, WordMatch};
[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: `std::fmt`
[INFO] [stdout]  --> src/keyboard.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fmt;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/keyboard.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stdout]   --> src/keyboard.rs:7:22
[INFO] [stdout]    |
[INFO] [stdout]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout]  8 |     style::{Stylize, Style},
[INFO] [stdout]  9 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     text::{Line, Text, Span},
[INFO] [stdout]    |            ^^^^  ^^^^  ^^^^
[INFO] [stdout] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 12 |     DefaultTerminal, Frame,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/twordleview.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stdout]   --> src/twordleview.rs:7:22
[INFO] [stdout]    |
[INFO] [stdout]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout]  8 |     style::{Stylize, Style},
[INFO] [stdout]  9 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     text::{Line, Text, Span},
[INFO] [stdout]    |            ^^^^  ^^^^  ^^^^
[INFO] [stdout] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 12 |     DefaultTerminal, Frame,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::key::Key`
[INFO] [stdout]   --> src/twordleview.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::key::Key;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::key_type::KeyType`
[INFO] [stdout]   --> src/twordleview.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use crate::key_type::KeyType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::button::Button`
[INFO] [stdout]   --> src/twordleview.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::button::Button;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bail`
[INFO] [stdout]  --> src/ui.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 |     eyre::{bail, WrapErr},
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Line`, `Text`, `Widget`, `buffer::Buffer`, and `symbols::border`
[INFO] [stdout]   --> src/ui.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     buffer::Buffer,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 15 |     text::{Line, Text},
[INFO] [stdout]    |            ^^^^  ^^^^
[INFO] [stdout] 16 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^             ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/wordlist.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, BufRead, BufReader};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/keyboard.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |     style::{Stylize, Style},
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/twordleview.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |     style::{Stylize, Style},
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `style::Stylize`
[INFO] [stdout]   --> src/ui.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     style::Stylize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/ui.rs:172:32
[INFO] [stdout]     |
[INFO] [stdout] 172 |             MouseEventKind::Up(b) => {
[INFO] [stdout]     |                                ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/ui.rs:190:34
[INFO] [stdout]     |
[INFO] [stdout] 190 |             MouseEventKind::Down(b) => {
[INFO] [stdout]     |                                  ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get`, `contains`, and `remove_first` are never used
[INFO] [stdout]   --> src/word.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl Word {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn get(&self, index: usize) -> Option<char> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn contains(&self, c: char) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     fn remove_first(v: &Vec<(usize,char)>, target: char) -> Option<(usize,Vec<(usize,char)>)> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `guessed_letters` is never used
[INFO] [stdout]    --> src/twordle.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl Twordle {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn guessed_letters(&self) -> HashSet<char> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key` is never read
[INFO] [stdout]  --> src/button.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Button {
[INFO] [stdout]   |            ------ field in this struct
[INFO] [stdout] 5 |     pub key: Key,
[INFO] [stdout]   |         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Button` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let _ = ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/ui.rs:152:33
[INFO] [stdout]     |
[INFO] [stdout] 152 |               .for_each(|(c,m)| { self.keyboard.set_key_type(*c,
[INFO] [stdout]     |  _________________________________^
[INFO] [stdout] 153 | |                 match m {
[INFO] [stdout] 154 | |                     CharMatch::NoMatch => match self.keyboard.key_type(*c) {
[INFO] [stdout] 155 | |                         Ok(KeyType::Special) => KeyType::Special,
[INFO] [stdout] ...   |
[INFO] [stdout] 160 | |             ); });
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 152 |             .for_each(|(c,m)| { let _ = self.keyboard.set_key_type(*c,
[INFO] [stdout]     |                                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/ui.rs:206:44
[INFO] [stdout]     |
[INFO] [stdout] 206 |             Event::Mouse(mouse_event) => { self.handle_mouse_event(mouse_event); },
[INFO] [stdout]     |                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 206 |             Event::Mouse(mouse_event) => { let _ = self.handle_mouse_event(mouse_event); },
[INFO] [stdout]     |                                            +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.88s
[INFO] running `Command { std: "docker" "inspect" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling claims v0.8.0
[INFO] [stderr]    Compiling twordle v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `assert_err` and `assert_ok`
[INFO] [stdout]    --> src/word.rs:118:47
[INFO] [stdout]     |
[INFO] [stdout] 118 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[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 imports: `assert_err_eq`, `assert_err`, and `assert_ok`
[INFO] [stdout]    --> src/twordle.rs:147:32
[INFO] [stdout]     |
[INFO] [stdout] 147 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[INFO] [stdout]     |                                ^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt`
[INFO] [stdout]  --> src/keyboard.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fmt;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/keyboard.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stdout]   --> src/keyboard.rs:7:22
[INFO] [stdout]    |
[INFO] [stdout]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout]  8 |     style::{Stylize, Style},
[INFO] [stdout]  9 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     text::{Line, Text, Span},
[INFO] [stdout]    |            ^^^^  ^^^^  ^^^^
[INFO] [stdout] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 12 |     DefaultTerminal, Frame,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `assert_err`, `assert_ok_eq`, and `assert_ok`
[INFO] [stdout]    --> src/keyboard.rs:192:18
[INFO] [stdout]     |
[INFO] [stdout] 192 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[INFO] [stdout]     |                  ^^^^^^^^^^^^                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/twordleview.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stdout]   --> src/twordleview.rs:7:22
[INFO] [stdout]    |
[INFO] [stdout]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout]  8 |     style::{Stylize, Style},
[INFO] [stdout]  9 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     text::{Line, Text, Span},
[INFO] [stdout]    |            ^^^^  ^^^^  ^^^^
[INFO] [stdout] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 12 |     DefaultTerminal, Frame,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::key::Key`
[INFO] [stdout]   --> src/twordleview.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::key::Key;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::key_type::KeyType`
[INFO] [stdout]   --> src/twordleview.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use crate::key_type::KeyType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::button::Button`
[INFO] [stdout]   --> src/twordleview.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::button::Button;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bail`
[INFO] [stdout]  --> src/ui.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 |     eyre::{bail, WrapErr},
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block`, `Line`, `Text`, `Widget`, `buffer::Buffer`, and `symbols::border`
[INFO] [stdout]   --> src/ui.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     buffer::Buffer,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     symbols::border,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 15 |     text::{Line, Text},
[INFO] [stdout]    |            ^^^^  ^^^^
[INFO] [stdout] 16 |     widgets::{Block, Paragraph, Widget},
[INFO] [stdout]    |               ^^^^^             ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/wordlist.rs:2:15
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::io::{self, BufRead, BufReader};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/keyboard.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |     style::{Stylize, Style},
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Stylize`
[INFO] [stdout]  --> src/twordleview.rs:8:13
[INFO] [stdout]   |
[INFO] [stdout] 8 |     style::{Stylize, Style},
[INFO] [stdout]   |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `style::Stylize`
[INFO] [stdout]   --> src/ui.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     style::Stylize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/keyboard.rs:196:13
[INFO] [stdout]     |
[INFO] [stdout] 196 |         let mut kw = KeyboardWidget::new();
[INFO] [stdout]     |             ----^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/ui.rs:172:32
[INFO] [stdout]     |
[INFO] [stdout] 172 |             MouseEventKind::Up(b) => {
[INFO] [stdout]     |                                ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/ui.rs:190:34
[INFO] [stdout]     |
[INFO] [stdout] 190 |             MouseEventKind::Down(b) => {
[INFO] [stdout]     |                                  ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `remove_first` is never used
[INFO] [stdout]   --> src/word.rs:37:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl Word {
[INFO] [stdout]    | --------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 37 |     fn remove_first(v: &Vec<(usize,char)>, target: char) -> Option<(usize,Vec<(usize,char)>)> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key` is never read
[INFO] [stdout]  --> src/button.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Button {
[INFO] [stdout]   |            ------ field in this struct
[INFO] [stdout] 5 |     pub key: Key,
[INFO] [stdout]   |         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Button` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let _ = ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/ui.rs:152:33
[INFO] [stdout]     |
[INFO] [stdout] 152 |               .for_each(|(c,m)| { self.keyboard.set_key_type(*c,
[INFO] [stdout]     |  _________________________________^
[INFO] [stdout] 153 | |                 match m {
[INFO] [stdout] 154 | |                     CharMatch::NoMatch => match self.keyboard.key_type(*c) {
[INFO] [stdout] 155 | |                         Ok(KeyType::Special) => KeyType::Special,
[INFO] [stdout] ...   |
[INFO] [stdout] 160 | |             ); });
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 152 |             .for_each(|(c,m)| { let _ = self.keyboard.set_key_type(*c,
[INFO] [stdout]     |                                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/ui.rs:206:44
[INFO] [stdout]     |
[INFO] [stdout] 206 |             Event::Mouse(mouse_event) => { self.handle_mouse_event(mouse_event); },
[INFO] [stdout]     |                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 206 |             Event::Mouse(mouse_event) => { let _ = self.handle_mouse_event(mouse_event); },
[INFO] [stdout]     |                                            +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1.68s
[INFO] running `Command { std: "docker" "inspect" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `assert_err` and `assert_ok`
[INFO] [stderr]    --> src/word.rs:118:47
[INFO] [stderr]     |
[INFO] [stderr] 118 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[INFO] [stderr]     |                                               ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `assert_err_eq`, `assert_err`, and `assert_ok`
[INFO] [stderr]    --> src/twordle.rs:147:32
[INFO] [stderr]     |
[INFO] [stderr] 147 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[INFO] [stderr]     |                                ^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fmt`
[INFO] [stderr]  --> src/keyboard.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::fmt;
[INFO] [stderr]   |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io`
[INFO] [stderr]  --> src/keyboard.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io;
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stderr]   --> src/keyboard.rs:7:22
[INFO] [stderr]    |
[INFO] [stderr]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stderr]    |                      ^^^^^^^^^
[INFO] [stderr]  8 |     style::{Stylize, Style},
[INFO] [stderr]  9 |     symbols::border,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 10 |     text::{Line, Text, Span},
[INFO] [stderr]    |            ^^^^  ^^^^  ^^^^
[INFO] [stderr] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 12 |     DefaultTerminal, Frame,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `assert_err`, `assert_ok_eq`, and `assert_ok`
[INFO] [stderr]    --> src/keyboard.rs:192:18
[INFO] [stderr]     |
[INFO] [stderr] 192 |     use claims::{assert_ok_eq, assert_err_eq, assert_ok, assert_err};
[INFO] [stderr]     |                  ^^^^^^^^^^^^                 ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io`
[INFO] [stderr]  --> src/twordleview.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io;
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Alignment`, `Block`, `DefaultTerminal`, `Frame`, `Line`, `Span`, `Text`, and `symbols::border`
[INFO] [stderr]   --> src/twordleview.rs:7:22
[INFO] [stderr]    |
[INFO] [stderr]  7 |     layout::{Layout, Alignment, Constraint, Rect},
[INFO] [stderr]    |                      ^^^^^^^^^
[INFO] [stderr]  8 |     style::{Stylize, Style},
[INFO] [stderr]  9 |     symbols::border,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 10 |     text::{Line, Text, Span},
[INFO] [stderr]    |            ^^^^  ^^^^  ^^^^
[INFO] [stderr] 11 |     widgets::{Block, Paragraph, Widget},
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 12 |     DefaultTerminal, Frame,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::key::Key`
[INFO] [stderr]   --> src/twordleview.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::key::Key;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::key_type::KeyType`
[INFO] [stderr]   --> src/twordleview.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | use crate::key_type::KeyType;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::button::Button`
[INFO] [stderr]   --> src/twordleview.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::button::Button;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `bail`
[INFO] [stderr]  --> src/ui.rs:7:12
[INFO] [stderr]   |
[INFO] [stderr] 7 |     eyre::{bail, WrapErr},
[INFO] [stderr]   |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Block`, `Line`, `Text`, `Widget`, `buffer::Buffer`, and `symbols::border`
[INFO] [stderr]   --> src/ui.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 |     buffer::Buffer,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 14 |     symbols::border,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 15 |     text::{Line, Text},
[INFO] [stderr]    |            ^^^^  ^^^^
[INFO] [stderr] 16 |     widgets::{Block, Paragraph, Widget},
[INFO] [stderr]    |               ^^^^^             ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self`
[INFO] [stderr]  --> src/wordlist.rs:2:15
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::io::{self, BufRead, BufReader};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Stylize`
[INFO] [stderr]  --> src/keyboard.rs:8:13
[INFO] [stderr]   |
[INFO] [stderr] 8 |     style::{Stylize, Style},
[INFO] [stderr]   |             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Stylize`
[INFO] [stderr]  --> src/twordleview.rs:8:13
[INFO] [stderr]   |
[INFO] [stderr] 8 |     style::{Stylize, Style},
[INFO] [stderr]   |             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `style::Stylize`
[INFO] [stderr]   --> src/ui.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 |     style::Stylize,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/keyboard.rs:196:13
[INFO] [stderr]     |
[INFO] [stderr] 196 |         let mut kw = KeyboardWidget::new();
[INFO] [stderr]     |             ----^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `b`
[INFO] [stderr]    --> src/ui.rs:172:32
[INFO] [stderr]     |
[INFO] [stderr] 172 |             MouseEventKind::Up(b) => {
[INFO] [stderr]     |                                ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `b`
[INFO] [stderr]    --> src/ui.rs:190:34
[INFO] [stderr]     |
[INFO] [stderr] 190 |             MouseEventKind::Down(b) => {
[INFO] [stderr]     |                                  ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `remove_first` is never used
[INFO] [stderr]   --> src/word.rs:37:8
[INFO] [stderr]    |
[INFO] [stderr] 18 | impl Word {
[INFO] [stderr]    | --------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 37 |     fn remove_first(v: &Vec<(usize,char)>, target: char) -> Option<(usize,Vec<(usize,char)>)> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `key` is never read
[INFO] [stderr]  --> src/button.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct Button {
[INFO] [stderr]   |            ------ field in this struct
[INFO] [stderr] 5 |     pub key: Key,
[INFO] [stderr]   |         ^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `Button` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]   --> src/main.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 |     ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]    |
[INFO] [stderr] 16 |     let _ = ui::run(Twordle::new(read_word_list("data/words.txt").unwrap()));
[INFO] [stderr]    |     +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/ui.rs:152:33
[INFO] [stderr]     |
[INFO] [stderr] 152 |               .for_each(|(c,m)| { self.keyboard.set_key_type(*c,
[INFO] [stderr]     |  _________________________________^
[INFO] [stderr] 153 | |                 match m {
[INFO] [stderr] 154 | |                     CharMatch::NoMatch => match self.keyboard.key_type(*c) {
[INFO] [stderr] 155 | |                         Ok(KeyType::Special) => KeyType::Special,
[INFO] [stderr] ...   |
[INFO] [stderr] 160 | |             ); });
[INFO] [stderr]     | |_____________^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 152 |             .for_each(|(c,m)| { let _ = self.keyboard.set_key_type(*c,
[INFO] [stderr]     |                                 +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/ui.rs:206:44
[INFO] [stderr]     |
[INFO] [stderr] 206 |             Event::Mouse(mouse_event) => { self.handle_mouse_event(mouse_event); },
[INFO] [stderr]     |                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 206 |             Event::Mouse(mouse_event) => { let _ = self.handle_mouse_event(mouse_event); },
[INFO] [stderr]     |                                            +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: `twordle` (bin "twordle" test) generated 25 warnings (run `cargo fix --bin "twordle" -p twordle --tests` to apply 17 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.18s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/twordle-5abd21a813c3f0fa)
[INFO] [stdout] 
[INFO] [stdout] running 19 tests
[INFO] [stdout] test keyboard::tests::key_type_invalid_key ... ok
[INFO] [stdout] test keyboard::tests::set_key_type_updates ... ok
[INFO] [stdout] test twordle::tests::guess_only_word ... ok
[INFO] [stdout] test keyboard::tests::set_key_type_invalid_key ... ok
[INFO] [stdout] test twordle::tests::guessed_letters ... ok
[INFO] [stdout] test word::tests::contains_false ... ok
[INFO] [stdout] test twordle::tests::not_in_word_list ... ok
[INFO] [stdout] test word::tests::contains_true ... ok
[INFO] [stdout] test twordle::tests::word_is_only_word ... ok
[INFO] [stdout] test word::tests::get_valid ... ok
[INFO] [stdout] test word::tests::match_dup ... ok
[INFO] [stdout] test word::tests::get_out_of_bounds ... ok
[INFO] [stdout] test word::tests::try_from_too_short ... ok
[INFO] [stdout] test word::tests::match_loc ... ok
[INFO] [stdout] test word::tests::match_all ... ok
[INFO] [stdout] test word::tests::match_none ... ok
[INFO] [stdout] test word::tests::try_from_too_long ... ok
[INFO] [stdout] test word::tests::match_parameter ... ok
[INFO] [stdout] test word::tests::try_from_valid ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d", kill_on_drop: false }`
[INFO] [stdout] 720f5ce5b21f03a38c6b60755e9e784e1352093b4da13761ce2bd25ef233068d
