# MD048 - Code fence style should be consistent

Aliases: `code-fence-style`

## What this rule does

Ensures all code blocks use the same fence markers - either ``` or ~~~ consistently.

## Why this matters

- **Consistency**: Mixed fence styles look unprofessional
- **Readability**: Consistent markers make code blocks easier to spot
- **Tool compatibility**: Some tools may expect one style over another

## Examples

### ✅ Correct (using ``` throughout)

````markdown
```javascript
function hello() {
  console.log("Hello, world!");
}
```

```python
def hello():
    print("Hello, world!")
```
````

### ✅ Correct (using ~~~ throughout)

````markdown
~~~javascript
function hello() {
  console.log("Hello, world!");
}
~~~

~~~python
def hello():
    print("Hello, world!")
~~~
````

### ❌ Incorrect (mixed styles)

<!-- rumdl-disable MD048 MD031 MD040 -->

````markdown
```javascript
function hello() {
  console.log("Hello, world!");
}
```

~~~python
def hello():
    print("Hello, world!")
~~~
````

<!-- rumdl-enable MD048 MD031 MD040 -->

### 🔧 Fixed

````markdown
```javascript
function hello() {
  console.log("Hello, world!");
}
```

```python
def hello():
    print("Hello, world!")
```
````

## Configuration

```toml
[MD048]
style = "consistent"  # Options: "consistent", "backtick", "tilde"
```

### Style options

- `"consistent"` (default): Use the most prevalent style in your document (in case of a tie, backtick ``` is preferred as it's more widely supported)
- `"backtick"`: Always use ``` markers
- `"tilde"`: Always use ~~~ markers

## Automatic fixes

This rule automatically converts all code fence markers to match your configured style or the most prevalent style in the document.

## Azure DevOps / Colon Fences

Under the `azure_devops` flavor, colon-style fences (`:::lang ... :::`) are
skipped during fence style detection. They do not count as backtick or tilde
fences and are never flagged as style violations. This means you can freely use
colon fences for Mermaid diagrams alongside backtick or tilde fences for code,
without affecting which style is considered dominant:

````markdown
::: mermaid
sequenceDiagram
    Alice->>Bob: Hello
:::

```python
print("hello")
```
````

In this example, only the backtick fence is counted. The colon fence is
treated as opaque block content and ignored by MD048.

Under any other flavor, colon fences are not recognized and do not affect fence
style detection.

See [Azure DevOps Flavor](flavors/azure_devops.md) for the full colon fence
specification.

## Learn more

- [CommonMark code fences](https://spec.commonmark.org/0.31.2/#fenced-code-blocks) - Technical specification
- [GitHub Flavored Markdown](https://github.github.com/gfm/#fenced-code-blocks) - Code block syntax

## Related rules

- [MD031](md031.md) - Code blocks need blank lines around them
- [MD040](md040.md) - Code blocks should have a language specified
- [MD046](md046.md) - Code block style should be consistent
