25
25
)
26
26
27
27
if TYPE_CHECKING :
28
- from collections .abc import Iterable , Iterator , Set
28
+ from collections .abc import Iterable , Iterator , Sequence , Set
29
29
from typing import Any , ClassVar
30
30
31
31
from docutils .nodes import Element , Node
@@ -87,14 +87,14 @@ class PyFunction(PyObject):
87
87
'async' : directives .flag ,
88
88
})
89
89
90
- def get_signature_prefix (self , sig : str ) -> list [nodes .Node ]:
90
+ def get_signature_prefix (self , sig : str ) -> Sequence [nodes .Node ]:
91
+ prefix : list [addnodes .desc_sig_element ] = []
91
92
if 'async' in self .options :
92
- return [
93
+ prefix . extend ((
93
94
addnodes .desc_sig_keyword ('' , 'async' ),
94
95
addnodes .desc_sig_space (),
95
- ]
96
- else :
97
- return []
96
+ ))
97
+ return prefix
98
98
99
99
def needs_arglist (self ) -> bool :
100
100
return True
@@ -186,21 +186,29 @@ class PyClasslike(PyObject):
186
186
187
187
option_spec : ClassVar [OptionSpec ] = PyObject .option_spec .copy ()
188
188
option_spec .update ({
189
+ 'abstract' : directives .flag ,
189
190
'final' : directives .flag ,
190
191
})
191
192
192
193
allow_nesting = True
193
194
194
- def get_signature_prefix (self , sig : str ) -> list [nodes .Node ]:
195
+ def get_signature_prefix (self , sig : str ) -> Sequence [nodes .Node ]:
196
+ prefix : list [addnodes .desc_sig_element ] = []
195
197
if 'final' in self .options :
196
- return [
197
- nodes . Text ( 'final' ),
198
+ prefix . extend ((
199
+ addnodes . desc_sig_keyword ( '' , 'final' ),
198
200
addnodes .desc_sig_space (),
199
- nodes .Text (self .objtype ),
201
+ ))
202
+ if 'abstract' in self .options :
203
+ prefix .extend ((
204
+ addnodes .desc_sig_keyword ('' , 'abstract' ),
200
205
addnodes .desc_sig_space (),
201
- ]
202
- else :
203
- return [nodes .Text (self .objtype ), addnodes .desc_sig_space ()]
206
+ ))
207
+ prefix .extend ((
208
+ addnodes .desc_sig_keyword ('' , self .objtype ),
209
+ addnodes .desc_sig_space (),
210
+ ))
211
+ return prefix
204
212
205
213
def get_index_text (self , modname : str , name_cls : tuple [str , str ]) -> str :
206
214
if self .objtype == 'class' :
@@ -218,6 +226,7 @@ class PyMethod(PyObject):
218
226
219
227
option_spec : ClassVar [OptionSpec ] = PyObject .option_spec .copy ()
220
228
option_spec .update ({
229
+ 'abstract' : directives .flag ,
221
230
'abstractmethod' : directives .flag ,
222
231
'async' : directives .flag ,
223
232
'classmethod' : directives .flag ,
@@ -228,31 +237,31 @@ class PyMethod(PyObject):
228
237
def needs_arglist (self ) -> bool :
229
238
return True
230
239
231
- def get_signature_prefix (self , sig : str ) -> list [nodes .Node ]:
232
- prefix : list [nodes . Node ] = []
240
+ def get_signature_prefix (self , sig : str ) -> Sequence [nodes .Node ]:
241
+ prefix : list [addnodes . desc_sig_element ] = []
233
242
if 'final' in self .options :
234
243
prefix .extend ((
235
- nodes . Text ( 'final' ),
244
+ addnodes . desc_sig_keyword ( '' , 'final' ),
236
245
addnodes .desc_sig_space (),
237
246
))
238
- if 'abstractmethod' in self .options :
247
+ if 'abstract' in self . options or ' abstractmethod' in self .options :
239
248
prefix .extend ((
240
- nodes . Text ( 'abstract ' ),
249
+ addnodes . desc_sig_keyword ( '' , 'abstractmethod ' ),
241
250
addnodes .desc_sig_space (),
242
251
))
243
252
if 'async' in self .options :
244
253
prefix .extend ((
245
- nodes . Text ( 'async' ),
254
+ addnodes . desc_sig_keyword ( '' , 'async' ),
246
255
addnodes .desc_sig_space (),
247
256
))
248
257
if 'classmethod' in self .options :
249
258
prefix .extend ((
250
- nodes . Text ( 'classmethod' ),
259
+ addnodes . desc_sig_keyword ( '' , 'classmethod' ),
251
260
addnodes .desc_sig_space (),
252
261
))
253
262
if 'staticmethod' in self .options :
254
263
prefix .extend ((
255
- nodes . Text ( 'static' ),
264
+ addnodes . desc_sig_keyword ( '' , 'static' ),
256
265
addnodes .desc_sig_space (),
257
266
))
258
267
return prefix
@@ -373,6 +382,7 @@ class PyProperty(PyObject):
373
382
374
383
option_spec = PyObject .option_spec .copy ()
375
384
option_spec .update ({
385
+ 'abstract' : directives .flag ,
376
386
'abstractmethod' : directives .flag ,
377
387
'classmethod' : directives .flag ,
378
388
'type' : directives .unchanged ,
@@ -394,21 +404,20 @@ def handle_signature(self, sig: str, signode: desc_signature) -> tuple[str, str]
394
404
395
405
return fullname , prefix
396
406
397
- def get_signature_prefix (self , sig : str ) -> list [nodes .Node ]:
398
- prefix : list [nodes . Node ] = []
399
- if 'abstractmethod' in self .options :
407
+ def get_signature_prefix (self , sig : str ) -> Sequence [nodes .Node ]:
408
+ prefix : list [addnodes . desc_sig_element ] = []
409
+ if 'abstract' in self . options or ' abstractmethod' in self .options :
400
410
prefix .extend ((
401
- nodes . Text ( 'abstract' ),
411
+ addnodes . desc_sig_keyword ( '' , 'abstract' ),
402
412
addnodes .desc_sig_space (),
403
413
))
404
414
if 'classmethod' in self .options :
405
415
prefix .extend ((
406
- nodes . Text ( 'class' ),
416
+ addnodes . desc_sig_keyword ( '' , 'class' ),
407
417
addnodes .desc_sig_space (),
408
418
))
409
-
410
419
prefix .extend ((
411
- nodes . Text ( 'property' ),
420
+ addnodes . desc_sig_keyword ( '' , 'property' ),
412
421
addnodes .desc_sig_space (),
413
422
))
414
423
return prefix
@@ -436,8 +445,8 @@ class PyTypeAlias(PyObject):
436
445
'canonical' : directives .unchanged ,
437
446
})
438
447
439
- def get_signature_prefix (self , sig : str ) -> list [nodes .Node ]:
440
- return [nodes . Text ( 'type' ), addnodes .desc_sig_space ()]
448
+ def get_signature_prefix (self , sig : str ) -> Sequence [nodes .Node ]:
449
+ return [addnodes . desc_sig_keyword ( '' , 'type' ), addnodes .desc_sig_space ()]
441
450
442
451
def handle_signature (self , sig : str , signode : desc_signature ) -> tuple [str , str ]:
443
452
fullname , prefix = super ().handle_signature (sig , signode )
0 commit comments