RS.CLIPPY.TYPE_COMPLEXITY
Usage of very complex types that might be better factored into `type` definitions
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: type_complexity. Copyright ©2025 The Rust Team. All rights reserved.
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)