pub struct MD001HeadingIncrement;Expand description
Rule MD001: Heading levels should only increment by one level at a time
See docs/md001.md for full documentation, configuration, and examples.
This rule enforces a fundamental principle of document structure: heading levels should increase by exactly one level at a time to maintain a proper document hierarchy.
§Purpose
Proper heading structure creates a logical document outline and improves:
- Readability for humans
- Accessibility for screen readers
- Navigation in rendered documents
- Automatic generation of tables of contents
§Examples
§Correct Heading Structure
# Heading 1
## Heading 2
### Heading 3
## Another Heading 2§Incorrect Heading Structure
# Heading 1
### Heading 3 (skips level 2)
#### Heading 4§Behavior
This rule:
- Tracks the heading level throughout the document
- Validates that each new heading is at most one level deeper than the previous heading
- Allows heading levels to decrease by any amount (e.g., going from ### to #)
- Works with both ATX (
#) and Setext (underlined) heading styles
§Fix Behavior
When applying automatic fixes, this rule:
- Changes the level of non-compliant headings to be one level deeper than the previous heading
- Preserves the original heading style (ATX or Setext)
- Maintains indentation and other formatting
§Rationale
Skipping heading levels (e.g., from h1 to h3) can confuse readers and screen readers
by creating gaps in the document structure. Consistent heading increments create a proper
hierarchical outline essential for well-structured documents.
Trait Implementations§
Source§impl Clone for MD001HeadingIncrement
impl Clone for MD001HeadingIncrement
Source§fn clone(&self) -> MD001HeadingIncrement
fn clone(&self) -> MD001HeadingIncrement
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MD001HeadingIncrement
impl Debug for MD001HeadingIncrement
Source§impl Default for MD001HeadingIncrement
impl Default for MD001HeadingIncrement
Source§fn default() -> MD001HeadingIncrement
fn default() -> MD001HeadingIncrement
Returns the “default value” for a type. Read more
Source§impl Rule for MD001HeadingIncrement
impl Rule for MD001HeadingIncrement
fn name(&self) -> &'static str
fn description(&self) -> &'static str
fn check(&self, ctx: &LintContext<'_>) -> LintResult
fn fix(&self, ctx: &LintContext<'_>) -> Result<String, LintError>
Source§fn category(&self) -> RuleCategory
fn category(&self) -> RuleCategory
Get the category of this rule for selective processing
Source§fn should_skip(&self, ctx: &LintContext<'_>) -> bool
fn should_skip(&self, ctx: &LintContext<'_>) -> bool
Check if this rule should quickly skip processing based on content
fn as_any(&self) -> &dyn Any
fn as_maybe_document_structure(&self) -> Option<&dyn MaybeDocumentStructure>
Source§fn from_config(_config: &Config) -> Box<dyn Rule>where
Self: Sized,
fn from_config(_config: &Config) -> Box<dyn Rule>where
Self: Sized,
Factory: create a rule from config (if present), or use defaults.
Source§fn check_with_structure(
&self,
ctx: &LintContext<'_>,
_structure: &DocumentStructure,
) -> LintResult
fn check_with_structure( &self, ctx: &LintContext<'_>, _structure: &DocumentStructure, ) -> LintResult
Enhanced check method using document structure
By default, calls the regular check method if not overridden
Source§fn check_with_ast(
&self,
ctx: &LintContext<'_>,
_ast: &MarkdownAst,
) -> LintResult
fn check_with_ast( &self, ctx: &LintContext<'_>, _ast: &MarkdownAst, ) -> LintResult
AST-based check method for rules that can benefit from shared AST parsing
By default, calls the regular check method if not overridden
Source§fn check_with_structure_and_ast(
&self,
ctx: &LintContext<'_>,
_structure: &DocumentStructure,
_ast: &MarkdownAst,
) -> LintResult
fn check_with_structure_and_ast( &self, ctx: &LintContext<'_>, _structure: &DocumentStructure, _ast: &MarkdownAst, ) -> LintResult
Combined check method using both document structure and AST
By default, calls the regular check method if not overridden
Source§fn uses_document_structure(&self) -> bool
fn uses_document_structure(&self) -> bool
Check if this rule can benefit from document structure
fn as_maybe_ast(&self) -> Option<&dyn MaybeAst>
Source§fn default_config_section(&self) -> Option<(String, Value)>
fn default_config_section(&self) -> Option<(String, Value)>
Returns the rule name and default config table if the rule has config.
If a rule implements this, it MUST be defined on the
impl Rule for ... block,
not just the inherent impl.Source§fn config_aliases(&self) -> Option<HashMap<String, String>>
fn config_aliases(&self) -> Option<HashMap<String, String>>
Returns config key aliases for this rule
This allows rules to accept alternative config key names for backwards compatibility
Source§fn fix_capability(&self) -> FixCapability
fn fix_capability(&self) -> FixCapability
Declares the fix capability of this rule
Auto Trait Implementations§
impl Freeze for MD001HeadingIncrement
impl RefUnwindSafe for MD001HeadingIncrement
impl Send for MD001HeadingIncrement
impl Sync for MD001HeadingIncrement
impl Unpin for MD001HeadingIncrement
impl UnwindSafe for MD001HeadingIncrement
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more