Skip to content

Commit a0fcac2

Browse files
deven367pawamoy
authored andcommitted
feat: Allow specifying mdformat extensions
1 parent c18abc1 commit a0fcac2

4 files changed

Lines changed: 38 additions & 16 deletions

File tree

src/griffe2md/_internal/cli.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from typing import Any
1717

1818
from griffe2md._internal import debug
19-
from griffe2md._internal.config import load_config
19+
from griffe2md._internal.config import ConfigDict, load_config
2020
from griffe2md._internal.main import write_package_docs
2121

2222

@@ -44,6 +44,12 @@ def get_parser() -> argparse.ArgumentParser:
4444
help="Whether to format the resulting Markdown using `mdformat`.",
4545
)
4646
parser.add_argument("-o", "--output", default=None, help="File to write to. Default: stdout.")
47+
parser.add_argument(
48+
"--mdformat-extensions",
49+
nargs="*",
50+
default=[],
51+
help="mdformat extensions to enable (e.g. 'tables'). Requires the corresponding mdformat plugin to be installed.",
52+
)
4753
parser.add_argument("-V", "--version", action="version", version=f"%(prog)s {debug._get_version()}")
4854
parser.add_argument("--debug-info", action=_DebugInfo, help="Print debug information.")
4955
return parser
@@ -62,7 +68,11 @@ def main(args: list[str] | None = None) -> int:
6268
"""
6369
parser = get_parser()
6470
opts = parser.parse_args(args=args)
65-
config = load_config()
71+
config: ConfigDict | None = load_config()
72+
73+
if opts.mdformat_extensions:
74+
config = ConfigDict() if config is None else config
75+
config["mdformat_extensions"] = opts.mdformat_extensions
6676

6777
write_package_docs(opts.package, config, opts.output, format_md=opts.format_md)
6878
return 0

src/griffe2md/_internal/config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ class ConfigDict(TypedDict, total=False):
103103
load_external_modules: bool
104104
"""Whether to always load external modules/packages."""
105105

106+
mdformat_extensions: list[str]
107+
"""A list of mdformat extensions to enable when formatting Markdown output.
108+
109+
For example, `["tables"]` to enable the `mdformat-tables` extension,
110+
which properly handles escaped pipes in table cells.
111+
"""
112+
106113
members: list[str] | bool | None
107114
"""A boolean, or an explicit list of members to render.
108115

src/griffe2md/_internal/main.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def prepare_env(env: Environment | None = None) -> Environment:
116116
return env
117117

118118

119-
def render_object_docs(obj: Object, config: ConfigDict | None = None, *, format_md: bool = False) -> str:
119+
def render_object_docs(obj: Object, config: ConfigDict | None = None, *, format_md: bool = True) -> str:
120120
"""Render docs for a given object.
121121
122122
Parameters:
@@ -137,11 +137,13 @@ def render_object_docs(obj: Object, config: ConfigDict | None = None, *, format_
137137
context = prepare_context(obj, config)
138138
rendered = env.get_template(f"{obj.kind.value}.md.jinja").render(**context)
139139
if format_md:
140-
rendered = mdformat.text(rendered)
140+
full_config = cast("ConfigDict", {**default_config, **(config or {})})
141+
mdformat_ext = full_config.get("mdformat_extensions", [])
142+
rendered = mdformat.text(rendered, extensions=mdformat_ext)
141143
return rendered
142144

143145

144-
def render_package_docs(package: str, config: ConfigDict | None = None, *, format_md: bool = False) -> str:
146+
def render_package_docs(package: str, config: ConfigDict | None = None, *, format_md: bool = True) -> str:
145147
"""Render docs for a given package.
146148
147149
Parameters:
@@ -174,7 +176,7 @@ def write_package_docs(
174176
config: ConfigDict | None = None,
175177
output: IO | str | None = None,
176178
*,
177-
format_md: bool = False,
179+
format_md: bool = True,
178180
) -> None:
179181
"""Write docs for a given package to a file or stdout.
180182

tests/test_markdown_spacing.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
from __future__ import annotations
44

5-
from typing import TYPE_CHECKING, Any
5+
from typing import TYPE_CHECKING, Any, cast
66

77
import griffe
88
import pytest
99
from griffe import GriffeLoader, Parser
1010

11-
from griffe2md import render_object_docs
11+
from griffe2md import ConfigDict, render_object_docs
1212

1313
if TYPE_CHECKING:
1414
from griffe._internal.models import Module
@@ -74,14 +74,17 @@ def _render(**kwargs: Any) -> str:
7474

7575
return render_object_docs(
7676
module,
77-
{
78-
"show_root_full_path": False,
79-
"show_root_members_full_path": False,
80-
"show_object_full_path": False,
81-
"show_category_heading": False,
82-
"show_signature": True,
83-
**kwargs,
84-
},
77+
cast(
78+
"ConfigDict",
79+
{
80+
"show_root_full_path": False,
81+
"show_root_members_full_path": False,
82+
"show_object_full_path": False,
83+
"show_category_heading": False,
84+
"show_signature": True,
85+
**kwargs,
86+
},
87+
),
8588
format_md=False,
8689
)
8790

0 commit comments

Comments
 (0)