Skip to content

Commit 90bb498

Browse files
committed
Add new lint [] init
2 parents 4fdc764 + 0f20a12 commit 90bb498

File tree

2,417 files changed

+29627
-13421
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,417 files changed

+29627
-13421
lines changed

Diff for: CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -5530,6 +5530,7 @@ Released 2018-09-13
55305530
[`diverging_sub_expression`]: https://rust-lang.github.io/rust-clippy/master/index.html#diverging_sub_expression
55315531
[`doc_include_without_cfg`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_include_without_cfg
55325532
[`doc_lazy_continuation`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation
5533+
[`doc_link_code`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_link_code
55335534
[`doc_link_with_quotes`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_link_with_quotes
55345535
[`doc_markdown`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown
55355536
[`doc_nested_refdefs`]: https://rust-lang.github.io/rust-clippy/master/index.html#doc_nested_refdefs
@@ -5743,6 +5744,7 @@ Released 2018-09-13
57435744
[`manual_c_str_literals`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_c_str_literals
57445745
[`manual_checked_sub`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_sub
57455746
[`manual_clamp`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp
5747+
[`manual_contains`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains
57465748
[`manual_div_ceil`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil
57475749
[`manual_filter`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter
57485750
[`manual_filter_map`]: https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter_map
@@ -5813,6 +5815,7 @@ Released 2018-09-13
58135815
[`mem_discriminant_non_enum`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_discriminant_non_enum
58145816
[`mem_forget`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_forget
58155817
[`mem_replace_option_with_none`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_option_with_none
5818+
[`mem_replace_option_with_some`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_option_with_some
58165819
[`mem_replace_with_default`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default
58175820
[`mem_replace_with_uninit`]: https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_uninit
58185821
[`min_ident_chars`]: https://rust-lang.github.io/rust-clippy/master/index.html#min_ident_chars
@@ -6068,6 +6071,7 @@ Released 2018-09-13
60686071
[`single_element_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_element_loop
60696072
[`single_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_match
60706073
[`single_match_else`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_match_else
6074+
[`single_option_map`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_option_map
60716075
[`single_range_in_vec_init`]: https://rust-lang.github.io/rust-clippy/master/index.html#single_range_in_vec_init
60726076
[`size_of_in_element_count`]: https://rust-lang.github.io/rust-clippy/master/index.html#size_of_in_element_count
60736077
[`size_of_ref`]: https://rust-lang.github.io/rust-clippy/master/index.html#size_of_ref
@@ -6144,6 +6148,7 @@ Released 2018-09-13
61446148
[`type_complexity`]: https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
61456149
[`type_id_on_box`]: https://rust-lang.github.io/rust-clippy/master/index.html#type_id_on_box
61466150
[`type_repetition_in_bounds`]: https://rust-lang.github.io/rust-clippy/master/index.html#type_repetition_in_bounds
6151+
[`unbuffered_bytes`]: https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes
61476152
[`unchecked_duration_subtraction`]: https://rust-lang.github.io/rust-clippy/master/index.html#unchecked_duration_subtraction
61486153
[`unconditional_recursion`]: https://rust-lang.github.io/rust-clippy/master/index.html#unconditional_recursion
61496154
[`undocumented_unsafe_blocks`]: https://rust-lang.github.io/rust-clippy/master/index.html#undocumented_unsafe_blocks
@@ -6268,6 +6273,7 @@ Released 2018-09-13
62686273
[`accept-comment-above-statement`]: https://doc.rust-lang.org/clippy/lint_configuration.html#accept-comment-above-statement
62696274
[`allow-comparison-to-zero`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-comparison-to-zero
62706275
[`allow-dbg-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-dbg-in-tests
6276+
[`allow-expect-in-consts`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-expect-in-consts
62716277
[`allow-expect-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-expect-in-tests
62726278
[`allow-indexing-slicing-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-indexing-slicing-in-tests
62736279
[`allow-mixed-uninlined-format-args`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-mixed-uninlined-format-args
@@ -6276,6 +6282,7 @@ Released 2018-09-13
62766282
[`allow-print-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-print-in-tests
62776283
[`allow-private-module-inception`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-private-module-inception
62786284
[`allow-renamed-params-for`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-renamed-params-for
6285+
[`allow-unwrap-in-consts`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-unwrap-in-consts
62796286
[`allow-unwrap-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-unwrap-in-tests
62806287
[`allow-useless-vec-in-tests`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allow-useless-vec-in-tests
62816288
[`allowed-dotfiles`]: https://doc.rust-lang.org/clippy/lint_configuration.html#allowed-dotfiles

Diff for: Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ path = "src/driver.rs"
2525
[dependencies]
2626
clippy_config = { path = "clippy_config" }
2727
clippy_lints = { path = "clippy_lints" }
28-
rustc_tools_util = "0.4.0"
28+
rustc_tools_util = { path = "rustc_tools_util", version = "0.4.2" }
2929
tempfile = { version = "3.3", optional = true }
3030
termize = "0.1"
3131
color-print = "0.3.4"
@@ -54,7 +54,7 @@ parking_lot = "0.12"
5454
tokio = { version = "1", features = ["io-util"] }
5555

5656
[build-dependencies]
57-
rustc_tools_util = "0.4.0"
57+
rustc_tools_util = { path = "rustc_tools_util", version = "0.4.2" }
5858

5959
[features]
6060
integration = ["tempfile"]

Diff for: book/src/development/basics.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ or if you modify a test file to add a test case.
7575
> _Note:_ This command may update more files than you intended. In that case
7676
> only commit the files you wanted to update.
7777
78-
[UI test]: https://rustc-dev-guide.rust-lang.org/tests/adding.html#guide-to-the-ui-tests
78+
[UI test]: https://rustc-dev-guide.rust-lang.org/tests/adding.html#ui-test-walkthrough
7979

8080
## `cargo dev`
8181

Diff for: book/src/lint_configuration.md

+22-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ Whether `dbg!` should be allowed in test functions or `#[cfg(test)]`
7171
* [`dbg_macro`](https://rust-lang.github.io/rust-clippy/master/index.html#dbg_macro)
7272

7373

74+
## `allow-expect-in-consts`
75+
Whether `expect` should be allowed in code always evaluated at compile time
76+
77+
**Default Value:** `true`
78+
79+
---
80+
**Affected lints:**
81+
* [`expect_used`](https://rust-lang.github.io/rust-clippy/master/index.html#expect_used)
82+
83+
7484
## `allow-expect-in-tests`
7585
Whether `expect` should be allowed in test functions or `#[cfg(test)]`
7686

@@ -108,7 +118,7 @@ Whether to allow `r#""#` when `r""` can be used
108118

109119
---
110120
**Affected lints:**
111-
* [`unnecessary_raw_string_hashes`](https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_raw_string_hashes)
121+
* [`needless_raw_string_hashes`](https://rust-lang.github.io/rust-clippy/master/index.html#needless_raw_string_hashes)
112122

113123

114124
## `allow-panic-in-tests`
@@ -164,6 +174,16 @@ default configuration of Clippy. By default, any configuration will replace the
164174
* [`renamed_function_params`](https://rust-lang.github.io/rust-clippy/master/index.html#renamed_function_params)
165175

166176

177+
## `allow-unwrap-in-consts`
178+
Whether `unwrap` should be allowed in code always evaluated at compile time
179+
180+
**Default Value:** `true`
181+
182+
---
183+
**Affected lints:**
184+
* [`unwrap_used`](https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_used)
185+
186+
167187
## `allow-unwrap-in-tests`
168188
Whether `unwrap` should be allowed in test functions or `#[cfg(test)]`
169189

@@ -764,6 +784,7 @@ The minimum rust version that the project supports. Defaults to the `rust-versio
764784
* [`map_unwrap_or`](https://rust-lang.github.io/rust-clippy/master/index.html#map_unwrap_or)
765785
* [`map_with_unused_argument_over_ranges`](https://rust-lang.github.io/rust-clippy/master/index.html#map_with_unused_argument_over_ranges)
766786
* [`match_like_matches_macro`](https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro)
787+
* [`mem_replace_option_with_some`](https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_option_with_some)
767788
* [`mem_replace_with_default`](https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default)
768789
* [`missing_const_for_fn`](https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_fn)
769790
* [`needless_borrow`](https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow)

Diff for: clippy_config/src/conf.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,9 @@ define_Conf! {
288288
/// Whether `dbg!` should be allowed in test functions or `#[cfg(test)]`
289289
#[lints(dbg_macro)]
290290
allow_dbg_in_tests: bool = false,
291+
/// Whether `expect` should be allowed in code always evaluated at compile time
292+
#[lints(expect_used)]
293+
allow_expect_in_consts: bool = true,
291294
/// Whether `expect` should be allowed in test functions or `#[cfg(test)]`
292295
#[lints(expect_used)]
293296
allow_expect_in_tests: bool = false,
@@ -298,7 +301,7 @@ define_Conf! {
298301
#[lints(uninlined_format_args)]
299302
allow_mixed_uninlined_format_args: bool = true,
300303
/// Whether to allow `r#""#` when `r""` can be used
301-
#[lints(unnecessary_raw_string_hashes)]
304+
#[lints(needless_raw_string_hashes)]
302305
allow_one_hash_in_raw_strings: bool = false,
303306
/// Whether `panic` should be allowed in test functions or `#[cfg(test)]`
304307
#[lints(panic)]
@@ -325,6 +328,9 @@ define_Conf! {
325328
#[lints(renamed_function_params)]
326329
allow_renamed_params_for: Vec<String> =
327330
DEFAULT_ALLOWED_TRAITS_WITH_RENAMED_PARAMS.iter().map(ToString::to_string).collect(),
331+
/// Whether `unwrap` should be allowed in code always evaluated at compile time
332+
#[lints(unwrap_used)]
333+
allow_unwrap_in_consts: bool = true,
328334
/// Whether `unwrap` should be allowed in test functions or `#[cfg(test)]`
329335
#[lints(unwrap_used)]
330336
allow_unwrap_in_tests: bool = false,
@@ -633,6 +639,7 @@ define_Conf! {
633639
map_unwrap_or,
634640
map_with_unused_argument_over_ranges,
635641
match_like_matches_macro,
642+
mem_replace_option_with_some,
636643
mem_replace_with_default,
637644
missing_const_for_fn,
638645
needless_borrow,

Diff for: clippy_dev/src/fmt.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,13 @@ fn run_rustfmt(context: &FmtContext) -> Result<(), Error> {
290290
.filter_map(|entry| {
291291
let entry = entry.expect("failed to find tests");
292292
let path = entry.path();
293-
294-
if path.extension() != Some("rs".as_ref()) || entry.file_name() == "ice-3891.rs" {
293+
if path.extension() != Some("rs".as_ref())
294+
|| path
295+
.components()
296+
.nth_back(1)
297+
.is_some_and(|c| c.as_os_str() == "syntax-error-recovery")
298+
|| entry.file_name() == "ice-3891.rs"
299+
{
295300
None
296301
} else {
297302
Some(entry.into_path().into_os_string())

Diff for: clippy_lints/src/booleans.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_hir_and_then};
33
use clippy_utils::eq_expr_value;
44
use clippy_utils::msrvs::{self, Msrv};
55
use clippy_utils::source::SpanRangeExt;
6+
use clippy_utils::sugg::Sugg;
67
use clippy_utils::ty::{implements_trait, is_type_diagnostic_item};
78
use rustc_ast::ast::LitKind;
89
use rustc_attr_parsing::RustcVersion;
@@ -353,7 +354,8 @@ impl SuggestContext<'_, '_, '_> {
353354
self.output.push_str(&str);
354355
} else {
355356
self.output.push('!');
356-
self.output.push_str(&terminal.span.get_source_text(self.cx)?);
357+
self.output
358+
.push_str(&Sugg::hir_opt(self.cx, terminal)?.maybe_par().to_string());
357359
}
358360
},
359361
True | False | Not(_) => {
@@ -553,7 +555,7 @@ impl<'tcx> NonminimalBoolVisitor<'_, 'tcx> {
553555
_ => simplified.push(Bool::Not(Box::new(simple.clone()))),
554556
}
555557
let simple_negated = simple_negate(simple);
556-
if simplified.iter().any(|s| *s == simple_negated) {
558+
if simplified.contains(&simple_negated) {
557559
continue;
558560
}
559561
simplified.push(simple_negated);

Diff for: clippy_lints/src/casts/cast_sign_loss.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,11 @@ fn expr_sign<'cx, 'tcx>(cx: &LateContext<'cx>, mut expr: &'tcx Expr<'tcx>, ty: i
142142
expr = recv;
143143
}
144144

145-
if METHODS_POW.iter().any(|&name| method_name == name)
145+
if METHODS_POW.contains(&method_name)
146146
&& let [arg] = args
147147
{
148148
return pow_call_result_sign(cx, caller, arg);
149-
} else if METHODS_RET_POSITIVE.iter().any(|&name| method_name == name) {
149+
} else if METHODS_RET_POSITIVE.contains(&method_name) {
150150
return Sign::ZeroOrPositive;
151151
}
152152
}

Diff for: clippy_lints/src/declared_lints.rs

+5
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ pub static LINTS: &[&crate::LintInfo] = &[
139139
crate::disallowed_types::DISALLOWED_TYPES_INFO,
140140
crate::doc::DOC_INCLUDE_WITHOUT_CFG_INFO,
141141
crate::doc::DOC_LAZY_CONTINUATION_INFO,
142+
crate::doc::DOC_LINK_CODE_INFO,
142143
crate::doc::DOC_LINK_WITH_QUOTES_INFO,
143144
crate::doc::DOC_MARKDOWN_INFO,
144145
crate::doc::DOC_NESTED_REFDEFS_INFO,
@@ -363,6 +364,7 @@ pub static LINTS: &[&crate::LintInfo] = &[
363364
crate::matches::WILDCARD_ENUM_MATCH_ARM_INFO,
364365
crate::matches::WILDCARD_IN_OR_PATTERNS_INFO,
365366
crate::mem_replace::MEM_REPLACE_OPTION_WITH_NONE_INFO,
367+
crate::mem_replace::MEM_REPLACE_OPTION_WITH_SOME_INFO,
366368
crate::mem_replace::MEM_REPLACE_WITH_DEFAULT_INFO,
367369
crate::mem_replace::MEM_REPLACE_WITH_UNINIT_INFO,
368370
crate::methods::BIND_INSTEAD_OF_MAP_INFO,
@@ -417,6 +419,7 @@ pub static LINTS: &[&crate::LintInfo] = &[
417419
crate::methods::ITER_SKIP_ZERO_INFO,
418420
crate::methods::ITER_WITH_DRAIN_INFO,
419421
crate::methods::JOIN_ABSOLUTE_PATHS_INFO,
422+
crate::methods::MANUAL_CONTAINS_INFO,
420423
crate::methods::MANUAL_C_STR_LITERALS_INFO,
421424
crate::methods::MANUAL_FILTER_MAP_INFO,
422425
crate::methods::MANUAL_FIND_MAP_INFO,
@@ -483,6 +486,7 @@ pub static LINTS: &[&crate::LintInfo] = &[
483486
crate::methods::SUSPICIOUS_SPLITN_INFO,
484487
crate::methods::SUSPICIOUS_TO_OWNED_INFO,
485488
crate::methods::TYPE_ID_ON_BOX_INFO,
489+
crate::methods::UNBUFFERED_BYTES_INFO,
486490
crate::methods::UNINIT_ASSUMED_INIT_INFO,
487491
crate::methods::UNIT_HASH_INFO,
488492
crate::methods::UNNECESSARY_FALLIBLE_CONVERSIONS_INFO,
@@ -684,6 +688,7 @@ pub static LINTS: &[&crate::LintInfo] = &[
684688
crate::single_call_fn::SINGLE_CALL_FN_INFO,
685689
crate::single_char_lifetime_names::SINGLE_CHAR_LIFETIME_NAMES_INFO,
686690
crate::single_component_path_imports::SINGLE_COMPONENT_PATH_IMPORTS_INFO,
691+
crate::single_option_map::SINGLE_OPTION_MAP_INFO,
687692
crate::single_range_in_vec_init::SINGLE_RANGE_IN_VEC_INIT_INFO,
688693
crate::size_of_in_element_count::SIZE_OF_IN_ELEMENT_COUNT_INFO,
689694
crate::size_of_ref::SIZE_OF_REF_INFO,

Diff for: clippy_lints/src/doc/mod.rs

+98
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,28 @@ declare_clippy_lint! {
8383
"presence of `_`, `::` or camel-case outside backticks in documentation"
8484
}
8585

86+
declare_clippy_lint! {
87+
/// ### What it does
88+
/// Checks for links with code directly adjacent to code text:
89+
/// `` [`MyItem`]`<`[`u32`]`>` ``.
90+
///
91+
/// ### Why is this bad?
92+
/// It can be written more simply using HTML-style `<code>` tags.
93+
///
94+
/// ### Example
95+
/// ```no_run
96+
/// //! [`first`](x)`second`
97+
/// ```
98+
/// Use instead:
99+
/// ```no_run
100+
/// //! <code>[first](x)second</code>
101+
/// ```
102+
#[clippy::version = "1.86.0"]
103+
pub DOC_LINK_CODE,
104+
nursery,
105+
"link with code back-to-back with other code"
106+
}
107+
86108
declare_clippy_lint! {
87109
/// ### What it does
88110
/// Checks for the doc comments of publicly visible
@@ -637,6 +659,7 @@ impl Documentation {
637659
}
638660

639661
impl_lint_pass!(Documentation => [
662+
DOC_LINK_CODE,
640663
DOC_LINK_WITH_QUOTES,
641664
DOC_MARKDOWN,
642665
DOC_NESTED_REFDEFS,
@@ -820,6 +843,21 @@ fn check_attrs(cx: &LateContext<'_>, valid_idents: &FxHashSet<String>, attrs: &[
820843

821844
let mut cb = fake_broken_link_callback;
822845

846+
check_for_code_clusters(
847+
cx,
848+
pulldown_cmark::Parser::new_with_broken_link_callback(
849+
&doc,
850+
main_body_opts() - Options::ENABLE_SMART_PUNCTUATION,
851+
Some(&mut cb),
852+
)
853+
.into_offset_iter(),
854+
&doc,
855+
Fragments {
856+
doc: &doc,
857+
fragments: &fragments,
858+
},
859+
);
860+
823861
// disable smart punctuation to pick up ['link'] more easily
824862
let opts = main_body_opts() - Options::ENABLE_SMART_PUNCTUATION;
825863
let parser = pulldown_cmark::Parser::new_with_broken_link_callback(&doc, opts, Some(&mut cb));
@@ -843,6 +881,66 @@ enum Container {
843881
List(usize),
844882
}
845883

884+
/// Scan the documentation for code links that are back-to-back with code spans.
885+
///
886+
/// This is done separately from the rest of the docs, because that makes it easier to produce
887+
/// the correct messages.
888+
fn check_for_code_clusters<'a, Events: Iterator<Item = (pulldown_cmark::Event<'a>, Range<usize>)>>(
889+
cx: &LateContext<'_>,
890+
events: Events,
891+
doc: &str,
892+
fragments: Fragments<'_>,
893+
) {
894+
let mut events = events.peekable();
895+
let mut code_starts_at = None;
896+
let mut code_ends_at = None;
897+
let mut code_includes_link = false;
898+
while let Some((event, range)) = events.next() {
899+
match event {
900+
Start(Link { .. }) if matches!(events.peek(), Some((Code(_), _range))) => {
901+
if code_starts_at.is_some() {
902+
code_ends_at = Some(range.end);
903+
} else {
904+
code_starts_at = Some(range.start);
905+
}
906+
code_includes_link = true;
907+
// skip the nested "code", because we're already handling it here
908+
let _ = events.next();
909+
},
910+
Code(_) => {
911+
if code_starts_at.is_some() {
912+
code_ends_at = Some(range.end);
913+
} else {
914+
code_starts_at = Some(range.start);
915+
}
916+
},
917+
End(TagEnd::Link) => {},
918+
_ => {
919+
if let Some(start) = code_starts_at
920+
&& let Some(end) = code_ends_at
921+
&& code_includes_link
922+
{
923+
if let Some(span) = fragments.span(cx, start..end) {
924+
span_lint_and_then(cx, DOC_LINK_CODE, span, "code link adjacent to code text", |diag| {
925+
let sugg = format!("<code>{}</code>", doc[start..end].replace('`', ""));
926+
diag.span_suggestion_verbose(
927+
span,
928+
"wrap the entire group in `<code>` tags",
929+
sugg,
930+
Applicability::MaybeIncorrect,
931+
);
932+
diag.help("separate code snippets will be shown with a gap");
933+
});
934+
}
935+
}
936+
code_includes_link = false;
937+
code_starts_at = None;
938+
code_ends_at = None;
939+
},
940+
}
941+
}
942+
}
943+
846944
/// Checks parsed documentation.
847945
/// This walks the "events" (think sections of markdown) produced by `pulldown_cmark`,
848946
/// so lints here will generally access that information.

0 commit comments

Comments
 (0)