[package]
edition = "2024"
rust-version = "1.88"
name = "echoes"
version = "0.10.2"
authors = ["Luca Cappelletti"]
build = false
exclude = [
"/docs",
"/skills",
"/fuzz",
"/.clusterfuzzlite",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Find duplicated Rust doctests, functions and contexts"
readme = "README.md"
keywords = [
"cargo-subcommand",
"doctest",
"duplicate-detection",
"cli",
"rustdoc",
]
categories = [
"command-line-utilities",
"development-tools",
]
license = "MIT"
repository = "https://github.com/LucaCappelletti94/cargo-echoes"
[features]
cli = [
"std",
"dep:clap",
]
default = ["cli"]
std = [
"dep:cargo_metadata",
"dep:cargo-config2",
"dep:thiserror",
"dep:toml",
"dep:ureq",
"dep:flate2",
"dep:tar",
"dep:semver",
"dep:tempfile",
"dep:rustix",
"dep:globset",
]
[lib]
name = "echoes"
path = "src/lib.rs"
[[bin]]
name = "cargo-echoes"
path = "src/main.rs"
required-features = ["cli"]
[[test]]
name = "action_smoke"
path = "tests/action_smoke.rs"
[[test]]
name = "adjacent_comparisons_witnesses"
path = "tests/adjacent_comparisons_witnesses.rs"
[[test]]
name = "bool_int_min_max_witnesses"
path = "tests/bool_int_min_max_witnesses.rs"
[[test]]
name = "boolean_literal_witnesses"
path = "tests/boolean_literal_witnesses.rs"
[[test]]
name = "boolean_logic_witnesses"
path = "tests/boolean_logic_witnesses.rs"
[[test]]
name = "boolean_match_witnesses"
path = "tests/boolean_match_witnesses.rs"
[[test]]
name = "bounds_impl_lifetimes_witnesses"
path = "tests/bounds_impl_lifetimes_witnesses.rs"
[[test]]
name = "bounds_lifetimes_witnesses"
path = "tests/bounds_lifetimes_witnesses.rs"
[[test]]
name = "collection_iteration_witnesses"
path = "tests/collection_iteration_witnesses.rs"
[[test]]
name = "commutative_witnesses"
path = "tests/commutative_witnesses.rs"
[[test]]
name = "compound_assignment_witnesses"
path = "tests/compound_assignment_witnesses.rs"
[[test]]
name = "concat_witnesses"
path = "tests/concat_witnesses.rs"
[[test]]
name = "constructor_returns_witnesses"
path = "tests/constructor_returns_witnesses.rs"
[[test]]
name = "context_gate"
path = "tests/context_gate.rs"
[[test]]
name = "context_manifest"
path = "tests/context_manifest.rs"
[[test]]
name = "context_scope"
path = "tests/context_scope.rs"
[[test]]
name = "context_selection"
path = "tests/context_selection.rs"
[[test]]
name = "copy_noops_witnesses"
path = "tests/copy_noops_witnesses.rs"
[[test]]
name = "dependency_algebra"
path = "tests/dependency_algebra.rs"
[[test]]
name = "dependency_algebra_control"
path = "tests/dependency_algebra_control.rs"
[[test]]
name = "dependency_algebra_future"
path = "tests/dependency_algebra_future.rs"
[[test]]
name = "dependency_algebra_grouping"
path = "tests/dependency_algebra_grouping.rs"
[[test]]
name = "dependency_algebra_guards"
path = "tests/dependency_algebra_guards.rs"
[[test]]
name = "dependency_algebra_literals"
path = "tests/dependency_algebra_literals.rs"
[[test]]
name = "dependency_algebra_oracle"
path = "tests/dependency_algebra_oracle.rs"
[[test]]
name = "dependency_algebra_shadowing"
path = "tests/dependency_algebra_shadowing.rs"
[[test]]
name = "dependency_algebra_witnesses"
path = "tests/dependency_algebra_witnesses.rs"
[[test]]
name = "dependency_boolean"
path = "tests/dependency_boolean.rs"
[[test]]
name = "dependency_boolean_fixtures"
path = "tests/dependency_boolean_fixtures.rs"
[[test]]
name = "dependency_boolean_future"
path = "tests/dependency_boolean_future.rs"
[[test]]
name = "dependency_boolean_grouping"
path = "tests/dependency_boolean_grouping.rs"
[[test]]
name = "dependency_boolean_guards"
path = "tests/dependency_boolean_guards.rs"
[[test]]
name = "dependency_boolean_witnesses"
path = "tests/dependency_boolean_witnesses.rs"
[[test]]
name = "dependency_canonicalization"
path = "tests/dependency_canonicalization.rs"
[[test]]
name = "dependency_comparison"
path = "tests/dependency_comparison.rs"
[[test]]
name = "dependency_composition_grouping"
path = "tests/dependency_composition_grouping.rs"
[[test]]
name = "dependency_constants"
path = "tests/dependency_constants.rs"
[[test]]
name = "dependency_constants_grouping"
path = "tests/dependency_constants_grouping.rs"
[[test]]
name = "dependency_constants_positions"
path = "tests/dependency_constants_positions.rs"
[[test]]
name = "dependency_fake_cargo"
path = "tests/dependency_fake_cargo.rs"
[[test]]
name = "dependency_grouping"
path = "tests/dependency_grouping.rs"
[[test]]
name = "dependency_helper_contexts"
path = "tests/dependency_helper_contexts.rs"
[[test]]
name = "dependency_helper_grouping"
path = "tests/dependency_helper_grouping.rs"
[[test]]
name = "dependency_helper_limits"
path = "tests/dependency_helper_limits.rs"
[[test]]
name = "dependency_helper_metadata"
path = "tests/dependency_helper_metadata.rs"
[[test]]
name = "dependency_helper_root_scopes"
path = "tests/dependency_helper_root_scopes.rs"
[[test]]
name = "dependency_helpers"
path = "tests/dependency_helpers.rs"
[[test]]
name = "dependency_item_borrowed"
path = "tests/dependency_item_borrowed.rs"
[[test]]
name = "dependency_item_coverage_a"
path = "tests/dependency_item_coverage_a.rs"
[[test]]
name = "dependency_item_coverage_b"
path = "tests/dependency_item_coverage_b.rs"
[[test]]
name = "dependency_item_coverage_c"
path = "tests/dependency_item_coverage_c.rs"
[[test]]
name = "dependency_item_grouping"
path = "tests/dependency_item_grouping.rs"
[[test]]
name = "dependency_item_integrity"
path = "tests/dependency_item_integrity.rs"
[[test]]
name = "dependency_item_macros"
path = "tests/dependency_item_macros.rs"
[[test]]
name = "dependency_item_observations"
path = "tests/dependency_item_observations.rs"
[[test]]
name = "dependency_item_payload"
path = "tests/dependency_item_payload.rs"
[[test]]
name = "dependency_item_qualified"
path = "tests/dependency_item_qualified.rs"
[[test]]
name = "dependency_items"
path = "tests/dependency_items.rs"
[[test]]
name = "dependency_module_scaling"
path = "tests/dependency_module_scaling.rs"
[[test]]
name = "dependency_owner_labels"
path = "tests/dependency_owner_labels.rs"
[[test]]
name = "dependency_proofs"
path = "tests/dependency_proofs.rs"
[[test]]
name = "dependency_resolution"
path = "tests/dependency_resolution.rs"
[[test]]
name = "dependency_scheduling"
path = "tests/dependency_scheduling.rs"
[[test]]
name = "dependency_scheduling_bounds"
path = "tests/dependency_scheduling_bounds.rs"
[[test]]
name = "dependency_scheduling_contexts"
path = "tests/dependency_scheduling_contexts.rs"
[[test]]
name = "dependency_scheduling_oracle"
path = "tests/dependency_scheduling_oracle.rs"
[[test]]
name = "dependency_structure_grouping"
path = "tests/dependency_structure_grouping.rs"
[[test]]
name = "dependency_structures"
path = "tests/dependency_structures.rs"
[[test]]
name = "dependency_value_contexts"
path = "tests/dependency_value_contexts.rs"
[[test]]
name = "dependency_value_expressions"
path = "tests/dependency_value_expressions.rs"
[[test]]
name = "dependency_value_grouping"
path = "tests/dependency_value_grouping.rs"
[[test]]
name = "dependency_value_guards"
path = "tests/dependency_value_guards.rs"
[[test]]
name = "dependency_value_limits"
path = "tests/dependency_value_limits.rs"
[[test]]
name = "dependency_value_scope_boundaries"
path = "tests/dependency_value_scope_boundaries.rs"
[[test]]
name = "dependency_value_source_bounds"
path = "tests/dependency_value_source_bounds.rs"
[[test]]
name = "dependency_values"
path = "tests/dependency_values.rs"
[[test]]
name = "discarded_calls_witnesses"
path = "tests/discarded_calls_witnesses.rs"
[[test]]
name = "early_return_witnesses"
path = "tests/early_return_witnesses.rs"
[[test]]
name = "function_scopes"
path = "tests/function_scopes.rs"
[[test]]
name = "guard_clauses_witnesses"
path = "tests/guard_clauses_witnesses.rs"
[[test]]
name = "identities_witnesses"
path = "tests/identities_witnesses.rs"
[[test]]
name = "integration"
path = "tests/integration.rs"
[[test]]
name = "let_literal_witnesses"
path = "tests/let_literal_witnesses.rs"
[[test]]
name = "literal_casts_limits_witnesses"
path = "tests/literal_casts_limits_witnesses.rs"
[[test]]
name = "literal_disjunctions_witnesses"
path = "tests/literal_disjunctions_witnesses.rs"
[[test]]
name = "match_arms_witnesses"
path = "tests/match_arms_witnesses.rs"
[[test]]
name = "nested_conditionals_witnesses"
path = "tests/nested_conditionals_witnesses.rs"
[[test]]
name = "or_arms_let_else_witnesses"
path = "tests/or_arms_let_else_witnesses.rs"
[[test]]
name = "prelude_owned_witnesses"
path = "tests/prelude_owned_witnesses.rs"
[[test]]
name = "reflexive_witnesses"
path = "tests/reflexive_witnesses.rs"
[[test]]
name = "return_literal_typing_witnesses"
path = "tests/return_literal_typing_witnesses.rs"
[[test]]
name = "strings_format_witnesses"
path = "tests/strings_format_witnesses.rs"
[[test]]
name = "widening_casts_witnesses"
path = "tests/widening_casts_witnesses.rs"
[[test]]
name = "wrapping_add_witnesses"
path = "tests/wrapping_add_witnesses.rs"
[[test]]
name = "xor_witnesses"
path = "tests/xor_witnesses.rs"
[dependencies.blake3]
version = "1.8.7"
default-features = false
[dependencies.cargo-config2]
version = "0.1.45"
optional = true
[dependencies.cargo_metadata]
version = "0.23.1"
optional = true
[dependencies.clap]
version = "4.6.6"
features = ["derive"]
optional = true
[dependencies.flate2]
version = "1"
optional = true
[dependencies.globset]
version = "0.4.20"
optional = true
default-features = false
[dependencies.proc-macro2]
version = "1.0.107"
features = ["span-locations"]
default-features = false
[dependencies.pulldown-cmark]
version = "0.13.4"
default-features = false
[dependencies.quote]
version = "1.0.47"
default-features = false
[dependencies.semver]
version = "1"
optional = true
[dependencies.serde]
version = "1.0.229"
features = [
"derive",
"alloc",
]
default-features = false
[dependencies.serde_json]
version = "1.0.151"
features = ["alloc"]
default-features = false
[dependencies.syn]
version = "3.0.5"
features = [
"full",
"parsing",
"printing",
"clone-impls",
"visit",
"visit-mut",
]
default-features = false
[dependencies.syn-canon]
version = "0.5.2"
[dependencies.tar]
version = "0.4"
optional = true
[dependencies.tempfile]
version = "3.27.0"
optional = true
[dependencies.thiserror]
version = "2.0.20"
optional = true
[dependencies.toml]
version = "1.1.6"
optional = true
[dependencies.ureq]
version = "3.1"
features = ["rustls"]
optional = true
default-features = false
[dev-dependencies.serde_json]
version = "1.0.151"
[dev-dependencies.serde_norway]
version = "0.9.42"
[dev-dependencies.tempfile]
version = "3.27.0"
[target."cfg(unix)".dependencies.rustix]
version = "1.1.4"
features = [
"std",
"process",
]
optional = true
default-features = false
[lints.clippy]
allow_attributes = "deny"
allow_attributes_without_reason = "deny"
redundant_closure_for_method_calls = "deny"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.pedantic]
level = "deny"
priority = -1
[lints.rust]
deprecated = "deny"
missing_docs = "forbid"
unconditional_recursion = "forbid"
unknown_lints = "allow"
unreachable_patterns = "forbid"
unsafe_code = "forbid"
unused_import_braces = "forbid"
unused_macro_rules = "forbid"
unused_must_use = "forbid"
[lints.rustdoc]
bare_urls = "forbid"
broken_intra_doc_links = "forbid"
invalid_codeblock_attributes = "forbid"
invalid_html_tags = "forbid"
missing_crate_level_docs = "forbid"
unescaped_backticks = "forbid"
[profile.fast-test]
opt-level = 1
debug = "line-tables-only"
inherits = "test"
[profile.fast-test.package."*"]
opt-level = 2
[profile.release]
strip = true