eric6/QScintilla/DocstringGenerator/GoogledocGenerator.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 generateGoogleDoc(functionInfo, editor):
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 @param editor reference to the editor
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 @type Editor
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 @return list of docstring lines
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @rtype str
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 lines = []
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 # function description
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 lines.append("DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 # remove 'self', 'this' or 'cls' from arguments list
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 if (
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 len(functionInfo.argumentsList) > 0 and
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 functionInfo.argumentsList[0][0] in ("self", "cls", "this")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 ):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 del functionInfo.argumentsList[0]
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 # determine additional indentation string
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 indentWidth = editor.indentationWidth()
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 if indentWidth == 0:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 indentWidth = editor.tabWidth()
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 indent = indentWidth * " "
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 # add the parameters section
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 if functionInfo.argumentsList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 lines.append("")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 lines.append("Args:")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 for argName, argType, argValue in functionInfo.argumentsList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 argLine = "{0}{1} ".format(indent, argName)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 argLine += "("
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 if argType:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 argLine += "{0}".format(argType)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 argLine += "TYPE"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 argLine += "):"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 argLine = "{0}".format(2 * indent)
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 argLine += "DESCRIPTION"
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 if argValue:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 argLine += " Defaults to {0}.".format(argValue)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 lines.append(argLine)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 # add return section
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 lines.append("")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 if functionInfo.hasYield:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 lines.append("Yields:")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 lines.append("Returns:")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 if functionInfo.returnTypeAnnotated:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 lines.append("{0}{1}: DESCRIPTION".format(
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 indent, functionInfo.returnTypeAnnotated))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 elif functionInfo.returnValueInBody:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 lines.append("{0}TYPE: DESCRIPTION")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 else:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 lines.append("{0}None".format(indent))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 # add an exceptions section, if function raises something
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if functionInfo.raiseList:
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 lines.append("")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 lines.append("Raises:")
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 for exc in sorted(functionInfo.raiseList):
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 lines.append("{0}{1}: DESCRIPTION".format(indent, exc))
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 return lines

eric ide

mercurial