eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py

Fri, 22 Jan 2021 16:48:43 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 22 Jan 2021 16:48:43 +0100
changeset 7998
cd41c844862f
child 8000
47b15df088e4
permissions
-rw-r--r--

Editor
- added functionality to insert docstring templates via the context menu (cursor placed on first line of function definition) or after entering the docstring start string (e.g. """ for Python)

7998
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the docstring generator for the 'sphinxdoc' style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 def generateSphinxDoc(functionInfo):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 Function to generate the docstring line list iaw. Sphinx documentation
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 Note: Text is created with DESCRIPTION placeholders for descriptions and
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 TYPE placeholders for type information
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 @param functionInfo object containing the function information to base
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 the docstring on
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 @type FunctionInfo
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 @return list of docstring lines
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 @rtype str
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 lines = []
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 # function description
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 lines.append("DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 # remove 'self', 'this' or 'cls' from arguments list
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 len(functionInfo.argumentsList) > 0 and
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 functionInfo.argumentsList[0][0] in ("self", "cls", "this")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 ):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 del functionInfo.argumentsList[0]
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 # add an empty line if there is one of the other sections
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 functionInfo.argumentsList or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 functionInfo.hasYield or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 functionInfo.returnTypeAnnotated or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 functionInfo.returnValueInBody or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 functionInfo.raiseList
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 ):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 lines.append("")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 # add the parameters section
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 for argName, argType, argValue in functionInfo.argumentsList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 argLine = ":param {0}: DESCRIPTION".format(argName)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 if argValue:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 argLine += ", defaults to {0}".format(argValue)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 argLine = ":type {0}: ".format(argName)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 if argType:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 argLine += "{0}".format(argType)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 argLine += "TYPE"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 if argValue:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 argLine += ", optional"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 # add an exceptions section, if function raises something
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 if functionInfo.raiseList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 for exc in sorted(functionInfo.raiseList):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 lines.append(":raises {0}: DESCRIPTION".format(exc))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 # add return section
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 if functionInfo.hasYield or functionInfo.returnValueInBody:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 if functionInfo.hasYield:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 lines.append(":yield: DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 lines.append(":return: DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 if functionInfo.returnTypeAnnotated:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 lines.append(":rtype: {0}".format(
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 functionInfo.returnTypeAnnotated))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 lines.append(":rtype: TYPE")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 lines.append("")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 return lines

eric ide

mercurial