rumdl 0.1.51

A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)
Documentation
# MD070 - Nested Code Fence Collision

Aliases: `nested-code-fence`

**Enabled by default:** No (opt-in)

**Fixable:** Yes

To enable this rule, add it to your `.rumdl.toml`:

```toml
[global]
extend-enable = ["MD070"]
```

## Description

Detects when a fenced code block contains fence markers that would cause premature closure. This commonly occurs when documenting markdown examples that themselves contain code blocks.

## Why This Matters

When a code block's content contains fence markers (`` ``` `` or `~~~`) of the same type and equal or greater length, CommonMark parsers treat the inner fence as the closing fence, causing:

- Premature block closure
- Content appearing outside the intended block
- Rendering issues in documentation

## Examples

### Incorrect

The following markdown has a nested fence collision:

`````markdown
```markdown
1. First item

   ```python
   code_in_list()
   ```

1. Second item

```
`````

The inner `` ``` `` on line 4 closes the outer block prematurely.

### Correct

Use longer fences for the outer block:

`````markdown
````markdown
1. First item

   ```python
   code_in_list()
   ```

1. Second item

````
`````

## Automatic Fixes

This rule automatically:

1. Increases the outer fence length to be longer than any inner fence
2. Updates both the opening and closing fences

For example, if content contains triple backticks (`` ``` ``), the fix changes both fences to quadruple backticks (`` ```` ``).

## When This Rule Applies

This rule only triggers for:

- Fenced code blocks (`` ``` `` or `~~~`)
- Markdown-related blocks: empty language, `markdown`, or `md`
- When the content contains fence-like patterns that would close the outer block

Programming language blocks (Python, Rust, JavaScript, etc.) are not checked since backticks in those languages don't represent markdown fences.

### Different fence types don't collide

Tildes (`~~~`) and backticks (`` ``` ``) don't conflict:

````markdown
~~~markdown
```python
code()
```
~~~
````

This is valid because the inner backtick fence doesn't close the outer tilde fence.

## Related Rules

- [MD031]md031.md - Fenced code blocks should be surrounded by blank lines
- [MD040]md040.md - Fenced code blocks should have a language specified
- [MD046]md046.md - Code block style (fenced vs indented)
- [MD048]md048.md - Code fence style (backticks vs tildes)

## Learn More

- [CommonMark fenced code blocks]https://spec.commonmark.org/0.31.2/#fenced-code-blocks
- [GitHub Flavored Markdown]https://github.github.com/gfm/#fenced-code-blocks