Extended the documentation style checker to check for @classmethod and @staticmethod.

Wed, 19 Jul 2017 19:48:38 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 19 Jul 2017 19:48:38 +0200
changeset 5812
ffc31e1cff4e
parent 5810
12d917813110
child 5813
82349b9ceb4d

Extended the documentation style checker to check for @classmethod and @staticmethod.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py file | annotate | diff | comparison | revisions
--- 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)
Binary file Documentation/Help/source.qch has changed
--- 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,

eric ide

mercurial