Clippy lints / Complexity
Clippy lint · Complexity · checked with Clippy 0.1.99
clippy::type_complexity: Checks for types used in structs, parameters and let declarations above a certain complexity threshold
What it meansChecks for types used in structs, parameters and let declarations above a certain complexity threshold. It is in the complexity group and warns by default.
Does it matter?
Too complex types make the code less readable. Consider using a type definition to simplify them.
Code that does something simple in a complicated way. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
struct PointMatrixContainer {
matrix: Rc<Vec<Vec<Box<(u32, u32, u32, u32)>>>>,
}
fn main() {
let point_matrix: Vec<Vec<Box<(u32, u32, u32, u32)>>> = vec![
vec![
Box::new((1, 2, 3, 4)),
Box::new((5, 6, 7, 8)),
],
vec![
Box::new((9, 10, 11, 12)),
],
];
let shared_point_matrix: Rc<Vec<Vec<Box<(u32, u32, u32, u32)>>>> = Rc::new(point_matrix);
let container = PointMatrixContainer {
matrix: shared_point_matrix,
};
// ...
}
Write this instead
type PointMatrix = Vec<Vec<Box<(u32, u32, u32, u32)>>>;
type SharedPointMatrix = Rc<PointMatrix>;
struct PointMatrixContainer {
matrix: SharedPointMatrix,
}
fn main() {
let point_matrix: PointMatrix = vec![
vec![
Box::new((1, 2, 3, 4)),
Box::new((5, 6, 7, 8)),
],
vec![
Box::new((9, 10, 11, 12)),
],
];
let shared_point_matrix: SharedPointMatrix = Rc::new(point_matrix);
let container = PointMatrixContainer {
matrix: shared_point_matrix,
};
// ...
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::type_complexity)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
type_complexity = "allow"One run
cargo clippy -- -A clippy::type-complexityThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Settings in clippy.toml
type-complexity-threshold: The maximum complexity a type can have
Clippy's own documentation
What it does
Checks for types used in structs, parameters and let
declarations above a certain complexity threshold.
Why is this bad?
Too complex types make the code less readable. Consider
using a type definition to simplify them.
Example
struct PointMatrixContainer {
matrix: Rc<Vec<Vec<Box<(u32, u32, u32, u32)>>>>,
}
fn main() {
let point_matrix: Vec<Vec<Box<(u32, u32, u32, u32)>>> = vec![
vec![
Box::new((1, 2, 3, 4)),
Box::new((5, 6, 7, 8)),
],
vec![
Box::new((9, 10, 11, 12)),
],
];
let shared_point_matrix: Rc<Vec<Vec<Box<(u32, u32, u32, u32)>>>> = Rc::new(point_matrix);
let container = PointMatrixContainer {
matrix: shared_point_matrix,
};
// ...
}
Use instead:
Example
type PointMatrix = Vec<Vec<Box<(u32, u32, u32, u32)>>>;
type SharedPointMatrix = Rc<PointMatrix>;
struct PointMatrixContainer {
matrix: SharedPointMatrix,
}
fn main() {
let point_matrix: PointMatrix = vec![
vec![
Box::new((1, 2, 3, 4)),
Box::new((5, 6, 7, 8)),
],
vec![
Box::new((9, 10, 11, 12)),
],
];
let shared_point_matrix: SharedPointMatrix = Rc::new(point_matrix);
let container = PointMatrixContainer {
matrix: shared_point_matrix,
};
// ...
}
Configuration
-
type-complexity-threshold: The maximum complexity a type can have(default:
250)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_argumentsChecks for functions with too many parameters
- clone_on_copyusing `clone` on type `u64` which implements the `Copy` trait
- transmute_int_to_non_zeroChecks for transmutes from T to NonZero<T>, and suggests the new_unchecked method instead
- transmute_ptr_to_refChecks for transmutes from a pointer to a reference
- transmutes_expressible_as_ptr_castsChecks for transmutes that could be a pointer cast
- unit_argChecks for passing a unit value as an argument to a function without using a unit literal (())
- unnecessary_castcasting integer literal to `i32` is unnecessary
- unnecessary_filter_mapthis `.filter_map(..)` can be written more simply using `.filter(..)`
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_argumentsChecks for functions with too many parametersRead it next →Did this answer your question?