[INFO] cloning repository https://github.com/MasterHesse/crab-shell
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/MasterHesse/crab-shell" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMasterHesse%2Fcrab-shell", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMasterHesse%2Fcrab-shell'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 7e59484c56c150ccde5668c3b70eb810b905c39e
[INFO] checking MasterHesse/crab-shell against master#4eb62535fc12dd1a63fd43a4173e224e79313c4d for pr-158816
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMasterHesse%2Fcrab-shell" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/MasterHesse/crab-shell
[INFO] finished tweaking git repo https://github.com/MasterHesse/crab-shell
[INFO] tweaked toml for git repo https://github.com/MasterHesse/crab-shell written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/MasterHesse/crab-shell on toolchain 4eb62535fc12dd1a63fd43a4173e224e79313c4d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+4eb62535fc12dd1a63fd43a4173e224e79313c4d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/MasterHesse/crab-shell 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" "+4eb62535fc12dd1a63fd43a4173e224e79313c4d" "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]  Downloading crates ...
[INFO] [stderr]   Downloaded postgres-types v0.2.13
[INFO] [stderr]   Downloaded wasite v1.0.2
[INFO] [stderr]   Downloaded postgres-protocol v0.6.11
[INFO] [stderr]   Downloaded tokio-postgres v0.7.17
[INFO] [stderr]   Downloaded objc2-system-configuration v0.3.2
[INFO] [stderr]   Downloaded testcontainers v0.15.0
[INFO] [stderr]   Downloaded bollard-stubs v1.42.0-rc.3
[INFO] [stderr]   Downloaded tera v1.20.1
[INFO] [stderr]   Downloaded deunicode v1.6.2
[INFO] [stderr]   Downloaded rstest v0.18.2
[INFO] [stderr]   Downloaded textwrap v0.15.2
[INFO] [stderr]   Downloaded supports-hyperlinks v2.1.0
[INFO] [stderr]   Downloaded supports-color v2.1.0
[INFO] [stderr]   Downloaded miette-derive v5.10.0
[INFO] [stderr]   Downloaded miette v5.10.0
[INFO] [stderr]   Downloaded supports-unicode v2.1.0
[INFO] [stderr]   Downloaded rstest_macros v0.18.2
[INFO] [stderr]   Downloaded dummy v0.8.0
[INFO] [stderr]   Downloaded testcontainers-modules v0.3.7
[INFO] [stderr]   Downloaded fake v2.10.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef
[INFO] running `Command { std: "docker" "start" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef" "/opt/rustwide/cargo-home/bin/cargo" "+4eb62535fc12dd1a63fd43a4173e224e79313c4d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef" "/opt/rustwide/cargo-home/bin/cargo" "+4eb62535fc12dd1a63fd43a4173e224e79313c4d" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking typenum v1.20.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]     Checking rand_core v0.10.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]     Checking cmov v0.5.3
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking zerofrom v0.1.8
[INFO] [stderr]     Checking const-oid v0.10.2
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking cpufeatures v0.3.0
[INFO] [stderr]     Checking tinyvec v1.11.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling object v0.37.3
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]     Checking yoke v0.8.2
[INFO] [stderr]     Checking chacha20 v0.10.0
[INFO] [stderr]     Checking ctutils v0.4.2
[INFO] [stderr]    Compiling pest v2.8.6
[INFO] [stderr]     Checking zerovec v0.11.6
[INFO] [stderr]     Checking zerotrie v0.2.4
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking is-terminal v0.4.17
[INFO] [stderr]     Checking bstr v1.12.1
[INFO] [stderr]     Checking unicode-bidi v0.3.18
[INFO] [stderr]     Checking gimli v0.32.3
[INFO] [stderr]     Checking unicode-properties v0.1.4
[INFO] [stderr]     Checking rand v0.10.1
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]     Checking unicode-normalization v0.1.25
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]     Checking mio v1.2.0
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]     Checking fallible-iterator v0.2.0
[INFO] [stderr]     Checking deunicode v1.6.2
[INFO] [stderr]     Checking tinystr v0.8.3
[INFO] [stderr]     Checking potential_utf v0.1.5
[INFO] [stderr]     Checking hybrid-array v0.4.12
[INFO] [stderr]     Checking icu_locale_core v2.2.0
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]     Checking stringprep v0.1.5
[INFO] [stderr]     Checking icu_collections v2.2.0
[INFO] [stderr]     Checking rustc-demangle v0.1.27
[INFO] [stderr]    Compiling portable-atomic v1.13.1
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]    Compiling pest_meta v2.8.6
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking console v0.15.11
[INFO] [stderr]     Checking phf_shared v0.13.1
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]     Checking is_ci v1.2.0
[INFO] [stderr]     Checking crypto-common v0.2.1
[INFO] [stderr]     Checking block-buffer v0.12.0
[INFO] [stderr]     Checking hashbrown v0.17.1
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking smawk v0.3.2
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking clap_builder v4.6.0
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]     Checking icu_provider v2.2.0
[INFO] [stderr]     Checking icu_properties v2.2.0
[INFO] [stderr]     Checking icu_normalizer v2.2.0
[INFO] [stderr]     Checking digest v0.11.3
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking textwrap v0.15.2
[INFO] [stderr]     Checking md-5 v0.11.0
[INFO] [stderr]     Checking hmac v0.13.0
[INFO] [stderr]     Checking sha2 v0.11.0
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking globset v0.4.18
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking supports-color v2.1.0
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]     Checking addr2line v0.25.1
[INFO] [stderr]     Checking ignore v0.4.25
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]     Checking phf v0.13.1
[INFO] [stderr]     Checking humansize v2.1.3
[INFO] [stderr]    Compiling rstest_macros v0.18.2
[INFO] [stderr]     Checking slug v0.1.6
[INFO] [stderr]     Checking supports-unicode v2.1.0
[INFO] [stderr]     Checking postgres-protocol v0.6.11
[INFO] [stderr]     Checking supports-hyperlinks v2.1.0
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking whoami v2.1.2
[INFO] [stderr]     Checking terminal_size v0.1.17
[INFO] [stderr]    Compiling miette-derive v5.10.0
[INFO] [stderr]     Checking owo-colors v3.5.0
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking globwalk v0.9.1
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling darling_core v0.13.4
[INFO] [stderr]     Checking futures v0.3.32
[INFO] [stderr]     Checking shell-words v1.1.1
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking dialoguer v0.11.0
[INFO] [stderr]     Checking postgres-types v0.2.13
[INFO] [stderr]     Checking indicatif v0.17.11
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking uuid v1.23.1
[INFO] [stderr]    Compiling relative-path v1.9.3
[INFO] [stderr]     Checking similar v2.7.0
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking futures-timer v3.0.3
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling dummy v0.8.0
[INFO] [stderr]     Checking backtrace v0.3.76
[INFO] [stderr]     Checking clap v4.6.1
[INFO] [stderr]    Compiling parse-zoneinfo v0.3.1
[INFO] [stderr]     Checking backtrace-ext v0.2.1
[INFO] [stderr]     Checking miette v5.10.0
[INFO] [stderr]     Checking fake v2.10.0
[INFO] [stderr]    Compiling chrono-tz-build v0.3.0
[INFO] [stderr]    Compiling darling_macro v0.13.4
[INFO] [stderr]    Compiling chrono-tz v0.9.0
[INFO] [stderr]    Compiling darling v0.13.4
[INFO] [stderr]    Compiling serde_with_macros v1.5.2
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking serde_with v1.14.0
[INFO] [stderr]     Checking tokio-postgres v0.7.17
[INFO] [stderr]     Checking rstest v0.18.2
[INFO] [stderr]     Checking bollard-stubs v1.42.0-rc.3
[INFO] [stderr]     Checking tera v1.20.1
[INFO] [stderr]     Checking crab-shell v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/cli/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[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: `crate::error::Result`
[INFO] [stdout]  --> src/snapshot/differ.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/infra/postgres.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::{NoTls, Row};
[INFO] [stdout]   |                             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_postgres::config::Config`
[INFO] [stdout]  --> src/infra/connection.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::config::Config;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SourceSpan`
[INFO] [stdout]  --> src/error.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use miette::{Diagnostic, SourceSpan};
[INFO] [stdout]   |                          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `template_dir` is never read
[INFO] [stdout]   --> src/generator/html.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct HtmlGenerator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 10 |     template_dir: std::path::PathBuf,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DiffResult` is never used
[INFO] [stdout]  --> src/snapshot/differ.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type DiffResult<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>;
[INFO] [stdout]   |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection_string` is never read
[INFO] [stdout]   --> src/infra/postgres.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PostgresAdapter {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     client: tokio_postgres::Client,
[INFO] [stdout] 12 |     connection_string: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subcommand`
[INFO] [stdout]  --> src/main.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 | use clap::{Parser, Subcommand};
[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: `crate::error::Result`
[INFO] [stdout]  --> src/cli/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `EnumType` and `View`
[INFO] [stdout]  --> src/schema/mod.rs:8:36
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use database::{DatabaseSchema, View, EnumType};
[INFO] [stdout]   |                                    ^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `html::HtmlGenerator`
[INFO] [stdout]   --> src/generator/mod.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub use html::HtmlGenerator;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/snapshot/differ.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ColumnDiff`, `SchemaDiff`, and `TableDiff`
[INFO] [stdout]  --> src/snapshot/mod.rs:8:32
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use differ::{SchemaDiffer, SchemaDiff, TableDiff, ColumnDiff, DiffType};
[INFO] [stdout]   |                                ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/infra/postgres.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::{NoTls, Row};
[INFO] [stdout]   |                             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_postgres::config::Config`
[INFO] [stdout]  --> src/infra/connection.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::config::Config;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `connection::ConnectionManager`
[INFO] [stdout]  --> src/infra/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use connection::ConnectionManager;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SourceSpan`
[INFO] [stdout]  --> src/error.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use miette::{Diagnostic, SourceSpan};
[INFO] [stdout]   |                          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Config` is never constructed
[INFO] [stdout]  --> src/config.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Config {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct DatabaseConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema` is never used
[INFO] [stdout]   --> src/config.rs:38:4
[INFO] [stdout]    |
[INFO] [stdout] 38 | fn default_schema() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_connect_timeout` is never used
[INFO] [stdout]   --> src/config.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn default_connect_timeout() -> u64 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_max_retries` is never used
[INFO] [stdout]   --> src/config.rs:46:4
[INFO] [stdout]    |
[INFO] [stdout] 46 | fn default_max_retries() -> u32 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OutputConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct OutputConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_format` is never used
[INFO] [stdout]   --> src/config.rs:61:4
[INFO] [stdout]    |
[INFO] [stdout] 61 | fn default_format() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_path` is never used
[INFO] [stdout]   --> src/config.rs:65:4
[INFO] [stdout]    |
[INFO] [stdout] 65 | fn default_path() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_filename_template` is never used
[INFO] [stdout]   --> src/config.rs:69:4
[INFO] [stdout]    |
[INFO] [stdout] 69 | fn default_filename_template() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OptionsConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct OptionsConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_true` is never used
[INFO] [stdout]   --> src/config.rs:90:4
[INFO] [stdout]    |
[INFO] [stdout] 90 | fn default_true() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_max_tables` is never used
[INFO] [stdout]   --> src/config.rs:94:4
[INFO] [stdout]    |
[INFO] [stdout] 94 | fn default_max_tables() -> usize {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_file` and `save_to_file` are never used
[INFO] [stdout]    --> src/config.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 129 | impl Config {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 130 |     /// 从文件加载配置
[INFO] [stdout] 131 |     pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn save_to_file<P: AsRef<Path>>(&self, path: P) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_table` is never used
[INFO] [stdout]   --> src/schema/database.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl DatabaseSchema {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn find_table(&self, name: &str) -> Option<&Table> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_column` is never used
[INFO] [stdout]   --> src/schema/table.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Table {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn find_column(&self, name: &str) -> Option<&Column> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DocumentFormat` is never used
[INFO] [stdout]   --> src/generator/mod.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DocumentFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_str` and `default_extension` are never used
[INFO] [stdout]   --> src/generator/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl DocumentFormat {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 17 |     /// 从字符串解析格式
[INFO] [stdout] 18 |     pub fn from_str(s: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn default_extension(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `file_extension`, `name`, and `generate_to_file` are never used
[INFO] [stdout]   --> src/generator/traits.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub trait DocumentGenerator {
[INFO] [stdout]    |           ----------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn file_extension(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     fn name(&self) -> &str;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     fn generate_to_file(&self, schema: &DatabaseSchema, output_path: &Path) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HtmlGenerator` is never constructed
[INFO] [stdout]  --> src/generator/html.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct HtmlGenerator {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `with_template_dir` are never used
[INFO] [stdout]   --> src/generator/html.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl HtmlGenerator {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 14 |     /// 创建新的 HTML 生成器
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn with_template_dir<P: Into<std::path::PathBuf>>(dir: P) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DiffResult` is never used
[INFO] [stdout]  --> src/snapshot/differ.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type DiffResult<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>;
[INFO] [stdout]   |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection_string` is never read
[INFO] [stdout]   --> src/infra/postgres.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PostgresAdapter {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     client: tokio_postgres::Client,
[INFO] [stdout] 12 |     connection_string: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionManager` is never constructed
[INFO] [stdout]  --> src/infra/connection.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct ConnectionManager {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `parse_connection_info`, `new`, and `connect` are never used
[INFO] [stdout]   --> src/infra/connection.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ConnectionManager {
[INFO] [stdout]    | ---------------------- associated items in this implementation
[INFO] [stdout] 13 |     /// 从连接字符串解析 host 和 port
[INFO] [stdout] 14 |     fn parse_connection_info(url: &str) -> (String, u16) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn new(connection_string: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub async fn connect(&self) -> Result<Client> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PermissionDenied` and `SchemaNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum CrabShellError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 25 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     SchemaNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CrabShellError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking testcontainers v0.15.0
[INFO] [stderr]     Checking testcontainers-modules v0.3.7
[INFO] [stdout] warning: unused import: `Index`
[INFO] [stdout]  --> tests/mermaid_generator_test.rs:6:81
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crab_shell::schema::{DatabaseSchema, Table, Column, PrimaryKey, ForeignKey, Index};
[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 attribute
[INFO] [stdout]   --> tests/postgres_adapter_test.rs:31:1
[INFO] [stdout]    |
[INFO] [stdout] 31 | #[ignore] // 需要 TCP 连接配置
[INFO] [stdout]    | ^^^^^^^^^ help: remove this attribute
[INFO] [stdout]    |
[INFO] [stdout] note: attribute also specified here
[INFO] [stdout]   --> tests/postgres_adapter_test.rs:30:1
[INFO] [stdout]    |
[INFO] [stdout] 30 | #[ignore] // 需要 TCP 连接配置
[INFO] [stdout]    | ^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(unused_attributes)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/cli/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[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: `crate::error::Result`
[INFO] [stdout]  --> src/snapshot/differ.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/infra/postgres.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::{NoTls, Row};
[INFO] [stdout]   |                             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_postgres::config::Config`
[INFO] [stdout]  --> src/infra/connection.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::config::Config;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SourceSpan`
[INFO] [stdout]  --> src/error.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use miette::{Diagnostic, SourceSpan};
[INFO] [stdout]   |                          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_skip_due_to_connection_issue` is never used
[INFO] [stdout]   --> tests/postgres_adapter_test.rs:19:4
[INFO] [stdout]    |
[INFO] [stdout] 19 | fn should_skip_due_to_connection_issue() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Subcommand`
[INFO] [stdout]  --> src/main.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 | use clap::{Parser, Subcommand};
[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: `crate::error::Result`
[INFO] [stdout]  --> src/cli/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `EnumType` and `View`
[INFO] [stdout]  --> src/schema/mod.rs:8:36
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use database::{DatabaseSchema, View, EnumType};
[INFO] [stdout]   |                                    ^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `html::HtmlGenerator`
[INFO] [stdout]   --> src/generator/mod.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub use html::HtmlGenerator;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/snapshot/differ.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ColumnDiff`, `SchemaDiff`, and `TableDiff`
[INFO] [stdout]  --> src/snapshot/mod.rs:8:32
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use differ::{SchemaDiffer, SchemaDiff, TableDiff, ColumnDiff, DiffType};
[INFO] [stdout]   |                                ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/infra/postgres.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::{NoTls, Row};
[INFO] [stdout]   |                             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_postgres::config::Config`
[INFO] [stdout]  --> src/infra/connection.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio_postgres::config::Config;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `connection::ConnectionManager`
[INFO] [stdout]  --> src/infra/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use connection::ConnectionManager;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SourceSpan`
[INFO] [stdout]  --> src/error.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use miette::{Diagnostic, SourceSpan};
[INFO] [stdout]   |                          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `template_dir` is never read
[INFO] [stdout]   --> src/generator/html.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct HtmlGenerator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 10 |     template_dir: std::path::PathBuf,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DiffResult` is never used
[INFO] [stdout]  --> src/snapshot/differ.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type DiffResult<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>;
[INFO] [stdout]   |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection_string` is never read
[INFO] [stdout]   --> src/infra/postgres.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PostgresAdapter {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     client: tokio_postgres::Client,
[INFO] [stdout] 12 |     connection_string: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Config` is never constructed
[INFO] [stdout]  --> src/config.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Config {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DatabaseConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct DatabaseConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema` is never used
[INFO] [stdout]   --> src/config.rs:38:4
[INFO] [stdout]    |
[INFO] [stdout] 38 | fn default_schema() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_connect_timeout` is never used
[INFO] [stdout]   --> src/config.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn default_connect_timeout() -> u64 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_max_retries` is never used
[INFO] [stdout]   --> src/config.rs:46:4
[INFO] [stdout]    |
[INFO] [stdout] 46 | fn default_max_retries() -> u32 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OutputConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct OutputConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_format` is never used
[INFO] [stdout]   --> src/config.rs:61:4
[INFO] [stdout]    |
[INFO] [stdout] 61 | fn default_format() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_path` is never used
[INFO] [stdout]   --> src/config.rs:65:4
[INFO] [stdout]    |
[INFO] [stdout] 65 | fn default_path() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_filename_template` is never used
[INFO] [stdout]   --> src/config.rs:69:4
[INFO] [stdout]    |
[INFO] [stdout] 69 | fn default_filename_template() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OptionsConfig` is never constructed
[INFO] [stdout]   --> src/config.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct OptionsConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_true` is never used
[INFO] [stdout]   --> src/config.rs:90:4
[INFO] [stdout]    |
[INFO] [stdout] 90 | fn default_true() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_max_tables` is never used
[INFO] [stdout]   --> src/config.rs:94:4
[INFO] [stdout]    |
[INFO] [stdout] 94 | fn default_max_tables() -> usize {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_file` and `save_to_file` are never used
[INFO] [stdout]    --> src/config.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 129 | impl Config {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 130 |     /// 从文件加载配置
[INFO] [stdout] 131 |     pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn save_to_file<P: AsRef<Path>>(&self, path: P) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_table` is never used
[INFO] [stdout]   --> src/schema/database.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl DatabaseSchema {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn find_table(&self, name: &str) -> Option<&Table> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_column` is never used
[INFO] [stdout]   --> src/schema/table.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Table {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn find_column(&self, name: &str) -> Option<&Column> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DocumentFormat` is never used
[INFO] [stdout]   --> src/generator/mod.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DocumentFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_str` and `default_extension` are never used
[INFO] [stdout]   --> src/generator/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl DocumentFormat {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 17 |     /// 从字符串解析格式
[INFO] [stdout] 18 |     pub fn from_str(s: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn default_extension(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `file_extension`, `name`, and `generate_to_file` are never used
[INFO] [stdout]   --> src/generator/traits.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub trait DocumentGenerator {
[INFO] [stdout]    |           ----------------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn file_extension(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     fn name(&self) -> &str;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     fn generate_to_file(&self, schema: &DatabaseSchema, output_path: &Path) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HtmlGenerator` is never constructed
[INFO] [stdout]  --> src/generator/html.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct HtmlGenerator {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `with_template_dir` are never used
[INFO] [stdout]   --> src/generator/html.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl HtmlGenerator {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 14 |     /// 创建新的 HTML 生成器
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn with_template_dir<P: Into<std::path::PathBuf>>(dir: P) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DiffResult` is never used
[INFO] [stdout]  --> src/snapshot/differ.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type DiffResult<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>;
[INFO] [stdout]   |      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `connection_string` is never read
[INFO] [stdout]   --> src/infra/postgres.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct PostgresAdapter {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 11 |     client: tokio_postgres::Client,
[INFO] [stdout] 12 |     connection_string: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectionManager` is never constructed
[INFO] [stdout]  --> src/infra/connection.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct ConnectionManager {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `parse_connection_info`, `new`, and `connect` are never used
[INFO] [stdout]   --> src/infra/connection.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ConnectionManager {
[INFO] [stdout]    | ---------------------- associated items in this implementation
[INFO] [stdout] 13 |     /// 从连接字符串解析 host 和 port
[INFO] [stdout] 14 |     fn parse_connection_info(url: &str) -> (String, u16) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn new(connection_string: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub async fn connect(&self) -> Result<Client> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PermissionDenied` and `SchemaNotFound` are never constructed
[INFO] [stdout]   --> src/error.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum CrabShellError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 25 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     SchemaNotFound(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CrabShellError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 00s
[INFO] running `Command { std: "docker" "inspect" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef", kill_on_drop: false }`
[INFO] [stdout] bfc6188fe50cfcf08c19d0519f2eace9d2097dfba1d8c1328464f0e437d71aef
