[INFO] cloning repository https://github.com/sh4ka/rust-adventure
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sh4ka/rust-adventure" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsh4ka%2Frust-adventure", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsh4ka%2Frust-adventure'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] dafc3f3b20bec4f369239f01172256ce90dd4758
[INFO] checking sh4ka/rust-adventure against master#8a65ee08296b36342bf7c3cdc15312ccbc357227 for pr-142704
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsh4ka%2Frust-adventure" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/sh4ka/rust-adventure on toolchain 8a65ee08296b36342bf7c3cdc15312ccbc357227
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8a65ee08296b36342bf7c3cdc15312ccbc357227" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/sh4ka/rust-adventure
[INFO] finished tweaking git repo https://github.com/sh4ka/rust-adventure
[INFO] tweaked toml for git repo https://github.com/sh4ka/rust-adventure written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/sh4ka/rust-adventure 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" "+8a65ee08296b36342bf7c3cdc15312ccbc357227" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+8a65ee08296b36342bf7c3cdc15312ccbc357227" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2683efee38567d4791283f2f8e4e05d76ff2b1ffc1967aba8d18bc90147910d5
[INFO] running `Command { std: "docker" "start" "-a" "2683efee38567d4791283f2f8e4e05d76ff2b1ffc1967aba8d18bc90147910d5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2683efee38567d4791283f2f8e4e05d76ff2b1ffc1967aba8d18bc90147910d5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2683efee38567d4791283f2f8e4e05d76ff2b1ffc1967aba8d18bc90147910d5", kill_on_drop: false }`
[INFO] [stdout] 2683efee38567d4791283f2f8e4e05d76ff2b1ffc1967aba8d18bc90147910d5
[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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+8a65ee08296b36342bf7c3cdc15312ccbc357227" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] ab1429ea19774fb5f5934646524f4080aa55fa3a208939a1ac9dc432db5ee90d
[INFO] running `Command { std: "docker" "start" "-a" "ab1429ea19774fb5f5934646524f4080aa55fa3a208939a1ac9dc432db5ee90d", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.172
[INFO] [stderr]    Compiling zerocopy v0.8.25
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking adventure-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Location`, `Passage`, and `find_passage`
[INFO] [stdout]  --> src/models/player/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::models::object::{Location, Item, NPC, Passage, find_location, find_npc, find_item_in_location, find_passage, find_item, PASSAG...
[INFO] [stdout]   |                             ^^^^^^^^             ^^^^^^^                                                  ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Class` and `Equipment`
[INFO] [stdout]  --> src/models/player/mod.rs:3:32
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::models::character::{Equipment, EquipmentType, WeaponType, ArmorType, Class, parse_new_character};
[INFO] [stdout]   |                                ^^^^^^^^^                                        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Write` and `self`
[INFO] [stdout]  --> src/models/player/mod.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::io::{self, Write};
[INFO] [stdout]   |               ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::enemy`
[INFO] [stdout]  --> src/models/player/mod.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::enemy;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Item`
[INFO] [stdout]  --> src/models/character/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::models::object::{Item, NPCTag};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameObject`
[INFO] [stdout]  --> src/models/enemy.rs:3:44
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::models::object::{NPC, Attitude, GameObject};
[INFO] [stdout]   |                                            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/character_creation.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::io::{self, Write};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> src/main.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::io::{self, Write};
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Enemy`, `get_enemies_by_difficulty`, `get_enemies_by_level_range`, `get_enemies_by_location`, and `get_enemy`
[INFO] [stdout]   --> src/main.rs:12:28
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::models::enemy::{Enemy, get_enemy, get_enemies_by_difficulty, get_enemies_by_level_range, get_enemies_by_location};
[INFO] [stdout]    |                            ^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/parsexec/mod.rs:114:13
[INFO] [stdout]     |
[INFO] [stdout] 113 |             std::process::exit(0);
[INFO] [stdout]     |             --------------------- any code following this expression is unreachable
[INFO] [stdout] 114 |             "".to_string()
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `location`
[INFO] [stdout]    --> src/models/player/mod.rs:104:25
[INFO] [stdout]     |
[INFO] [stdout] 104 |             if let Some(location) = find_location(tag) {
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_location`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `destination`
[INFO] [stdout]    --> src/models/player/mod.rs:192:41
[INFO] [stdout]     |
[INFO] [stdout] 192 | ...                   if let Some(destination) = find_location(tag) {
[INFO] [stdout]     |                                   ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_destination`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Location`, `Passage`, and `find_passage`
[INFO] [stdout]  --> src/models/player/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::models::object::{Location, Item, NPC, Passage, find_location, find_npc, find_item_in_location, find_passage, find_item, PASSAG...
[INFO] [stdout]   |                             ^^^^^^^^             ^^^^^^^                                                  ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Class` and `Equipment`
[INFO] [stdout]  --> src/models/player/mod.rs:3:32
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::models::character::{Equipment, EquipmentType, WeaponType, ArmorType, Class, parse_new_character};
[INFO] [stdout]   |                                ^^^^^^^^^                                        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Write` and `self`
[INFO] [stdout]  --> src/models/player/mod.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::io::{self, Write};
[INFO] [stdout]   |               ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::enemy`
[INFO] [stdout]  --> src/models/player/mod.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use super::enemy;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Item`
[INFO] [stdout]  --> src/models/character/mod.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::models::object::{Item, NPCTag};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameObject`
[INFO] [stdout]  --> src/models/enemy.rs:3:44
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::models::object::{NPC, Attitude, GameObject};
[INFO] [stdout]   |                                            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `location`
[INFO] [stdout]    --> src/models/player/mod.rs:498:25
[INFO] [stdout]     |
[INFO] [stdout] 498 |             if let Some(location) = find_location(location_tag) {
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_location`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/character_creation.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::io::{self, Write};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> src/main.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::io::{self, Write};
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Enemy`, `get_enemies_by_difficulty`, `get_enemies_by_level_range`, `get_enemies_by_location`, and `get_enemy`
[INFO] [stdout]   --> src/main.rs:12:28
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::models::enemy::{Enemy, get_enemy, get_enemies_by_difficulty, get_enemies_by_level_range, get_enemies_by_location};
[INFO] [stdout]    |                            ^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `shield`
[INFO] [stdout]    --> src/models/character/mod.rs:237:21
[INFO] [stdout]     |
[INFO] [stdout] 237 |         if let Some(shield) = &self.shield {
[INFO] [stdout]     |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_shield`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/parsexec/mod.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 132 |         _ => "Comando no válido.".to_string(),
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/parsexec/mod.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 56  |         Command::Go(location) => player.execute_go(location.as_deref()),
[INFO] [stdout]     |         --------------------- matches some of the same values
[INFO] [stdout] 57  |         Command::Look => {
[INFO] [stdout]     |         ------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 61  |         Command::Take(item) => {
[INFO] [stdout]     |         ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 68  |         Command::Drop(item) => {
[INFO] [stdout]     |         ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 132 |         _ => "Comando no válido.".to_string(),
[INFO] [stdout]     |         ^ ...and 9 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TestInputReader` is never constructed
[INFO] [stdout]   --> src/models/player/mod.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct TestInputReader {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/models/player/mod.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl TestInputReader {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 29 |     pub fn new(input: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MockDiceRoller` is never constructed
[INFO] [stdout]   --> src/models/player/mod.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct MockDiceRoller {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute_new` is never used
[INFO] [stdout]    --> src/models/player/mod.rs:977:12
[INFO] [stdout]     |
[INFO] [stdout] 76  | impl Player {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 977 |     pub fn execute_new(&mut self, input: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hidden_items`, `is_visited`, `is_locked`, and `required_key` are never read
[INFO] [stdout]   --> src/models/object/mod.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct RoomContent {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 22 |     pub items: Vec<Item>,      // Items en la sala
[INFO] [stdout] 23 |     pub hidden_items: Vec<Item>, // Items ocultos en la sala
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub npcs: Vec<String>,     // Tags de los NPCs en la sala
[INFO] [stdout] 25 |     pub is_visited: bool,      // Si la sala ha sido visitada
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 26 |     pub is_locked: bool,       // Si la sala está bloqueada
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 27 |     pub required_key: Option<String>, // Tag del item necesario para desbloquear la sala
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RoomContent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/models/object/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl RoomContent {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn add_hidden_item(&mut self, item: Item) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn remove_item(&mut self, item_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn remove_hidden_item(&mut self, item_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn reveal_hidden_item(&mut self, item_tag: &str) -> Option<Item> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn find_hidden_item(&self, item_tag: &str) -> Option<&Item> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn remove_npc(&mut self, npc_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn mark_as_visited(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn lock(&mut self, key_tag: Option<&str>) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn unlock(&mut self) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_dropped` is never read
[INFO] [stdout]    --> src/models/object/mod.rs:105:9
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Item {
[INFO] [stdout]     |            ---- field in this struct
[INFO] [stdout] 104 |     pub base: GameObject,
[INFO] [stdout] 105 |     pub is_dropped: bool,        // Si el item fue soltado por el jugador
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Item` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/models/object/mod.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub enum NPCTag {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 114 |     Elf,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 115 |     Dwarf,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     Halfling,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     Merchant,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 126 |     Bandit,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 127 |     Troll,
[INFO] [stdout] 128 |     Ogre,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 129 |     Giant,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     Friendly,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 134 |     Neutral,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 135 |     Hostile,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `NPCTag` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `location` is never read
[INFO] [stdout]    --> src/models/object/mod.rs:141:9
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct NPC {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] 140 |     pub base: GameObject,
[INFO] [stdout] 141 |     pub location: String,        // Tag de la ubicación donde está el NPC
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `NPC` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_long_description` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | impl GameObject {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn with_long_description(mut self, long_description: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_passage` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:511:8
[INFO] [stdout]     |
[INFO] [stdout] 511 | pub fn find_passage(tag: &str) -> Option<&'static Passage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_items_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:516:8
[INFO] [stdout]     |
[INFO] [stdout] 516 | pub fn get_items_in_location(location_tag: &str) -> Vec<&'static Item> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_hidden_items_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:523:8
[INFO] [stdout]     |
[INFO] [stdout] 523 | pub fn get_hidden_items_in_location(location: &Location) -> Vec<&Item> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_npcs_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 528 | pub fn get_npcs_in_location(location_tag: &str) -> Vec<&'static NPC> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_passages_from_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:535:8
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub fn get_passages_from_location(location_tag: &str) -> Vec<&'static Passage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/models/character/mod.rs:8:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub enum CharacterTrait {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 7  |     // Traits de combate
[INFO] [stdout] 8  |     Strong,          // Fuerte: +1 al daño con armas pesadas
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 9  |     Agile,           // Ágil: +1 a la defensa con armadura ligera
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Tough,           // Resistente: +1 PV por nivel
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 11 |     Precise,         // Preciso: +1 al ataque con armas a distancia
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 12 |     ShieldMaster,    // Maestro de escudo: +1 a la defensa con escudo
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     Stealthy,        // Sigiloso: +20% probabilidad de encontrar objetos ocultos
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 16 |     Perceptive,      // Perspicaz: Puede ver objetos ocultos sin buscarlos
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 17 |     Lucky,           // Afortunado: +10% probabilidad de éxito en todas las acciones
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Spellcaster,     // Lanzador de conjuros: Puede usar objetos mágicos
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 21 |     Healer,          // Sanador: Puede usar pociones de forma más efectiva
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Thief,           // Ladrón: Puede abrir cerraduras sin ganzúas
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 23 |     Berserker,       // Berserker: +2 al ataque cuando está herido
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 24 |     NaturalArmor,    // Armadura natural: +1 a la defensa sin armadura
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 25 |     ForestFriend,    // Amigo del bosque: Bonus en zonas naturales
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 26 |     MountainBorn,    // Nacido en la montaña: Bonus en zonas montañosas
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 27 |     Nimble,          // Ágil: Puede esquivar ataques más fácilmente
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CharacterTrait` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `traits` is never read
[INFO] [stdout]    --> src/models/character/mod.rs:138:9
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub struct Character {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub traits: HashSet<CharacterTrait>
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Character` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `take_damage`, `is_alive`, and `has_trait` are never used
[INFO] [stdout]    --> src/models/character/mod.rs:295:12
[INFO] [stdout]     |
[INFO] [stdout] 141 | impl Character {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn take_damage(&mut self, damage: u32) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 301 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn has_trait(&self, trait_type: &CharacterTrait) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_bonus` is never used
[INFO] [stdout]    --> src/models/character/mod.rs:318:12
[INFO] [stdout]     |
[INFO] [stdout] 310 | impl Equipment {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn get_bonus(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_new_character` is never used
[INFO] [stdout]    --> src/models/character/mod.rs:335:8
[INFO] [stdout]     |
[INFO] [stdout] 335 | pub fn parse_new_character(input: String, existing_names: &HashSet<String>) -> Result<Character, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `difficulty`, `min_level`, `max_level`, and `experience` are never read
[INFO] [stdout]   --> src/models/enemy.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 8  | pub struct Enemy {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 9  |     pub base: NPC,
[INFO] [stdout] 10 |     pub difficulty: u8,        // 1-5, donde 5 es el más difícil
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 11 |     pub min_level: u8,        // Nivel mínimo recomendado para enfrentarlo
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 12 |     pub max_level: u8,        // Nivel máximo recomendado para enfrentarlo
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 13 |     pub loot_table: Vec<String>, // Tags de los items que puede soltar
[INFO] [stdout] 14 |     pub experience: u32,      // Experiencia que otorga al derrotarlo
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Enemy` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemy` is never used
[INFO] [stdout]    --> src/models/enemy.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn get_enemy(tag: &str) -> Option<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_difficulty` is never used
[INFO] [stdout]    --> src/models/enemy.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn get_enemies_by_difficulty(difficulty: u8) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_level_range` is never used
[INFO] [stdout]    --> src/models/enemy.rs:184:8
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub fn get_enemies_by_level_range(min_level: u8, max_level: u8) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_location` is never used
[INFO] [stdout]    --> src/models/enemy.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn get_enemies_by_location(location: &str) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/parsexec/mod.rs:114:13
[INFO] [stdout]     |
[INFO] [stdout] 113 |             std::process::exit(0);
[INFO] [stdout]     |             --------------------- any code following this expression is unreachable
[INFO] [stdout] 114 |             "".to_string()
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `location`
[INFO] [stdout]    --> src/models/player/mod.rs:104:25
[INFO] [stdout]     |
[INFO] [stdout] 104 |             if let Some(location) = find_location(tag) {
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_location`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `destination`
[INFO] [stdout]    --> src/models/player/mod.rs:192:41
[INFO] [stdout]     |
[INFO] [stdout] 192 | ...                   if let Some(destination) = find_location(tag) {
[INFO] [stdout]     |                                   ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_destination`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `location`
[INFO] [stdout]    --> src/models/player/mod.rs:498:25
[INFO] [stdout]     |
[INFO] [stdout] 498 |             if let Some(location) = find_location(location_tag) {
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_location`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `shield`
[INFO] [stdout]    --> src/models/character/mod.rs:237:21
[INFO] [stdout]     |
[INFO] [stdout] 237 |         if let Some(shield) = &self.shield {
[INFO] [stdout]     |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_shield`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/parsexec/mod.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 132 |         _ => "Comando no válido.".to_string(),
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/parsexec/mod.rs:132:9
[INFO] [stdout]     |
[INFO] [stdout] 56  |         Command::Go(location) => player.execute_go(location.as_deref()),
[INFO] [stdout]     |         --------------------- matches some of the same values
[INFO] [stdout] 57  |         Command::Look => {
[INFO] [stdout]     |         ------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 61  |         Command::Take(item) => {
[INFO] [stdout]     |         ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 68  |         Command::Drop(item) => {
[INFO] [stdout]     |         ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 132 |         _ => "Comando no válido.".to_string(),
[INFO] [stdout]     |         ^ ...and 9 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute_new` is never used
[INFO] [stdout]    --> src/models/player/mod.rs:977:12
[INFO] [stdout]     |
[INFO] [stdout] 76  | impl Player {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 977 |     pub fn execute_new(&mut self, input: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hidden_items`, `is_visited`, `is_locked`, and `required_key` are never read
[INFO] [stdout]   --> src/models/object/mod.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct RoomContent {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 22 |     pub items: Vec<Item>,      // Items en la sala
[INFO] [stdout] 23 |     pub hidden_items: Vec<Item>, // Items ocultos en la sala
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub npcs: Vec<String>,     // Tags de los NPCs en la sala
[INFO] [stdout] 25 |     pub is_visited: bool,      // Si la sala ha sido visitada
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 26 |     pub is_locked: bool,       // Si la sala está bloqueada
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 27 |     pub required_key: Option<String>, // Tag del item necesario para desbloquear la sala
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RoomContent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/models/object/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl RoomContent {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn add_hidden_item(&mut self, item: Item) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn remove_item(&mut self, item_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn remove_hidden_item(&mut self, item_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn reveal_hidden_item(&mut self, item_tag: &str) -> Option<Item> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn find_hidden_item(&self, item_tag: &str) -> Option<&Item> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn remove_npc(&mut self, npc_tag: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn mark_as_visited(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn lock(&mut self, key_tag: Option<&str>) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn unlock(&mut self) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_dropped` is never read
[INFO] [stdout]    --> src/models/object/mod.rs:105:9
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Item {
[INFO] [stdout]     |            ---- field in this struct
[INFO] [stdout] 104 |     pub base: GameObject,
[INFO] [stdout] 105 |     pub is_dropped: bool,        // Si el item fue soltado por el jugador
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Item` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/models/object/mod.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub enum NPCTag {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 114 |     Elf,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 115 |     Dwarf,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     Halfling,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     Merchant,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 126 |     Bandit,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 127 |     Troll,
[INFO] [stdout] 128 |     Ogre,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 129 |     Giant,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     Friendly,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 134 |     Neutral,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 135 |     Hostile,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `NPCTag` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `location` is never read
[INFO] [stdout]    --> src/models/object/mod.rs:141:9
[INFO] [stdout]     |
[INFO] [stdout] 139 | pub struct NPC {
[INFO] [stdout]     |            --- field in this struct
[INFO] [stdout] 140 |     pub base: GameObject,
[INFO] [stdout] 141 |     pub location: String,        // Tag de la ubicación donde está el NPC
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `NPC` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_long_description` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | impl GameObject {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn with_long_description(mut self, long_description: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_passage` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:511:8
[INFO] [stdout]     |
[INFO] [stdout] 511 | pub fn find_passage(tag: &str) -> Option<&'static Passage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_items_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:516:8
[INFO] [stdout]     |
[INFO] [stdout] 516 | pub fn get_items_in_location(location_tag: &str) -> Vec<&'static Item> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_hidden_items_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:523:8
[INFO] [stdout]     |
[INFO] [stdout] 523 | pub fn get_hidden_items_in_location(location: &Location) -> Vec<&Item> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_npcs_in_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 528 | pub fn get_npcs_in_location(location_tag: &str) -> Vec<&'static NPC> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_passages_from_location` is never used
[INFO] [stdout]    --> src/models/object/mod.rs:535:8
[INFO] [stdout]     |
[INFO] [stdout] 535 | pub fn get_passages_from_location(location_tag: &str) -> Vec<&'static Passage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/models/character/mod.rs:8:5
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub enum CharacterTrait {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 7  |     // Traits de combate
[INFO] [stdout] 8  |     Strong,          // Fuerte: +1 al daño con armas pesadas
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 9  |     Agile,           // Ágil: +1 a la defensa con armadura ligera
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 10 |     Tough,           // Resistente: +1 PV por nivel
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 11 |     Precise,         // Preciso: +1 al ataque con armas a distancia
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 12 |     ShieldMaster,    // Maestro de escudo: +1 a la defensa con escudo
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     Stealthy,        // Sigiloso: +20% probabilidad de encontrar objetos ocultos
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 16 |     Perceptive,      // Perspicaz: Puede ver objetos ocultos sin buscarlos
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 17 |     Lucky,           // Afortunado: +10% probabilidad de éxito en todas las acciones
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Spellcaster,     // Lanzador de conjuros: Puede usar objetos mágicos
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 21 |     Healer,          // Sanador: Puede usar pociones de forma más efectiva
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Thief,           // Ladrón: Puede abrir cerraduras sin ganzúas
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 23 |     Berserker,       // Berserker: +2 al ataque cuando está herido
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 24 |     NaturalArmor,    // Armadura natural: +1 a la defensa sin armadura
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 25 |     ForestFriend,    // Amigo del bosque: Bonus en zonas naturales
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 26 |     MountainBorn,    // Nacido en la montaña: Bonus en zonas montañosas
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 27 |     Nimble,          // Ágil: Puede esquivar ataques más fácilmente
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CharacterTrait` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `traits` is never read
[INFO] [stdout]    --> src/models/character/mod.rs:138:9
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub struct Character {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub traits: HashSet<CharacterTrait>
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Character` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `take_damage`, `is_alive`, and `has_trait` are never used
[INFO] [stdout]    --> src/models/character/mod.rs:295:12
[INFO] [stdout]     |
[INFO] [stdout] 141 | impl Character {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn take_damage(&mut self, damage: u32) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 301 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn has_trait(&self, trait_type: &CharacterTrait) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_bonus` is never used
[INFO] [stdout]    --> src/models/character/mod.rs:318:12
[INFO] [stdout]     |
[INFO] [stdout] 310 | impl Equipment {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn get_bonus(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_new_character` is never used
[INFO] [stdout]    --> src/models/character/mod.rs:335:8
[INFO] [stdout]     |
[INFO] [stdout] 335 | pub fn parse_new_character(input: String, existing_names: &HashSet<String>) -> Result<Character, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `difficulty`, `min_level`, `max_level`, and `experience` are never read
[INFO] [stdout]   --> src/models/enemy.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 8  | pub struct Enemy {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 9  |     pub base: NPC,
[INFO] [stdout] 10 |     pub difficulty: u8,        // 1-5, donde 5 es el más difícil
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 11 |     pub min_level: u8,        // Nivel mínimo recomendado para enfrentarlo
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 12 |     pub max_level: u8,        // Nivel máximo recomendado para enfrentarlo
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 13 |     pub loot_table: Vec<String>, // Tags de los items que puede soltar
[INFO] [stdout] 14 |     pub experience: u32,      // Experiencia que otorga al derrotarlo
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Enemy` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemy` is never used
[INFO] [stdout]    --> src/models/enemy.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn get_enemy(tag: &str) -> Option<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_difficulty` is never used
[INFO] [stdout]    --> src/models/enemy.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn get_enemies_by_difficulty(difficulty: u8) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_level_range` is never used
[INFO] [stdout]    --> src/models/enemy.rs:184:8
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub fn get_enemies_by_level_range(min_level: u8, max_level: u8) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_enemies_by_location` is never used
[INFO] [stdout]    --> src/models/enemy.rs:190:8
[INFO] [stdout]     |
[INFO] [stdout] 190 | pub fn get_enemies_by_location(location: &str) -> Vec<&'static Enemy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 6.93s
[INFO] running `Command { std: "docker" "inspect" "ab1429ea19774fb5f5934646524f4080aa55fa3a208939a1ac9dc432db5ee90d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ab1429ea19774fb5f5934646524f4080aa55fa3a208939a1ac9dc432db5ee90d", kill_on_drop: false }`
[INFO] [stdout] ab1429ea19774fb5f5934646524f4080aa55fa3a208939a1ac9dc432db5ee90d
