eric7/QScintilla/DocstringGenerator/EricdocGenerator.py

Sun, 26 Dec 2021 18:43:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 26 Dec 2021 18:43:48 +0100
branch
eric7
changeset 8858
a70a980e7d4f
parent 8312
800c432b34c8
child 8881
54e42bc2437a
permissions
-rw-r--r--

Changed the various search related combo boxes to show an error using style sheets.

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 'ericdoc' 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 generateEricDoc(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. eric documentation style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 Note: Partial English text is created with DESCRIPTION placeholders
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 for descriptions and TYPE placeholders for type information
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 @param functionInfo object containing the function information to base
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 the docstring on
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 @type FunctionInfo
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 @return list of docstring lines
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 @rtype str
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
8000
47b15df088e4 Editor: extended the docstring functionality to be invocable via a keyboard shortcut (Ctrl+Alt+D).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7998
diff changeset
24 # __IGNORE_WARNING_D202__
7998
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 # create a basic/partial function description
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 if functionInfo.functionType == "classmethod":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 descr = "Class method "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 elif functionInfo.functionType == "staticmethod":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 descr = "Static method "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 elif functionInfo.functionType == "constructor":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 descr = "Constructor"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 if functionInfo.visibility == "public":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 descr = "Public "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 elif functionInfo.visibility == "protected":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 descr = "Protected "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 elif functionInfo.visibility == "private":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 descr = "Private "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 elif functionInfo.visibility == "special":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 descr = "Special "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 descr = ""
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 len(functionInfo.argumentsList) > 0 and
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 functionInfo.argumentsList[0][0] in ("self", "cls", "this")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 ):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 if functionInfo.isAsync:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 descr += "coroutine "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 elif functionInfo.functionType == "qtslot":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 descr += "slot "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 descr += "method "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 if functionInfo.isAsync:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 descr = "Coroutine "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 elif functionInfo.functionType == "qtslot":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 descr = "Slot "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 descr = "Function "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 lines.append(descr)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 # remove 'self', 'this' or 'cls' from arguments list
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 len(functionInfo.argumentsList) > 0 and
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 functionInfo.argumentsList[0][0] in ("self", "cls", "this")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 ):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 del functionInfo.argumentsList[0]
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 # add an empty line if there is one of the other sections
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 functionInfo.argumentsList or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 functionInfo.hasYield or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 functionInfo.returnTypeAnnotated or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 functionInfo.returnValueInBody or
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 functionInfo.raiseList
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 # add the parameters section
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 tag = "@param"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 for argName, argType, argValue in functionInfo.argumentsList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 if argName == "*":
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 tag = "@keyparam"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 continue
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 argLine = "{0} {1} DESCRIPTION".format(tag, argName)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 if argValue:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 argLine += " (defaults to {0})".format(argValue)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 if argType is None:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 argType = "TYPE"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 argLine = "@type {0}".format(argType)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 if argValue:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 argLine += " (optional)"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 # add return section
8005
94a6a1bd5f80 Docstring: corrected the return section generation for ericdoc and sphinxdoc.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8000
diff changeset
102 if (
94a6a1bd5f80 Docstring: corrected the return section generation for ericdoc and sphinxdoc.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8000
diff changeset
103 functionInfo.hasYield or
94a6a1bd5f80 Docstring: corrected the return section generation for ericdoc and sphinxdoc.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8000
diff changeset
104 functionInfo.returnValueInBody or
94a6a1bd5f80 Docstring: corrected the return section generation for ericdoc and sphinxdoc.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8000
diff changeset
105 functionInfo.returnTypeAnnotated
94a6a1bd5f80 Docstring: corrected the return section generation for ericdoc and sphinxdoc.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8000
diff changeset
106 ):
7998
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 if functionInfo.hasYield:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 lines.append("@yield DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 rType = "@ytype"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 lines.append("@return DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 rType = "@rtype"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 if functionInfo.returnTypeAnnotated:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 lines.append("{0} {1}".format(
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 rType, functionInfo.returnTypeAnnotated))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 lines.append("{0} TYPE".format(rType))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 # add an exceptions section, if function raises something
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 if functionInfo.raiseList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 for exc in sorted(functionInfo.raiseList):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 lines.append("@exception {0} DESCRIPTION".format(exc))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 return lines

eric ide

mercurial