diff --git a/book/src/lint_configuration.md b/book/src/lint_configuration.md
index 2314d1beac7e..32ae40e17666 100644
--- a/book/src/lint_configuration.md
+++ b/book/src/lint_configuration.md
@@ -478,6 +478,13 @@ The maximum cognitive complexity a function can have
## `disallowed-macros`
The list of disallowed macros, written as fully qualified paths.
+**Fields:**
+- `path` (required): the fully qualified path to the macro that should be disallowed
+- `reason` (optional): explanation why this macro is disallowed
+- `replacement` (optional): suggested alternative macro
+- `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ if the path doesn't exist, instead of emitting an error
+
**Default Value:** `[]`
---
@@ -488,6 +495,13 @@ The list of disallowed macros, written as fully qualified paths.
## `disallowed-methods`
The list of disallowed methods, written as fully qualified paths.
+**Fields:**
+- `path` (required): the fully qualified path to the method that should be disallowed
+- `reason` (optional): explanation why this method is disallowed
+- `replacement` (optional): suggested alternative method
+- `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ if the path doesn't exist, instead of emitting an error
+
**Default Value:** `[]`
---
@@ -510,6 +524,13 @@ default configuration of Clippy. By default, any configuration will replace the
## `disallowed-types`
The list of disallowed types, written as fully qualified paths.
+**Fields:**
+- `path` (required): the fully qualified path to the type that should be disallowed
+- `reason` (optional): explanation why this type is disallowed
+- `replacement` (optional): suggested alternative type
+- `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ if the path doesn't exist, instead of emitting an error
+
**Default Value:** `[]`
---
diff --git a/clippy_config/src/conf.rs b/clippy_config/src/conf.rs
index 511cb84527d8..72acaf7def9f 100644
--- a/clippy_config/src/conf.rs
+++ b/clippy_config/src/conf.rs
@@ -572,10 +572,24 @@ define_Conf! {
#[conf_deprecated("Please use `cognitive-complexity-threshold` instead", cognitive_complexity_threshold)]
cyclomatic_complexity_threshold: u64 = 25,
/// The list of disallowed macros, written as fully qualified paths.
+ ///
+ /// **Fields:**
+ /// - `path` (required): the fully qualified path to the macro that should be disallowed
+ /// - `reason` (optional): explanation why this macro is disallowed
+ /// - `replacement` (optional): suggested alternative macro
+ /// - `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ /// if the path doesn't exist, instead of emitting an error
#[disallowed_paths_allow_replacements = true]
#[lints(disallowed_macros)]
disallowed_macros: Vec = Vec::new(),
/// The list of disallowed methods, written as fully qualified paths.
+ ///
+ /// **Fields:**
+ /// - `path` (required): the fully qualified path to the method that should be disallowed
+ /// - `reason` (optional): explanation why this method is disallowed
+ /// - `replacement` (optional): suggested alternative method
+ /// - `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ /// if the path doesn't exist, instead of emitting an error
#[disallowed_paths_allow_replacements = true]
#[lints(disallowed_methods)]
disallowed_methods: Vec = Vec::new(),
@@ -585,6 +599,13 @@ define_Conf! {
#[lints(disallowed_names)]
disallowed_names: Vec = DEFAULT_DISALLOWED_NAMES.iter().map(ToString::to_string).collect(),
/// The list of disallowed types, written as fully qualified paths.
+ ///
+ /// **Fields:**
+ /// - `path` (required): the fully qualified path to the type that should be disallowed
+ /// - `reason` (optional): explanation why this type is disallowed
+ /// - `replacement` (optional): suggested alternative type
+ /// - `allow-invalid` (optional, `false` by default): when set to `true`, it will ignore this entry
+ /// if the path doesn't exist, instead of emitting an error
#[disallowed_paths_allow_replacements = true]
#[lints(disallowed_types)]
disallowed_types: Vec = Vec::new(),
diff --git a/clippy_lints/src/disallowed_macros.rs b/clippy_lints/src/disallowed_macros.rs
index fa33fef23062..a5eb5ffc97e0 100644
--- a/clippy_lints/src/disallowed_macros.rs
+++ b/clippy_lints/src/disallowed_macros.rs
@@ -38,6 +38,9 @@ declare_clippy_lint! {
/// # When using an inline table, can add a `reason` for why the macro
/// # is disallowed.
/// { path = "serde::Serialize", reason = "no serializing" },
+ /// # This would normally error if the path is incorrect, but with `allow-invalid` = `true`,
+ /// # it will be silently ignored
+ /// { path = "std::invalid_macro", reason = "use alternative instead", allow-invalid = true }
/// ]
/// ```
/// ```no_run
diff --git a/clippy_lints/src/disallowed_methods.rs b/clippy_lints/src/disallowed_methods.rs
index 1382dafa931e..d4d6e406444e 100644
--- a/clippy_lints/src/disallowed_methods.rs
+++ b/clippy_lints/src/disallowed_methods.rs
@@ -33,6 +33,9 @@ declare_clippy_lint! {
/// { path = "std::vec::Vec::leak", reason = "no leaking memory" },
/// # Can also add a `replacement` that will be offered as a suggestion.
/// { path = "std::sync::Mutex::new", reason = "prefer faster & simpler non-poisonable mutex", replacement = "parking_lot::Mutex::new" },
+ /// # This would normally error if the path is incorrect, but with `allow-invalid` = `true`,
+ /// # it will be silently ignored
+ /// { path = "std::fs::InvalidPath", reason = "use alternative instead", allow-invalid = true },
/// ]
/// ```
///
diff --git a/clippy_lints/src/disallowed_types.rs b/clippy_lints/src/disallowed_types.rs
index 2bae82648ac7..3590703b161a 100644
--- a/clippy_lints/src/disallowed_types.rs
+++ b/clippy_lints/src/disallowed_types.rs
@@ -34,6 +34,9 @@ declare_clippy_lint! {
/// { path = "std::net::Ipv4Addr", reason = "no IPv4 allowed" },
/// # Can also add a `replacement` that will be offered as a suggestion.
/// { path = "std::sync::Mutex", reason = "prefer faster & simpler non-poisonable mutex", replacement = "parking_lot::Mutex" },
+ /// # This would normally error if the path is incorrect, but with `allow-invalid` = `true`,
+ /// # it will be silently ignored
+ /// { path = "std::invalid::Type", reason = "use alternative instead", allow-invalid = true }
/// ]
/// ```
///