@@ -72,6 +72,32 @@ def run(self):
7272 return [pnode ]
7373
7474
75+ # Support for documenting decorators
76+
77+ from sphinx import addnodes
78+ from sphinx .domains .python import PyModulelevel , PyClassmember
79+
80+ class PyDecoratorMixin (object ):
81+ def handle_signature (self , sig , signode ):
82+ ret = super (PyDecoratorMixin , self ).handle_signature (sig , signode )
83+ signode .insert (0 , addnodes .desc_addname ('@' , '@' ))
84+ return ret
85+
86+ def needs_arglist (self ):
87+ return False
88+
89+ class PyDecoratorFunction (PyDecoratorMixin , PyModulelevel ):
90+ def run (self ):
91+ # a decorator function is a function after all
92+ self .name = 'py:function'
93+ return PyModulelevel .run (self )
94+
95+ class PyDecoratorMethod (PyDecoratorMixin , PyClassmember ):
96+ def run (self ):
97+ self .name = 'py:method'
98+ return PyClassmember .run (self )
99+
100+
75101# Support for building "topic help" for pydoc
76102
77103pydoc_topic_labels = [
@@ -147,7 +173,6 @@ def finish(self):
147173# Support for documenting Opcodes
148174
149175import re
150- from sphinx import addnodes
151176
152177opcode_sig_re = re .compile (r'(\w+(?:\+\d)?)(?:\s*\((.*)\))?' )
153178
@@ -197,3 +222,5 @@ def setup(app):
197222 app .add_description_unit ('pdbcommand' , 'pdbcmd' , '%s (pdb command)' ,
198223 parse_pdb_command )
199224 app .add_description_unit ('2to3fixer' , '2to3fixer' , '%s (2to3 fixer)' )
225+ app .add_directive_to_domain ('py' , 'decorator' , PyDecoratorFunction )
226+ app .add_directive_to_domain ('py' , 'decoratormethod' , PyDecoratorMethod )
0 commit comments