pub struct MD042NoEmptyLinks {}Expand description
Rule MD042: No empty links
See docs/md042.md for full documentation, configuration, and examples.
This rule is triggered when a link has no destination (URL). “Empty links do not lead anywhere and therefore don’t function as links.”
Note: Empty TEXT with a valid URL (e.g., [](url)) is NOT flagged by MD042.
While this may be an accessibility concern, it’s not an “empty link” per se.
§MkDocs Support
When flavor = "mkdocs" is configured, this rule recognizes two types of valid MkDocs patterns:
§1. Auto-References (via mkdocs-autorefs / mkdocstrings)
Backtick-wrapped Python identifiers used for cross-referencing:
[`module.Class`][] // Python class reference
[`str`][] // Built-in type reference
[`api.function`][] // Function referenceReferences:
§2. Paragraph Anchors (via Python-Markdown attr_list extension)
Empty links combined with attributes to create anchor points:
[](){ #my-anchor } // Basic anchor
[](){ #anchor .class } // Anchor with CSS class
[](){: #anchor } // With colon (canonical attr_list syntax)
[](){ .class1 .class2 } // Classes onlyThis syntax combines:
- Empty link
[]()→ creates<a href=""></a> - attr_list syntax
{ #id }→ adds attributes to preceding element - Result:
<a href="" id="my-anchor"></a>
References:
Implementation: See is_mkdocs_attribute_anchor method
Implementations§
Trait Implementations§
Source§impl Clone for MD042NoEmptyLinks
impl Clone for MD042NoEmptyLinks
Source§fn clone(&self) -> MD042NoEmptyLinks
fn clone(&self) -> MD042NoEmptyLinks
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Default for MD042NoEmptyLinks
impl Default for MD042NoEmptyLinks
Source§fn default() -> MD042NoEmptyLinks
fn default() -> MD042NoEmptyLinks
Source§impl Rule for MD042NoEmptyLinks
impl Rule for MD042NoEmptyLinks
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 be skipped
fn name(&self) -> &'static str
fn description(&self) -> &'static str
fn check(&self, ctx: &LintContext<'_>) -> LintResult
fn fix(&self, ctx: &LintContext<'_>) -> Result<String, LintError>
fn as_any(&self) -> &dyn Any
Source§fn from_config(_config: &Config) -> Box<dyn Rule>where
Self: Sized,
fn from_config(_config: &Config) -> Box<dyn Rule>where
Self: Sized,
Source§fn default_config_section(&self) -> Option<(String, Value)>
fn default_config_section(&self) -> Option<(String, Value)>
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>>
Source§fn polymorphic_config_keys(&self) -> &'static [&'static str]
fn polymorphic_config_keys(&self) -> &'static [&'static str]
default_config_section() returning clean defaults
— the sentinel is a schema concern and must not leak into user-facing output
like rumdl config --defaults.