Skip to content

Commit 3a13b15

Browse files
committed
feat: autosummary options for interlinks, various config
1 parent e6e1202 commit 3a13b15

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

quartodoc/autosummary.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ class Builder:
105105
Name of API directory.
106106
title:
107107
Title of the API index page.
108+
renderer: Renderer
109+
The renderer used to convert docstrings (e.g. to markdown).
110+
out_index:
111+
The output path of the index file, used to list all API functions.
108112
"""
109113

110114
# builder dispatching ----
@@ -114,6 +118,7 @@ class Builder:
114118
# misc config
115119
out_inventory: str = "objects.json"
116120
out_index: str = "index.qmd"
121+
out_page_suffix = ".qmd"
117122

118123
# quarto yaml config -----
119124
# TODO: add model for section with the fields:
@@ -143,6 +148,7 @@ def __init__(
143148
title: str = "Function reference",
144149
renderer: "dict | Renderer | str" = "markdown",
145150
out_index: str = None,
151+
use_interlinks: bool = False,
146152
):
147153
self.validate(sections)
148154

@@ -163,6 +169,8 @@ def __init__(
163169
if out_index is not None:
164170
self.out_index = out_index
165171

172+
self.use_interlinks = use_interlinks
173+
166174
def build(self):
167175
"""Build index page, sphinx inventory, and individual doc pages."""
168176

@@ -222,6 +230,14 @@ def render_index(self):
222230

223231
raise NotImplementedError()
224232

233+
def render_item_link(self, obj):
234+
if self.use_interlinks:
235+
return f"[](`{obj.path}`)"
236+
237+
link = "/" + self.fetch_object_uri(obj, suffix=self.out_page_suffix)
238+
name = self.fetch_object_dispname(obj)
239+
return f"[{name}]({link})"
240+
225241
def write_doc_pages(self):
226242
"""Write individual function documentation pages."""
227243

@@ -231,7 +247,7 @@ def write_doc_pages(self):
231247
html_path = Path(self.fetch_object_uri(item))
232248
html_path.parent.mkdir(exist_ok=True, parents=True)
233249

234-
html_path.with_suffix(".qmd").write_text(rendered)
250+
html_path.with_suffix(self.out_page_suffix).write_text(rendered)
235251

236252
# constructors ----
237253

@@ -289,7 +305,7 @@ def _render_object(self, obj):
289305
docstring_parts = doc.parsed
290306

291307
# TODO: look up from inventory?
292-
link = f"[](`{obj.path}`)"
308+
link = self.render_item_link(obj)
293309
if len(docstring_parts):
294310
# TODO: or canonical_path
295311
description = docstring_parts[0].value
@@ -298,8 +314,8 @@ def _render_object(self, obj):
298314
else:
299315
return f"| {link} | |"
300316

301-
def fetch_object_uri(self, obj):
302-
return f"{self.dir}/{obj.name}.html"
317+
def fetch_object_uri(self, obj, suffix=".html"):
318+
return f"{self.dir}/{obj.name}{suffix}"
303319

304320
def fetch_object_dispname(self, obj):
305321
return obj.name
@@ -311,10 +327,10 @@ class BuilderSinglePage(Builder):
311327
style = "single-page"
312328

313329
def render_index(self):
314-
return "\n\n".join([self.renderer.to_md(item) for item in self.items])
330+
return "\n\n".join([self.renderer.to_md(item) for item in self.items.values()])
315331

316332
def fetch_object_uri(self, obj):
317-
index_name = Path(self.out_index).with_suffix("html")
333+
index_name = Path(self.out_index).with_suffix(".html")
318334
return f"{self.dir}/{index_name}#{obj.path}"
319335

320336
def write_doc_pages(self):

0 commit comments

Comments
 (0)