[INFO] cloning repository https://github.com/JoyinJoester/Fuckvim
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/JoyinJoester/Fuckvim" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJoyinJoester%2FFuckvim", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJoyinJoester%2FFuckvim'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3339c6e11d8f46f0b2ecc9ced9e664c56a0cd470
[INFO] checking JoyinJoester/Fuckvim against try#943e2200e35c3825486c4671b6cab0107a07f8c1 for pr-148952
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FJoyinJoester%2FFuckvim" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/JoyinJoester/Fuckvim
[INFO] finished tweaking git repo https://github.com/JoyinJoester/Fuckvim
[INFO] tweaked toml for git repo https://github.com/JoyinJoester/Fuckvim written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/JoyinJoester/Fuckvim on toolchain 943e2200e35c3825486c4671b6cab0107a07f8c1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+943e2200e35c3825486c4671b6cab0107a07f8c1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/JoyinJoester/Fuckvim 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" "+943e2200e35c3825486c4671b6cab0107a07f8c1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: file `/workspace/builds/worker-6-tc2/source/src/main.rs` found to be present in multiple build targets:
[INFO] [stderr]   * `bin` target `fkvim`
[INFO] [stderr]   * `bin` target `fvim`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+943e2200e35c3825486c4671b6cab0107a07f8c1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2b7012f888ddbf9d0f08c3e50a999bcc71a97871890abb03cb0fb86d82bc5bde
[INFO] running `Command { std: "docker" "start" "-a" "2b7012f888ddbf9d0f08c3e50a999bcc71a97871890abb03cb0fb86d82bc5bde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2b7012f888ddbf9d0f08c3e50a999bcc71a97871890abb03cb0fb86d82bc5bde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2b7012f888ddbf9d0f08c3e50a999bcc71a97871890abb03cb0fb86d82bc5bde", kill_on_drop: false }`
[INFO] [stdout] 2b7012f888ddbf9d0f08c3e50a999bcc71a97871890abb03cb0fb86d82bc5bde
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+943e2200e35c3825486c4671b6cab0107a07f8c1" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d3512856260ae0338a06b1b8dc71c275fd2bd00e9c66996b68957fccad78f6c7
[INFO] running `Command { std: "docker" "start" "-a" "d3512856260ae0338a06b1b8dc71c275fd2bd00e9c66996b68957fccad78f6c7", 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 `fkvim`
[INFO] [stderr]   * `bin` target `fvim`
[INFO] [stderr]    Compiling cc v1.0.106
[INFO] [stderr]     Checking memchr v2.7.4
[INFO] [stderr]     Checking regex-syntax v0.8.5
[INFO] [stderr]    Compiling rustix v1.0.7
[INFO] [stderr]    Compiling zerocopy v0.8.25
[INFO] [stderr]    Compiling bitflags v2.9.0
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]    Compiling linux-raw-sys v0.9.4
[INFO] [stderr]     Checking libc v0.2.172
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling syn v2.0.101
[INFO] [stderr]    Compiling proc-macro2 v0.4.30
[INFO] [stderr]     Checking log v0.4.27
[INFO] [stderr]     Checking smallvec v1.15.0
[INFO] [stderr]    Compiling syn v0.15.44
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking mio v1.0.3
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking lock_api v0.4.12
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking hashbrown v0.15.3
[INFO] [stderr]     Checking pin-project-lite v0.2.16
[INFO] [stderr]     Checking futures-core v0.3.31
[INFO] [stderr]     Checking signal-hook-registry v1.4.5
[INFO] [stderr]     Checking signal-hook-mio v0.2.4
[INFO] [stderr]     Checking equivalent v1.0.2
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]    Compiling lua-src v547.0.0
[INFO] [stderr]    Compiling quote v0.6.13
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking rustix v0.38.44
[INFO] [stderr]     Checking dirs-sys v0.4.1
[INFO] [stderr]     Checking lru v0.12.5
[INFO] [stderr]     Checking castaway v0.2.3
[INFO] [stderr]     Checking slab v0.4.9
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking bstr v1.12.0
[INFO] [stderr]     Checking ryu v1.0.20
[INFO] [stderr]     Checking pin-utils v0.1.0
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking unicode-segmentation v1.12.0
[INFO] [stderr]     Checking option-ext v0.2.0
[INFO] [stderr]    Compiling tree-sitter v0.20.10
[INFO] [stderr]    Compiling tree-sitter v0.22.6
[INFO] [stderr]    Compiling tree-sitter-css v0.19.0
[INFO] [stderr]    Compiling tree-sitter-lua v0.0.18
[INFO] [stderr]    Compiling tree-sitter-cpp v0.20.5
[INFO] [stderr]    Compiling tree-sitter-html v0.19.0
[INFO] [stderr]    Compiling tree-sitter-toml v0.20.0
[INFO] [stderr]    Compiling tree-sitter-json v0.20.2
[INFO] [stderr]    Compiling tree-sitter-javascript v0.20.4
[INFO] [stderr]    Compiling tree-sitter-go v0.19.1
[INFO] [stderr]    Compiling tree-sitter-c v0.20.8
[INFO] [stderr]    Compiling tree-sitter-python v0.20.4
[INFO] [stderr]    Compiling tree-sitter-rust v0.20.4
[INFO] [stderr]    Compiling which v7.0.3
[INFO] [stderr]    Compiling luajit-src v210.5.12+a4f56a4
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking futures-task v0.3.31
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]     Checking itoa v1.0.15
[INFO] [stderr]     Checking hashbrown v0.13.2
[INFO] [stderr]    Compiling mlua-sys v0.6.7
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]    Compiling dlopen_derive v0.1.4
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]     Checking compact_str v0.8.1
[INFO] [stderr]     Checking inotify v0.9.6
[INFO] [stderr]     Checking crossterm v0.27.0
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking itertools v0.11.0
[INFO] [stderr]     Checking crossbeam-utils v0.8.21
[INFO] [stderr]     Checking socket2 v0.5.9
[INFO] [stderr]     Checking is-terminal v0.4.16
[INFO] [stderr]     Checking filetime v0.2.25
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking str_indices v0.4.4
[INFO] [stderr]     Checking humantime v2.2.0
[INFO] [stderr]     Checking same-file v1.0.6
[INFO] [stderr]     Checking walkdir v2.5.0
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking ropey v1.6.1
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]     Checking notify v6.1.1
[INFO] [stderr]     Checking dlopen v0.1.8
[INFO] [stderr]     Checking env_logger v0.10.2
[INFO] [stderr]     Checking lru v0.10.1
[INFO] [stderr]     Checking globset v0.4.16
[INFO] [stderr]     Checking dirs v5.0.1
[INFO] [stderr]     Checking directories v5.0.1
[INFO] [stderr]     Checking unicode-width v0.2.0
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]     Checking iana-time-zone v0.1.63
[INFO] [stderr]     Checking bytes v1.10.1
[INFO] [stderr]     Checking termcolor v1.4.1
[INFO] [stderr]     Checking rustc-hash v2.1.1
[INFO] [stderr]     Checking unicode-truncate v1.1.0
[INFO] [stderr]     Checking anyhow v1.0.98
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling async-trait v0.1.88
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling instability v0.3.7
[INFO] [stderr]     Checking tokio v1.45.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking strum v0.25.0
[INFO] [stderr]     Checking ratatui v0.24.0
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking ratatui v0.29.0
[INFO] [stderr]     Checking serde v1.0.219
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking serde_json v1.0.140
[INFO] [stderr]     Checking mlua v0.9.9
[INFO] [stderr]     Checking fkvim v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `move_cursor_home`, `move_cursor_end`, `page_up`, and `page_down` are never used
[INFO] [stdout]    --> src/editor/mod.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | impl Editor {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `loaded_modules` and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Status`
[INFO] [stdout]   --> src/editor/mod.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use status::{Status, StatusMessageType};
[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: `Layout`, `Rect`, and `Tab`
[INFO] [stdout]   --> src/editor/mod.rs:22:36
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub use window::{Window, WindowId, Tab, TabId, Layout, Rect, Split, TabManager};
[INFO] [stdout]    |                                    ^^^         ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FKVimError`
[INFO] [stdout]   --> src/main.rs:16:21
[INFO] [stdout]    |
[INFO] [stdout] 16 | use error::{Result, FKVimError};
[INFO] [stdout]    |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `move_cursor_home`, `move_cursor_end`, `page_up`, and `page_down` are never used
[INFO] [stdout]    --> src/editor/mod.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | impl Editor {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `loaded_modules` and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Status`
[INFO] [stdout]   --> src/editor/mod.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use status::{Status, StatusMessageType};
[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: `Layout`, `Rect`, and `Tab`
[INFO] [stdout]   --> src/editor/mod.rs:22:36
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub use window::{Window, WindowId, Tab, TabId, Layout, Rect, Split, TabManager};
[INFO] [stdout]    |                                    ^^^         ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FKVimError`
[INFO] [stdout]   --> src/main.rs:16:21
[INFO] [stdout]    |
[INFO] [stdout] 16 | use error::{Result, FKVimError};
[INFO] [stdout]    |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `move_cursor_home`, `move_cursor_end`, `page_up`, and `page_down` are never used
[INFO] [stdout]    --> src/editor/mod.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | impl Editor {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `loaded_modules` and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Status`
[INFO] [stdout]   --> src/editor/mod.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use status::{Status, StatusMessageType};
[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: `Layout`, `Rect`, and `Tab`
[INFO] [stdout]   --> src/editor/mod.rs:22:36
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub use window::{Window, WindowId, Tab, TabId, Layout, Rect, Split, TabManager};
[INFO] [stdout]    |                                    ^^^         ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FKVimError`
[INFO] [stdout]   --> src/main.rs:16:21
[INFO] [stdout]    |
[INFO] [stdout] 16 | use error::{Result, FKVimError};
[INFO] [stdout]    |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Status`
[INFO] [stdout]   --> src/editor/mod.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use status::{Status, StatusMessageType};
[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: `Layout`, `Rect`, and `Tab`
[INFO] [stdout]   --> src/editor/mod.rs:22:36
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub use window::{Window, WindowId, Tab, TabId, Layout, Rect, Split, TabManager};
[INFO] [stdout]    |                                    ^^^         ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FKVimError`
[INFO] [stdout]   --> src/main.rs:16:21
[INFO] [stdout]    |
[INFO] [stdout] 16 | use error::{Result, FKVimError};
[INFO] [stdout]    |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start_line`, `start_col`, `end_line`, and `end_col` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct SearchResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 61 |     /// 起始行
[INFO] [stdout] 62 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub start_col: usize,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub end_line: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub end_col: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchResult` 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: fields `pattern`, `case_sensitive`, `use_regex`, `whole_word`, and `in_selection` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct SearchQuery {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 77 |     /// 搜索文本或正则表达式
[INFO] [stdout] 78 |     pub pattern: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub case_sensitive: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub use_regex: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub whole_word: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub in_selection: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/buffer/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl SearchQuery {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 94 |     /// 创建新的搜索查询
[INFO] [stdout] 95 |     pub fn new(pattern: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/buffer/mod.rs:297:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl Buffer {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn get_lines(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn apply_syntax_highlight(&mut self, highlighter: &Highlighter) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn undo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn redo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn search(&mut self, query: &str, case_sensitive: bool) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 491 |     pub fn current_search_result(&self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 501 |     pub fn next_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     pub fn prev_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn clear_search(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn advanced_search(&mut self, query: SearchQuery) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     fn regex_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     fn text_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn replace_current(&mut self, replacement: &str) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn replace_all(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 763 |     pub fn replace_regex(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 839 |     fn insert_text(&mut self, line: usize, col: usize, text: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 844 |     fn delete_text(&mut self, start_line: usize, start_col: usize, end_line: usize, end_col: usize) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 849 |     pub fn find(&mut self, query: &str, options: &crate::editor::SearchOptions) -> Result<usize> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 864 |     pub fn replace_term(&mut self, line: usize, col: usize, cursor_line: &mut usize, cursor_col: &mut usize, search_term: &str, new...
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 901 |     pub fn load_from_file(&mut self, path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserCommand` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct UserCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UserCommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum UserCommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum CommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuiltinCommand` is never used
[INFO] [stdout]   --> src/command/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum BuiltinCommand {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchFlags` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct SearchFlags {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubstituteFlags` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct SubstituteFlags {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandParser` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct CommandParser {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `command_manager`, `command_manager_mut`, `parse`, `get_completions`, and `parse_builtin_command` are never used
[INFO] [stdout]    --> src/command/mod.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl CommandParser {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 171 |     /// 创建命令解析器
[INFO] [stdout] 172 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn command_manager(&self) -> &CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn command_manager_mut(&mut self) -> &mut CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn parse(&self, command_str: &str) -> Result<CommandType> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_completions(&self, partial: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     fn parse_builtin_command(&self, cmd: &str, args: &str) -> Option<BuiltinCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandManager` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:518:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | pub struct CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/command/mod.rs:525:12
[INFO] [stdout]     |
[INFO] [stdout] 523 | impl CommandManager {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 524 |     /// 创建命令管理器
[INFO] [stdout] 525 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 532 |     pub fn register_command(&mut self, name: &str, command: UserCommand) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 542 |     pub fn get_command(&self, name: &str) -> Option<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 547 |     pub fn has_command(&self, name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn unregister_command(&mut self, name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn list_commands(&self) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn get_completion_list(&self, partial_name: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 594 |     pub fn register_terminal_commands(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandExecutor` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:648:12
[INFO] [stdout]     |
[INFO] [stdout] 648 | pub struct CommandExecutor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute`, and `execute_builtin` are never used
[INFO] [stdout]    --> src/command/mod.rs:655:12
[INFO] [stdout]     |
[INFO] [stdout] 653 | impl CommandExecutor {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 654 |     /// 创建命令执行器
[INFO] [stdout] 655 |     pub fn new(editor: &mut Editor) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 662 |     pub fn execute(&self, cmd_type: CommandType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     fn execute_builtin(&self, editor: &mut Editor, cmd: BuiltinCommand) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_TOGGLE_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:812:11
[INFO] [stdout]     |
[INFO] [stdout] 812 | pub const CMD_TOGGLE_TERMINAL: &str = "toggle_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_FOCUS_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:813:11
[INFO] [stdout]     |
[INFO] [stdout] 813 | pub const CMD_FOCUS_TERMINAL: &str = "focus_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_EXIT_TERMINAL_FOCUS` is never used
[INFO] [stdout]    --> src/command/mod.rs:814:11
[INFO] [stdout]     |
[INFO] [stdout] 814 | pub const CMD_EXIT_TERMINAL_FOCUS: &str = "exit_terminal_focus";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_CLEAR_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:815:11
[INFO] [stdout]     |
[INFO] [stdout] 815 | pub const CMD_CLEAR_TERMINAL: &str = "clear_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_RESTART_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:816:11
[INFO] [stdout]     |
[INFO] [stdout] 816 | pub const CMD_RESTART_TERMINAL: &str = "restart_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_SEND_TO_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:817:11
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub const CMD_SEND_TO_TERMINAL: &str = "send_to_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `description`, `usage`, and `examples` are never read
[INFO] [stdout]   --> src/command/help.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CommandHelp {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub usage: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub examples: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandHelp` has 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 `name` and `description` are never used
[INFO] [stdout]   --> src/command/help.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HelpCategory {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] 58 |     /// 获取分类名称
[INFO] [stdout] 59 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn description(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/command/help.rs:197:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl HelpSystem {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn get_command(&self, name: &str) -> Option<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn get_category_commands(&self, category: &HelpCategory) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn format_command_help(&self, help: &CommandHelp) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn format_category_help(&self, category: &HelpCategory) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn format_help_overview(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn get_general_help(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_topic_help(&self, topic: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_option` and `get_all_options` are never used
[INFO] [stdout]    --> src/config/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl Config {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] 247 |     /// 获取指定选项的值
[INFO] [stdout] 248 |     pub fn get_option(&self, option: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_all_options(&self) -> Vec<(String, String)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `keymaps`, `highlighter`, `screen_height`, `repeat_count`, `last_command`, and `help_system` are never read
[INFO] [stdout]    --> src/editor/mod.rs:60:9
[INFO] [stdout]     |
[INFO] [stdout]  25 | pub struct Editor {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub keymaps: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub highlighter: Highlighter,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub screen_height: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub repeat_count: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub last_command: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub help_system: crate::command::help::HelpSystem,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Error` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub enum EditorStatus {
[INFO] [stdout]     |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 134 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditorStatus` has 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 `timestamp` is never read
[INFO] [stdout]    --> src/editor/mod.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct StatusMessage {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub timestamp: Instant,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchOptions` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct SearchOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ReplaceConfirm` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub enum CommandLineMode {
[INFO] [stdout]     |          --------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 177 |     ReplaceConfirm,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CommandLineMode` has 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 `EditorRef` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub struct EditorRef<'a> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `open_file`, `close_file_browser`, and `set_status_message` are never used
[INFO] [stdout]    --> src/editor/mod.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl<'a> EditorRef<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 201 |     pub fn open_file(&self, path: &Path) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn close_file_browser(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_status_message(&mut self, content: impl Into<String>, msg_type: StatusMessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/editor/mod.rs:311:8
[INFO] [stdout]      |
[INFO] [stdout]  218 | impl Editor {
[INFO] [stdout]      | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  518 |     pub fn load_lazy_plugin(&mut self, name: &str) -> Result<bool> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1279 |     pub fn close_current_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1322 |     pub fn close_all_buffers(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1338 |     pub fn previous_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1353 |     pub fn switch_to_buffer(&mut self, idx: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1374 |     pub fn new_buffer(&mut self) -> Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1393 |     pub fn next_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1408 |     pub fn reload_current_file(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_tab_ids` and `get_tab` are never used
[INFO] [stdout]    --> src/editor/window.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn get_tab_ids(&self) -> Vec<TabId> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn get_tab(&self, tab_id: TabId) -> Result<&Tab> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/editor/window.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl Tab {
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn split_horizontal(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn split_vertical(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn close_active_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn focus_left_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub fn focus_right_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn focus_up_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn focus_down_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]    --> src/editor/window.rs:440:9
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub struct Window {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub title: Option<String>,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_scroll` and `set_size` are never used
[INFO] [stdout]    --> src/editor/window.rs:492:12
[INFO] [stdout]     |
[INFO] [stdout] 455 | impl Window {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 492 |     pub fn set_scroll(&mut self, line: usize, col: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     pub fn set_size(&mut self, width: usize, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `HorizontalTriple`, `VerticalTriple`, and `Grid` are never constructed
[INFO] [stdout]    --> src/editor/window.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 553 | pub enum Layout {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 561 |     HorizontalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 562 |     /// 垂直三分（左中右三个窗口）
[INFO] [stdout] 563 |     VerticalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 564 |     /// 四分格（2x2网格）
[INFO] [stdout] 565 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Layout` has 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 `Status` is never constructed
[INFO] [stdout]   --> src/editor/status.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Status {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `info`, `warning`, `error`, and `success` are never used
[INFO] [stdout]   --> src/editor/status.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl Status {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] 26 |     /// 创建一个新的普通信息消息
[INFO] [stdout] 27 |     pub fn info<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn warning<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn error<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn success<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `command_mappings` is never read
[INFO] [stdout]   --> src/input/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct KeyHandler {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     command_mappings: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_command_buffer` and `set_mapping` are never used
[INFO] [stdout]    --> src/input/mod.rs:453:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl KeyHandler {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_command_buffer(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn set_mapping(&mut self, mode: &str, key: String, command: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `RustDynlib` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum PluginType {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     RustDynlib,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Local(PathBuf),
[INFO] [stdout]    |     ----- ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is 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] 25 -     Local(PathBuf),
[INFO] [stdout] 25 +     Local(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Git` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum PluginSource {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Git {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/plugin/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PluginMetadata {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     /// 插件名称
[INFO] [stdout] 38 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub version: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub author: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub plugin_type: PluginType,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub source: PluginSource,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub lazy: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub dependencies: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `root` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:86:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct NvimPluginDirs {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 85 |     /// 根目录
[INFO] [stdout] 86 |     pub root: PathBuf,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `install_plugins`, `install_plugin`, `create_plugin_metadata`, `load_lazy_plugin`, `get_plugins`, and `is_loading` are never used
[INFO] [stdout]    --> src/plugin/mod.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn install_plugins(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn install_plugin(&mut self, name: &str, source: &PluginSource) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     fn create_plugin_metadata(&self, name: &str, path: &Path, source: PluginSource, lazy: bool) -> Result<PluginMetadata> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn load_lazy_plugin(&mut self, name: &str, lua_env: &mut lua::LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 434 |     pub fn get_plugins(&self) -> &[PluginMetadata] {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn is_loading(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config`, `loaded_modules`, and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     config: Config,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `setup_neovim_require`, `get_globals`, and `set_config` are never used
[INFO] [stdout]    --> src/plugin/lua/mod.rs:369:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl LuaEnv {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn setup_neovim_require(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn set_config(&mut self, option: &str, value: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_vim_command` and `run_plugin_init_script` are never used
[INFO] [stdout]    --> src/plugin/nvim_compat/mod.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl NeovimCompat {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn handle_vim_command(&self, cmd: &str, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn run_plugin_init_script(&self, plugin_path: &Path, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_plugin_config` and `load_lazy_plugin` are never used
[INFO] [stdout]    --> src/plugin/package_manager.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl PackageManager {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn find_plugin_config(&self, name: &str) -> Option<&PluginConfig> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn load_lazy_plugin(&self, name: &str, plugin_manager: &mut PluginManager, lua_env: &mut LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RegexError` and `Generic` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum FKVimError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 34 |     RegexError(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     Generic(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FKVimError` 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 `process_output`, `visible_lines`, `close`, `scroll_up`, `scroll_down`, and `restart` are never used
[INFO] [stdout]    --> src/terminal/mod.rs:440:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl TerminalSession {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub fn process_output(&mut self, line: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn visible_lines(&self, height: u16) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 516 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 531 |     pub async fn restart(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Horizontal`, `Vertical`, and `Grid` are never constructed
[INFO] [stdout]    --> src/terminal/mod.rs:585:5
[INFO] [stdout]     |
[INFO] [stdout] 581 | pub enum TerminalLayout {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 585 |     Horizontal,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 586 |     /// 垂直分割（左右布局）
[INFO] [stdout] 587 |     Vertical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 588 |     /// 四象限分割
[INFO] [stdout] 589 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TerminalLayout` has 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 `layout` is never read
[INFO] [stdout]    --> src/terminal/mod.rs:605:9
[INFO] [stdout]     |
[INFO] [stdout] 593 | pub struct Terminal {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 605 |     pub layout: TerminalLayout,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/terminal/mod.rs:665:12
[INFO] [stdout]      |
[INFO] [stdout]  612 | impl Terminal {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  665 |     pub fn switch_tab(&mut self, index: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  695 |     pub fn close_current_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  727 |     pub fn rename_current_tab(&mut self, new_name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  782 |     pub fn set_layout(&mut self, layout: TerminalLayout) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  823 |     pub fn next_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  841 |     pub fn prev_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  863 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  877 |     pub fn visible_lines(&self) -> Vec<&String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  888 |     pub fn resize(&mut self, height: u16) {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  898 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  920 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  957 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  966 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1015 |     pub fn get_tab_names(&self) -> Vec<String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1020 |     pub fn get_tab_count(&self) -> usize {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1025 |     pub fn get_active_session(&self) -> Option<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1044 |     pub fn get_layout_sessions(&self) -> Vec<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1051 |     pub fn is_active_session(&self, session_id: &str) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1135 |     pub fn next_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1165 |     pub fn prev_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1195 |     pub fn next_split(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1221 |     pub fn create_tab(&mut self, name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1244 |     pub fn init(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/highlight/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HighlightStyle {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 11 |     /// 普通文本
[INFO] [stdout] 12 |     Normal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Preprocessor,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Special,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Search,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     CurrentLine,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     Identifier,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Property,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     Field,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     Method,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     MethodCall,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     Parameter,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     Text,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     LineNumber,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     LineNumberActive,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HighlightStyle` has derived 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 `is_dark` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub struct Theme {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 109 |     /// 主题名称
[INFO] [stdout] 110 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     is_dark: bool,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Theme` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `foreground`, `background`, and `attributes` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct StyleAttributes {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 120 |     /// 前景色
[INFO] [stdout] 121 |     foreground: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 122 |     /// 背景色
[INFO] [stdout] 123 |     background: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 124 |     /// 文本属性 (粗体、斜体等)
[INFO] [stdout] 125 |     attributes: Vec<Attribute>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StyleAttributes` has 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 `foreground`, `background`, and `attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl StyleAttributes {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn foreground(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn background(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn attributes(&self) -> &[Attribute] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_style`, `is_dark`, `name`, `default_light`, and `from_config` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Theme {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_style(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn is_dark(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn default_light() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn from_config(config: &HashMap<String, String>, name: &str, is_dark: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_style_name` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn parse_style_name(name: &str) -> Result<HighlightStyle> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn parse_color(color_name: &str) -> Result<Option<Color>> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `highlight` and `name` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:393:8
[INFO] [stdout]     |
[INFO] [stdout] 391 | pub trait SyntaxHighlighter: Send + Sync {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] 392 |     /// 高亮文本
[INFO] [stdout] 393 |     fn highlight(&self, text: &str) -> Result<Vec<HighlightSpan>>;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn name(&self) -> &str;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_theme` is never read
[INFO] [stdout]    --> src/highlight/mod.rs:404:5
[INFO] [stdout]     |
[INFO] [stdout] 400 | pub struct Highlighter {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 404 |     current_theme: Theme,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_highlighter_for_file`, `get_highlighter_for_filetype`, `highlight`, `set_theme`, `current_theme`, and `get_style_attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:435:12
[INFO] [stdout]     |
[INFO] [stdout] 407 | impl Highlighter {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn get_highlighter_for_file(&self, file_path: &Path) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn get_highlighter_for_filetype(&self, file_type: &str) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn highlight(&self, text: &str, file_type: Option<&str>, file_path: Option<&Path>) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn set_theme(&mut self, theme: Theme) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     pub fn current_theme(&self) -> &Theme {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn get_style_attributes(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `undo` and `redo` are never used
[INFO] [stdout]  --> src/history/mod.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub trait ReversibleEdit: std::fmt::Debug {
[INFO] [stdout]   |           -------------- methods in this trait
[INFO] [stdout] 3 |     /// 撤销操作
[INFO] [stdout] 4 |     fn undo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |     fn redo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     Insert(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 14 -     Insert(usize, usize, String),
[INFO] [stdout] 14 +     Insert((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 |     Delete(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 17 -     Delete(usize, usize, String),
[INFO] [stdout] 17 +     Delete((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Replace` is never constructed
[INFO] [stdout]   --> src/history/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Operation {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Replace(usize, usize, String, String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `undo_op` and `redo_op` are never read
[INFO] [stdout]   --> src/history/mod.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct EditOperation {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 42 |     /// 撤销操作
[INFO] [stdout] 43 |     pub undo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub redo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditOperation` has 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 methods are never used
[INFO] [stdout]    --> src/history/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout]  81 | impl History {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn undo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn redo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn finish_undo_redo(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn start_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn end_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompoundEdit` is never constructed
[INFO] [stdout]    --> src/history/mod.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub struct CompoundEdit {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Time`, `Size`, and `Type` are never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SortMode {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Time,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     /// 按文件大小排序
[INFO] [stdout] 15 |     Size,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     /// 按文件类型排序
[INFO] [stdout] 17 |     Type,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SortMode` has 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 `Simple` is never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum ViewMode {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] 23 |     /// 简单视图，仅显示文件名
[INFO] [stdout] 24 |     Simple,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ViewMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `show_hidden` and `pattern` are never read
[INFO] [stdout]   --> src/file_browser/mod.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct FileFilter {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 32 |     /// 隐藏或显示隐藏文件
[INFO] [stdout] 33 |     pub show_hidden: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 34 |     /// 文件通配符
[INFO] [stdout] 35 |     pub pattern: Option<String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileFilter` has 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 `size` is never read
[INFO] [stdout]   --> src/file_browser/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct FileEntry {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub size: u64,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileEntry` has 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 methods are never used
[INFO] [stdout]    --> src/file_browser/mod.rs:282:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | impl FileBrowser {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn move_selection(&mut self, offset: isize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn enter_selected(&mut self) -> Result<Option<PathBuf>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn go_parent(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_display_name(&self, idx: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |     pub fn toggle_sort_mode(&mut self, mode: SortMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn set_filter(&mut self, filter: String) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn add_to_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn remove_from_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn toggle_hidden_files(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn update_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     pub fn toggle_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     pub fn delete_selected(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 646 |     pub fn rename_selected(&mut self, new_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 681 |     pub fn copy_selected(&self) -> Result<PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 702 |     pub fn paste_file(&mut self, source_path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     fn copy_dir_recursively(&self, src: &Path, dst: &Path) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn visible_items(&self, height: usize) -> Vec<&FileItem> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn ensure_selection_visible(&mut self, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 798 |     pub fn goto_bookmark(&mut self, bookmark: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 922 |     pub fn search_files(&mut self, search_term: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 957 |     pub fn clear_selections(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start_line`, `start_col`, `end_line`, and `end_col` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct SearchResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 61 |     /// 起始行
[INFO] [stdout] 62 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub start_col: usize,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub end_line: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub end_col: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchResult` 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: fields `pattern`, `case_sensitive`, `use_regex`, `whole_word`, and `in_selection` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct SearchQuery {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 77 |     /// 搜索文本或正则表达式
[INFO] [stdout] 78 |     pub pattern: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub case_sensitive: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub use_regex: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub whole_word: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub in_selection: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/buffer/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl SearchQuery {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 94 |     /// 创建新的搜索查询
[INFO] [stdout] 95 |     pub fn new(pattern: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/buffer/mod.rs:297:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl Buffer {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn get_lines(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn apply_syntax_highlight(&mut self, highlighter: &Highlighter) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn undo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn redo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn search(&mut self, query: &str, case_sensitive: bool) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 491 |     pub fn current_search_result(&self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 501 |     pub fn next_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     pub fn prev_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn clear_search(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn advanced_search(&mut self, query: SearchQuery) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     fn regex_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     fn text_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn replace_current(&mut self, replacement: &str) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn replace_all(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 763 |     pub fn replace_regex(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 839 |     fn insert_text(&mut self, line: usize, col: usize, text: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 844 |     fn delete_text(&mut self, start_line: usize, start_col: usize, end_line: usize, end_col: usize) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 849 |     pub fn find(&mut self, query: &str, options: &crate::editor::SearchOptions) -> Result<usize> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 864 |     pub fn replace_term(&mut self, line: usize, col: usize, cursor_line: &mut usize, cursor_col: &mut usize, search_term: &str, new...
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 901 |     pub fn load_from_file(&mut self, path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserCommand` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct UserCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UserCommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum UserCommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum CommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuiltinCommand` is never used
[INFO] [stdout]   --> src/command/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum BuiltinCommand {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchFlags` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct SearchFlags {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubstituteFlags` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct SubstituteFlags {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandParser` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct CommandParser {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `command_manager`, `command_manager_mut`, `parse`, `get_completions`, and `parse_builtin_command` are never used
[INFO] [stdout]    --> src/command/mod.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl CommandParser {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 171 |     /// 创建命令解析器
[INFO] [stdout] 172 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn command_manager(&self) -> &CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn command_manager_mut(&mut self) -> &mut CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn parse(&self, command_str: &str) -> Result<CommandType> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_completions(&self, partial: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     fn parse_builtin_command(&self, cmd: &str, args: &str) -> Option<BuiltinCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandManager` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:518:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | pub struct CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/command/mod.rs:525:12
[INFO] [stdout]     |
[INFO] [stdout] 523 | impl CommandManager {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 524 |     /// 创建命令管理器
[INFO] [stdout] 525 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 532 |     pub fn register_command(&mut self, name: &str, command: UserCommand) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 542 |     pub fn get_command(&self, name: &str) -> Option<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 547 |     pub fn has_command(&self, name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn unregister_command(&mut self, name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn list_commands(&self) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn get_completion_list(&self, partial_name: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 594 |     pub fn register_terminal_commands(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandExecutor` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:648:12
[INFO] [stdout]     |
[INFO] [stdout] 648 | pub struct CommandExecutor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute`, and `execute_builtin` are never used
[INFO] [stdout]    --> src/command/mod.rs:655:12
[INFO] [stdout]     |
[INFO] [stdout] 653 | impl CommandExecutor {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 654 |     /// 创建命令执行器
[INFO] [stdout] 655 |     pub fn new(editor: &mut Editor) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 662 |     pub fn execute(&self, cmd_type: CommandType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     fn execute_builtin(&self, editor: &mut Editor, cmd: BuiltinCommand) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_TOGGLE_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:812:11
[INFO] [stdout]     |
[INFO] [stdout] 812 | pub const CMD_TOGGLE_TERMINAL: &str = "toggle_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_FOCUS_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:813:11
[INFO] [stdout]     |
[INFO] [stdout] 813 | pub const CMD_FOCUS_TERMINAL: &str = "focus_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_EXIT_TERMINAL_FOCUS` is never used
[INFO] [stdout]    --> src/command/mod.rs:814:11
[INFO] [stdout]     |
[INFO] [stdout] 814 | pub const CMD_EXIT_TERMINAL_FOCUS: &str = "exit_terminal_focus";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_CLEAR_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:815:11
[INFO] [stdout]     |
[INFO] [stdout] 815 | pub const CMD_CLEAR_TERMINAL: &str = "clear_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_RESTART_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:816:11
[INFO] [stdout]     |
[INFO] [stdout] 816 | pub const CMD_RESTART_TERMINAL: &str = "restart_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_SEND_TO_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:817:11
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub const CMD_SEND_TO_TERMINAL: &str = "send_to_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `description`, `usage`, and `examples` are never read
[INFO] [stdout]   --> src/command/help.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CommandHelp {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub usage: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub examples: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandHelp` has 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 `name` and `description` are never used
[INFO] [stdout]   --> src/command/help.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HelpCategory {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] 58 |     /// 获取分类名称
[INFO] [stdout] 59 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn description(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/command/help.rs:197:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl HelpSystem {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn get_command(&self, name: &str) -> Option<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn get_category_commands(&self, category: &HelpCategory) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn format_command_help(&self, help: &CommandHelp) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn format_category_help(&self, category: &HelpCategory) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn format_help_overview(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn get_general_help(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_topic_help(&self, topic: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_option` and `get_all_options` are never used
[INFO] [stdout]    --> src/config/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl Config {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] 247 |     /// 获取指定选项的值
[INFO] [stdout] 248 |     pub fn get_option(&self, option: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_all_options(&self) -> Vec<(String, String)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `keymaps`, `highlighter`, `screen_height`, `repeat_count`, `last_command`, and `help_system` are never read
[INFO] [stdout]    --> src/editor/mod.rs:60:9
[INFO] [stdout]     |
[INFO] [stdout]  25 | pub struct Editor {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub keymaps: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub highlighter: Highlighter,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub screen_height: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub repeat_count: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub last_command: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub help_system: crate::command::help::HelpSystem,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Error` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub enum EditorStatus {
[INFO] [stdout]     |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 134 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditorStatus` has 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 `timestamp` is never read
[INFO] [stdout]    --> src/editor/mod.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct StatusMessage {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub timestamp: Instant,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchOptions` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct SearchOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ReplaceConfirm` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub enum CommandLineMode {
[INFO] [stdout]     |          --------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 177 |     ReplaceConfirm,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CommandLineMode` has 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 `EditorRef` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub struct EditorRef<'a> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `open_file`, `close_file_browser`, and `set_status_message` are never used
[INFO] [stdout]    --> src/editor/mod.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl<'a> EditorRef<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 201 |     pub fn open_file(&self, path: &Path) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn close_file_browser(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_status_message(&mut self, content: impl Into<String>, msg_type: StatusMessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/editor/mod.rs:311:8
[INFO] [stdout]      |
[INFO] [stdout]  218 | impl Editor {
[INFO] [stdout]      | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  518 |     pub fn load_lazy_plugin(&mut self, name: &str) -> Result<bool> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1279 |     pub fn close_current_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1322 |     pub fn close_all_buffers(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1338 |     pub fn previous_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1353 |     pub fn switch_to_buffer(&mut self, idx: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1374 |     pub fn new_buffer(&mut self) -> Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1393 |     pub fn next_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1408 |     pub fn reload_current_file(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_tab_ids` and `get_tab` are never used
[INFO] [stdout]    --> src/editor/window.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn get_tab_ids(&self) -> Vec<TabId> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn get_tab(&self, tab_id: TabId) -> Result<&Tab> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/editor/window.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl Tab {
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn split_horizontal(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn split_vertical(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn close_active_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn focus_left_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub fn focus_right_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn focus_up_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn focus_down_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]    --> src/editor/window.rs:440:9
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub struct Window {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub title: Option<String>,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_scroll` and `set_size` are never used
[INFO] [stdout]    --> src/editor/window.rs:492:12
[INFO] [stdout]     |
[INFO] [stdout] 455 | impl Window {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 492 |     pub fn set_scroll(&mut self, line: usize, col: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     pub fn set_size(&mut self, width: usize, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `HorizontalTriple`, `VerticalTriple`, and `Grid` are never constructed
[INFO] [stdout]    --> src/editor/window.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 553 | pub enum Layout {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 561 |     HorizontalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 562 |     /// 垂直三分（左中右三个窗口）
[INFO] [stdout] 563 |     VerticalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 564 |     /// 四分格（2x2网格）
[INFO] [stdout] 565 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Layout` has 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 `Status` is never constructed
[INFO] [stdout]   --> src/editor/status.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Status {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `info`, `warning`, `error`, and `success` are never used
[INFO] [stdout]   --> src/editor/status.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl Status {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] 26 |     /// 创建一个新的普通信息消息
[INFO] [stdout] 27 |     pub fn info<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn warning<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn error<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn success<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `command_mappings` is never read
[INFO] [stdout]   --> src/input/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct KeyHandler {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     command_mappings: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_command_buffer` and `set_mapping` are never used
[INFO] [stdout]    --> src/input/mod.rs:453:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl KeyHandler {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_command_buffer(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn set_mapping(&mut self, mode: &str, key: String, command: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `RustDynlib` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum PluginType {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     RustDynlib,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Local(PathBuf),
[INFO] [stdout]    |     ----- ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is 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] 25 -     Local(PathBuf),
[INFO] [stdout] 25 +     Local(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Git` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum PluginSource {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Git {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/plugin/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PluginMetadata {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     /// 插件名称
[INFO] [stdout] 38 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub version: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub author: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub plugin_type: PluginType,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub source: PluginSource,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub lazy: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub dependencies: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `root` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:86:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct NvimPluginDirs {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 85 |     /// 根目录
[INFO] [stdout] 86 |     pub root: PathBuf,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `install_plugins`, `install_plugin`, `create_plugin_metadata`, `load_lazy_plugin`, `get_plugins`, and `is_loading` are never used
[INFO] [stdout]    --> src/plugin/mod.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn install_plugins(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn install_plugin(&mut self, name: &str, source: &PluginSource) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     fn create_plugin_metadata(&self, name: &str, path: &Path, source: PluginSource, lazy: bool) -> Result<PluginMetadata> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn load_lazy_plugin(&mut self, name: &str, lua_env: &mut lua::LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 434 |     pub fn get_plugins(&self) -> &[PluginMetadata] {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn is_loading(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config`, `loaded_modules`, and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     config: Config,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `setup_neovim_require`, `get_globals`, and `set_config` are never used
[INFO] [stdout]    --> src/plugin/lua/mod.rs:369:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl LuaEnv {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn setup_neovim_require(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn set_config(&mut self, option: &str, value: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_vim_command` and `run_plugin_init_script` are never used
[INFO] [stdout]    --> src/plugin/nvim_compat/mod.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl NeovimCompat {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn handle_vim_command(&self, cmd: &str, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn run_plugin_init_script(&self, plugin_path: &Path, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_plugin_config` and `load_lazy_plugin` are never used
[INFO] [stdout]    --> src/plugin/package_manager.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl PackageManager {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn find_plugin_config(&self, name: &str) -> Option<&PluginConfig> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn load_lazy_plugin(&self, name: &str, plugin_manager: &mut PluginManager, lua_env: &mut LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RegexError` and `Generic` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum FKVimError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 34 |     RegexError(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     Generic(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FKVimError` 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 `process_output`, `visible_lines`, `close`, `scroll_up`, `scroll_down`, and `restart` are never used
[INFO] [stdout]    --> src/terminal/mod.rs:440:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl TerminalSession {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub fn process_output(&mut self, line: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn visible_lines(&self, height: u16) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 516 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 531 |     pub async fn restart(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Horizontal`, `Vertical`, and `Grid` are never constructed
[INFO] [stdout]    --> src/terminal/mod.rs:585:5
[INFO] [stdout]     |
[INFO] [stdout] 581 | pub enum TerminalLayout {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 585 |     Horizontal,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 586 |     /// 垂直分割（左右布局）
[INFO] [stdout] 587 |     Vertical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 588 |     /// 四象限分割
[INFO] [stdout] 589 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TerminalLayout` has 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 `layout` is never read
[INFO] [stdout]    --> src/terminal/mod.rs:605:9
[INFO] [stdout]     |
[INFO] [stdout] 593 | pub struct Terminal {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 605 |     pub layout: TerminalLayout,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/terminal/mod.rs:665:12
[INFO] [stdout]      |
[INFO] [stdout]  612 | impl Terminal {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  665 |     pub fn switch_tab(&mut self, index: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  695 |     pub fn close_current_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  727 |     pub fn rename_current_tab(&mut self, new_name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  782 |     pub fn set_layout(&mut self, layout: TerminalLayout) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  823 |     pub fn next_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  841 |     pub fn prev_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  863 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  877 |     pub fn visible_lines(&self) -> Vec<&String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  888 |     pub fn resize(&mut self, height: u16) {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  898 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  920 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  957 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  966 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1015 |     pub fn get_tab_names(&self) -> Vec<String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1020 |     pub fn get_tab_count(&self) -> usize {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1025 |     pub fn get_active_session(&self) -> Option<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1044 |     pub fn get_layout_sessions(&self) -> Vec<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1051 |     pub fn is_active_session(&self, session_id: &str) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1135 |     pub fn next_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1165 |     pub fn prev_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1195 |     pub fn next_split(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1221 |     pub fn create_tab(&mut self, name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1244 |     pub fn init(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/highlight/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HighlightStyle {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 11 |     /// 普通文本
[INFO] [stdout] 12 |     Normal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Preprocessor,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Special,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Search,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     CurrentLine,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     Identifier,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Property,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     Field,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     Method,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     MethodCall,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     Parameter,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     Text,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     LineNumber,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     LineNumberActive,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HighlightStyle` has derived 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 `is_dark` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub struct Theme {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 109 |     /// 主题名称
[INFO] [stdout] 110 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     is_dark: bool,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Theme` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `foreground`, `background`, and `attributes` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct StyleAttributes {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 120 |     /// 前景色
[INFO] [stdout] 121 |     foreground: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 122 |     /// 背景色
[INFO] [stdout] 123 |     background: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 124 |     /// 文本属性 (粗体、斜体等)
[INFO] [stdout] 125 |     attributes: Vec<Attribute>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StyleAttributes` has 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 `foreground`, `background`, and `attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl StyleAttributes {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn foreground(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn background(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn attributes(&self) -> &[Attribute] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_style`, `is_dark`, `name`, `default_light`, and `from_config` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Theme {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_style(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn is_dark(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn default_light() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn from_config(config: &HashMap<String, String>, name: &str, is_dark: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_style_name` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn parse_style_name(name: &str) -> Result<HighlightStyle> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn parse_color(color_name: &str) -> Result<Option<Color>> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `highlight` and `name` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:393:8
[INFO] [stdout]     |
[INFO] [stdout] 391 | pub trait SyntaxHighlighter: Send + Sync {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] 392 |     /// 高亮文本
[INFO] [stdout] 393 |     fn highlight(&self, text: &str) -> Result<Vec<HighlightSpan>>;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn name(&self) -> &str;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_theme` is never read
[INFO] [stdout]    --> src/highlight/mod.rs:404:5
[INFO] [stdout]     |
[INFO] [stdout] 400 | pub struct Highlighter {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 404 |     current_theme: Theme,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_highlighter_for_file`, `get_highlighter_for_filetype`, `highlight`, `set_theme`, `current_theme`, and `get_style_attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:435:12
[INFO] [stdout]     |
[INFO] [stdout] 407 | impl Highlighter {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn get_highlighter_for_file(&self, file_path: &Path) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn get_highlighter_for_filetype(&self, file_type: &str) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn highlight(&self, text: &str, file_type: Option<&str>, file_path: Option<&Path>) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn set_theme(&mut self, theme: Theme) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     pub fn current_theme(&self) -> &Theme {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn get_style_attributes(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `undo` and `redo` are never used
[INFO] [stdout]  --> src/history/mod.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub trait ReversibleEdit: std::fmt::Debug {
[INFO] [stdout]   |           -------------- methods in this trait
[INFO] [stdout] 3 |     /// 撤销操作
[INFO] [stdout] 4 |     fn undo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |     fn redo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     Insert(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 14 -     Insert(usize, usize, String),
[INFO] [stdout] 14 +     Insert((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 |     Delete(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 17 -     Delete(usize, usize, String),
[INFO] [stdout] 17 +     Delete((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Replace` is never constructed
[INFO] [stdout]   --> src/history/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Operation {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Replace(usize, usize, String, String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `undo_op` and `redo_op` are never read
[INFO] [stdout]   --> src/history/mod.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct EditOperation {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 42 |     /// 撤销操作
[INFO] [stdout] 43 |     pub undo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub redo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditOperation` has 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 methods are never used
[INFO] [stdout]    --> src/history/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout]  81 | impl History {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn undo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn redo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn finish_undo_redo(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn start_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn end_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompoundEdit` is never constructed
[INFO] [stdout]    --> src/history/mod.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub struct CompoundEdit {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Time`, `Size`, and `Type` are never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SortMode {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Time,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     /// 按文件大小排序
[INFO] [stdout] 15 |     Size,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     /// 按文件类型排序
[INFO] [stdout] 17 |     Type,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SortMode` has 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 `Simple` is never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum ViewMode {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] 23 |     /// 简单视图，仅显示文件名
[INFO] [stdout] 24 |     Simple,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ViewMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `show_hidden` and `pattern` are never read
[INFO] [stdout]   --> src/file_browser/mod.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct FileFilter {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 32 |     /// 隐藏或显示隐藏文件
[INFO] [stdout] 33 |     pub show_hidden: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 34 |     /// 文件通配符
[INFO] [stdout] 35 |     pub pattern: Option<String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileFilter` has 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 `size` is never read
[INFO] [stdout]   --> src/file_browser/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct FileEntry {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub size: u64,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileEntry` has 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 methods are never used
[INFO] [stdout]    --> src/file_browser/mod.rs:282:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | impl FileBrowser {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn move_selection(&mut self, offset: isize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn enter_selected(&mut self) -> Result<Option<PathBuf>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn go_parent(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_display_name(&self, idx: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |     pub fn toggle_sort_mode(&mut self, mode: SortMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn set_filter(&mut self, filter: String) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn add_to_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn remove_from_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn toggle_hidden_files(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn update_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     pub fn toggle_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     pub fn delete_selected(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 646 |     pub fn rename_selected(&mut self, new_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 681 |     pub fn copy_selected(&self) -> Result<PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 702 |     pub fn paste_file(&mut self, source_path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     fn copy_dir_recursively(&self, src: &Path, dst: &Path) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn visible_items(&self, height: usize) -> Vec<&FileItem> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn ensure_selection_visible(&mut self, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 798 |     pub fn goto_bookmark(&mut self, bookmark: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 922 |     pub fn search_files(&mut self, search_term: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 957 |     pub fn clear_selections(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start_line`, `start_col`, `end_line`, and `end_col` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct SearchResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 61 |     /// 起始行
[INFO] [stdout] 62 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub start_col: usize,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub end_line: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub end_col: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchResult` 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: fields `pattern`, `case_sensitive`, `use_regex`, `whole_word`, and `in_selection` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct SearchQuery {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 77 |     /// 搜索文本或正则表达式
[INFO] [stdout] 78 |     pub pattern: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub case_sensitive: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub use_regex: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub whole_word: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub in_selection: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/ui/mod.rs:509:13
[INFO] [stdout]     |
[INFO] [stdout] 506 |             crossterm::event::KeyEventKind::Press => "按下",
[INFO] [stdout]     |             ------------------------------------- matches some of the same values
[INFO] [stdout] 507 |             crossterm::event::KeyEventKind::Release => "释放",
[INFO] [stdout]     |             --------------------------------------- matches some of the same values
[INFO] [stdout] 508 |             crossterm::event::KeyEventKind::Repeat => "重复",
[INFO] [stdout]     |             -------------------------------------- matches some of the same values
[INFO] [stdout] 509 |             _ => "未知",
[INFO] [stdout]     |             ^ collectively making this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/buffer/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl SearchQuery {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 94 |     /// 创建新的搜索查询
[INFO] [stdout] 95 |     pub fn new(pattern: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/buffer/mod.rs:297:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl Buffer {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn get_lines(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn apply_syntax_highlight(&mut self, highlighter: &Highlighter) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn undo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn redo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn search(&mut self, query: &str, case_sensitive: bool) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 491 |     pub fn current_search_result(&self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 501 |     pub fn next_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     pub fn prev_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn clear_search(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn advanced_search(&mut self, query: SearchQuery) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     fn regex_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     fn text_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn replace_current(&mut self, replacement: &str) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn replace_all(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 763 |     pub fn replace_regex(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 839 |     fn insert_text(&mut self, line: usize, col: usize, text: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 844 |     fn delete_text(&mut self, start_line: usize, start_col: usize, end_line: usize, end_col: usize) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 849 |     pub fn find(&mut self, query: &str, options: &crate::editor::SearchOptions) -> Result<usize> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 864 |     pub fn replace_term(&mut self, line: usize, col: usize, cursor_line: &mut usize, cursor_col: &mut usize, search_term: &str, new...
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 901 |     pub fn load_from_file(&mut self, path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserCommand` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct UserCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UserCommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum UserCommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum CommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuiltinCommand` is never used
[INFO] [stdout]   --> src/command/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum BuiltinCommand {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchFlags` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct SearchFlags {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubstituteFlags` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct SubstituteFlags {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandParser` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct CommandParser {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `command_manager`, `command_manager_mut`, `parse`, `get_completions`, and `parse_builtin_command` are never used
[INFO] [stdout]    --> src/command/mod.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl CommandParser {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 171 |     /// 创建命令解析器
[INFO] [stdout] 172 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn command_manager(&self) -> &CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn command_manager_mut(&mut self) -> &mut CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn parse(&self, command_str: &str) -> Result<CommandType> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_completions(&self, partial: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     fn parse_builtin_command(&self, cmd: &str, args: &str) -> Option<BuiltinCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandManager` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:518:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | pub struct CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/command/mod.rs:525:12
[INFO] [stdout]     |
[INFO] [stdout] 523 | impl CommandManager {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 524 |     /// 创建命令管理器
[INFO] [stdout] 525 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 532 |     pub fn register_command(&mut self, name: &str, command: UserCommand) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 542 |     pub fn get_command(&self, name: &str) -> Option<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 547 |     pub fn has_command(&self, name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn unregister_command(&mut self, name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn list_commands(&self) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn get_completion_list(&self, partial_name: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 594 |     pub fn register_terminal_commands(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandExecutor` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:648:12
[INFO] [stdout]     |
[INFO] [stdout] 648 | pub struct CommandExecutor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute`, and `execute_builtin` are never used
[INFO] [stdout]    --> src/command/mod.rs:655:12
[INFO] [stdout]     |
[INFO] [stdout] 653 | impl CommandExecutor {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 654 |     /// 创建命令执行器
[INFO] [stdout] 655 |     pub fn new(editor: &mut Editor) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 662 |     pub fn execute(&self, cmd_type: CommandType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     fn execute_builtin(&self, editor: &mut Editor, cmd: BuiltinCommand) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_TOGGLE_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:812:11
[INFO] [stdout]     |
[INFO] [stdout] 812 | pub const CMD_TOGGLE_TERMINAL: &str = "toggle_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_FOCUS_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:813:11
[INFO] [stdout]     |
[INFO] [stdout] 813 | pub const CMD_FOCUS_TERMINAL: &str = "focus_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_EXIT_TERMINAL_FOCUS` is never used
[INFO] [stdout]    --> src/command/mod.rs:814:11
[INFO] [stdout]     |
[INFO] [stdout] 814 | pub const CMD_EXIT_TERMINAL_FOCUS: &str = "exit_terminal_focus";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_CLEAR_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:815:11
[INFO] [stdout]     |
[INFO] [stdout] 815 | pub const CMD_CLEAR_TERMINAL: &str = "clear_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_RESTART_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:816:11
[INFO] [stdout]     |
[INFO] [stdout] 816 | pub const CMD_RESTART_TERMINAL: &str = "restart_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_SEND_TO_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:817:11
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub const CMD_SEND_TO_TERMINAL: &str = "send_to_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `description`, `usage`, and `examples` are never read
[INFO] [stdout]   --> src/command/help.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CommandHelp {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub usage: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub examples: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandHelp` has 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 `name` and `description` are never used
[INFO] [stdout]   --> src/command/help.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HelpCategory {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] 58 |     /// 获取分类名称
[INFO] [stdout] 59 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn description(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/command/help.rs:197:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl HelpSystem {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn get_command(&self, name: &str) -> Option<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn get_category_commands(&self, category: &HelpCategory) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn format_command_help(&self, help: &CommandHelp) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn format_category_help(&self, category: &HelpCategory) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn format_help_overview(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn get_general_help(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_topic_help(&self, topic: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_option` and `get_all_options` are never used
[INFO] [stdout]    --> src/config/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl Config {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] 247 |     /// 获取指定选项的值
[INFO] [stdout] 248 |     pub fn get_option(&self, option: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_all_options(&self) -> Vec<(String, String)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `keymaps`, `highlighter`, `screen_height`, `repeat_count`, `last_command`, and `help_system` are never read
[INFO] [stdout]    --> src/editor/mod.rs:60:9
[INFO] [stdout]     |
[INFO] [stdout]  25 | pub struct Editor {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub keymaps: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub highlighter: Highlighter,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub screen_height: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub repeat_count: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub last_command: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub help_system: crate::command::help::HelpSystem,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Error` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub enum EditorStatus {
[INFO] [stdout]     |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 134 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditorStatus` has 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 `timestamp` is never read
[INFO] [stdout]    --> src/editor/mod.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct StatusMessage {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub timestamp: Instant,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchOptions` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct SearchOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ReplaceConfirm` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub enum CommandLineMode {
[INFO] [stdout]     |          --------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 177 |     ReplaceConfirm,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CommandLineMode` has 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 `EditorRef` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub struct EditorRef<'a> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `open_file`, `close_file_browser`, and `set_status_message` are never used
[INFO] [stdout]    --> src/editor/mod.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl<'a> EditorRef<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 201 |     pub fn open_file(&self, path: &Path) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn close_file_browser(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_status_message(&mut self, content: impl Into<String>, msg_type: StatusMessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/editor/mod.rs:311:8
[INFO] [stdout]      |
[INFO] [stdout]  218 | impl Editor {
[INFO] [stdout]      | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  518 |     pub fn load_lazy_plugin(&mut self, name: &str) -> Result<bool> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1279 |     pub fn close_current_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1322 |     pub fn close_all_buffers(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1338 |     pub fn previous_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1353 |     pub fn switch_to_buffer(&mut self, idx: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1374 |     pub fn new_buffer(&mut self) -> Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1393 |     pub fn next_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1408 |     pub fn reload_current_file(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_tab_ids` and `get_tab` are never used
[INFO] [stdout]    --> src/editor/window.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn get_tab_ids(&self) -> Vec<TabId> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn get_tab(&self, tab_id: TabId) -> Result<&Tab> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/editor/window.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl Tab {
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn split_horizontal(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn split_vertical(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn close_active_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn focus_left_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub fn focus_right_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn focus_up_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn focus_down_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]    --> src/editor/window.rs:440:9
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub struct Window {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub title: Option<String>,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_scroll` and `set_size` are never used
[INFO] [stdout]    --> src/editor/window.rs:492:12
[INFO] [stdout]     |
[INFO] [stdout] 455 | impl Window {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 492 |     pub fn set_scroll(&mut self, line: usize, col: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     pub fn set_size(&mut self, width: usize, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `HorizontalTriple`, `VerticalTriple`, and `Grid` are never constructed
[INFO] [stdout]    --> src/editor/window.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 553 | pub enum Layout {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 561 |     HorizontalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 562 |     /// 垂直三分（左中右三个窗口）
[INFO] [stdout] 563 |     VerticalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 564 |     /// 四分格（2x2网格）
[INFO] [stdout] 565 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Layout` has 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 `Status` is never constructed
[INFO] [stdout]   --> src/editor/status.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Status {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `info`, `warning`, `error`, and `success` are never used
[INFO] [stdout]   --> src/editor/status.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl Status {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] 26 |     /// 创建一个新的普通信息消息
[INFO] [stdout] 27 |     pub fn info<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn warning<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn error<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn success<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `command_mappings` is never read
[INFO] [stdout]   --> src/input/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct KeyHandler {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     command_mappings: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_command_buffer` and `set_mapping` are never used
[INFO] [stdout]    --> src/input/mod.rs:453:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl KeyHandler {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_command_buffer(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn set_mapping(&mut self, mode: &str, key: String, command: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `RustDynlib` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum PluginType {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     RustDynlib,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Local(PathBuf),
[INFO] [stdout]    |     ----- ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is 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] 25 -     Local(PathBuf),
[INFO] [stdout] 25 +     Local(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Git` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum PluginSource {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Git {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/plugin/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PluginMetadata {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     /// 插件名称
[INFO] [stdout] 38 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub version: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub author: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub plugin_type: PluginType,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub source: PluginSource,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub lazy: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub dependencies: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `root` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:86:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct NvimPluginDirs {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 85 |     /// 根目录
[INFO] [stdout] 86 |     pub root: PathBuf,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `install_plugins`, `install_plugin`, `create_plugin_metadata`, `load_lazy_plugin`, `get_plugins`, and `is_loading` are never used
[INFO] [stdout]    --> src/plugin/mod.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn install_plugins(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn install_plugin(&mut self, name: &str, source: &PluginSource) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     fn create_plugin_metadata(&self, name: &str, path: &Path, source: PluginSource, lazy: bool) -> Result<PluginMetadata> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn load_lazy_plugin(&mut self, name: &str, lua_env: &mut lua::LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 434 |     pub fn get_plugins(&self) -> &[PluginMetadata] {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn is_loading(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config`, `loaded_modules`, and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     config: Config,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `setup_neovim_require`, `get_globals`, and `set_config` are never used
[INFO] [stdout]    --> src/plugin/lua/mod.rs:369:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl LuaEnv {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn setup_neovim_require(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn set_config(&mut self, option: &str, value: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_vim_command` and `run_plugin_init_script` are never used
[INFO] [stdout]    --> src/plugin/nvim_compat/mod.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl NeovimCompat {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn handle_vim_command(&self, cmd: &str, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn run_plugin_init_script(&self, plugin_path: &Path, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_plugin_config` and `load_lazy_plugin` are never used
[INFO] [stdout]    --> src/plugin/package_manager.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl PackageManager {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn find_plugin_config(&self, name: &str) -> Option<&PluginConfig> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn load_lazy_plugin(&self, name: &str, plugin_manager: &mut PluginManager, lua_env: &mut LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RegexError` and `Generic` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum FKVimError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 34 |     RegexError(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     Generic(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FKVimError` 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 `process_output`, `visible_lines`, `close`, `scroll_up`, `scroll_down`, and `restart` are never used
[INFO] [stdout]    --> src/terminal/mod.rs:440:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl TerminalSession {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub fn process_output(&mut self, line: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn visible_lines(&self, height: u16) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 516 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 531 |     pub async fn restart(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Horizontal`, `Vertical`, and `Grid` are never constructed
[INFO] [stdout]    --> src/terminal/mod.rs:585:5
[INFO] [stdout]     |
[INFO] [stdout] 581 | pub enum TerminalLayout {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 585 |     Horizontal,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 586 |     /// 垂直分割（左右布局）
[INFO] [stdout] 587 |     Vertical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 588 |     /// 四象限分割
[INFO] [stdout] 589 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TerminalLayout` has 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 `layout` is never read
[INFO] [stdout]    --> src/terminal/mod.rs:605:9
[INFO] [stdout]     |
[INFO] [stdout] 593 | pub struct Terminal {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 605 |     pub layout: TerminalLayout,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/terminal/mod.rs:665:12
[INFO] [stdout]      |
[INFO] [stdout]  612 | impl Terminal {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  665 |     pub fn switch_tab(&mut self, index: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  695 |     pub fn close_current_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  727 |     pub fn rename_current_tab(&mut self, new_name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  782 |     pub fn set_layout(&mut self, layout: TerminalLayout) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  823 |     pub fn next_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  841 |     pub fn prev_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  863 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  877 |     pub fn visible_lines(&self) -> Vec<&String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  888 |     pub fn resize(&mut self, height: u16) {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  898 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  920 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  957 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  966 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1015 |     pub fn get_tab_names(&self) -> Vec<String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1020 |     pub fn get_tab_count(&self) -> usize {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1025 |     pub fn get_active_session(&self) -> Option<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1044 |     pub fn get_layout_sessions(&self) -> Vec<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1051 |     pub fn is_active_session(&self, session_id: &str) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1135 |     pub fn next_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1165 |     pub fn prev_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1195 |     pub fn next_split(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1221 |     pub fn create_tab(&mut self, name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1244 |     pub fn init(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/highlight/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HighlightStyle {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 11 |     /// 普通文本
[INFO] [stdout] 12 |     Normal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Preprocessor,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Special,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Search,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     CurrentLine,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     Identifier,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Property,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     Field,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     Method,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     MethodCall,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     Parameter,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     Text,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     LineNumber,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     LineNumberActive,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HighlightStyle` has derived 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 `is_dark` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub struct Theme {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 109 |     /// 主题名称
[INFO] [stdout] 110 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     is_dark: bool,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Theme` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `foreground`, `background`, and `attributes` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct StyleAttributes {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 120 |     /// 前景色
[INFO] [stdout] 121 |     foreground: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 122 |     /// 背景色
[INFO] [stdout] 123 |     background: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 124 |     /// 文本属性 (粗体、斜体等)
[INFO] [stdout] 125 |     attributes: Vec<Attribute>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StyleAttributes` has 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 `foreground`, `background`, and `attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl StyleAttributes {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn foreground(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn background(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn attributes(&self) -> &[Attribute] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_style`, `is_dark`, `name`, `default_light`, and `from_config` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Theme {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_style(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn is_dark(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn default_light() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn from_config(config: &HashMap<String, String>, name: &str, is_dark: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_style_name` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn parse_style_name(name: &str) -> Result<HighlightStyle> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn parse_color(color_name: &str) -> Result<Option<Color>> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `highlight` and `name` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:393:8
[INFO] [stdout]     |
[INFO] [stdout] 391 | pub trait SyntaxHighlighter: Send + Sync {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] 392 |     /// 高亮文本
[INFO] [stdout] 393 |     fn highlight(&self, text: &str) -> Result<Vec<HighlightSpan>>;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn name(&self) -> &str;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_theme` is never read
[INFO] [stdout]    --> src/highlight/mod.rs:404:5
[INFO] [stdout]     |
[INFO] [stdout] 400 | pub struct Highlighter {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 404 |     current_theme: Theme,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_highlighter_for_file`, `get_highlighter_for_filetype`, `highlight`, `set_theme`, `current_theme`, and `get_style_attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:435:12
[INFO] [stdout]     |
[INFO] [stdout] 407 | impl Highlighter {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn get_highlighter_for_file(&self, file_path: &Path) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn get_highlighter_for_filetype(&self, file_type: &str) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn highlight(&self, text: &str, file_type: Option<&str>, file_path: Option<&Path>) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn set_theme(&mut self, theme: Theme) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     pub fn current_theme(&self) -> &Theme {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn get_style_attributes(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `undo` and `redo` are never used
[INFO] [stdout]  --> src/history/mod.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub trait ReversibleEdit: std::fmt::Debug {
[INFO] [stdout]   |           -------------- methods in this trait
[INFO] [stdout] 3 |     /// 撤销操作
[INFO] [stdout] 4 |     fn undo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |     fn redo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     Insert(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 14 -     Insert(usize, usize, String),
[INFO] [stdout] 14 +     Insert((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 |     Delete(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 17 -     Delete(usize, usize, String),
[INFO] [stdout] 17 +     Delete((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Replace` is never constructed
[INFO] [stdout]   --> src/history/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Operation {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Replace(usize, usize, String, String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `undo_op` and `redo_op` are never read
[INFO] [stdout]   --> src/history/mod.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct EditOperation {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 42 |     /// 撤销操作
[INFO] [stdout] 43 |     pub undo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub redo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditOperation` has 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 methods are never used
[INFO] [stdout]    --> src/history/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout]  81 | impl History {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn undo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn redo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn finish_undo_redo(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn start_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn end_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompoundEdit` is never constructed
[INFO] [stdout]    --> src/history/mod.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub struct CompoundEdit {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Time`, `Size`, and `Type` are never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SortMode {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Time,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     /// 按文件大小排序
[INFO] [stdout] 15 |     Size,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     /// 按文件类型排序
[INFO] [stdout] 17 |     Type,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SortMode` has 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 `Simple` is never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum ViewMode {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] 23 |     /// 简单视图，仅显示文件名
[INFO] [stdout] 24 |     Simple,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ViewMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `show_hidden` and `pattern` are never read
[INFO] [stdout]   --> src/file_browser/mod.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct FileFilter {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 32 |     /// 隐藏或显示隐藏文件
[INFO] [stdout] 33 |     pub show_hidden: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 34 |     /// 文件通配符
[INFO] [stdout] 35 |     pub pattern: Option<String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileFilter` has 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 `size` is never read
[INFO] [stdout]   --> src/file_browser/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct FileEntry {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub size: u64,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileEntry` has 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 methods are never used
[INFO] [stdout]    --> src/file_browser/mod.rs:282:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | impl FileBrowser {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn move_selection(&mut self, offset: isize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn enter_selected(&mut self) -> Result<Option<PathBuf>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn go_parent(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_display_name(&self, idx: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |     pub fn toggle_sort_mode(&mut self, mode: SortMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn set_filter(&mut self, filter: String) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn add_to_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn remove_from_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn toggle_hidden_files(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn update_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     pub fn toggle_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     pub fn delete_selected(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 646 |     pub fn rename_selected(&mut self, new_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 681 |     pub fn copy_selected(&self) -> Result<PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 702 |     pub fn paste_file(&mut self, source_path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     fn copy_dir_recursively(&self, src: &Path, dst: &Path) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn visible_items(&self, height: usize) -> Vec<&FileItem> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn ensure_selection_visible(&mut self, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 798 |     pub fn goto_bookmark(&mut self, bookmark: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 922 |     pub fn search_files(&mut self, search_term: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 957 |     pub fn clear_selections(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `start_line`, `start_col`, `end_line`, and `end_col` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct SearchResult {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 61 |     /// 起始行
[INFO] [stdout] 62 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub start_col: usize,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub end_line: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub end_col: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchResult` 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: fields `pattern`, `case_sensitive`, `use_regex`, `whole_word`, and `in_selection` are never read
[INFO] [stdout]   --> src/buffer/mod.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct SearchQuery {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 77 |     /// 搜索文本或正则表达式
[INFO] [stdout] 78 |     pub pattern: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub case_sensitive: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub use_regex: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub whole_word: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub in_selection: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SearchQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/buffer/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 93 | impl SearchQuery {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 94 |     /// 创建新的搜索查询
[INFO] [stdout] 95 |     pub fn new(pattern: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/buffer/mod.rs:297:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | impl Buffer {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn get_lines(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn apply_syntax_highlight(&mut self, highlighter: &Highlighter) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn undo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub fn redo(&mut self, cursor_line: &mut usize, cursor_col: &mut usize) -> Result<bool> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 430 |     pub fn search(&mut self, query: &str, case_sensitive: bool) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 491 |     pub fn current_search_result(&self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 501 |     pub fn next_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     pub fn prev_search_result(&mut self) -> Option<&SearchResult> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub fn clear_search(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 545 |     pub fn advanced_search(&mut self, query: SearchQuery) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     fn regex_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     fn text_search(&self, query: &SearchQuery, results: &mut Vec<SearchResult>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn replace_current(&mut self, replacement: &str) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn replace_all(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 763 |     pub fn replace_regex(&mut self, replacement: &str) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 839 |     fn insert_text(&mut self, line: usize, col: usize, text: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 844 |     fn delete_text(&mut self, start_line: usize, start_col: usize, end_line: usize, end_col: usize) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 849 |     pub fn find(&mut self, query: &str, options: &crate::editor::SearchOptions) -> Result<usize> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 864 |     pub fn replace_term(&mut self, line: usize, col: usize, cursor_line: &mut usize, cursor_col: &mut usize, search_term: &str, new...
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 901 |     pub fn load_from_file(&mut self, path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UserCommand` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct UserCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UserCommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum UserCommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandType` is never used
[INFO] [stdout]   --> src/command/mod.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum CommandType {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BuiltinCommand` is never used
[INFO] [stdout]   --> src/command/mod.rs:46:10
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub enum BuiltinCommand {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchFlags` is never constructed
[INFO] [stdout]   --> src/command/mod.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct SearchFlags {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubstituteFlags` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct SubstituteFlags {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandParser` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct CommandParser {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `command_manager`, `command_manager_mut`, `parse`, `get_completions`, and `parse_builtin_command` are never used
[INFO] [stdout]    --> src/command/mod.rs:172:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | impl CommandParser {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 171 |     /// 创建命令解析器
[INFO] [stdout] 172 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn command_manager(&self) -> &CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn command_manager_mut(&mut self) -> &mut CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn parse(&self, command_str: &str) -> Result<CommandType> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn get_completions(&self, partial: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     fn parse_builtin_command(&self, cmd: &str, args: &str) -> Option<BuiltinCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandManager` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:518:12
[INFO] [stdout]     |
[INFO] [stdout] 518 | pub struct CommandManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/command/mod.rs:525:12
[INFO] [stdout]     |
[INFO] [stdout] 523 | impl CommandManager {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 524 |     /// 创建命令管理器
[INFO] [stdout] 525 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 532 |     pub fn register_command(&mut self, name: &str, command: UserCommand) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 542 |     pub fn get_command(&self, name: &str) -> Option<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 547 |     pub fn has_command(&self, name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     pub fn unregister_command(&mut self, name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 562 |     pub fn list_commands(&self) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&UserCommand> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     pub fn get_completion_list(&self, partial_name: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 594 |     pub fn register_terminal_commands(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandExecutor` is never constructed
[INFO] [stdout]    --> src/command/mod.rs:648:12
[INFO] [stdout]     |
[INFO] [stdout] 648 | pub struct CommandExecutor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute`, and `execute_builtin` are never used
[INFO] [stdout]    --> src/command/mod.rs:655:12
[INFO] [stdout]     |
[INFO] [stdout] 653 | impl CommandExecutor {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 654 |     /// 创建命令执行器
[INFO] [stdout] 655 |     pub fn new(editor: &mut Editor) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 662 |     pub fn execute(&self, cmd_type: CommandType) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     fn execute_builtin(&self, editor: &mut Editor, cmd: BuiltinCommand) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_TOGGLE_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:812:11
[INFO] [stdout]     |
[INFO] [stdout] 812 | pub const CMD_TOGGLE_TERMINAL: &str = "toggle_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_FOCUS_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:813:11
[INFO] [stdout]     |
[INFO] [stdout] 813 | pub const CMD_FOCUS_TERMINAL: &str = "focus_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_EXIT_TERMINAL_FOCUS` is never used
[INFO] [stdout]    --> src/command/mod.rs:814:11
[INFO] [stdout]     |
[INFO] [stdout] 814 | pub const CMD_EXIT_TERMINAL_FOCUS: &str = "exit_terminal_focus";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_CLEAR_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:815:11
[INFO] [stdout]     |
[INFO] [stdout] 815 | pub const CMD_CLEAR_TERMINAL: &str = "clear_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_RESTART_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:816:11
[INFO] [stdout]     |
[INFO] [stdout] 816 | pub const CMD_RESTART_TERMINAL: &str = "restart_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CMD_SEND_TO_TERMINAL` is never used
[INFO] [stdout]    --> src/command/mod.rs:817:11
[INFO] [stdout]     |
[INFO] [stdout] 817 | pub const CMD_SEND_TO_TERMINAL: &str = "send_to_terminal";
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `description`, `usage`, and `examples` are never read
[INFO] [stdout]   --> src/command/help.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CommandHelp {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub usage: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub examples: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CommandHelp` has 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 `name` and `description` are never used
[INFO] [stdout]   --> src/command/help.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl HelpCategory {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] 58 |     /// 获取分类名称
[INFO] [stdout] 59 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn description(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/command/help.rs:197:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl HelpSystem {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn get_command(&self, name: &str) -> Option<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn fuzzy_match(&self, partial_name: &str) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn get_category_commands(&self, category: &HelpCategory) -> Vec<&CommandHelp> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn format_command_help(&self, help: &CommandHelp) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn format_category_help(&self, category: &HelpCategory) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn format_help_overview(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn get_general_help(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_topic_help(&self, topic: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_option` and `get_all_options` are never used
[INFO] [stdout]    --> src/config/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl Config {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] 247 |     /// 获取指定选项的值
[INFO] [stdout] 248 |     pub fn get_option(&self, option: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn get_all_options(&self) -> Vec<(String, String)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyBindings` is never constructed
[INFO] [stdout]  --> src/config/keybindings.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct KeyBindings {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/config/keybindings.rs:51:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl KeyBindings {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  50 |     /// 创建新的键绑定配置
[INFO] [stdout]  51 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn add_mapping(&mut self, mode: &str, key: &str, command: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_mapping(&self, mode: &str, key: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn remove_mapping(&mut self, mode: &str, key: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mode_mappings(&self, mode: &str) -> Option<&HashMap<String, String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn clear_mode_mappings(&mut self, mode: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn merge(&mut self, other: &KeyBindings) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn from_config(config: &crate::config::Config) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `keymaps`, `highlighter`, `screen_height`, `repeat_count`, `last_command`, and `help_system` are never read
[INFO] [stdout]    --> src/editor/mod.rs:60:9
[INFO] [stdout]     |
[INFO] [stdout]  25 | pub struct Editor {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub keymaps: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub highlighter: Highlighter,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub screen_height: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub repeat_count: usize,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub last_command: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub help_system: crate::command::help::HelpSystem,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Error` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub enum EditorStatus {
[INFO] [stdout]     |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 134 |     Error(String),
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditorStatus` has 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 `timestamp` is never read
[INFO] [stdout]    --> src/editor/mod.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct StatusMessage {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub timestamp: Instant,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SearchOptions` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct SearchOptions {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ReplaceConfirm` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub enum CommandLineMode {
[INFO] [stdout]     |          --------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 177 |     ReplaceConfirm,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CommandLineMode` has 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 `EditorRef` is never constructed
[INFO] [stdout]    --> src/editor/mod.rs:193:12
[INFO] [stdout]     |
[INFO] [stdout] 193 | pub struct EditorRef<'a> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `open_file`, `close_file_browser`, and `set_status_message` are never used
[INFO] [stdout]    --> src/editor/mod.rs:201:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl<'a> EditorRef<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 201 |     pub fn open_file(&self, path: &Path) -> Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn close_file_browser(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_status_message(&mut self, content: impl Into<String>, msg_type: StatusMessageType) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/editor/mod.rs:311:8
[INFO] [stdout]      |
[INFO] [stdout]  218 | impl Editor {
[INFO] [stdout]      | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  311 |     fn move_cursor_home(&mut self) {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  316 |     fn move_cursor_end(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  326 |     fn page_up(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  343 |     fn page_down(&mut self) -> Result<()> {
[INFO] [stdout]      |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  518 |     pub fn load_lazy_plugin(&mut self, name: &str) -> Result<bool> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1279 |     pub fn close_current_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1322 |     pub fn close_all_buffers(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1338 |     pub fn previous_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1353 |     pub fn switch_to_buffer(&mut self, idx: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1374 |     pub fn new_buffer(&mut self) -> Result<usize> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1393 |     pub fn next_buffer(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1408 |     pub fn reload_current_file(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_tab_ids` and `get_tab` are never used
[INFO] [stdout]    --> src/editor/window.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn get_tab_ids(&self) -> Vec<TabId> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn get_tab(&self, tab_id: TabId) -> Result<&Tab> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/editor/window.rs:185:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | impl Tab {
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn split_horizontal(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn split_vertical(&mut self, buffer_idx: usize) -> Result<WindowId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn close_active_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn focus_left_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 313 |     pub fn focus_right_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn focus_up_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn focus_down_window(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]    --> src/editor/window.rs:440:9
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub struct Window {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub title: Option<String>,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_scroll` and `set_size` are never used
[INFO] [stdout]    --> src/editor/window.rs:492:12
[INFO] [stdout]     |
[INFO] [stdout] 455 | impl Window {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 492 |     pub fn set_scroll(&mut self, line: usize, col: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     pub fn set_size(&mut self, width: usize, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `HorizontalTriple`, `VerticalTriple`, and `Grid` are never constructed
[INFO] [stdout]    --> src/editor/window.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 553 | pub enum Layout {
[INFO] [stdout]     |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 561 |     HorizontalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 562 |     /// 垂直三分（左中右三个窗口）
[INFO] [stdout] 563 |     VerticalTriple,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 564 |     /// 四分格（2x2网格）
[INFO] [stdout] 565 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Layout` has 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 `Status` is never constructed
[INFO] [stdout]   --> src/editor/status.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Status {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `info`, `warning`, `error`, and `success` are never used
[INFO] [stdout]   --> src/editor/status.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl Status {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] 26 |     /// 创建一个新的普通信息消息
[INFO] [stdout] 27 |     pub fn info<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn warning<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn error<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn success<T: Into<String>>(message: T) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `command_mappings` is never read
[INFO] [stdout]   --> src/input/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct KeyHandler {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 20 |     command_mappings: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_command_buffer` and `set_mapping` are never used
[INFO] [stdout]    --> src/input/mod.rs:453:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl KeyHandler {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn get_command_buffer(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn set_mapping(&mut self, mode: &str, key: String, command: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `RustDynlib` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum PluginType {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 18 |     RustDynlib,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Local(PathBuf),
[INFO] [stdout]    |     ----- ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is 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] 25 -     Local(PathBuf),
[INFO] [stdout] 25 +     Local(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Git` is never constructed
[INFO] [stdout]   --> src/plugin/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum PluginSource {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Git {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PluginSource` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/plugin/mod.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PluginMetadata {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     /// 插件名称
[INFO] [stdout] 38 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub version: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub author: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub description: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub plugin_type: PluginType,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub source: PluginSource,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub lazy: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub dependencies: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `root` is never read
[INFO] [stdout]   --> src/plugin/mod.rs:86:9
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct NvimPluginDirs {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 85 |     /// 根目录
[INFO] [stdout] 86 |     pub root: PathBuf,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `install_plugins`, `install_plugin`, `create_plugin_metadata`, `load_lazy_plugin`, `get_plugins`, and `is_loading` are never used
[INFO] [stdout]    --> src/plugin/mod.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout]  95 | impl PluginManager {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn install_plugins(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn install_plugin(&mut self, name: &str, source: &PluginSource) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     fn create_plugin_metadata(&self, name: &str, path: &Path, source: PluginSource, lazy: bool) -> Result<PluginMetadata> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn load_lazy_plugin(&mut self, name: &str, lua_env: &mut lua::LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 434 |     pub fn get_plugins(&self) -> &[PluginMetadata] {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn is_loading(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config`, `loaded_modules`, and `loaded_nvim_plugins` are never read
[INFO] [stdout]   --> src/plugin/lua/mod.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct LuaEnv {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     config: Config,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     loaded_modules: HashMap<String, bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     loaded_nvim_plugins: HashMap<String, PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `setup_neovim_require`, `get_globals`, and `set_config` are never used
[INFO] [stdout]    --> src/plugin/lua/mod.rs:369:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl LuaEnv {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn setup_neovim_require(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn set_config(&mut self, option: &str, value: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_vim_command` and `run_plugin_init_script` are never used
[INFO] [stdout]    --> src/plugin/nvim_compat/mod.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl NeovimCompat {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn handle_vim_command(&self, cmd: &str, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn run_plugin_init_script(&self, plugin_path: &Path, lua_env: &mut LuaEnv) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `temp_dir` is never read
[INFO] [stdout]   --> src/plugin/package_manager.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct PackageManager {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     temp_dir: PathBuf,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_plugin_config` and `load_lazy_plugin` are never used
[INFO] [stdout]    --> src/plugin/package_manager.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl PackageManager {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn find_plugin_config(&self, name: &str) -> Option<&PluginConfig> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn load_lazy_plugin(&self, name: &str, plugin_manager: &mut PluginManager, lua_env: &mut LuaEnv) -> Result<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_key_event` is never used
[INFO] [stdout]    --> src/ui/mod.rs:443:4
[INFO] [stdout]     |
[INFO] [stdout] 443 | fn handle_key_event(editor: &mut Editor, key: KeyEvent) -> Result<()> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1155:4
[INFO] [stdout]      |
[INFO] [stdout] 1155 | fn draw_search_info(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_highlight_spans` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1340:4
[INFO] [stdout]      |
[INFO] [stdout] 1340 | fn get_highlight_spans(buffer: &Buffer, line: usize) -> Vec<HighlightSpan> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_syntax_highlight` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1353:4
[INFO] [stdout]      |
[INFO] [stdout] 1353 | fn render_syntax_highlight(line: &str, line_idx: usize, line_highlights: &[HighlightSpan], get_highlight_style: impl Fn(&Highlight...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_search_info` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1527:4
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_filenames_panel` is never used
[INFO] [stdout]     --> src/ui/mod.rs:1575:4
[INFO] [stdout]      |
[INFO] [stdout] 1575 | fn render_filenames_panel(f: &mut Frame, rect: Rect, editor: &Editor) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `RegexError` and `Generic` are never constructed
[INFO] [stdout]   --> src/error/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum FKVimError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 34 |     RegexError(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     Generic(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FKVimError` 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 `process_output`, `visible_lines`, `close`, `scroll_up`, `scroll_down`, and `restart` are never used
[INFO] [stdout]    --> src/terminal/mod.rs:440:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl TerminalSession {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub fn process_output(&mut self, line: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn visible_lines(&self, height: u16) -> Vec<&String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 455 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 516 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 531 |     pub async fn restart(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Horizontal`, `Vertical`, and `Grid` are never constructed
[INFO] [stdout]    --> src/terminal/mod.rs:585:5
[INFO] [stdout]     |
[INFO] [stdout] 581 | pub enum TerminalLayout {
[INFO] [stdout]     |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 585 |     Horizontal,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 586 |     /// 垂直分割（左右布局）
[INFO] [stdout] 587 |     Vertical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 588 |     /// 四象限分割
[INFO] [stdout] 589 |     Grid,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TerminalLayout` has 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 `layout` is never read
[INFO] [stdout]    --> src/terminal/mod.rs:605:9
[INFO] [stdout]     |
[INFO] [stdout] 593 | pub struct Terminal {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 605 |     pub layout: TerminalLayout,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/terminal/mod.rs:665:12
[INFO] [stdout]      |
[INFO] [stdout]  612 | impl Terminal {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  665 |     pub fn switch_tab(&mut self, index: usize) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  695 |     pub fn close_current_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  727 |     pub fn rename_current_tab(&mut self, new_name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  782 |     pub fn set_layout(&mut self, layout: TerminalLayout) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  823 |     pub fn next_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  841 |     pub fn prev_session(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  863 |     pub fn start(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  877 |     pub fn visible_lines(&self) -> Vec<&String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  888 |     pub fn resize(&mut self, height: u16) {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  898 |     pub fn close(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  920 |     pub fn is_visible(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  957 |     pub fn scroll_up(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  966 |     pub fn scroll_down(&mut self, lines: usize) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1015 |     pub fn get_tab_names(&self) -> Vec<String> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1020 |     pub fn get_tab_count(&self) -> usize {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1025 |     pub fn get_active_session(&self) -> Option<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1044 |     pub fn get_layout_sessions(&self) -> Vec<&TerminalSession> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1051 |     pub fn is_active_session(&self, session_id: &str) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1135 |     pub fn next_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1165 |     pub fn prev_tab(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1195 |     pub fn next_split(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1221 |     pub fn create_tab(&mut self, name: String) -> Result<()> {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1244 |     pub fn init(&mut self) -> Result<()> {
[INFO] [stdout]      |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/highlight/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum HighlightStyle {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] 11 |     /// 普通文本
[INFO] [stdout] 12 |     Normal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Preprocessor,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Special,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Search,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     CurrentLine,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     Identifier,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Property,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     Field,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     Method,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     MethodCall,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     Parameter,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     Text,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     LineNumber,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     LineNumberActive,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `HighlightStyle` has derived 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 `is_dark` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub struct Theme {
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 109 |     /// 主题名称
[INFO] [stdout] 110 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     is_dark: bool,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Theme` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `foreground`, `background`, and `attributes` are never read
[INFO] [stdout]    --> src/highlight/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub struct StyleAttributes {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 120 |     /// 前景色
[INFO] [stdout] 121 |     foreground: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 122 |     /// 背景色
[INFO] [stdout] 123 |     background: Option<Color>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 124 |     /// 文本属性 (粗体、斜体等)
[INFO] [stdout] 125 |     attributes: Vec<Attribute>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `StyleAttributes` has 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 `foreground`, `background`, and `attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl StyleAttributes {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn foreground(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn background(&self) -> Option<Color> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn attributes(&self) -> &[Attribute] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `get_style`, `is_dark`, `name`, `default_light`, and `from_config` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Theme {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_style(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn is_dark(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn default_light() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn from_config(config: &HashMap<String, String>, name: &str, is_dark: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_style_name` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:329:4
[INFO] [stdout]     |
[INFO] [stdout] 329 | fn parse_style_name(name: &str) -> Result<HighlightStyle> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/highlight/mod.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn parse_color(color_name: &str) -> Result<Option<Color>> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `highlight` and `name` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:393:8
[INFO] [stdout]     |
[INFO] [stdout] 391 | pub trait SyntaxHighlighter: Send + Sync {
[INFO] [stdout]     |           ----------------- methods in this trait
[INFO] [stdout] 392 |     /// 高亮文本
[INFO] [stdout] 393 |     fn highlight(&self, text: &str) -> Result<Vec<HighlightSpan>>;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn name(&self) -> &str;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_theme` is never read
[INFO] [stdout]    --> src/highlight/mod.rs:404:5
[INFO] [stdout]     |
[INFO] [stdout] 400 | pub struct Highlighter {
[INFO] [stdout]     |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 404 |     current_theme: Theme,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_highlighter_for_file`, `get_highlighter_for_filetype`, `highlight`, `set_theme`, `current_theme`, and `get_style_attributes` are never used
[INFO] [stdout]    --> src/highlight/mod.rs:435:12
[INFO] [stdout]     |
[INFO] [stdout] 407 | impl Highlighter {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn get_highlighter_for_file(&self, file_path: &Path) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn get_highlighter_for_filetype(&self, file_type: &str) -> Option<&dyn SyntaxHighlighter> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn highlight(&self, text: &str, file_type: Option<&str>, file_path: Option<&Path>) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn set_theme(&mut self, theme: Theme) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 473 |     pub fn current_theme(&self) -> &Theme {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn get_style_attributes(&self, style: &HighlightStyle) -> Option<&StyleAttributes> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CACHE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const CACHE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CACHE_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const MAX_CACHE_SIZE: usize = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSER_POOL_SIZE` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MAX_PARSER_POOL_SIZE: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_PARSING_TIME_MS` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_PARSING_TIME_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FAILURE_EXPIRY_TIME` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const FAILURE_EXPIRY_TIME: Duration = Duration::from_secs(300);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_RETRY_COUNT` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const MAX_RETRY_COUNT: u32 = 3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_INCREMENTAL_DIFF_RATIO` is never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | const MAX_INCREMENTAL_DIFF_RATIO: f32 = 0.3;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParserPool` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct ParserPool {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize`, `get_parser`, and `return_parser` are never used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl ParserPool {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 33 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn initialize(&self) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn get_parser(&self) -> Option<Parser> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn return_parser(&self, mut parser: Parser) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | struct CacheStats {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl CacheStats {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 109 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     fn record_hit(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn record_miss(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn record_eviction(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn record_fallback(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn maybe_report(&self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     fn report(&self) {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdaptiveFallbackChain` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | struct AdaptiveFallbackChain {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | impl AdaptiveFallbackChain {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 174 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn next_strategy(&mut self, language: &str, content_length: usize) -> Option<FallbackStrategy> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn analyze_content_for_strategy(&self, content: &str, language: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     fn adjust_scores_for_language(&self, scores: &mut HashMap<String, f32>, language: &str, content_length: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     fn record_success(&self, language: &str, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn record_failure(&self, strategy: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     fn reset(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StrategySuccessRate` is never constructed
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | struct StrategySuccessRate {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_success`, `record_failure`, and `success_rate` are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:405:8
[INFO] [stdout]     |
[INFO] [stdout] 404 | impl StrategySuccessRate {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 405 |     fn new() -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 413 |     fn record_success(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 418 |     fn record_failure(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     fn success_rate(&self) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FallbackStrategy` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:443:10
[INFO] [stdout]     |
[INFO] [stdout] 443 | pub enum FallbackStrategy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:464:12
[INFO] [stdout]     |
[INFO] [stdout] 462 | impl FallbackStrategy {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 463 |     /// 获取所有策略
[INFO] [stdout] 464 |     pub fn all_strategies() -> Vec<FallbackStrategy> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 478 |     pub fn name(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 492 |     fn apply(&self, content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 506 |     fn apply_simple_keyword(content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 544 |     fn apply_regex_based(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn apply_fragment_parsing(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 558 |     fn apply_heuristic(_content: &str, _language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 565 |     fn apply_mimic_similar(_content: &str, language: &str) -> Result<Vec<HighlightSpan>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_highlight` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:584:4
[INFO] [stdout]     |
[INFO] [stdout] 584 | fn create_highlight(style: HighlightStyle, abs_pos: usize, text: &str, line_starts: &[usize]) -> Option<HighlightSpan> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_line_starts` is never used
[INFO] [stdout]    --> src/highlight/tree_sitter_highlight.rs:616:4
[INFO] [stdout]     |
[INFO] [stdout] 616 | fn get_line_starts(content: &str) -> Vec<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `undo` and `redo` are never used
[INFO] [stdout]  --> src/history/mod.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub trait ReversibleEdit: std::fmt::Debug {
[INFO] [stdout]   |           -------------- methods in this trait
[INFO] [stdout] 3 |     /// 撤销操作
[INFO] [stdout] 4 |     fn undo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 7 |     fn redo(&self) -> Operation;
[INFO] [stdout]   |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     Insert(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 14 -     Insert(usize, usize, String),
[INFO] [stdout] 14 +     Insert((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0`, `1`, and `2` are never read
[INFO] [stdout]   --> src/history/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 |     Delete(usize, usize, String),
[INFO] [stdout]    |     ------ ^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 17 -     Delete(usize, usize, String),
[INFO] [stdout] 17 +     Delete((), (), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Replace` is never constructed
[INFO] [stdout]   --> src/history/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum Operation {
[INFO] [stdout]    |          --------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 20 |     Replace(usize, usize, String, String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Operation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `undo_op` and `redo_op` are never read
[INFO] [stdout]   --> src/history/mod.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct EditOperation {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 42 |     /// 撤销操作
[INFO] [stdout] 43 |     pub undo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub redo_op: Operation,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditOperation` has 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 methods are never used
[INFO] [stdout]    --> src/history/mod.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout]  81 | impl History {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn undo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn redo(&mut self) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn finish_undo_redo(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn start_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn end_compound_operation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompoundEdit` is never constructed
[INFO] [stdout]    --> src/history/mod.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub struct CompoundEdit {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Time`, `Size`, and `Type` are never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub enum SortMode {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Time,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 14 |     /// 按文件大小排序
[INFO] [stdout] 15 |     Size,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 16 |     /// 按文件类型排序
[INFO] [stdout] 17 |     Type,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SortMode` has 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 `Simple` is never constructed
[INFO] [stdout]   --> src/file_browser/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum ViewMode {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] 23 |     /// 简单视图，仅显示文件名
[INFO] [stdout] 24 |     Simple,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ViewMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `show_hidden` and `pattern` are never read
[INFO] [stdout]   --> src/file_browser/mod.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct FileFilter {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 32 |     /// 隐藏或显示隐藏文件
[INFO] [stdout] 33 |     pub show_hidden: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 34 |     /// 文件通配符
[INFO] [stdout] 35 |     pub pattern: Option<String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileFilter` has 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 `size` is never read
[INFO] [stdout]   --> src/file_browser/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct FileEntry {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub size: u64,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileEntry` has 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 methods are never used
[INFO] [stdout]    --> src/file_browser/mod.rs:282:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | impl FileBrowser {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn move_selection(&mut self, offset: isize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn enter_selected(&mut self) -> Result<Option<PathBuf>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn go_parent(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn get_display_name(&self, idx: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |     pub fn toggle_sort_mode(&mut self, mode: SortMode) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 482 |     pub fn set_filter(&mut self, filter: String) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 488 |     pub fn add_to_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 493 |     pub fn remove_from_bookmarks(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 498 |     pub fn toggle_hidden_files(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     pub fn update_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 577 |     pub fn toggle_preview(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 616 |     pub fn delete_selected(&mut self) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 646 |     pub fn rename_selected(&mut self, new_name: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 681 |     pub fn copy_selected(&self) -> Result<PathBuf> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 702 |     pub fn paste_file(&mut self, source_path: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     fn copy_dir_recursively(&self, src: &Path, dst: &Path) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 765 |     pub fn visible_items(&self, height: usize) -> Vec<&FileItem> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 776 |     pub fn ensure_selection_visible(&mut self, height: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 798 |     pub fn goto_bookmark(&mut self, bookmark: &Path) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 922 |     pub fn search_files(&mut self, search_term: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 957 |     pub fn clear_selections(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/plugin/lua/mod.rs:424:24
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table> {
[INFO] [stdout]     |                        ^^^^^            ^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 424 |     pub fn get_globals(&self) -> Result<Table<'_>> {
[INFO] [stdout]     |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1417:30
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                              ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                              |
[INFO] [stdout]      |                              the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1417 | fn render_status_bar(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1473:32
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                                ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                                |
[INFO] [stdout]      |                                the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1473 | fn render_command_line(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                    ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/ui/mod.rs:1527:31
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span> {
[INFO] [stdout]      |                               ^^^^^^^         ^^^^ the same lifetime is hidden here
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               the lifetime is elided here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1527 | fn render_search_info(editor: &Editor) -> Vec<Span<'_>> {
[INFO] [stdout]      |                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 48 |                 parser.set_included_ranges(&[]);
[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] 48 |                 let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `std::result::Result` that must be used
[INFO] [stdout]   --> src/highlight/tree_sitter_highlight.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 64 |         parser.set_included_ranges(&[]);
[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] 64 |         let _ = parser.set_included_ranges(&[]);
[INFO] [stdout]    |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.97s
[INFO] running `Command { std: "docker" "inspect" "d3512856260ae0338a06b1b8dc71c275fd2bd00e9c66996b68957fccad78f6c7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d3512856260ae0338a06b1b8dc71c275fd2bd00e9c66996b68957fccad78f6c7", kill_on_drop: false }`
[INFO] [stdout] d3512856260ae0338a06b1b8dc71c275fd2bd00e9c66996b68957fccad78f6c7
