Skip to content

Commit 7f95686

Browse files
committed
fix: Fix highlighting for signature with known special names like __init__
Issue-mkdocstrings-757: mkdocstrings/mkdocstrings#757
1 parent 0a35b20 commit 7f95686

6 files changed

+14
-12
lines changed

src/mkdocstrings_handlers/python/_internal/rendering.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,12 @@ def do_format_signature(
185185
# Pygments sees it as a function call and not a function definition.
186186
# The result is that the function name is not parsed as such,
187187
# but instead as a regular name: `n` CSS class instead of `nf`.
188-
# To fix it, we replace the first occurrence of an `n` CSS class
189-
# with an `nf` one, unless we found `nf` already.
190-
if signature.find('class="nf"') == -1:
191-
signature = signature.replace('class="n"', 'class="nf"', 1)
188+
# When the function name is a known special name like `__exit__`,
189+
# Pygments will set an `fm` (function -> magic) CSS class.
190+
# To fix this, we replace the CSS class in the first span with `nf`,
191+
# unless we already found an `nf` span.
192+
if not re.search(r'<span class="nf">', signature):
193+
signature = re.sub(r'<span class="[a-z]+">', '<span class="nf">', signature, count=1)
192194

193195
if stash := env.filters["stash_crossref"].stash:
194196
for key, value in stash.items():

tests/snapshots/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
("separate_signature", True),
99
("show_signature_annotations", False),
1010
("signature_crossrefs", False),
11-
): external("4370d843cc76*.html"),
11+
): external("d03d16d1919a*.html"),
1212
(
1313
("separate_signature", True),
1414
("show_signature_annotations", True),
1515
("signature_crossrefs", True),
16-
): external("261a38d7a86b*.html"),
16+
): external("e412376be64f*.html"),
1717
(
1818
("separate_signature", False),
1919
("show_signature_annotations", True),
@@ -33,12 +33,12 @@
3333
("separate_signature", True),
3434
("show_signature_annotations", True),
3535
("signature_crossrefs", False),
36-
): external("f5ce06acbb7a*.html"),
36+
): external("74ee37cd1e94*.html"),
3737
(
3838
("separate_signature", True),
3939
("show_signature_annotations", False),
4040
("signature_crossrefs", True),
41-
): external("9c0bfc0ee407*.html"),
41+
): external("4041a38e355f*.html"),
4242
(
4343
("separate_signature", False),
4444
("show_signature_annotations", True),

tests/snapshots/external/9c0bfc0ee40732505dc3dab8c95ad4ed6582d10df2449c7d92f1e43a91610666.html renamed to tests/snapshots/external/4041a38e355f6585a7e1265509d7c5b499fe3776aeeeb298db7589bb385ca019.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ <h3 class="doc doc-heading" id="signature_package.Class.__init__">
3636
</span>
3737
</h3>
3838
<div class="doc-signature highlight">
39-
<pre><span></span><code><span class="fm">__init__</span><span class="p">(</span><span class="nf">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
39+
<pre><span></span><code><span class="nf">__init__</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
4040
</code></pre>
4141
</div>
4242
<div class="doc doc-contents">

tests/snapshots/external/f5ce06acbb7a31658cc6367db31caaf7a210c0a31e71de950e791c5eb33a6258.html renamed to tests/snapshots/external/74ee37cd1e94250baa33050af088e7341495708d879ab45ee9e8ab1dcac26f2a.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ <h3 class="doc doc-heading" id="signature_package.Class.__init__">
3636
</span>
3737
</h3>
3838
<div class="doc-signature highlight">
39-
<pre><span></span><code><span class="fm">__init__</span><span class="p">(</span><span class="nf">a</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
39+
<pre><span></span><code><span class="nf">__init__</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
4040
</code></pre>
4141
</div>
4242
<div class="doc doc-contents">

tests/snapshots/external/4370d843cc76138927502402ac39c80414c8441a962f6466afdb280dc022af26.html renamed to tests/snapshots/external/d03d16d1919af01db9b8d4e5bf36b007810eb3730a7283624a4d68c6fe2ce652.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ <h3 class="doc doc-heading" id="signature_package.Class.__init__">
3636
</span>
3737
</h3>
3838
<div class="doc-signature highlight">
39-
<pre><span></span><code><span class="fm">__init__</span><span class="p">(</span><span class="nf">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
39+
<pre><span></span><code><span class="nf">__init__</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
4040
</code></pre>
4141
</div>
4242
<div class="doc doc-contents">

tests/snapshots/external/261a38d7a86b5e959b6d1c165108301963d0170c2189d5aa18bb7c7eade84ea4.html renamed to tests/snapshots/external/e412376be64f25f3f5d2264400a83a1e693c146feec7c359855c676c4a586392.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ <h3 class="doc doc-heading" id="signature_package.Class.__init__">
3636
</span>
3737
</h3>
3838
<div class="doc-signature highlight">
39-
<pre><span></span><code><span class="fm">__init__</span><span class="p">(</span><span class="nf">a</span><span class="p">:</span> <span class="n"><autoref backlink-anchor="signature_package.Class.__init__" backlink-type="used-by" identifier="int" optional="">int</autoref></span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n"><autoref backlink-anchor="signature_package.Class.__init__" backlink-type="used-by" identifier="str" optional="">str</autoref></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
39+
<pre><span></span><code><span class="nf">__init__</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n"><autoref backlink-anchor="signature_package.Class.__init__" backlink-type="used-by" identifier="int" optional="">int</autoref></span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n"><autoref backlink-anchor="signature_package.Class.__init__" backlink-type="used-by" identifier="str" optional="">str</autoref></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
4040
</code></pre>
4141
</div>
4242
<div class="doc doc-contents">

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy