Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
([#831](https://github.com/mitmproxy/pdoc/issues/831), @iFreilicht)
- Replace vendored version of `markdown2` with the [official
upstream](https://github.com/trentm/python-markdown2)
- Add support for keyword args for Google flavor docs.
([#840](https://github.com/mitmproxy/pdoc/pull/840), @aleksslitvinovs)

## 2025-06-04: pdoc 15.0.4

Expand Down
4 changes: 3 additions & 1 deletion pdoc/docstrings.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,15 @@ def google(docstring: str) -> str:
)


GOOGLE_LIST_SECTIONS = ["Args", "Raises", "Attributes"]
GOOGLE_LIST_SECTIONS = ["Args", "Raises", "Attributes", "Keyword Args"]
"""Section headers listed in the official Google docstring style guide."""

GOOGLE_LIST_SECTION_ALIASES = {
"Parameters": "Args",
"Params": "Args",
"Arguments": "Args",
"Raise": "Raises",
"Keyword Arguments": "Keyword Args",
}
"""
Alternative section headers that are not listed in the official Google
Expand Down
58 changes: 58 additions & 0 deletions test/testdata/flavors_google.html
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ <h2>API Documentation</h2>
<li>
<a class="function" href="#alternative_section_names">alternative_section_names</a>
</li>
<li>
<a class="function" href="#keyword_arguments">keyword_arguments</a>
</li>
</ul>


Expand Down Expand Up @@ -648,6 +651,18 @@ <h6 id="todo">Todo:</h6>
</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a><span class="sd"> Parameters:</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a><span class="sd"> test: the test string</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a>
</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a><span class="k">def</span><span class="w"> </span><span class="nf">keyword_arguments</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a><span class="sd"> This an example for a function with keyword arguments documented in the docstring.</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>
</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a><span class="sd"> Args:</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a><span class="sd"> **kwargs: A dictionary containing user info.</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a><span class="sd"> Keyword Arguments:</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a><span class="sd"> str_arg (str): First string argument.</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a><span class="sd"> int_arg (int): Second integer argument.</span>
</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>


Expand Down Expand Up @@ -1944,6 +1959,49 @@ <h6 id="arguments">Arguments:</h6>
</div>


</section>
<section id="keyword_arguments">
<input id="keyword_arguments-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">

<span class="def">def</span>
<span class="name">keyword_arguments</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>

<label class="view-source-button" for="keyword_arguments-view-source"><span>View Source</span></label>

</div>
<a class="headerlink" href="#keyword_arguments"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="keyword_arguments-458"><a href="#keyword_arguments-458"><span class="linenos">458</span></a><span class="k">def</span><span class="w"> </span><span class="nf">keyword_arguments</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="keyword_arguments-459"><a href="#keyword_arguments-459"><span class="linenos">459</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="keyword_arguments-460"><a href="#keyword_arguments-460"><span class="linenos">460</span></a><span class="sd"> This an example for a function with keyword arguments documented in the docstring.</span>
</span><span id="keyword_arguments-461"><a href="#keyword_arguments-461"><span class="linenos">461</span></a>
</span><span id="keyword_arguments-462"><a href="#keyword_arguments-462"><span class="linenos">462</span></a><span class="sd"> Args:</span>
</span><span id="keyword_arguments-463"><a href="#keyword_arguments-463"><span class="linenos">463</span></a><span class="sd"> **kwargs: A dictionary containing user info.</span>
</span><span id="keyword_arguments-464"><a href="#keyword_arguments-464"><span class="linenos">464</span></a>
</span><span id="keyword_arguments-465"><a href="#keyword_arguments-465"><span class="linenos">465</span></a><span class="sd"> Keyword Arguments:</span>
</span><span id="keyword_arguments-466"><a href="#keyword_arguments-466"><span class="linenos">466</span></a><span class="sd"> str_arg (str): First string argument.</span>
</span><span id="keyword_arguments-467"><a href="#keyword_arguments-467"><span class="linenos">467</span></a><span class="sd"> int_arg (int): Second integer argument.</span>
</span><span id="keyword_arguments-468"><a href="#keyword_arguments-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span></pre></div>


<div class="docstring"><p>This an example for a function with keyword arguments documented in the docstring.</p>

<h6 id="arguments">Arguments:</h6>

<ul>
<li><strong>**kwargs:</strong> A dictionary containing user info.</li>
</ul>

<h6 id="keyword-args">Keyword Args:</h6>

<ul>
<li><strong>str_arg (str):</strong> First string argument.</li>
<li><strong>int_arg (int):</strong> Second integer argument.</li>
</ul>
</div>


</section>
</main>
</body>
Expand Down
12 changes: 12 additions & 0 deletions test/testdata/flavors_google.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,3 +453,15 @@ def alternative_section_names(test: str):
Parameters:
test: the test string
"""

def keyword_arguments(**kwargs):
"""
This an example for a function with keyword arguments documented in the docstring.

Args:
**kwargs: A dictionary containing user info.

Keyword Arguments:
str_arg (str): First string argument.
int_arg (int): Second integer argument.
"""
1 change: 1 addition & 0 deletions test/testdata/flavors_google.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,5 @@
<function def example_code(): ... # Test case for https:…>
<function def newline_after_args(test: str): ... # Test case for https:…>
<function def alternative_section_names(test: str): ... # In this example, we …>
<function def keyword_arguments(**kwargs): ... # This an example for …>
>