Wed, 19 Jul 2017 19:48:38 +0200
Extended the documentation style checker to check for @classmethod and @staticmethod.
--- a/APIs/Python3/eric6.api Tue Jul 18 19:14:20 2017 +0200 +++ b/APIs/Python3/eric6.api Wed Jul 19 19:48:38 2017 +0200 @@ -4018,7 +4018,9 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.contextType?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.end?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.indent?4() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.setSpecial?4(special) eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.source?4() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.special?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.ssource?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.start?4() eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext?1(source, startLine, contextType)
--- a/Documentation/Help/source.qhp Tue Jul 18 19:14:20 2017 +0200 +++ b/Documentation/Help/source.qhp Wed Jul 19 19:48:38 2017 +0200 @@ -3932,7 +3932,9 @@ <keyword name="DocStyleContext.contextType" id="DocStyleContext.contextType" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.contextType" /> <keyword name="DocStyleContext.end" id="DocStyleContext.end" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.end" /> <keyword name="DocStyleContext.indent" id="DocStyleContext.indent" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.indent" /> + <keyword name="DocStyleContext.setSpecial" id="DocStyleContext.setSpecial" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.setSpecial" /> <keyword name="DocStyleContext.source" id="DocStyleContext.source" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.source" /> + <keyword name="DocStyleContext.special" id="DocStyleContext.special" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.special" /> <keyword name="DocStyleContext.ssource" id="DocStyleContext.ssource" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.ssource" /> <keyword name="DocStyleContext.start" id="DocStyleContext.start" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.start" /> <keyword name="DocumentationPlugins (Package)" id="DocumentationPlugins (Package)" ref="index-eric6.Plugins.DocumentationPlugins.html" />
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html Tue Jul 18 19:14:20 2017 +0200 +++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html Wed Jul 19 19:48:38 2017 +0200 @@ -866,9 +866,15 @@ <td><a href="#DocStyleContext.indent">indent</a></td> <td>Public method to get the indentation of the first line.</td> </tr><tr> +<td><a href="#DocStyleContext.setSpecial">setSpecial</a></td> +<td>Public method to set a special attribute for the context.</td> +</tr><tr> <td><a href="#DocStyleContext.source">source</a></td> <td>Public method to get the source.</td> </tr><tr> +<td><a href="#DocStyleContext.special">special</a></td> +<td>Public method to get the special context attribute string.</td> +</tr><tr> <td><a href="#DocStyleContext.ssource">ssource</a></td> <td>Public method to get the joined source lines.</td> </tr><tr> @@ -926,6 +932,16 @@ <dd> indentation string (string) </dd> +</dl><a NAME="DocStyleContext.setSpecial" ID="DocStyleContext.setSpecial"></a> +<h4>DocStyleContext.setSpecial</h4> +<b>setSpecial</b>(<i>special</i>) +<p> + Public method to set a special attribute for the context. +</p><dl> +<dt><i>special</i> (str)</dt> +<dd> +attribute string +</dd> </dl><a NAME="DocStyleContext.source" ID="DocStyleContext.source"></a> <h4>DocStyleContext.source</h4> <b>source</b>(<i></i>) @@ -936,6 +952,21 @@ <dd> source (list of string) </dd> +</dl><a NAME="DocStyleContext.special" ID="DocStyleContext.special"></a> +<h4>DocStyleContext.special</h4> +<b>special</b>(<i></i>) +<p> + Public method to get the special context attribute string. +</p><dl> +<dt>Returns:</dt> +<dd> +attribute string +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl><a NAME="DocStyleContext.ssource" ID="DocStyleContext.ssource"></a> <h4>DocStyleContext.ssource</h4> <b>ssource</b>(<i></i>)
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py Tue Jul 18 19:14:20 2017 +0200 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py Wed Jul 19 19:48:38 2017 +0200 @@ -51,6 +51,7 @@ self.__start = startLine self.__indent = "" self.__type = contextType + self.__special = "" # ensure first line is left justified if self.__source: @@ -105,6 +106,24 @@ @return context type (string) """ return self.__type + + def setSpecial(self, special): + """ + Public method to set a special attribute for the context. + + @param special attribute string + @type str + """ + self.__special = special + + def special(self): + """ + Public method to get the special context attribute string. + + @return attribute string + @rtype str + """ + return self.__special class DocStyleChecker(object): @@ -619,9 +638,17 @@ end = line - 1, char startLine = classContext.start() + start[0] endLine = classContext.start() + end[0] - contexts.append(DocStyleContext( + context = DocStyleContext( self.__source[startLine:endLine], - startLine, "def")) + startLine, "def") + if startLine > 0: + if self.__source[startLine - 1].strip() == \ + "@staticmethod": + context.setSpecial("staticmethod") + elif self.__source[startLine - 1].strip() == \ + "@classmethod": + context.setSpecial("classmethod") + contexts.append(context) except StopIteration: pass self.__methodsCache = contexts @@ -1365,10 +1392,15 @@ if firstWord != 'protected': self.__error(docstringContext.start() + lineNumber, 0, "D232", 'protected') - elif arguments.startswith(('cls,', 'cls)')): + elif arguments.startswith(('cls,', 'cls)')) or \ + context.special() == "classmethod": if firstWord != 'class': self.__error(docstringContext.start() + lineNumber, 0, "D232", 'class') + elif context.special() == "staticmethod": + if firstWord != 'static': + self.__error(docstringContext.start() + lineNumber, 0, + "D232", 'static') else: if firstWord != 'public': self.__error(docstringContext.start() + lineNumber, 0,