Lint Configuration Options
The following list shows each configuration option, along with a description, its default value, an example and lints affected.
absolute-paths-allowed-crates
Which crates to allow absolute paths from
Default Value: []
Affected lints:
absolute-paths-max-segments
The maximum number of segments a path can have before being linted, anything above this will be linted.
Default Value: 2
Affected lints:
accept-comment-above-attributes
Whether to accept a safety comment to be placed above the attributes for the unsafe
block
Default Value: true
Affected lints:
accept-comment-above-statement
Whether to accept a safety comment to be placed above the statement containing the unsafe
block
Default Value: true
Affected lints:
allow-comparison-to-zero
Don't lint when comparing the result of a modulo operation to zero.
Default Value: true
Affected lints:
allow-dbg-in-tests
Whether dbg!
should be allowed in test functions or #[cfg(test)]
Default Value: false
Affected lints:
allow-expect-in-tests
Whether expect
should be allowed in test functions or #[cfg(test)]
Default Value: false
Affected lints:
allow-mixed-uninlined-format-args
Whether to allow mixed uninlined format args, e.g. format!("{} {}", a, foo.bar)
Default Value: true
Affected lints:
allow-one-hash-in-raw-strings
Whether to allow r#""#
when r""
can be used
Default Value: false
Affected lints:
allow-panic-in-tests
Whether panic
should be allowed in test functions or #[cfg(test)]
Default Value: false
Affected lints:
allow-print-in-tests
Whether print macros (ex. println!
) should be allowed in test functions or #[cfg(test)]
Default Value: false
Affected lints:
allow-private-module-inception
Whether to allow module inception if it's not public.
Default Value: false
Affected lints:
allow-renamed-params-for
List of trait paths to ignore when checking renamed function parameters.
Example
allow-renamed-params-for = [ "std::convert::From" ]
Noteworthy
- By default, the following traits are ignored:
From
,TryFrom
,FromStr
".."
can be used as part of the list to indicate that the configured values should be appended to the default configuration of Clippy. By default, any configuration will replace the default value.
Default Value: ["core::convert::From", "core::convert::TryFrom", "core::str::FromStr"]
Affected lints:
allow-unwrap-in-tests
Whether unwrap
should be allowed in test functions or #[cfg(test)]
Default Value: false
Affected lints:
allow-useless-vec-in-tests
Whether useless_vec
should ignore test functions or #[cfg(test)]
Default Value: false
Affected lints:
allowed-dotfiles
Additional dotfiles (files or directories starting with a dot) to allow
Default Value: []
Affected lints:
allowed-duplicate-crates
A list of crate names to allow duplicates of
Default Value: []
Affected lints:
allowed-idents-below-min-chars
Allowed names below the minimum allowed characters. The value ".."
can be used as part of
the list to indicate, that the configured values should be appended to the default
configuration of Clippy. By default, any configuration will replace the default value.
Default Value: ["i", "j", "x", "y", "z", "w", "n"]
Affected lints:
allowed-prefixes
List of prefixes to allow when determining whether an item's name ends with the module's name.
If the rest of an item's name is an allowed prefix (e.g. item ToFoo
or to_foo
in module foo
),
then don't emit a warning.
Example
allowed-prefixes = [ "to", "from" ]
Noteworthy
- By default, the following prefixes are allowed:
to
,as
,into
,from
,try_into
andtry_from
- PascalCase variant is included automatically for each snake_case variant (e.g. if
try_into
is included,TryInto
will also be included) - Use
".."
as part of the list to indicate that the configured values should be appended to the default configuration of Clippy. By default, any configuration will replace the default value
Default Value: ["to", "as", "into", "from", "try_into", "try_from"]
Affected lints:
allowed-scripts
The list of unicode scripts allowed to be used in the scope.
Default Value: ["Latin"]
Affected lints:
allowed-wildcard-imports
List of path segments allowed to have wildcard imports.
Example
allowed-wildcard-imports = [ "utils", "common" ]
Noteworthy
- This configuration has no effects if used with
warn_on_all_wildcard_imports = true
. - Paths with any segment that containing the word 'prelude' are already allowed by default.
Default Value: []
Affected lints:
arithmetic-side-effects-allowed
Suppress checking of the passed type names in all types of operations.
If a specific operation is desired, consider using arithmetic_side_effects_allowed_binary
or arithmetic_side_effects_allowed_unary
instead.
Example
arithmetic-side-effects-allowed = ["SomeType", "AnotherType"]
Noteworthy
A type, say SomeType
, listed in this configuration has the same behavior of
["SomeType" , "*"], ["*", "SomeType"]
in arithmetic_side_effects_allowed_binary
.
Default Value: []
Affected lints:
arithmetic-side-effects-allowed-binary
Suppress checking of the passed type pair names in binary operations like addition or multiplication.
Supports the "*" wildcard to indicate that a certain type won't trigger the lint regardless
of the involved counterpart. For example, ["SomeType", "*"]
or ["*", "AnotherType"]
.
Pairs are asymmetric, which means that ["SomeType", "AnotherType"]
is not the same as
["AnotherType", "SomeType"]
.
Example
arithmetic-side-effects-allowed-binary = [["SomeType" , "f32"], ["AnotherType", "*"]]
Default Value: []
Affected lints:
arithmetic-side-effects-allowed-unary
Suppress checking of the passed type names in unary operations like "negation" (-
).
Example
arithmetic-side-effects-allowed-unary = ["SomeType", "AnotherType"]
Default Value: []
Affected lints:
array-size-threshold
The maximum allowed size for arrays on the stack
Default Value: 512000
Affected lints:
avoid-breaking-exported-api
Suppress lints whenever the suggested change would cause breakage for other crates.
Default Value: true
Affected lints:
box_collection
enum_variant_names
large_types_passed_by_value
linkedlist
needless_pass_by_ref_mut
option_option
rc_buffer
rc_mutex
redundant_allocation
single_call_fn
trivially_copy_pass_by_ref
unnecessary_box_returns
unnecessary_wraps
unused_self
upper_case_acronyms
vec_box
wrong_self_convention
await-holding-invalid-types
The list of types which may not be held across an await point.
Default Value: []
Affected lints:
cargo-ignore-publish
For internal testing only, ignores the current publish
settings in the Cargo manifest.
Default Value: false
Affected lints:
check-private-items
Whether to also run the listed lints on private items.
Default Value: false
Affected lints:
cognitive-complexity-threshold
The maximum cognitive complexity a function can have
Default Value: 25
Affected lints:
disallowed-macros
The list of disallowed macros, written as fully qualified paths.
Default Value: []
Affected lints:
disallowed-methods
The list of disallowed methods, written as fully qualified paths.
Default Value: []
Affected lints:
disallowed-names
The list of disallowed names to lint about. NB: bar
is not here since it has legitimate uses. The value
".."
can be used as part of the list to indicate that the configured values should be appended to the
default configuration of Clippy. By default, any configuration will replace the default value.
Default Value: ["foo", "baz", "quux"]
Affected lints:
disallowed-types
The list of disallowed types, written as fully qualified paths.
Default Value: []
Affected lints:
doc-valid-idents
The list of words this lint should not consider as identifiers needing ticks. The value
".."
can be used as part of the list to indicate, that the configured values should be appended to the
default configuration of Clippy. By default, any configuration will replace the default value. For example:
doc-valid-idents = ["ClipPy"]
would replace the default list with["ClipPy"]
.doc-valid-idents = ["ClipPy", ".."]
would appendClipPy
to the default list.
Default Value: ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "AccessKit", "CoreFoundation", "CoreGraphics", "CoreText", "DevOps", "Direct2D", "Direct3D", "DirectWrite", "DirectX", "ECMAScript", "GPLv2", "GPLv3", "GitHub", "GitLab", "IPv4", "IPv6", "ClojureScript", "CoffeeScript", "JavaScript", "PostScript", "PureScript", "TypeScript", "WebAssembly", "NaN", "NaNs", "OAuth", "GraphQL", "OCaml", "OpenAL", "OpenDNS", "OpenGL", "OpenMP", "OpenSSH", "OpenSSL", "OpenStreetMap", "OpenTelemetry", "OpenType", "WebGL", "WebGL2", "WebGPU", "WebRTC", "WebSocket", "WebTransport", "WebP", "OpenExr", "YCbCr", "sRGB", "TensorFlow", "TrueType", "iOS", "macOS", "FreeBSD", "NetBSD", "OpenBSD", "TeX", "LaTeX", "BibTeX", "BibLaTeX", "MinGW", "CamelCase"]
Affected lints:
enable-raw-pointer-heuristic-for-send
Whether to apply the raw pointer heuristic to determine if a type is Send
.
Default Value: true
Affected lints:
enforce-iter-loop-reborrow
Whether to recommend using implicit into iter for reborrowed values.
Example
let mut vec = vec![1, 2, 3];
let rmvec = &mut vec;
for _ in rmvec.iter() {}
for _ in rmvec.iter_mut() {}
Use instead:
let mut vec = vec![1, 2, 3];
let rmvec = &mut vec;
for _ in &*rmvec {}
for _ in &mut *rmvec {}
Default Value: false
Affected lints:
enforced-import-renames
The list of imports to always rename, a fully qualified path followed by the rename.
Default Value: []
Affected lints:
enum-variant-name-threshold
The minimum number of enum variants for the lints about variant names to trigger
Default Value: 3
Affected lints:
enum-variant-size-threshold
The maximum size of an enum's variant to avoid box suggestion
Default Value: 200
Affected lints:
excessive-nesting-threshold
The maximum amount of nesting a block can reside in
Default Value: 0
Affected lints:
future-size-threshold
The maximum byte size a Future
can have, before it triggers the clippy::large_futures
lint
Default Value: 16384
Affected lints:
ignore-interior-mutability
A list of paths to types that should be treated as if they do not contain interior mutability
Default Value: ["bytes::Bytes"]
Affected lints:
large-error-threshold
The maximum size of the Err
-variant in a Result
returned from a function
Default Value: 128
Affected lints:
literal-representation-threshold
The lower bound for linting decimal literals
Default Value: 16384
Affected lints:
matches-for-let-else
Whether the matches should be considered by the lint, and whether there should be filtering for common types.
Default Value: "WellKnownTypes"
Affected lints:
max-fn-params-bools
The maximum number of bool parameters a function can have
Default Value: 3
Affected lints:
max-include-file-size
The maximum size of a file included via include_bytes!()
or include_str!()
, in bytes
Default Value: 1000000
Affected lints:
max-struct-bools
The maximum number of bool fields a struct can have
Default Value: 3
Affected lints:
max-suggested-slice-pattern-length
When Clippy suggests using a slice pattern, this is the maximum number of elements allowed in
the slice pattern that is suggested. If more elements are necessary, the lint is suppressed.
For example, [_, _, _, e, ..]
is a slice pattern with 4 elements.
Default Value: 3
Affected lints:
max-trait-bounds
The maximum number of bounds a trait can have to be linted
Default Value: 3
Affected lints:
min-ident-chars-threshold
Minimum chars an ident can have, anything below or equal to this will be linted.
Default Value: 1
Affected lints:
missing-docs-in-crate-items
Whether to only check for missing documentation in items visible within the current
crate. For example, pub(crate)
items.
Default Value: false
Affected lints:
msrv
The minimum rust version that the project supports. Defaults to the rust-version
field in Cargo.toml
Default Value: current version
Affected lints:
allow_attributes
allow_attributes_without_reason
almost_complete_range
approx_constant
assigning_clones
borrow_as_ptr
cast_abs_to_unsigned
checked_conversions
cloned_instead_of_copied
collapsible_match
collapsible_str_replace
deprecated_cfg_attr
derivable_impls
err_expect
filter_map_next
from_over_into
if_then_some_else_none
index_refutable_slice
iter_kv_map
legacy_numeric_constants
manual_bits
manual_c_str_literals
manual_clamp
manual_hash_one
manual_is_ascii_check
manual_let_else
manual_non_exhaustive
manual_pattern_char_comparison
manual_range_contains
manual_rem_euclid
manual_retain
manual_split_once
manual_str_repeat
manual_strip
manual_try_fold
map_clone
map_unwrap_or
match_like_matches_macro
mem_replace_with_default
missing_const_for_fn
needless_borrow
option_as_ref_deref
option_map_unwrap_or
ptr_as_ptr
redundant_field_names
redundant_static_lifetimes
seek_from_current
seek_rewind
transmute_ptr_to_ref
tuple_array_conversions
type_repetition_in_bounds
unchecked_duration_subtraction
uninlined_format_args
unnecessary_lazy_evaluations
unnested_or_patterns
use_self
pass-by-value-size-limit
The minimum size (in bytes) to consider a type for passing by reference instead of by value.
Default Value: 256
Affected lints:
pub-underscore-fields-behavior
Lint "public" fields in a struct that are prefixed with an underscore based on their exported visibility, or whether they are marked as "pub".
Default Value: "PubliclyExported"
Affected lints:
semicolon-inside-block-ignore-singleline
Whether to lint only if it's multiline.
Default Value: false
Affected lints:
semicolon-outside-block-ignore-multiline
Whether to lint only if it's singleline.
Default Value: false
Affected lints:
single-char-binding-names-threshold
The maximum number of single char bindings a scope may have
Default Value: 4
Affected lints:
stack-size-threshold
The maximum allowed stack size for functions in bytes
Default Value: 512000
Affected lints:
standard-macro-braces
Enforce the named macros always use the braces specified.
A MacroMatcher
can be added like so { name = "macro_name", brace = "(" }
. If the macro
could be used with a full path two MacroMatcher
s have to be added one with the full path
crate_name::macro_name
and one with just the macro name.
Default Value: []
Affected lints:
struct-field-name-threshold
The minimum number of struct fields for the lints about field names to trigger
Default Value: 3
Affected lints:
suppress-restriction-lint-in-const
Whether to suppress a restriction lint in constant code. In same cases the restructured operation might not be unavoidable, as the suggested counterparts are unavailable in constant code. This configuration will cause restriction lints to trigger even if no suggestion can be made.
Default Value: false
Affected lints:
too-large-for-stack
The maximum size of objects (in bytes) that will be linted. Larger objects are ok on the heap
Default Value: 200
Affected lints:
too-many-arguments-threshold
The maximum number of argument a function or method can have
Default Value: 7
Affected lints:
too-many-lines-threshold
The maximum number of lines a function or method can have
Default Value: 100
Affected lints:
trivial-copy-size-limit
The maximum size (in bytes) to consider a Copy
type for passing by value instead of by
reference. By default there is no limit
Default Value: target_pointer_width * 2
Affected lints:
type-complexity-threshold
The maximum complexity a type can have
Default Value: 250
Affected lints:
unnecessary-box-size
The byte size a T
in Box<T>
can have, below which it triggers the clippy::unnecessary_box
lint
Default Value: 128
Affected lints:
unreadable-literal-lint-fractions
Should the fraction of a decimal be linted to include separators.
Default Value: true
Affected lints:
upper-case-acronyms-aggressive
Enables verbose mode. Triggers if there is more than one uppercase char next to each other
Default Value: false
Affected lints:
vec-box-size-threshold
The size of the boxed type in bytes, where boxing in a Vec
is allowed
Default Value: 4096
Affected lints:
verbose-bit-mask-threshold
The maximum allowed size of a bit mask before suggesting to use 'trailing_zeros'
Default Value: 1
Affected lints:
warn-on-all-wildcard-imports
Whether to allow certain wildcard imports (prelude, super in tests).
Default Value: false
Affected lints:
warn-unsafe-macro-metavars-in-private-macros
Whether to also emit warnings for unsafe blocks with metavariable expansions in private macros.
Default Value: false
Affected lints: