[INFO] cloning repository https://github.com/YdrMaster/ggml-tokenizer [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/YdrMaster/ggml-tokenizer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYdrMaster%2Fggml-tokenizer", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYdrMaster%2Fggml-tokenizer'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] ce8462b5ff70ffc6babc97311215655a47c6aa03 [INFO] linting YdrMaster/ggml-tokenizer against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYdrMaster%2Fggml-tokenizer" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/YdrMaster/ggml-tokenizer [INFO] finished tweaking git repo https://github.com/YdrMaster/ggml-tokenizer [INFO] tweaked toml for git repo https://github.com/YdrMaster/ggml-tokenizer written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/YdrMaster/ggml-tokenizer on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/YdrMaster/ggml-tokenizer 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" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded num_enum v0.7.3 [INFO] [stderr] Downloaded memmap2 v0.9.5 [INFO] [stderr] Downloaded log v0.4.27 [INFO] [stderr] Downloaded ggus v0.4.0 [INFO] [stderr] Downloaded bit-set v0.8.0 [INFO] [stderr] Downloaded digit-layout v0.2.0 [INFO] [stderr] Downloaded toml_datetime v0.6.8 [INFO] [stderr] Downloaded proc-macro-crate v3.3.0 [INFO] [stderr] Downloaded crunchy v0.2.3 [INFO] [stderr] Downloaded ggml-quants v0.0.0 [INFO] [stderr] Downloaded bit-vec v0.8.0 [INFO] [stderr] Downloaded num_enum_derive v0.7.3 [INFO] [stderr] Downloaded quote v1.0.40 [INFO] [stderr] Downloaded unicode-ident v1.0.18 [INFO] [stderr] Downloaded half v2.6.0 [INFO] [stderr] Downloaded fancy-regex v0.14.0 [INFO] [stderr] Downloaded hashbrown v0.15.2 [INFO] [stderr] Downloaded toml_edit v0.22.24 [INFO] [stderr] Downloaded indexmap v2.9.0 [INFO] [stderr] Downloaded aho-corasick v1.1.3 [INFO] [stderr] Downloaded winnow v0.7.6 [INFO] [stderr] Downloaded proc-macro2 v1.0.95 [INFO] [stderr] Downloaded syn v2.0.100 [INFO] [stderr] Downloaded regex v1.11.1 [INFO] [stderr] Downloaded regex-syntax v0.8.5 [INFO] [stderr] Downloaded regex-automata v0.4.9 [INFO] [stderr] Downloaded libc v0.2.172 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 3677854d7a2e982aaba4c9d96d9050764b60f3a5bc249f67e0425e2404b6db5b [INFO] running `Command { std: "docker" "start" "-a" "3677854d7a2e982aaba4c9d96d9050764b60f3a5bc249f67e0425e2404b6db5b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3677854d7a2e982aaba4c9d96d9050764b60f3a5bc249f67e0425e2404b6db5b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3677854d7a2e982aaba4c9d96d9050764b60f3a5bc249f67e0425e2404b6db5b", kill_on_drop: false }` [INFO] [stdout] 3677854d7a2e982aaba4c9d96d9050764b60f3a5bc249f67e0425e2404b6db5b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 3d643f49429223b98aa5006629fd60b9da5a3ba1a5c5654d34ad6ceecd22a1e7 [INFO] running `Command { std: "docker" "start" "-a" "3d643f49429223b98aa5006629fd60b9da5a3ba1a5c5654d34ad6ceecd22a1e7", kill_on_drop: false }` [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling unicode-ident v1.0.18 [INFO] [stderr] Compiling hashbrown v0.15.2 [INFO] [stderr] Compiling equivalent v1.0.2 [INFO] [stderr] Compiling toml_datetime v0.6.8 [INFO] [stderr] Checking memchr v2.7.4 [INFO] [stderr] Compiling winnow v0.7.6 [INFO] [stderr] Compiling rayon-core v1.12.1 [INFO] [stderr] Checking cfg-if v1.0.0 [INFO] [stderr] Checking regex-syntax v0.8.5 [INFO] [stderr] Compiling libc v0.2.172 [INFO] [stderr] Checking bit-vec v0.8.0 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking half v2.6.0 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Checking bit-set v0.8.0 [INFO] [stderr] Checking digit-layout v0.2.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking indexmap v2.9.0 [INFO] [stderr] Checking crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking crossbeam-deque v0.8.6 [INFO] [stderr] Checking memmap2 v0.9.5 [INFO] [stderr] Compiling syn v2.0.100 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Compiling toml_edit v0.22.24 [INFO] [stderr] Checking ggml-quants v0.0.0 [INFO] [stderr] Compiling proc-macro-crate v3.3.0 [INFO] [stderr] Compiling num_enum_derive v0.7.3 [INFO] [stderr] Checking fancy-regex v0.14.0 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Checking num_enum v0.7.3 [INFO] [stderr] Checking ggus v0.4.0 [INFO] [stderr] Checking try-tokenize v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `TokenAttribute` [INFO] [stdout] --> src/main.rs:2:20 [INFO] [stdout] | [INFO] [stdout] 2 | use common::{NULL, TokenAttribute}; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VocabType` [INFO] [stdout] --> src/main.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | use config::{VocabType, load}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `untils::llama_escape_whitespace` [INFO] [stdout] --> src/main.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use untils::llama_escape_whitespace; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::LinkedList` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::collections::LinkedList; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `LlmTokenizerBpeSession` and `LlmTokenizerSpmSession` [INFO] [stdout] --> src/common.rs:1:22 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::session::{LlmTokenizerBpeSession, LlmTokenizerSpmSession}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `else` branch is empty [INFO] [stdout] --> src/config.rs:600:23 [INFO] [stdout] | [INFO] [stdout] 600 | } else { [INFO] [stdout] | _______________________^ [INFO] [stdout] 601 | | } [INFO] [stdout] | |_____________________^ help: you can remove it [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_else [INFO] [stdout] = note: `#[warn(clippy::needless_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/session.rs:3:40 [INFO] [stdout] | [INFO] [stdout] 3 | collections::{BinaryHeap, HashMap, VecDeque}, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/session.rs:25:1 [INFO] [stdout] | [INFO] [stdout] 25 | / /// BPE 标记器会话结构体 [INFO] [stdout] 26 | | [INFO] [stdout] | |_^ [INFO] [stdout] 27 | pub struct LlmTokenizerBpeSession { [INFO] [stdout] | --------------------------------- the comment documents this struct [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `unicode_cpt_flags` should have an upper camel case name [INFO] [stdout] --> src/unicode.rs:469:12 [INFO] [stdout] | [INFO] [stdout] 469 | pub struct unicode_cpt_flags { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `UnicodeCptFlags` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/unicode.rs:593:8 [INFO] [stdout] | [INFO] [stdout] 593 | if (cpt >= '0' as u32 && cpt <= '9' as u32) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 593 - if (cpt >= '0' as u32 && cpt <= '9' as u32) { [INFO] [stdout] 593 + if cpt >= '0' as u32 && cpt <= '9' as u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ggus::GGufMetaError` [INFO] [stdout] --> src/untils.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use ggus::GGufMetaError; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `TokenAttribute` [INFO] [stdout] --> src/main.rs:2:20 [INFO] [stdout] | [INFO] [stdout] 2 | use common::{NULL, TokenAttribute}; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VocabType` [INFO] [stdout] --> src/main.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | use config::{VocabType, load}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `untils::llama_escape_whitespace` [INFO] [stdout] --> src/main.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use untils::llama_escape_whitespace; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::LinkedList` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::collections::LinkedList; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `LlmTokenizerBpeSession` and `LlmTokenizerSpmSession` [INFO] [stdout] --> src/common.rs:1:22 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::session::{LlmTokenizerBpeSession, LlmTokenizerSpmSession}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `else` branch is empty [INFO] [stdout] --> src/config.rs:600:23 [INFO] [stdout] | [INFO] [stdout] 600 | } else { [INFO] [stdout] | _______________________^ [INFO] [stdout] 601 | | } [INFO] [stdout] | |_____________________^ help: you can remove it [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_else [INFO] [stdout] = note: `#[warn(clippy::needless_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/session.rs:3:40 [INFO] [stdout] | [INFO] [stdout] 3 | collections::{BinaryHeap, HashMap, VecDeque}, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/session.rs:25:1 [INFO] [stdout] | [INFO] [stdout] 25 | / /// BPE 标记器会话结构体 [INFO] [stdout] 26 | | [INFO] [stdout] | |_^ [INFO] [stdout] 27 | pub struct LlmTokenizerBpeSession { [INFO] [stdout] | --------------------------------- the comment documents this struct [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `unicode_cpt_flags` should have an upper camel case name [INFO] [stdout] --> src/unicode.rs:469:12 [INFO] [stdout] | [INFO] [stdout] 469 | pub struct unicode_cpt_flags { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `UnicodeCptFlags` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `if` condition [INFO] [stdout] --> src/unicode.rs:593:8 [INFO] [stdout] | [INFO] [stdout] 593 | if (cpt >= '0' as u32 && cpt <= '9' as u32) { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 593 - if (cpt >= '0' as u32 && cpt <= '9' as u32) { [INFO] [stdout] 593 + if cpt >= '0' as u32 && cpt <= '9' as u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ggus::GGufMetaError` [INFO] [stdout] --> src/untils.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use ggus::GGufMetaError; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable statement [INFO] [stdout] --> src/config.rs:568:25 [INFO] [stdout] | [INFO] [stdout] 565 | todo!(); [INFO] [stdout] | ------- any code following this expression is unreachable [INFO] [stdout] ... [INFO] [stdout] 568 | is_prev_special = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable statement [INFO] [stdout] --> src/session.rs:66:17 [INFO] [stdout] | [INFO] [stdout] 65 | todo!(); [INFO] [stdout] | ------- any code following this expression is unreachable [INFO] [stdout] 66 | / self.symbols.push(LlmSymbol { [INFO] [stdout] 67 | | prev: -1, [INFO] [stdout] 68 | | next: -1, [INFO] [stdout] 69 | | text: word.to_string(), [INFO] [stdout] 70 | | n: word.len(), [INFO] [stdout] 71 | | }); [INFO] [stdout] | |___________________^ unreachable statement [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable statement [INFO] [stdout] --> src/config.rs:568:25 [INFO] [stdout] | [INFO] [stdout] 565 | todo!(); [INFO] [stdout] | ------- any code following this expression is unreachable [INFO] [stdout] ... [INFO] [stdout] 568 | is_prev_special = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable statement [INFO] [stdout] --> src/session.rs:66:17 [INFO] [stdout] | [INFO] [stdout] 65 | todo!(); [INFO] [stdout] | ------- any code following this expression is unreachable [INFO] [stdout] 66 | / self.symbols.push(LlmSymbol { [INFO] [stdout] 67 | | prev: -1, [INFO] [stdout] 68 | | next: -1, [INFO] [stdout] 69 | | text: word.to_string(), [INFO] [stdout] 70 | | n: word.len(), [INFO] [stdout] 71 | | }); [INFO] [stdout] | |___________________^ unreachable statement [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `score` is never read [INFO] [stdout] --> src/common.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct TokenData { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 10 | pub text: String, [INFO] [stdout] 11 | pub score: f32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `TokenData` 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: variants `Normalized` and `SingleWord` are never constructed [INFO] [stdout] --> src/common.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub enum TokenAttribute { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 25 | Normalized = 1 << 6, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | SingleWord = 1 << 9, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `TokenAttribute` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Spm`, `Wpm`, `Ugm`, and `Rwkv` are never constructed [INFO] [stdout] --> src/config.rs:369:5 [INFO] [stdout] | [INFO] [stdout] 367 | pub enum VocabType { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 368 | None = 0, // For models without vocab [INFO] [stdout] 369 | Spm = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback [INFO] [stdout] | ^^^ [INFO] [stdout] 370 | Bpe = 2, // GPT-2 tokenizer based on byte-level BPE [INFO] [stdout] 371 | Wpm = 3, // BERT tokenizer based on WordPiece [INFO] [stdout] | ^^^ [INFO] [stdout] 372 | Ugm = 4, // T5 tokenizer based on Unigram [INFO] [stdout] | ^^^ [INFO] [stdout] 373 | Rwkv = 5, // RWKV tokenizer based on greedy tokenization [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VocabType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `escape_whitespaces` and `treat_whitespace_as_suffix` are never read [INFO] [stdout] --> src/config.rs:399:9 [INFO] [stdout] | [INFO] [stdout] 376 | pub struct TokenizerConfig { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 399 | pub escape_whitespaces: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 400 | pub treat_whitespace_as_suffix: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `n_tokens`, `get_token_data`, and `byte_to_token` are never used [INFO] [stdout] --> src/config.rs:457:12 [INFO] [stdout] | [INFO] [stdout] 407 | impl TokenizerConfig { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 457 | pub fn n_tokens(&self) -> u32 { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 476 | pub fn get_token_data(&self, id: TokenId) -> TokenData { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 480 | pub fn byte_to_token(&self, ch: u8) -> TokenId { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `append` is never used [INFO] [stdout] --> src/session.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 38 | impl LlmTokenizerBpeSession { [INFO] [stdout] | --------------------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 50 | pub fn append(token_id: TokenId, output: &mut Vec) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `size` is never read [INFO] [stdout] --> src/session.rs:221:9 [INFO] [stdout] | [INFO] [stdout] 211 | pub struct LlmBigramBpeItem { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 221 | pub size: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LlmBigramBpeItem` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/session.rs:274:12 [INFO] [stdout] | [INFO] [stdout] 255 | impl LlmBigramBpe { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 274 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LlmBigramSpm` is never constructed [INFO] [stdout] --> src/session.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 286 | pub struct LlmBigramSpm { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LlmTokenizerSpmSession` is never constructed [INFO] [stdout] --> src/session.rs:329:12 [INFO] [stdout] | [INFO] [stdout] 329 | pub struct LlmTokenizerSpmSession { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `tokenize`, `try_add_bigram`, and `resegment` are never used [INFO] [stdout] --> src/session.rs:340:12 [INFO] [stdout] | [INFO] [stdout] 338 | impl<'a> LlmTokenizerSpmSession { [INFO] [stdout] | ------------------------------- associated items in this implementation [INFO] [stdout] 339 | /// 创建一个新的 SPM 标记器会话 [INFO] [stdout] 340 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 349 | pub fn tokenize(&mut self, text: &'a str, output: &mut Vec, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 424 | fn try_add_bigram(&mut self, left: i32, right: i32, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn resegment(&self, symbol: &LlmSymbol, output: &mut Vec, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom` is never used [INFO] [stdout] --> src/unicode.rs:149:4 [INFO] [stdout] | [INFO] [stdout] 149 | fn unicode_regex_split_custom(text: &str, regex_expr: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom_gpt2` is never used [INFO] [stdout] --> src/unicode.rs:165:4 [INFO] [stdout] | [INFO] [stdout] 165 | fn unicode_regex_split_custom_gpt2(text: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom_llama3` is never used [INFO] [stdout] --> src/unicode.rs:305:4 [INFO] [stdout] | [INFO] [stdout] 305 | fn unicode_regex_split_custom_llama3(text: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/unicode.rs:470:9 [INFO] [stdout] | [INFO] [stdout] 469 | pub struct unicode_cpt_flags { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 470 | pub is_whitespace: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 471 | pub is_letter: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 472 | pub is_number: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 473 | pub is_punctuation: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 474 | pub is_symbol: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 475 | pub is_accent_mark: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 476 | pub is_lowercase: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 477 | pub is_uppercase: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 478 | pub is_nfd: bool, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `unicode_cpt_flags` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `UNDEFINED`, `WHITESPACE`, `as_uint`, and `category_flag` are never used [INFO] [stdout] --> src/unicode.rs:482:15 [INFO] [stdout] | [INFO] [stdout] 481 | impl unicode_cpt_flags { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 482 | pub const UNDEFINED: Self = Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 494 | pub const WHITESPACE: u32 = 1 << 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 501 | pub fn as_uint(&self) -> u32 { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 524 | pub fn category_flag(&self) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpts_from_utf8` is never used [INFO] [stdout] --> src/unicode.rs:547:4 [INFO] [stdout] | [INFO] [stdout] 547 | fn unicode_cpts_from_utf8(text: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpt_to_utf8` is never used [INFO] [stdout] --> src/unicode.rs:551:4 [INFO] [stdout] | [INFO] [stdout] 551 | fn unicode_cpt_to_utf8(cpt: u32) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpt_flags_from_cpt` is never used [INFO] [stdout] --> src/unicode.rs:588:4 [INFO] [stdout] | [INFO] [stdout] 588 | fn unicode_cpt_flags_from_cpt(cpt: u32) -> unicode_cpt_flags { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_tolower` is never used [INFO] [stdout] --> src/unicode.rs:615:4 [INFO] [stdout] | [INFO] [stdout] 615 | fn unicode_tolower(cpt: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_len_utf8` is never used [INFO] [stdout] --> src/unicode.rs:669:8 [INFO] [stdout] | [INFO] [stdout] 669 | pub fn unicode_len_utf8(byte: u8) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `score` is never read [INFO] [stdout] --> src/common.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct TokenData { [INFO] [stdout] | --------- field in this struct [INFO] [stdout] 10 | pub text: String, [INFO] [stdout] 11 | pub score: f32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `TokenData` 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: variants `Normalized` and `SingleWord` are never constructed [INFO] [stdout] --> src/common.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub enum TokenAttribute { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 25 | Normalized = 1 << 6, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | SingleWord = 1 << 9, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `TokenAttribute` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Spm`, `Wpm`, `Ugm`, and `Rwkv` are never constructed [INFO] [stdout] --> src/config.rs:369:5 [INFO] [stdout] | [INFO] [stdout] 367 | pub enum VocabType { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 368 | None = 0, // For models without vocab [INFO] [stdout] 369 | Spm = 1, // LLaMA tokenizer based on byte-level BPE with byte fallback [INFO] [stdout] | ^^^ [INFO] [stdout] 370 | Bpe = 2, // GPT-2 tokenizer based on byte-level BPE [INFO] [stdout] 371 | Wpm = 3, // BERT tokenizer based on WordPiece [INFO] [stdout] | ^^^ [INFO] [stdout] 372 | Ugm = 4, // T5 tokenizer based on Unigram [INFO] [stdout] | ^^^ [INFO] [stdout] 373 | Rwkv = 5, // RWKV tokenizer based on greedy tokenization [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VocabType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `escape_whitespaces` and `treat_whitespace_as_suffix` are never read [INFO] [stdout] --> src/config.rs:399:9 [INFO] [stdout] | [INFO] [stdout] 376 | pub struct TokenizerConfig { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 399 | pub escape_whitespaces: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 400 | pub treat_whitespace_as_suffix: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `n_tokens`, `get_token_data`, and `byte_to_token` are never used [INFO] [stdout] --> src/config.rs:457:12 [INFO] [stdout] | [INFO] [stdout] 407 | impl TokenizerConfig { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 457 | pub fn n_tokens(&self) -> u32 { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 476 | pub fn get_token_data(&self, id: TokenId) -> TokenData { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 480 | pub fn byte_to_token(&self, ch: u8) -> TokenId { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `append` is never used [INFO] [stdout] --> src/session.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 38 | impl LlmTokenizerBpeSession { [INFO] [stdout] | --------------------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 50 | pub fn append(token_id: TokenId, output: &mut Vec) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `size` is never read [INFO] [stdout] --> src/session.rs:221:9 [INFO] [stdout] | [INFO] [stdout] 211 | pub struct LlmBigramBpeItem { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 221 | pub size: usize, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LlmBigramBpeItem` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/session.rs:274:12 [INFO] [stdout] | [INFO] [stdout] 255 | impl LlmBigramBpe { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 274 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LlmBigramSpm` is never constructed [INFO] [stdout] --> src/session.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 286 | pub struct LlmBigramSpm { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LlmTokenizerSpmSession` is never constructed [INFO] [stdout] --> src/session.rs:329:12 [INFO] [stdout] | [INFO] [stdout] 329 | pub struct LlmTokenizerSpmSession { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `tokenize`, `try_add_bigram`, and `resegment` are never used [INFO] [stdout] --> src/session.rs:340:12 [INFO] [stdout] | [INFO] [stdout] 338 | impl<'a> LlmTokenizerSpmSession { [INFO] [stdout] | ------------------------------- associated items in this implementation [INFO] [stdout] 339 | /// 创建一个新的 SPM 标记器会话 [INFO] [stdout] 340 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 349 | pub fn tokenize(&mut self, text: &'a str, output: &mut Vec, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 424 | fn try_add_bigram(&mut self, left: i32, right: i32, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn resegment(&self, symbol: &LlmSymbol, output: &mut Vec, config: &TokenizerConfig) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom` is never used [INFO] [stdout] --> src/unicode.rs:149:4 [INFO] [stdout] | [INFO] [stdout] 149 | fn unicode_regex_split_custom(text: &str, regex_expr: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom_gpt2` is never used [INFO] [stdout] --> src/unicode.rs:165:4 [INFO] [stdout] | [INFO] [stdout] 165 | fn unicode_regex_split_custom_gpt2(text: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_regex_split_custom_llama3` is never used [INFO] [stdout] --> src/unicode.rs:305:4 [INFO] [stdout] | [INFO] [stdout] 305 | fn unicode_regex_split_custom_llama3(text: &str, offsets: &[usize]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/unicode.rs:470:9 [INFO] [stdout] | [INFO] [stdout] 469 | pub struct unicode_cpt_flags { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 470 | pub is_whitespace: bool, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 471 | pub is_letter: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 472 | pub is_number: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 473 | pub is_punctuation: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 474 | pub is_symbol: bool, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 475 | pub is_accent_mark: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 476 | pub is_lowercase: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 477 | pub is_uppercase: bool, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 478 | pub is_nfd: bool, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `unicode_cpt_flags` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `UNDEFINED`, `WHITESPACE`, `as_uint`, and `category_flag` are never used [INFO] [stdout] --> src/unicode.rs:482:15 [INFO] [stdout] | [INFO] [stdout] 481 | impl unicode_cpt_flags { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 482 | pub const UNDEFINED: Self = Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 494 | pub const WHITESPACE: u32 = 1 << 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 501 | pub fn as_uint(&self) -> u32 { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 524 | pub fn category_flag(&self) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpts_from_utf8` is never used [INFO] [stdout] --> src/unicode.rs:547:4 [INFO] [stdout] | [INFO] [stdout] 547 | fn unicode_cpts_from_utf8(text: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpt_to_utf8` is never used [INFO] [stdout] --> src/unicode.rs:551:4 [INFO] [stdout] | [INFO] [stdout] 551 | fn unicode_cpt_to_utf8(cpt: u32) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_cpt_flags_from_cpt` is never used [INFO] [stdout] --> src/unicode.rs:588:4 [INFO] [stdout] | [INFO] [stdout] 588 | fn unicode_cpt_flags_from_cpt(cpt: u32) -> unicode_cpt_flags { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_tolower` is never used [INFO] [stdout] --> src/unicode.rs:615:4 [INFO] [stdout] | [INFO] [stdout] 615 | fn unicode_tolower(cpt: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unicode_len_utf8` is never used [INFO] [stdout] --> src/unicode.rs:669:8 [INFO] [stdout] | [INFO] [stdout] 669 | pub fn unicode_len_utf8(byte: u8) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `token` after checking its variant with `is_ok` [INFO] [stdout] --> src/config.rs:51:17 [INFO] [stdout] | [INFO] [stdout] 50 | if token.is_ok() { [INFO] [stdout] | ---------------- help: try: `if let Ok() = token` [INFO] [stdout] 51 | token.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:163:9 [INFO] [stdout] | [INFO] [stdout] 163 | / if config.eot == NULL { [INFO] [stdout] 164 | | if key == "<|eot_id|>" [INFO] [stdout] 165 | | || key == "<|im_end|>" [INFO] [stdout] 166 | | || key == "<|end|>" [INFO] [stdout] ... | [INFO] [stdout] 181 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 163 ~ if config.eot == NULL [INFO] [stdout] 164 ~ && (key == "<|eot_id|>" [INFO] [stdout] 165 | || key == "<|im_end|>" [INFO] [stdout] ... [INFO] [stdout] 170 | || key == "_< EOT >" [INFO] [stdout] 171 ~ || key == "<|end▁of▁sentence|>") [INFO] [stdout] 172 | // DeepSeek [INFO] [stdout] ... [INFO] [stdout] 179 | } [INFO] [stdout] 180 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:182:9 [INFO] [stdout] | [INFO] [stdout] 182 | / if config.eom == NULL { [INFO] [stdout] 183 | | if key == "<|eom_id|>" { [INFO] [stdout] 184 | | config.eom = *value; [INFO] [stdout] 185 | | if (id_to_token[*value as usize].attribute as i32 & TokenAttribute::Control as i32) [INFO] [stdout] ... | [INFO] [stdout] 191 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 182 ~ if config.eom == NULL [INFO] [stdout] 183 ~ && key == "<|eom_id|>" { [INFO] [stdout] 184 | config.eom = *value; [INFO] [stdout] ... [INFO] [stdout] 189 | } [INFO] [stdout] 190 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/config.rs:192:9 [INFO] [stdout] | [INFO] [stdout] 192 | / if config.fim_pre == NULL { [INFO] [stdout] 193 | | if key == "<|fim_prefix|>" // Qwen [INFO] [stdout] 194 | | || key == "" [INFO] [stdout] 195 | | || key == "<|fim▁begin|>" // DeepSeek [INFO] [stdout] ... | [INFO] [stdout] 206 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 192 ~ if config.fim_pre == NULL [INFO] [stdout] 193 ~ && (key == "<|fim_prefix|>" // Qwen [INFO] [stdout] 194 | || key == "" [INFO] [stdout] 195 | || key == "<|fim▁begin|>" // DeepSeek [INFO] [stdout] 196 | || key == "
"
[INFO] [stdout] 197 ~                 || key == "▁
")
[INFO] [stdout] 198 |             {
[INFO] [stdout] ...
[INFO] [stdout] 204 |                 }
[INFO] [stdout] 205 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:207:9
[INFO] [stdout]     |
[INFO] [stdout] 207 | /         if config.fim_suf == NULL {
[INFO] [stdout] 208 | |             if key == "<|fim_suffix|>" // Qwen
[INFO] [stdout] 209 | |             || key == ""
[INFO] [stdout] 210 | |             || key == "<|fim▁hole|>" // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 222 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 207 ~         if config.fim_suf == NULL
[INFO] [stdout] 208 ~             && (key == "<|fim_suffix|>" // Qwen
[INFO] [stdout] 209 |             || key == ""
[INFO] [stdout] 210 |             || key == "<|fim▁hole|>" // DeepSeek
[INFO] [stdout] 211 |             || key == ""
[INFO] [stdout] 212 ~             || key == "▁")
[INFO] [stdout] 213 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 220 |                 }
[INFO] [stdout] 221 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: called `unwrap` on `token` after checking its variant with `is_ok`
[INFO] [stdout]   --> src/config.rs:51:17
[INFO] [stdout]    |
[INFO] [stdout] 50 |             if token.is_ok() {
[INFO] [stdout]    |             ---------------- help: try: `if let Ok() = token`
[INFO] [stdout] 51 |                 token.unwrap()
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap
[INFO] [stdout]    = note: `#[warn(clippy::unnecessary_unwrap)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:223:9
[INFO] [stdout]     |
[INFO] [stdout] 223 | /         if config.fim_mid == NULL {
[INFO] [stdout] 224 | |             if key == "<|fim_middle|>" // Qwen
[INFO] [stdout] 225 | |             || key == ""
[INFO] [stdout] 226 | |             || key == "<|fim▁end|>" // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 238 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 223 ~         if config.fim_mid == NULL
[INFO] [stdout] 224 ~             && (key == "<|fim_middle|>" // Qwen
[INFO] [stdout] 225 |             || key == ""
[INFO] [stdout] 226 |             || key == "<|fim▁end|>" // DeepSeek
[INFO] [stdout] 227 |             || key == ""
[INFO] [stdout] 228 ~             || key == "▁")
[INFO] [stdout] 229 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 236 |                 }
[INFO] [stdout] 237 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 | /         if config.fim_mid == NULL {
[INFO] [stdout] 240 | |             if key== "<|fim_middle|>" // Qwen
[INFO] [stdout] 241 | |             || key== ""
[INFO] [stdout] 242 | |             || key== "<|fim▁end|>"  // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 254 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 239 ~         if config.fim_mid == NULL
[INFO] [stdout] 240 ~             && (key== "<|fim_middle|>" // Qwen
[INFO] [stdout] 241 |             || key== ""
[INFO] [stdout] 242 |             || key== "<|fim▁end|>"  // DeepSeek
[INFO] [stdout] 243 |             || key== ""
[INFO] [stdout] 244 ~             || key== "▁")
[INFO] [stdout] 245 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 252 |                 }
[INFO] [stdout] 253 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:255:9
[INFO] [stdout]     |
[INFO] [stdout] 255 | /         if config.fim_pad == NULL {
[INFO] [stdout] 256 | |             if key == "<|fim_pad|>" // Qwen
[INFO] [stdout] 257 | |                 || key == ""
[INFO] [stdout] 258 | |                 || key == ""
[INFO] [stdout] ...   |
[INFO] [stdout] 267 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 255 ~         if config.fim_pad == NULL
[INFO] [stdout] 256 ~             && (key == "<|fim_pad|>" // Qwen
[INFO] [stdout] 257 |                 || key == ""
[INFO] [stdout] 258 ~                 || key == "")
[INFO] [stdout] 259 |             {
[INFO] [stdout] ...
[INFO] [stdout] 265 |                 }
[INFO] [stdout] 266 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:268:9
[INFO] [stdout]     |
[INFO] [stdout] 268 | /         if config.fim_rep == NULL {
[INFO] [stdout] 269 | |             if key == "<|fim_repo|>"  // Qwen
[INFO] [stdout] 270 | |             || key == "<|repo_name|>"
[INFO] [stdout] 271 | |             || key == ""
[INFO] [stdout] ...   |
[INFO] [stdout] 281 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 268 ~         if config.fim_rep == NULL
[INFO] [stdout] 269 ~             && (key == "<|fim_repo|>"  // Qwen
[INFO] [stdout] 270 |             || key == "<|repo_name|>"
[INFO] [stdout] 271 |             || key == ""
[INFO] [stdout] 272 ~             || key == "")
[INFO] [stdout] 273 |             {
[INFO] [stdout] ...
[INFO] [stdout] 279 |                 }
[INFO] [stdout] 280 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:282:9
[INFO] [stdout]     |
[INFO] [stdout] 282 | /         if config.fim_sep == NULL {
[INFO] [stdout] 283 | |             if key == "<|file_sep|>"
[INFO] [stdout] ...   |
[INFO] [stdout] 293 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 282 ~         if config.fim_sep == NULL
[INFO] [stdout] 283 ~             && key == "<|file_sep|>"
[INFO] [stdout] 284 |             // Qwen
[INFO] [stdout] ...
[INFO] [stdout] 291 |                 }
[INFO] [stdout] 292 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:163:9
[INFO] [stdout]     |
[INFO] [stdout] 163 | /         if config.eot == NULL {
[INFO] [stdout] 164 | |             if key == "<|eot_id|>"
[INFO] [stdout] 165 | |                 || key == "<|im_end|>"
[INFO] [stdout] 166 | |                 || key == "<|end|>"
[INFO] [stdout] ...   |
[INFO] [stdout] 181 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout]     = note: `#[warn(clippy::collapsible_if)]` on by default
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 163 ~         if config.eot == NULL
[INFO] [stdout] 164 ~             && (key == "<|eot_id|>"
[INFO] [stdout] 165 |                 || key == "<|im_end|>"
[INFO] [stdout] ...
[INFO] [stdout] 170 |                 || key == "_< EOT >"
[INFO] [stdout] 171 ~                 || key == "<|end▁of▁sentence|>")
[INFO] [stdout] 172 |             // DeepSeek
[INFO] [stdout] ...
[INFO] [stdout] 179 |                 }
[INFO] [stdout] 180 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: match expression looks like `matches!` macro
[INFO] [stdout]    --> src/config.rs:337:13
[INFO] [stdout]     |
[INFO] [stdout] 337 | /             match token_data.attribute {
[INFO] [stdout] 338 | |                 TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown => {
[INFO] [stdout] 339 | |                     true
[INFO] [stdout] ...   |
[INFO] [stdout] 342 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro
[INFO] [stdout]     = note: `#[warn(clippy::match_like_matches_macro)]` on by default
[INFO] [stdout] help: use `matches!` directly
[INFO] [stdout]     |
[INFO] [stdout] 337 -             match token_data.attribute {
[INFO] [stdout] 338 -                 TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown => {
[INFO] [stdout] 339 -                     true
[INFO] [stdout] 340 -                 }
[INFO] [stdout] 341 -                 _ => false,
[INFO] [stdout] 342 -             }
[INFO] [stdout] 337 +             matches!(token_data.attribute, TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:182:9
[INFO] [stdout]     |
[INFO] [stdout] 182 | /         if config.eom == NULL {
[INFO] [stdout] 183 | |             if key == "<|eom_id|>" {
[INFO] [stdout] 184 | |                 config.eom = *value;
[INFO] [stdout] 185 | |                 if (id_to_token[*value as usize].attribute as i32 & TokenAttribute::Control as i32)
[INFO] [stdout] ...   |
[INFO] [stdout] 191 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 182 ~         if config.eom == NULL
[INFO] [stdout] 183 ~             && key == "<|eom_id|>" {
[INFO] [stdout] 184 |                 config.eom = *value;
[INFO] [stdout] ...
[INFO] [stdout] 189 |                 }
[INFO] [stdout] 190 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:192:9
[INFO] [stdout]     |
[INFO] [stdout] 192 | /         if config.fim_pre == NULL {
[INFO] [stdout] 193 | |             if key == "<|fim_prefix|>" // Qwen
[INFO] [stdout] 194 | |                 || key == ""
[INFO] [stdout] 195 | |                 || key == "<|fim▁begin|>" // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 206 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 192 ~         if config.fim_pre == NULL
[INFO] [stdout] 193 ~             && (key == "<|fim_prefix|>" // Qwen
[INFO] [stdout] 194 |                 || key == ""
[INFO] [stdout] 195 |                 || key == "<|fim▁begin|>" // DeepSeek
[INFO] [stdout] 196 |                 || key == "
"
[INFO] [stdout] 197 ~                 || key == "▁
")
[INFO] [stdout] 198 |             {
[INFO] [stdout] ...
[INFO] [stdout] 204 |                 }
[INFO] [stdout] 205 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:207:9
[INFO] [stdout]     |
[INFO] [stdout] 207 | /         if config.fim_suf == NULL {
[INFO] [stdout] 208 | |             if key == "<|fim_suffix|>" // Qwen
[INFO] [stdout] 209 | |             || key == ""
[INFO] [stdout] 210 | |             || key == "<|fim▁hole|>" // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 222 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 207 ~         if config.fim_suf == NULL
[INFO] [stdout] 208 ~             && (key == "<|fim_suffix|>" // Qwen
[INFO] [stdout] 209 |             || key == ""
[INFO] [stdout] 210 |             || key == "<|fim▁hole|>" // DeepSeek
[INFO] [stdout] 211 |             || key == ""
[INFO] [stdout] 212 ~             || key == "▁")
[INFO] [stdout] 213 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 220 |                 }
[INFO] [stdout] 221 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:223:9
[INFO] [stdout]     |
[INFO] [stdout] 223 | /         if config.fim_mid == NULL {
[INFO] [stdout] 224 | |             if key == "<|fim_middle|>" // Qwen
[INFO] [stdout] 225 | |             || key == ""
[INFO] [stdout] 226 | |             || key == "<|fim▁end|>" // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 238 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 223 ~         if config.fim_mid == NULL
[INFO] [stdout] 224 ~             && (key == "<|fim_middle|>" // Qwen
[INFO] [stdout] 225 |             || key == ""
[INFO] [stdout] 226 |             || key == "<|fim▁end|>" // DeepSeek
[INFO] [stdout] 227 |             || key == ""
[INFO] [stdout] 228 ~             || key == "▁")
[INFO] [stdout] 229 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 236 |                 }
[INFO] [stdout] 237 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 | /         if config.fim_mid == NULL {
[INFO] [stdout] 240 | |             if key== "<|fim_middle|>" // Qwen
[INFO] [stdout] 241 | |             || key== ""
[INFO] [stdout] 242 | |             || key== "<|fim▁end|>"  // DeepSeek
[INFO] [stdout] ...   |
[INFO] [stdout] 254 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 239 ~         if config.fim_mid == NULL
[INFO] [stdout] 240 ~             && (key== "<|fim_middle|>" // Qwen
[INFO] [stdout] 241 |             || key== ""
[INFO] [stdout] 242 |             || key== "<|fim▁end|>"  // DeepSeek
[INFO] [stdout] 243 |             || key== ""
[INFO] [stdout] 244 ~             || key== "▁")
[INFO] [stdout] 245 |             // CodeLlama
[INFO] [stdout] ...
[INFO] [stdout] 252 |                 }
[INFO] [stdout] 253 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:255:9
[INFO] [stdout]     |
[INFO] [stdout] 255 | /         if config.fim_pad == NULL {
[INFO] [stdout] 256 | |             if key == "<|fim_pad|>" // Qwen
[INFO] [stdout] 257 | |                 || key == ""
[INFO] [stdout] 258 | |                 || key == ""
[INFO] [stdout] ...   |
[INFO] [stdout] 267 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 255 ~         if config.fim_pad == NULL
[INFO] [stdout] 256 ~             && (key == "<|fim_pad|>" // Qwen
[INFO] [stdout] 257 |                 || key == ""
[INFO] [stdout] 258 ~                 || key == "")
[INFO] [stdout] 259 |             {
[INFO] [stdout] ...
[INFO] [stdout] 265 |                 }
[INFO] [stdout] 266 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:268:9
[INFO] [stdout]     |
[INFO] [stdout] 268 | /         if config.fim_rep == NULL {
[INFO] [stdout] 269 | |             if key == "<|fim_repo|>"  // Qwen
[INFO] [stdout] 270 | |             || key == "<|repo_name|>"
[INFO] [stdout] 271 | |             || key == ""
[INFO] [stdout] ...   |
[INFO] [stdout] 281 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 268 ~         if config.fim_rep == NULL
[INFO] [stdout] 269 ~             && (key == "<|fim_repo|>"  // Qwen
[INFO] [stdout] 270 |             || key == "<|repo_name|>"
[INFO] [stdout] 271 |             || key == ""
[INFO] [stdout] 272 ~             || key == "")
[INFO] [stdout] 273 |             {
[INFO] [stdout] ...
[INFO] [stdout] 279 |                 }
[INFO] [stdout] 280 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/config.rs:282:9
[INFO] [stdout]     |
[INFO] [stdout] 282 | /         if config.fim_sep == NULL {
[INFO] [stdout] 283 | |             if key == "<|file_sep|>"
[INFO] [stdout] ...   |
[INFO] [stdout] 293 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 282 ~         if config.fim_sep == NULL
[INFO] [stdout] 283 ~             && key == "<|file_sep|>"
[INFO] [stdout] 284 |             // Qwen
[INFO] [stdout] ...
[INFO] [stdout] 291 |                 }
[INFO] [stdout] 292 ~             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unneeded `return` statement
[INFO] [stdout]    --> src/config.rs:452:13
[INFO] [stdout]     |
[INFO] [stdout] 452 |             return *token_id;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return
[INFO] [stdout]     = note: `#[warn(clippy::needless_return)]` on by default
[INFO] [stdout] help: remove `return`
[INFO] [stdout]     |
[INFO] [stdout] 452 -             return *token_id;
[INFO] [stdout] 452 +             *token_id
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a
[INFO] [stdout]    --> src/config.rs:531:21
[INFO] [stdout]     |
[INFO] [stdout] 531 |     pub fn tokenize<'a>(
[INFO] [stdout]     |                     ^^
[INFO] [stdout] 532 |         &self,
[INFO] [stdout] 533 |         raw_text: &'a str,
[INFO] [stdout]     |                    ^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes
[INFO] [stdout]     = note: `#[warn(clippy::needless_lifetimes)]` on by default
[INFO] [stdout] help: elide the lifetimes
[INFO] [stdout]     |
[INFO] [stdout] 531 ~     pub fn tokenize(
[INFO] [stdout] 532 |         &self,
[INFO] [stdout] 533 ~         raw_text: &str,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: match expression looks like `matches!` macro
[INFO] [stdout]    --> src/config.rs:337:13
[INFO] [stdout]     |
[INFO] [stdout] 337 | /             match token_data.attribute {
[INFO] [stdout] 338 | |                 TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown => {
[INFO] [stdout] 339 | |                     true
[INFO] [stdout] ...   |
[INFO] [stdout] 342 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro
[INFO] [stdout]     = note: `#[warn(clippy::match_like_matches_macro)]` on by default
[INFO] [stdout] help: use `matches!` directly
[INFO] [stdout]     |
[INFO] [stdout] 337 -             match token_data.attribute {
[INFO] [stdout] 338 -                 TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown => {
[INFO] [stdout] 339 -                     true
[INFO] [stdout] 340 -                 }
[INFO] [stdout] 341 -                 _ => false,
[INFO] [stdout] 342 -             }
[INFO] [stdout] 337 +             matches!(token_data.attribute, TokenAttribute::Control | TokenAttribute::UserDefined | TokenAttribute::Unknown)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler
[INFO] [stdout]    --> src/config.rs:599:79
[INFO] [stdout]     |
[INFO] [stdout] 599 |                         session_ref.tokenize(substring.as_str(), &mut output, &self);
[INFO] [stdout]     |                                                                               ^^^^^ help: change this to: `self`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
[INFO] [stdout]     = note: `#[warn(clippy::needless_borrow)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unneeded `return` statement
[INFO] [stdout]    --> src/config.rs:452:13
[INFO] [stdout]     |
[INFO] [stdout] 452 |             return *token_id;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return
[INFO] [stdout]     = note: `#[warn(clippy::needless_return)]` on by default
[INFO] [stdout] help: remove `return`
[INFO] [stdout]     |
[INFO] [stdout] 452 -             return *token_id;
[INFO] [stdout] 452 +             *token_id
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`)
[INFO] [stdout]    --> src/config.rs:709:56
[INFO] [stdout]     |
[INFO] [stdout] 709 | ...                   - ((match_pos as u64 - raw_text_base_offset as u64)
[INFO] [stdout]     |                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `raw_text_base_offset`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
[INFO] [stdout]     = note: `#[warn(clippy::unnecessary_cast)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a
[INFO] [stdout]    --> src/config.rs:531:21
[INFO] [stdout]     |
[INFO] [stdout] 531 |     pub fn tokenize<'a>(
[INFO] [stdout]     |                     ^^
[INFO] [stdout] 532 |         &self,
[INFO] [stdout] 533 |         raw_text: &'a str,
[INFO] [stdout]     |                    ^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes
[INFO] [stdout]     = note: `#[warn(clippy::needless_lifetimes)]` on by default
[INFO] [stdout] help: elide the lifetimes
[INFO] [stdout]     |
[INFO] [stdout] 531 ~     pub fn tokenize(
[INFO] [stdout] 532 |         &self,
[INFO] [stdout] 533 ~         raw_text: &str,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler
[INFO] [stdout]    --> src/config.rs:599:79
[INFO] [stdout]     |
[INFO] [stdout] 599 |                         session_ref.tokenize(substring.as_str(), &mut output, &self);
[INFO] [stdout]     |                                                                               ^^^^^ help: change this to: `self`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
[INFO] [stdout]     = note: `#[warn(clippy::needless_borrow)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`)
[INFO] [stdout]    --> src/config.rs:709:56
[INFO] [stdout]     |
[INFO] [stdout] 709 | ...                   - ((match_pos as u64 - raw_text_base_offset as u64)
[INFO] [stdout]     |                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `raw_text_base_offset`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
[INFO] [stdout]     = note: `#[warn(clippy::unnecessary_cast)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used
[INFO] [stdout]    --> src/unicode.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 | /             for cap_result in re.captures_iter(text) {
[INFO] [stdout] 124 | |                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] ...   |
[INFO] [stdout] 135 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop
[INFO] [stdout]    --> src/unicode.rs:124:17
[INFO] [stdout]     |
[INFO] [stdout] 124 | /                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] 126 | |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 127 | |                         if m.start() > last_end {
[INFO] [stdout] ...   |
[INFO] [stdout] 134 | |                 }
[INFO] [stdout]     | |_________________^
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten
[INFO] [stdout]     = note: `#[warn(clippy::manual_flatten)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 123 ~             for cap in re.captures_iter(text).flatten() {
[INFO] [stdout] 124 +                 if let Some(m) = cap.get(0) {
[INFO] [stdout] 125 ~                     // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 126 +                     if m.start() > last_end {
[INFO] [stdout] 127 +                         result.push(text[last_end..m.start()].to_string());
[INFO] [stdout] 128 +                     }
[INFO] [stdout] 129 ~                     // 添加匹配的文本
[INFO] [stdout] 130 +                     result.push(text[m.start()..m.end()].to_string());
[INFO] [stdout] 131 +                     last_end = m.end();
[INFO] [stdout] 132 +                 }
[INFO] [stdout] 133 +             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/unicode.rs:124:17
[INFO] [stdout]     |
[INFO] [stdout] 124 | /                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] 126 | |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 127 | |                         if m.start() > last_end {
[INFO] [stdout] ...   |
[INFO] [stdout] 134 | |                 }
[INFO] [stdout]     | |_________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 124 ~                 if let Ok(cap) = cap_result
[INFO] [stdout] 125 ~                     && let Some(m) = cap.get(0) {
[INFO] [stdout] 126 |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] ...
[INFO] [stdout] 132 |                         last_end = m.end();
[INFO] [stdout] 133 ~                     }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this boolean expression can be simplified
[INFO] [stdout]    --> src/unicode.rs:225:24
[INFO] [stdout]     |
[INFO] [stdout] 225 |                       if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 226 | |                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     | |__________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool
[INFO] [stdout]     = note: `#[warn(clippy::nonminimal_bool)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 225 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 226 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 225 +                     if !(cpt_next_next != 'e' as u32 || cpt_next != 'r' as u32 && cpt_next != 'v' as u32)
[INFO] [stdout]     |
[INFO] [stdout] 225 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 226 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 225 +                     if (cpt_next == 'v' as u32 || cpt_next == 'r' as u32) && cpt_next_next == 'e' as u32
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this boolean expression can be simplified
[INFO] [stdout]    --> src/unicode.rs:365:24
[INFO] [stdout]     |
[INFO] [stdout] 365 |                       if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 366 | |                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     | |__________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 365 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 366 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 365 +                     if !(cpt_next_next != 'e' as u32 || cpt_next != 'r' as u32 && cpt_next != 'v' as u32)
[INFO] [stdout]     |
[INFO] [stdout] 365 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 366 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 365 +                     if (cpt_next == 'v' as u32 || cpt_next == 'r' as u32) && cpt_next_next == 'e' as u32
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used
[INFO] [stdout]    --> src/unicode.rs:123:13
[INFO] [stdout]     |
[INFO] [stdout] 123 | /             for cap_result in re.captures_iter(text) {
[INFO] [stdout] 124 | |                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] ...   |
[INFO] [stdout] 135 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop
[INFO] [stdout]    --> src/unicode.rs:124:17
[INFO] [stdout]     |
[INFO] [stdout] 124 | /                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] 126 | |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 127 | |                         if m.start() > last_end {
[INFO] [stdout] ...   |
[INFO] [stdout] 134 | |                 }
[INFO] [stdout]     | |_________________^
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten
[INFO] [stdout]     = note: `#[warn(clippy::manual_flatten)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 123 ~             for cap in re.captures_iter(text).flatten() {
[INFO] [stdout] 124 +                 if let Some(m) = cap.get(0) {
[INFO] [stdout] 125 ~                     // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 126 +                     if m.start() > last_end {
[INFO] [stdout] 127 +                         result.push(text[last_end..m.start()].to_string());
[INFO] [stdout] 128 +                     }
[INFO] [stdout] 129 ~                     // 添加匹配的文本
[INFO] [stdout] 130 +                     result.push(text[m.start()..m.end()].to_string());
[INFO] [stdout] 131 +                     last_end = m.end();
[INFO] [stdout] 132 +                 }
[INFO] [stdout] 133 +             }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/unicode.rs:124:17
[INFO] [stdout]     |
[INFO] [stdout] 124 | /                 if let Ok(cap) = cap_result {
[INFO] [stdout] 125 | |                     if let Some(m) = cap.get(0) {
[INFO] [stdout] 126 | |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] 127 | |                         if m.start() > last_end {
[INFO] [stdout] ...   |
[INFO] [stdout] 134 | |                 }
[INFO] [stdout]     | |_________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 124 ~                 if let Ok(cap) = cap_result
[INFO] [stdout] 125 ~                     && let Some(m) = cap.get(0) {
[INFO] [stdout] 126 |                         // 如果匹配前有未匹配的文本,添加到结果中
[INFO] [stdout] ...
[INFO] [stdout] 132 |                         last_end = m.end();
[INFO] [stdout] 133 ~                     }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this boolean expression can be simplified
[INFO] [stdout]    --> src/unicode.rs:225:24
[INFO] [stdout]     |
[INFO] [stdout] 225 |                       if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 226 | |                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     | |__________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool
[INFO] [stdout]     = note: `#[warn(clippy::nonminimal_bool)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 225 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 226 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 225 +                     if !(cpt_next_next != 'e' as u32 || cpt_next != 'r' as u32 && cpt_next != 'v' as u32)
[INFO] [stdout]     |
[INFO] [stdout] 225 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 226 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 225 +                     if (cpt_next == 'v' as u32 || cpt_next == 'r' as u32) && cpt_next_next == 'e' as u32
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/unicode.rs:376:13
[INFO] [stdout]     |
[INFO] [stdout] 376 | /             if !(cpt == '\r' as u32 || cpt == '\n' as u32 || flags.is_number) {
[INFO] [stdout] 377 | |                 if flags.is_letter || get_flags(pos + 1).is_letter {
[INFO] [stdout] 378 | |                     // 一个或多个字母
[INFO] [stdout] 379 | |                     pos += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 386 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 376 ~             if !(cpt == '\r' as u32 || cpt == '\n' as u32 || flags.is_number)
[INFO] [stdout] 377 ~                 && (flags.is_letter || get_flags(pos + 1).is_letter) {
[INFO] [stdout] 378 |                     // 一个或多个字母
[INFO] [stdout] ...
[INFO] [stdout] 384 |                     continue;
[INFO] [stdout] 385 ~                 }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this boolean expression can be simplified
[INFO] [stdout]    --> src/unicode.rs:365:24
[INFO] [stdout]     |
[INFO] [stdout] 365 |                       if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 366 | |                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout]     | |__________________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 365 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 366 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 365 +                     if !(cpt_next_next != 'e' as u32 || cpt_next != 'r' as u32 && cpt_next != 'v' as u32)
[INFO] [stdout]     |
[INFO] [stdout] 365 -                     if (cpt_next == 'r' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 366 -                         || (cpt_next == 'v' as u32 && cpt_next_next == 'e' as u32)
[INFO] [stdout] 365 +                     if (cpt_next == 'v' as u32 || cpt_next == 'r' as u32) && cpt_next_next == 'e' as u32
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:560:8
[INFO] [stdout]     |
[INFO] [stdout] 560 |     if cpt >= 0x80 && cpt <= 0x7ff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x80..=0x7ff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout]     = note: `#[warn(clippy::manual_range_contains)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:567:8
[INFO] [stdout]     |
[INFO] [stdout] 567 |     if cpt >= 0x800 && cpt <= 0xffff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x800..=0xffff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:575:8
[INFO] [stdout]     |
[INFO] [stdout] 575 |     if cpt >= 0x10000 && cpt <= 0x10ffff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x10000..=0x10ffff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `if` statement can be collapsed
[INFO] [stdout]    --> src/unicode.rs:376:13
[INFO] [stdout]     |
[INFO] [stdout] 376 | /             if !(cpt == '\r' as u32 || cpt == '\n' as u32 || flags.is_number) {
[INFO] [stdout] 377 | |                 if flags.is_letter || get_flags(pos + 1).is_letter {
[INFO] [stdout] 378 | |                     // 一个或多个字母
[INFO] [stdout] 379 | |                     pos += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 386 | |             }
[INFO] [stdout]     | |_____________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if
[INFO] [stdout] help: collapse nested if block
[INFO] [stdout]     |
[INFO] [stdout] 376 ~             if !(cpt == '\r' as u32 || cpt == '\n' as u32 || flags.is_number)
[INFO] [stdout] 377 ~                 && (flags.is_letter || get_flags(pos + 1).is_letter) {
[INFO] [stdout] 378 |                     // 一个或多个字母
[INFO] [stdout] ...
[INFO] [stdout] 384 |                     continue;
[INFO] [stdout] 385 ~                 }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:604:15
[INFO] [stdout]     |
[INFO] [stdout] 604 |     } else if cpt >= 33 && cpt <= 47
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(33..=47).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:605:12
[INFO] [stdout]     |
[INFO] [stdout] 605 |         || cpt >= 58 && cpt <= 64
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(58..=64).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:606:12
[INFO] [stdout]     |
[INFO] [stdout] 606 |         || cpt >= 91 && cpt <= 96
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(91..=96).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:607:12
[INFO] [stdout]     |
[INFO] [stdout] 607 |         || cpt >= 123 && cpt <= 126
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(123..=126).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:560:8
[INFO] [stdout]     |
[INFO] [stdout] 560 |     if cpt >= 0x80 && cpt <= 0x7ff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x80..=0x7ff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout]     = note: `#[warn(clippy::manual_range_contains)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:567:8
[INFO] [stdout]     |
[INFO] [stdout] 567 |     if cpt >= 0x800 && cpt <= 0xffff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x800..=0xffff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:575:8
[INFO] [stdout]     |
[INFO] [stdout] 575 |     if cpt >= 0x10000 && cpt <= 0x10ffff {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x10000..=0x10ffff).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap`
[INFO] [stdout]    --> src/unicode.rs:649:9
[INFO] [stdout]     |
[INFO] [stdout] 649 | /         if !map.contains_key(&(ch as u8)) {
[INFO] [stdout] 650 | |             map.insert(ch as u8, char::from_u32(256 + n).unwrap());
[INFO] [stdout] 651 | |             n += 1;
[INFO] [stdout] 652 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry
[INFO] [stdout]     = note: `#[warn(clippy::map_entry)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 649 ~         if let std::collections::hash_map::Entry::Vacant(e) = map.entry((ch as u8)) {
[INFO] [stdout] 650 +             e.insert(char::from_u32(256 + n).unwrap());
[INFO] [stdout] 651 +             n += 1;
[INFO] [stdout] 652 +         }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice`
[INFO] [stdout]    --> src/unicode.rs:659:10
[INFO] [stdout]     |
[INFO] [stdout] 659 |         .into_iter()
[INFO] [stdout]     |          ^^^^^^^^^ help: call directly: `iter`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref
[INFO] [stdout]     = note: `#[warn(clippy::into_iter_on_ref)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:604:15
[INFO] [stdout]     |
[INFO] [stdout] 604 |     } else if cpt >= 33 && cpt <= 47
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(33..=47).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:605:12
[INFO] [stdout]     |
[INFO] [stdout] 605 |         || cpt >= 58 && cpt <= 64
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(58..=64).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 7.67s
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:606:12
[INFO] [stdout]     |
[INFO] [stdout] 606 |         || cpt >= 91 && cpt <= 96
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(91..=96).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: manual `RangeInclusive::contains` implementation
[INFO] [stdout]    --> src/unicode.rs:607:12
[INFO] [stdout]     |
[INFO] [stdout] 607 |         || cpt >= 123 && cpt <= 126
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(123..=126).contains(&cpt)`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap`
[INFO] [stdout]    --> src/unicode.rs:649:9
[INFO] [stdout]     |
[INFO] [stdout] 649 | /         if !map.contains_key(&(ch as u8)) {
[INFO] [stdout] 650 | |             map.insert(ch as u8, char::from_u32(256 + n).unwrap());
[INFO] [stdout] 651 | |             n += 1;
[INFO] [stdout] 652 | |         }
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry
[INFO] [stdout]     = note: `#[warn(clippy::map_entry)]` on by default
[INFO] [stdout] help: try
[INFO] [stdout]     |
[INFO] [stdout] 649 ~         if let std::collections::hash_map::Entry::Vacant(e) = map.entry((ch as u8)) {
[INFO] [stdout] 650 +             e.insert(char::from_u32(256 + n).unwrap());
[INFO] [stdout] 651 +             n += 1;
[INFO] [stdout] 652 +         }
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice`
[INFO] [stdout]    --> src/unicode.rs:659:10
[INFO] [stdout]     |
[INFO] [stdout] 659 |         .into_iter()
[INFO] [stdout]     |          ^^^^^^^^^ help: call directly: `iter`
[INFO] [stdout]     |
[INFO] [stdout]     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref
[INFO] [stdout]     = note: `#[warn(clippy::into_iter_on_ref)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "3d643f49429223b98aa5006629fd60b9da5a3ba1a5c5654d34ad6ceecd22a1e7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3d643f49429223b98aa5006629fd60b9da5a3ba1a5c5654d34ad6ceecd22a1e7", kill_on_drop: false }`
[INFO] [stdout] 3d643f49429223b98aa5006629fd60b9da5a3ba1a5c5654d34ad6ceecd22a1e7