@@ -19,7 +19,7 @@ class Ruler
19
19
20
20
from collections .abc import Callable , Iterable
21
21
from dataclasses import dataclass , field
22
- from typing import TYPE_CHECKING
22
+ from typing import TYPE_CHECKING , TypedDict
23
23
24
24
from markdown_it ._compat import DATACLASS_KWARGS
25
25
@@ -51,7 +51,11 @@ def src(self, value: str) -> None:
51
51
# arguments may or may not exist, based on the rule's type (block,
52
52
# core, inline). Return type is either `None` or `bool` based on the
53
53
# rule's type.
54
- RuleFunc = Callable
54
+ RuleFunc = Callable # type: ignore
55
+
56
+
57
+ class RuleOptionsType (TypedDict , total = False ):
58
+ alt : list [str ]
55
59
56
60
57
61
@dataclass (** DATACLASS_KWARGS )
@@ -97,7 +101,9 @@ def __compile__(self) -> None:
97
101
continue
98
102
self .__cache__ [chain ].append (rule .fn )
99
103
100
- def at (self , ruleName : str , fn : RuleFunc , options = None ):
104
+ def at (
105
+ self , ruleName : str , fn : RuleFunc , options : RuleOptionsType | None = None
106
+ ) -> None :
101
107
"""Replace rule by name with new function & options.
102
108
103
109
:param ruleName: rule name to replace.
@@ -113,7 +119,13 @@ def at(self, ruleName: str, fn: RuleFunc, options=None):
113
119
self .__rules__ [index ].alt = options .get ("alt" , [])
114
120
self .__cache__ = None
115
121
116
- def before (self , beforeName : str , ruleName : str , fn : RuleFunc , options = None ):
122
+ def before (
123
+ self ,
124
+ beforeName : str ,
125
+ ruleName : str ,
126
+ fn : RuleFunc ,
127
+ options : RuleOptionsType | None = None ,
128
+ ) -> None :
117
129
"""Add new rule to chain before one with given name.
118
130
119
131
:param beforeName: new rule will be added before this one.
@@ -129,7 +141,13 @@ def before(self, beforeName: str, ruleName: str, fn: RuleFunc, options=None):
129
141
self .__rules__ .insert (index , Rule (ruleName , True , fn , options .get ("alt" , [])))
130
142
self .__cache__ = None
131
143
132
- def after (self , afterName : str , ruleName : str , fn : RuleFunc , options = None ):
144
+ def after (
145
+ self ,
146
+ afterName : str ,
147
+ ruleName : str ,
148
+ fn : RuleFunc ,
149
+ options : RuleOptionsType | None = None ,
150
+ ) -> None :
133
151
"""Add new rule to chain after one with given name.
134
152
135
153
:param afterName: new rule will be added after this one.
@@ -147,7 +165,9 @@ def after(self, afterName: str, ruleName: str, fn: RuleFunc, options=None):
147
165
)
148
166
self .__cache__ = None
149
167
150
- def push (self , ruleName : str , fn : RuleFunc , options = None ):
168
+ def push (
169
+ self , ruleName : str , fn : RuleFunc , options : RuleOptionsType | None = None
170
+ ) -> None :
151
171
"""Push new rule to the end of chain.
152
172
153
173
:param ruleName: new rule will be added to the end of chain.
@@ -158,7 +178,9 @@ def push(self, ruleName: str, fn: RuleFunc, options=None):
158
178
self .__rules__ .append (Rule (ruleName , True , fn , (options or {}).get ("alt" , [])))
159
179
self .__cache__ = None
160
180
161
- def enable (self , names : str | Iterable [str ], ignoreInvalid : bool = False ):
181
+ def enable (
182
+ self , names : str | Iterable [str ], ignoreInvalid : bool = False
183
+ ) -> list [str ]:
162
184
"""Enable rules with given names.
163
185
164
186
:param names: name or list of rule names to enable.
@@ -168,7 +190,7 @@ def enable(self, names: str | Iterable[str], ignoreInvalid: bool = False):
168
190
"""
169
191
if isinstance (names , str ):
170
192
names = [names ]
171
- result = []
193
+ result : list [ str ] = []
172
194
for name in names :
173
195
idx = self .__find__ (name )
174
196
if (idx < 0 ) and ignoreInvalid :
@@ -180,7 +202,9 @@ def enable(self, names: str | Iterable[str], ignoreInvalid: bool = False):
180
202
self .__cache__ = None
181
203
return result
182
204
183
- def enableOnly (self , names : str | Iterable [str ], ignoreInvalid : bool = False ):
205
+ def enableOnly (
206
+ self , names : str | Iterable [str ], ignoreInvalid : bool = False
207
+ ) -> list [str ]:
184
208
"""Enable rules with given names, and disable everything else.
185
209
186
210
:param names: name or list of rule names to enable.
@@ -192,9 +216,11 @@ def enableOnly(self, names: str | Iterable[str], ignoreInvalid: bool = False):
192
216
names = [names ]
193
217
for rule in self .__rules__ :
194
218
rule .enabled = False
195
- self .enable (names , ignoreInvalid )
219
+ return self .enable (names , ignoreInvalid )
196
220
197
- def disable (self , names : str | Iterable [str ], ignoreInvalid : bool = False ):
221
+ def disable (
222
+ self , names : str | Iterable [str ], ignoreInvalid : bool = False
223
+ ) -> list [str ]:
198
224
"""Disable rules with given names.
199
225
200
226
:param names: name or list of rule names to enable.
0 commit comments