pub struct MD032BlanksAroundLists {
pub allow_after_headings: bool,
pub allow_after_colons: bool,
}Expand description
Rule MD032: Lists should be surrounded by blank lines
This rule enforces that lists are surrounded by blank lines, which improves document readability and ensures consistent rendering across different Markdown processors.
§Purpose
- Readability: Blank lines create visual separation between lists and surrounding content
- Parsing: Many Markdown parsers require blank lines around lists for proper rendering
- Consistency: Ensures uniform document structure and appearance
- Compatibility: Improves compatibility across different Markdown implementations
§Examples
§Correct
This is a paragraph of text.
- Item 1
- Item 2
- Item 3
This is another paragraph.§Incorrect
This is a paragraph of text.
- Item 1
- Item 2
- Item 3
This is another paragraph.§Behavior Details
This rule checks for the following:
- List Start: There should be a blank line before the first item in a list (unless the list is at the beginning of the document or after front matter)
- List End: There should be a blank line after the last item in a list (unless the list is at the end of the document)
- Nested Lists: Properly handles nested lists and list continuations
- List Types: Works with ordered lists, unordered lists, and all valid list markers (-, *, +)
§Special Cases
This rule handles several special cases:
- Front Matter: YAML front matter is detected and skipped
- Code Blocks: Lists inside code blocks are ignored
- List Content: Indented content belonging to list items is properly recognized as part of the list
- Document Boundaries: Lists at the beginning or end of the document have adjusted requirements
§Fix Behavior
When applying automatic fixes, this rule:
- Adds a blank line before the first list item when needed
- Adds a blank line after the last list item when needed
- Preserves document structure and existing content
§Performance Optimizations
The rule includes several optimizations:
- Fast path checks before applying more expensive regex operations
- Efficient list item detection
- Pre-computation of code block lines to avoid redundant processing
Fields§
§allow_after_headings: boolAllow lists to follow headings without blank lines
allow_after_colons: boolAllow lists to follow content ending with colons without blank lines
Implementations§
Trait Implementations§
Source§impl Clone for MD032BlanksAroundLists
impl Clone for MD032BlanksAroundLists
Source§fn clone(&self) -> MD032BlanksAroundLists
fn clone(&self) -> MD032BlanksAroundLists
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 MD032BlanksAroundLists
impl Debug for MD032BlanksAroundLists
Source§impl Default for MD032BlanksAroundLists
impl Default for MD032BlanksAroundLists
Source§fn default() -> MD032BlanksAroundLists
fn default() -> MD032BlanksAroundLists
Returns the “default value” for a type. Read more
Source§impl Rule for MD032BlanksAroundLists
impl Rule for MD032BlanksAroundLists
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 should_skip(&self, ctx: &LintContext<'_>) -> bool
fn should_skip(&self, ctx: &LintContext<'_>) -> bool
Check if this rule should quickly skip processing based on content
Source§fn category(&self) -> RuleCategory
fn category(&self) -> RuleCategory
Get the category of this rule for selective processing
fn as_any(&self) -> &dyn Any
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 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_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
fn as_maybe_ast(&self) -> Option<&dyn MaybeAst>
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 MD032BlanksAroundLists
impl RefUnwindSafe for MD032BlanksAroundLists
impl Send for MD032BlanksAroundLists
impl Sync for MD032BlanksAroundLists
impl Unpin for MD032BlanksAroundLists
impl UnwindSafe for MD032BlanksAroundLists
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