style: include new linter rules and fix files

This commit is contained in:
Tim Grelka
2025-07-03 17:23:46 +02:00
parent 433f4ba4ef
commit 09331b3a54
20 changed files with 64 additions and 56 deletions
+6
View File
@@ -15,6 +15,7 @@ select = [
# pycodestyle # pycodestyle
# Ensure PEP8-compatible code style. # Ensure PEP8-compatible code style.
"E", "E",
"W",
# pep8-naming # pep8-naming
# Ensure consisten, PEP8-compatible naming. # Ensure consisten, PEP8-compatible naming.
"N", "N",
@@ -38,6 +39,11 @@ select = [
"C90", "C90",
# ruff-specific: No unused noqa directives # ruff-specific: No unused noqa directives
"RUF100", "RUF100",
## Write modern python code
# Use f-strings instead of joining strings
"FLY",
# Check refurb rules
"FURB",
] ]
[tool.pytest.ini_options] [tool.pytest.ini_options]
-1
View File
@@ -1,7 +1,6 @@
import re import re
from mistletoe.block_token import BlockToken from mistletoe.block_token import BlockToken
from mistletoe.span_token import SpanToken
class BlockComment(BlockToken): class BlockComment(BlockToken):
+4 -1
View File
@@ -172,7 +172,10 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
return f"{lookup[token.first]}{token.second}{lookup[token.third]}" return f"{lookup[token.first]}{token.second}{lookup[token.third]}"
def render_references(self, token): def render_references(self, token):
return f'<a href="{self.section_url}#ref_{token.first}" onclick="highlightRef(\'{token.first}\');">{self.ref_id}</a>' return (
f'<a href="{self.section_url}#ref_{token.first}"'
f" onclick=\"highlightRef('{token.first}');\">{self.ref_id}</a>"
)
def render_question(self, token): def render_question(self, token):
return self.question_renderer(token.question_number) return self.question_renderer(token.question_number)
+1 -1
View File
@@ -87,7 +87,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
return rf"\{tagtype}{{{self.render_inner(token)}}}" return rf"\{tagtype}{{{self.render_inner(token)}}}"
def render_halfwidth_spaces(self, token): def render_halfwidth_spaces(self, token):
return f"{token.first}.\,{token.second}." return rf"{token.first}.\,{token.second}."
def render_nonbreaking_spaces(self, token): def render_nonbreaking_spaces(self, token):
return f"{token.first}~{token.second}" return f"{token.first}~{token.second}"
+1 -1
View File
@@ -24,7 +24,7 @@ def test_comment_latex():
assertions = { assertions = {
"%Comment\nBar": "% Comment\n\nBar\n", "%Comment\nBar": "% Comment\n\nBar\n",
"%Comment\n": "% Comment\n", "%Comment\n": "% Comment\n",
"Foo 100 % Bar": "\nFoo 100 \% Bar\n", "Foo 100 % Bar": "\nFoo 100 \\% Bar\n",
"Foo\n%Comment\nBar": "\nFoo\n% Comment\n\nBar\n", "Foo\n%Comment\nBar": "\nFoo\n% Comment\n\nBar\n",
} }
+1 -1
View File
@@ -17,6 +17,6 @@ def test_halfwidth_space_html():
@pytest.mark.latex @pytest.mark.latex
def test_halfwidth_space_latex(): def test_halfwidth_space_latex():
input = "Dies ist z.B. ein Test. D.h. hier sollten d.h. Spaces ersetzt worden sein." input = "Dies ist z.B. ein Test. D.h. hier sollten d.h. Spaces ersetzt worden sein."
target = "\nDies ist z.\,B. ein Test. D.\,h. hier sollten d.\,h. Spaces ersetzt worden sein.\n" target = "\nDies ist z.\\,B. ein Test. D.\\,h. hier sollten d.\\,h. Spaces ersetzt worden sein.\n"
assert mistletoe.markdown(input, FiftyOhmLaTeXRenderer) == target assert mistletoe.markdown(input, FiftyOhmLaTeXRenderer) == target
+6 -6
View File
@@ -8,12 +8,12 @@ from test.util import paragraph
@pytest.mark.html @pytest.mark.html
def test_morse_html(): def test_morse_html():
assertions = { assertions = {
'[morse:a]': FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]]), "[morse:a]": FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]]),
'[morse:a] abc [morse:a]': FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]])+ ' abc ' + FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]]), "[morse:a] abc [morse:a]": f"{FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]])} abc {FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]])}", # noqa: E501
'[morse: a]': FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]]), "[morse: a]": FiftyOhmHtmlRenderer.render_morse_helper([[1, 2]]),
'[morse: aaa]': FiftyOhmHtmlRenderer.render_morse_helper([[1, 2], [1, 2], [1, 2]]), "[morse: aaa]": FiftyOhmHtmlRenderer.render_morse_helper([[1, 2], [1, 2], [1, 2]]),
'[morse: a a]': FiftyOhmHtmlRenderer.render_morse_helper([[1, 2], [3], [1, 2]]), "[morse: a a]": FiftyOhmHtmlRenderer.render_morse_helper([[1, 2], [3], [1, 2]]),
'[morse: db0]': FiftyOhmHtmlRenderer.render_morse_helper([[2, 1, 1], [2, 1, 1, 1], [2, 2, 2, 2, 2]]), "[morse: db0]": FiftyOhmHtmlRenderer.render_morse_helper([[2, 1, 1], [2, 1, 1, 1], [2, 2, 2, 2, 2]]),
} }
for assertion in assertions: for assertion in assertions:
+2 -2
View File
@@ -18,7 +18,7 @@ def test_paragraph_html():
def test_three_points_html(): def test_three_points_html():
assertions = { assertions = {
"Heute hatte ich ... zum Mittagessen.": "Heute hatte ich&#160;...&#160;zum Mittagessen.", "Heute hatte ich ... zum Mittagessen.": "Heute hatte ich&#160;...&#160;zum Mittagessen.",
"Niemals hätte ich gedacht, dass...ich ...nicht kann.": "Niemals hätte ich gedacht, dass...ich&#160;...nicht kann.", "Niemals hätte ich gedacht, dass...ich ...nicht kann.": "Niemals hätte ich gedacht, dass...ich&#160;...nicht kann.", # noqa: E501
"Oh nein ...ein Pinguin.": "Oh nein&#160;...ein Pinguin.", "Oh nein ...ein Pinguin.": "Oh nein&#160;...ein Pinguin.",
"Haha .. . Hahaha": "Haha .. . Hahaha", "Haha .. . Hahaha": "Haha .. . Hahaha",
} }
@@ -55,7 +55,7 @@ def test_paragraph_latex():
def test_three_points_latex(): def test_three_points_latex():
assertions = { assertions = {
"Heute hatte ich ... zum Mittagessen.": "\nHeute hatte ich~...~zum Mittagessen.\n", "Heute hatte ich ... zum Mittagessen.": "\nHeute hatte ich~...~zum Mittagessen.\n",
"Niemals hätte ich gedacht, dass...ich ...nicht kann.": "\nNiemals hätte ich gedacht, dass...ich~...nicht kann.\n", "Niemals hätte ich gedacht, dass...ich ...nicht kann.": "\nNiemals hätte ich gedacht, dass...ich~...nicht kann.\n", # noqa: E501
"Oh nein ...ein Pinguin.": "\nOh nein~...ein Pinguin.\n", "Oh nein ...ein Pinguin.": "\nOh nein~...ein Pinguin.\n",
"Haha .. . Hahaha": "\nHaha .. . Hahaha\n", "Haha .. . Hahaha": "\nHaha .. . Hahaha\n",
} }
+2 -2
View File
@@ -23,11 +23,11 @@ def test_qso_html():
for assertion in assertions: for assertion in assertions:
assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion]
@pytest.mark.slide @pytest.mark.slide
def test_qso_slide(): def test_qso_slide():
assertions = { assertions = {
"<qso>\nfoo\n> bar\n</qso>": "<qso>\nfoo\n> bar\n</qso>": '<div class="qso r-fit-text">\n<div class="qso_own fragment fade-right">foo</div>\n<div class="qso_other fragment fade-left">bar</div>\n</div>\n\n', # noqa: E501
'<div class="qso r-fit-text">\n<div class="qso_own fragment fade-right">foo</div>\n<div class="qso_other fragment fade-left">bar</div>\n</div>\n\n',
} }
for assertion in assertions: for assertion in assertions:
+4 -4
View File
@@ -46,10 +46,10 @@ def test_question_translation_html():
@pytest.mark.latex @pytest.mark.latex
def test_question_latex(): def test_question_latex():
assertions = { assertions = {
"[question:123]": "\question{123}", "[question:123]": r"\question{123}",
"\n[question:123]\n": "\question{123}", "\n[question:123]\n": r"\question{123}",
"\n[question:123]\n[question:123]": "\question{123}\question{123}", "\n[question:123]\n[question:123]": r"\question{123}\question{123}",
"Foo\n[question:123]\nBar": "\nFoo\n\question{123}\nBar\n", "Foo\n[question:123]\nBar": "\nFoo\n\\question{123}\nBar\n",
} }
def test_function(input): def test_function(input):
+5 -5
View File
@@ -24,11 +24,11 @@ def test_quote_html():
@pytest.mark.latex @pytest.mark.latex
def test_quote_latex(): def test_quote_latex():
assertions = { assertions = {
'"quote"': "\n\enquote{quote}\n", '"quote"': "\n\\enquote{quote}\n",
'" quote "': "\n\enquote{ quote }\n", '" quote "': "\n\\enquote{ quote }\n",
'"quote" "': '\n\enquote{quote} "\n', '"quote" "': '\n\\enquote{quote} "\n',
'"quo te1" filltext "qu ot e2"': "\n\enquote{quo te1} filltext \enquote{qu ot e2}\n", '"quo te1" filltext "qu ot e2"': "\n\\enquote{quo te1} filltext \\enquote{qu ot e2}\n",
'"quo *te1*" filltext "qu ot e2"': "\n\enquote{quo \emph{te1}} filltext \enquote{qu ot e2}\n", '"quo *te1*" filltext "qu ot e2"': "\n\\enquote{quo \\emph{te1}} filltext \\enquote{qu ot e2}\n",
'""': '\n""\n', '""': '\n""\n',
} }
+2 -2
View File
@@ -10,9 +10,9 @@ def test_references_html():
# Right now this tests only the default values. # Right now this tests only the default values.
# The correct behavior can be tested when the information is added to the renderer class # The correct behavior can be tested when the information is added to the renderer class
assertions = { assertions = {
"[ref:e_oszilloskop_bildschirmfoto_sinus]": '<a href="section.html#ref_e_oszilloskop_bildschirmfoto_sinus" onclick="highlightRef(\'e_oszilloskop_bildschirmfoto_sinus\');">0</a>', "[ref:e_oszilloskop_bildschirmfoto_sinus]": '<a href="section.html#ref_e_oszilloskop_bildschirmfoto_sinus" onclick="highlightRef(\'e_oszilloskop_bildschirmfoto_sinus\');">0</a>', # noqa: E501
"[ref:n_rst_r]": '<a href="section.html#ref_n_rst_r" onclick="highlightRef(\'n_rst_r\');">0</a>', "[ref:n_rst_r]": '<a href="section.html#ref_n_rst_r" onclick="highlightRef(\'n_rst_r\');">0</a>',
"[ref:Uuuuuh]": '<a href="section.html#ref_Uuuuuh" onclick="highlightRef(\'Uuuuuh\');">0</a>', # Test the default parameters "[ref:Uuuuuh]": '<a href="section.html#ref_Uuuuuh" onclick="highlightRef(\'Uuuuuh\');">0</a>', # Test the default parameters # noqa: E501
} }
for key, value in assertions.items(): for key, value in assertions.items():
+7 -7
View File
@@ -11,14 +11,14 @@ def test_table_html():
"| l: a |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n</table>\n', "| l: a |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n</table>\n',
"| r: a |": '<table>\n<tr>\n<th style="text-align: right;">a</th>\n</tr>\n</table>\n', "| r: a |": '<table>\n<tr>\n<th style="text-align: right;">a</th>\n</tr>\n</table>\n',
"| c: a |": '<table>\n<tr>\n<th style="text-align: center;">a</th>\n</tr>\n</table>\n', "| c: a |": '<table>\n<tr>\n<th style="text-align: center;">a</th>\n</tr>\n</table>\n',
"| l: a |\n| b |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n</table>\n', "| l: a |\n| b |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n</table>\n', # noqa: E501
"| l: a |\n| b |\n| c |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n<tr>\n<td style="text-align: left;">c</td>\n</tr>\n</table>\n', "| l: a |\n| b |\n| c |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n<tr>\n<td style="text-align: left;">c</td>\n</tr>\n</table>\n', # noqa: E501
"| a |\n| b |\n| c |": "<table>\n<tr>\n<th>a</th>\n</tr>\n<tr>\n<td>b</td>\n</tr>\n<tr>\n<td>c</td>\n</tr>\n</table>\n", "| a |\n| b |\n| c |": "<table>\n<tr>\n<th>a</th>\n</tr>\n<tr>\n<td>b</td>\n</tr>\n<tr>\n<td>c</td>\n</tr>\n</table>\n", # noqa: E501
"| l: a |\n| *b* |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;"><em>b</em></td>\n</tr>\n</table>\n', "| l: a |\n| *b* |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;"><em>b</em></td>\n</tr>\n</table>\n', # noqa: E501
"| l: a |\n| b |\n[table:n_ab:A und B]": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n<caption>A und B</caption></table>\n', "| l: a |\n| b |\n[table:n_ab:A und B]": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;">b</td>\n</tr>\n<caption>A und B</caption></table>\n', # noqa: E501
"| l: *a* |": '<table>\n<tr>\n<th style="text-align: left;"><em>a</em></th>\n</tr>\n</table>\n', "| l: *a* |": '<table>\n<tr>\n<th style="text-align: left;"><em>a</em></th>\n</tr>\n</table>\n',
"| l: a |\n| [morse:a] |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;"><span class="morse"><span class="morse_char">\n<span class="morse_char">\n▄</span>\n<span class="morse_char">\n▄▄▄</span>\n</span>\n</span></td>\n</tr>\n</table>\n', "| l: a |\n| [morse:a] |": '<table>\n<tr>\n<th style="text-align: left;">a</th>\n</tr>\n<tr>\n<td style="text-align: left;"><span class="morse"><span class="morse_char">\n<span class="morse_char">\n▄</span>\n<span class="morse_char">\n▄▄▄</span>\n</span>\n</span></td>\n</tr>\n</table>\n', # noqa: E501
"| l: abc | r: abc | X: abc |\n| 123 | 456 | 789 | \n | 987 | 654 | 321 | ": '<table>\n<tr>\n<th style="text-align: left;">abc</th>\n<th style="text-align: right;">abc</th>\n<th>abc</th>\n</tr>\n<tr>\n<td style="text-align: left;">123</td>\n<td style="text-align: right;">456</td>\n<td>789</td>\n</tr>\n<tr>\n<td style="text-align: left;">987</td>\n<td style="text-align: right;">654</td>\n<td>321</td>\n</tr>\n</table>\n', "| l: abc | r: abc | X: abc |\n| 123 | 456 | 789 | \n | 987 | 654 | 321 | ": '<table>\n<tr>\n<th style="text-align: left;">abc</th>\n<th style="text-align: right;">abc</th>\n<th>abc</th>\n</tr>\n<tr>\n<td style="text-align: left;">123</td>\n<td style="text-align: right;">456</td>\n<td>789</td>\n</tr>\n<tr>\n<td style="text-align: left;">987</td>\n<td style="text-align: right;">654</td>\n<td>321</td>\n</tr>\n</table>\n', # noqa: E501
} }
with FiftyOhmHtmlRenderer() as renderer: with FiftyOhmHtmlRenderer() as renderer:
+14 -14
View File
@@ -76,17 +76,17 @@ def test_thematic_break_latex():
@pytest.mark.latex @pytest.mark.latex
def test_tag_latex(): def test_tag_latex():
assertions = { assertions = {
"<margin>\nFoo\n</margin>": "\Margin{\nFoo\n}", "<margin>\nFoo\n</margin>": "\\Margin{\nFoo\n}",
"<danger>\nFoo\n</danger>": "\MarginDanger{\nFoo\n}", "<danger>\nFoo\n</danger>": "\\MarginDanger{\nFoo\n}",
"<warning>\nFoo\n</warning>": "\MarginWarning{\nFoo\n}", "<warning>\nFoo\n</warning>": "\\MarginWarning{\nFoo\n}",
"<attention>\nFoo\n</attention>": "\MarginAttention{\nFoo\n}", "<attention>\nFoo\n</attention>": "\\MarginAttention{\nFoo\n}",
"<tip>\nFoo\n</tip>": "\MarginTip{\nFoo\n}", "<tip>\nFoo\n</tip>": "\\MarginTip{\nFoo\n}",
"<webtip>\nFoo\n</webtip>": "\WebTip{\nFoo\n}", "<webtip>\nFoo\n</webtip>": "\\WebTip{\nFoo\n}",
"<unit>\nFoo\n</unit>": "\MarginUnit{\nFoo\n}", "<unit>\nFoo\n</unit>": "\\MarginUnit{\nFoo\n}",
"<indepth>\nFoo\n</indepth>": "\MarginInDepth{\nFoo\n}", "<indepth>\nFoo\n</indepth>": "\\MarginInDepth{\nFoo\n}",
"<webindepth>\nFoo\n</webindepth>": "\MarginWebInDepth{\nFoo\n}", "<webindepth>\nFoo\n</webindepth>": "\\MarginWebInDepth{\nFoo\n}",
"<webmargin>\nFoo\n</webmargin>": "\WebMargin{\nFoo\n}", "<webmargin>\nFoo\n</webmargin>": "\\WebMargin{\nFoo\n}",
"<fullwidth>\nFoo\n</fullwidth>": "\FullWidth{\nFoo\n}", "<fullwidth>\nFoo\n</fullwidth>": "\\FullWidth{\nFoo\n}",
"<latexonly>\nFoo\n</latexonly>": "\nFoo\n", "<latexonly>\nFoo\n</latexonly>": "\nFoo\n",
"<webonly>\nFoo\n</webonly>": "", "<webonly>\nFoo\n</webonly>": "",
} }
@@ -98,9 +98,9 @@ def test_tag_latex():
@pytest.mark.latex @pytest.mark.latex
def test_thematic_break_and_tag_latex(): def test_thematic_break_and_tag_latex():
assertions = { assertions = {
"---\n<margin>\nFoo\n</margin>": "\Margin{\nFoo\n}", "---\n<margin>\nFoo\n</margin>": "\\Margin{\nFoo\n}",
"---\n<margin>\nFoo\n</margin>\n<margin>\nFoo\n</margin>": "\Margin{\nFoo\n}\Margin{\nFoo\n}", "---\n<margin>\nFoo\n</margin>\n<margin>\nFoo\n</margin>": "\\Margin{\nFoo\n}\\Margin{\nFoo\n}",
"---\n<margin>\nFoo\n</margin>\n---\n<margin>\nFoo\n</margin>": "\Margin{\nFoo\n}\Margin{\nFoo\n}", "---\n<margin>\nFoo\n</margin>\n---\n<margin>\nFoo\n</margin>": "\\Margin{\nFoo\n}\\Margin{\nFoo\n}",
} }
for assertion in assertions: for assertion in assertions:
+1 -1
View File
@@ -23,7 +23,7 @@ def test_underline_latex():
assertions = { assertions = {
"<u>Text</u>": "\n\\underline{Text}\n", "<u>Text</u>": "\n\\underline{Text}\n",
"<u> Text Text </u>": "\n\\underline{ Text Text }\n", "<u> Text Text </u>": "\n\\underline{ Text Text }\n",
"<u> Text *Text* </u>": "\n\\underline{ Text \emph{Text} }\n", "<u> Text *Text* </u>": "\n\\underline{ Text \\emph{Text} }\n",
} }
for assertion in assertions: for assertion in assertions: