Skip to content

Commit 2c1bf24

Browse files
committed
Register lexers automatically
1 parent 750b08d commit 2c1bf24

4 files changed

Lines changed: 20 additions & 10 deletions

File tree

‎pep_sphinx_extensions/__init__.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
get_from_doctree,
1515
pep_abstract,
1616
)
17-
from pep_sphinx_extensions.lexers import pep_lexers
17+
from pep_sphinx_extensions.lexers import get_custom_lexers
1818
from pep_sphinx_extensions.pep_processor.html import (
1919
pep_html_builder,
2020
pep_html_translator,
@@ -107,7 +107,7 @@ def setup(app: Sphinx) -> dict[str, bool]:
107107
app.add_directive("withdrawn", pep_banner_directive.WithdrawnBanner)
108108

109109
# Register custom lexers
110-
for lexer in pep_lexers:
110+
for lexer in get_custom_lexers():
111111
app.add_lexer(lexer.name, lexer)
112112

113113
# Register event callbacks

‎pep_sphinx_extensions/lexers/__init__.py‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@
33

44
from __future__ import annotations
55

6+
import importlib
7+
import pkgutil
68
from typing import TYPE_CHECKING
79

8-
from .pep823_lexer import Py823ConsoleLexer, Py823Lexer
9-
from .pep824_lexer import Py824Lexer
10-
1110
if TYPE_CHECKING:
1211
from pygments.lexer import Lexer
1312

1413

15-
pep_lexers: list[type[Lexer]] = [
16-
Py823ConsoleLexer,
17-
Py823Lexer,
18-
Py824Lexer,
19-
]
14+
def get_custom_lexers() -> list[type[Lexer]]:
15+
lexers: list[type[Lexer]] = []
16+
for module_info in pkgutil.walk_packages(__path__, prefix=f"{__name__}."):
17+
module = importlib.import_module(module_info.name)
18+
if (register_func := getattr(module, "register", None)) is None:
19+
continue
20+
lexers.extend(register_func())
21+
return lexers

‎pep_sphinx_extensions/lexers/pep823_lexer.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,7 @@ def __init__(self, **options):
3838
)
3939

4040
super().__init__(tblexer, _ReplaceInnerCode, Other.Traceback, **options)
41+
42+
43+
def register():
44+
return [Py823Lexer, Py823ConsoleLexer]

‎pep_sphinx_extensions/lexers/pep824_lexer.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ class Py824Lexer(PythonLexer):
1919
inherit,
2020
],
2121
}
22+
23+
24+
def register():
25+
return [Py824Lexer]

0 commit comments

Comments
 (0)