--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py Sun Feb 23 12:42:47 2025 +0100 +++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py Mon Feb 24 15:11:18 2025 +0100 @@ -133,61 +133,61 @@ """ Codes = [ - "D101", - "D102", - "D103", - "D104", - "D105", - "D111", - "D112", - "D121", - "D122", - "D130", - "D131", - "D132", - "D133", - "D134", - "D141", - "D142", - "D143", - "D144", - "D145", - "D201", - "D202.1", - "D202.2", - "D203", - "D205", - "D206", - "D221", - "D222", - "D231", - "D232", - "D234r", - "D234y", - "D235r", - "D235y", - "D236", - "D237", - "D238", - "D239", - "D242", - "D243", - "D244", - "D245", - "D246", - "D247", - "D250", - "D251", - "D252", - "D253", - "D260", - "D261", - "D262", - "D263", - "D270", - "D271", - "D272", - "D273", + "D-101", + "D-102", + "D-103", + "D-104", + "D-105", + "D-111", + "D-112", + "D-121", + "D-122", + "D-130", + "D-131", + "D-132", + "D-133", + "D-134", + "D-141", + "D-142", + "D-143", + "D-144", + "D-145", + "D-201", + "D-202.1", + "D-202.2", + "D-203", + "D-205", + "D-206", + "D-221", + "D-222", + "D-231", + "D-232", + "D-234r", + "D-234y", + "D-235r", + "D-235y", + "D-236", + "D-237", + "D-238", + "D-239", + "D-242", + "D-243", + "D-244", + "D-245", + "D-246", + "D-247", + "D-250", + "D-251", + "D-252", + "D-253", + "D-260", + "D-261", + "D-262", + "D-263", + "D-270", + "D-271", + "D-272", + "D-273", ] def __init__( @@ -254,80 +254,80 @@ if self.__docType == "pep257": checkersWithCodes = { "moduleDocstring": [ - (self.__checkModulesDocstrings, ("D101",)), + (self.__checkModulesDocstrings, ("D-101",)), ], "functionDocstring": [], "classDocstring": [ - (self.__checkClassDocstring, ("D104", "D105")), - (self.__checkBlankBeforeAndAfterClass, ("D142", "D143")), + (self.__checkClassDocstring, ("D-104", "D-105")), + (self.__checkBlankBeforeAndAfterClass, ("D-142", "D-143")), ], "methodDocstring": [], "defDocstring": [ - (self.__checkFunctionDocstring, ("D102", "D103")), - (self.__checkImperativeMood, ("D132",)), - (self.__checkNoSignature, ("D133",)), - (self.__checkReturnType, ("D134",)), - (self.__checkNoBlankLineBefore, ("D141",)), + (self.__checkFunctionDocstring, ("D-102", "D-103")), + (self.__checkImperativeMood, ("D-132",)), + (self.__checkNoSignature, ("D-133",)), + (self.__checkReturnType, ("D-134",)), + (self.__checkNoBlankLineBefore, ("D-141",)), ], "docstring": [ - (self.__checkTripleDoubleQuotes, ("D111",)), - (self.__checkBackslashes, ("D112",)), - (self.__checkOneLiner, ("D121",)), - (self.__checkIndent, ("D122",)), - (self.__checkSummary, ("D130",)), - (self.__checkEndsWithPeriod, ("D131",)), - (self.__checkBlankAfterSummary, ("D144",)), - (self.__checkBlankAfterLastParagraph, ("D145",)), + (self.__checkTripleDoubleQuotes, ("D-111",)), + (self.__checkBackslashes, ("D-112",)), + (self.__checkOneLiner, ("D-121",)), + (self.__checkIndent, ("D-122",)), + (self.__checkSummary, ("D-130",)), + (self.__checkEndsWithPeriod, ("D-131",)), + (self.__checkBlankAfterSummary, ("D-144",)), + (self.__checkBlankAfterLastParagraph, ("D-145",)), ], } elif self.__docType in ("eric", "eric_black"): checkersWithCodes = { "moduleDocstring": [ - (self.__checkModulesDocstrings, ("D101", "D201")), + (self.__checkModulesDocstrings, ("D-101", "D-201")), ], "functionDocstring": [], "classDocstring": [ - (self.__checkClassDocstring, ("D104", "D205", "D206")), + (self.__checkClassDocstring, ("D-104", "D-205", "D-206")), ( self.__checkEricNoBlankBeforeAndAfterClassOrFunction, - ("D242", "D243"), + ("D-242", "D-243"), ), - (self.__checkEricSignal, ("D260", "D261", "D262", "D263")), + (self.__checkEricSignal, ("D-260", "D-261", "D-262", "D-263")), ], "methodDocstring": [ - (self.__checkEricSummary, ("D232")), + (self.__checkEricSummary, ("D-232")), ], "defDocstring": [ ( self.__checkFunctionDocstring, - ("D102", "D202.1", "D202.2", "D203"), + ("D-102", "D-202.1", "D-202.2", "D-203"), ), - (self.__checkImperativeMood, ("D132",)), - (self.__checkNoSignature, ("D133",)), - (self.__checkEricReturn, ("D234r", "D235r")), - (self.__checkEricYield, ("D234y", "D235y")), + (self.__checkImperativeMood, ("D-132",)), + (self.__checkNoSignature, ("D-133",)), + (self.__checkEricReturn, ("D-234r", "D-235r")), + (self.__checkEricYield, ("D-234y", "D-235y")), ( self.__checkEricFunctionArguments, - ("D236", "D237", "D238", "D239"), + ("D-236", "D-237", "D-238", "D-239"), ), ( self.__checkEricNoBlankBeforeAndAfterClassOrFunction, - ("D244", "D245"), + ("D-244", "D-245"), ), - (self.__checkEricException, ("D250", "D251", "D252", "D253")), - (self.__checkEricDocumentationSequence, ("D270", "D271")), - (self.__checkEricDocumentationDeprecatedTags, ("D272",)), - (self.__checkEricDocumentationIndent, ("D273",)), + (self.__checkEricException, ("D-250", "D-251", "D-252", "D-253")), + (self.__checkEricDocumentationSequence, ("D-270", "D-271")), + (self.__checkEricDocumentationDeprecatedTags, ("D-272",)), + (self.__checkEricDocumentationIndent, ("D-273",)), ], "docstring": [ - (self.__checkTripleDoubleQuotes, ("D111",)), - (self.__checkBackslashes, ("D112",)), - (self.__checkIndent, ("D122",)), - (self.__checkSummary, ("D130",)), - (self.__checkEricEndsWithPeriod, ("D231",)), - (self.__checkEricBlankAfterSummary, ("D246",)), - (self.__checkEricNBlankAfterLastParagraph, ("D247",)), - (self.__checkEricQuotesOnSeparateLines, ("D222", "D223")), + (self.__checkTripleDoubleQuotes, ("D-111",)), + (self.__checkBackslashes, ("D-112",)), + (self.__checkIndent, ("D-122",)), + (self.__checkSummary, ("D-130",)), + (self.__checkEricEndsWithPeriod, ("D-231",)), + (self.__checkEricBlankAfterSummary, ("D-246",)), + (self.__checkEricNBlankAfterLastParagraph, ("D-247",)), + (self.__checkEricQuotesOnSeparateLines, ("D-222", "D-223")), ], } @@ -730,18 +730,18 @@ @type DocStyleContext """ if docstringContext is None: - self.__error(context.start(), 0, "D101") + self.__error(context.start(), 0, "D-101") return docstring = docstringContext.ssource() if not docstring or not docstring.strip() or not docstring.strip("'\""): - self.__error(context.start(), 0, "D101") + self.__error(context.start(), 0, "D-101") if ( self.__docType == "eric" and docstring.strip("'\"").strip() == "Module documentation goes here." ): - self.__error(docstringContext.end(), 0, "D201") + self.__error(docstringContext.end(), 0, "D-201") return def __checkFunctionDocstring(self, docstringContext, context): @@ -757,11 +757,11 @@ functionName = context.source()[0].lstrip().split()[1].split("(")[0] if functionName.startswith("_") and not functionName.endswith("__"): if self.__docType == "eric": - code = "D203" + code = "D-203" else: - code = "D103" + code = "D-103" else: - code = "D102" + code = "D-102" if docstringContext is None: self.__error(context.start(), 0, code) @@ -773,11 +773,11 @@ if self.__docType == "eric": if docstring.strip("'\"").strip() == "Function documentation goes here.": - self.__error(docstringContext.end(), 0, "D202.1") + self.__error(docstringContext.end(), 0, "D-202.1") return if "DESCRIPTION" in docstring or "TYPE" in docstring: - self.__error(docstringContext.end(), 0, "D202.2") + self.__error(docstringContext.end(), 0, "D-202.2") return def __checkClassDocstring(self, docstringContext, context): @@ -793,11 +793,11 @@ className = context.source()[0].lstrip().split()[1].split("(")[0] if className.startswith("_"): if self.__docType == "eric": - code = "D205" + code = "D-205" else: - code = "D105" + code = "D-105" else: - code = "D104" + code = "D-104" if docstringContext is None: self.__error(context.start(), 0, code) @@ -812,7 +812,7 @@ self.__docType == "eric" and docstring.strip("'\"").strip() == "Class documentation goes here." ): - self.__error(docstringContext.end(), 0, "D206") + self.__error(docstringContext.end(), 0, "D-206") return def __checkTripleDoubleQuotes(self, docstringContext, _context): @@ -830,7 +830,7 @@ docstring = docstringContext.ssource().strip() if not docstring.startswith(('"""', 'r"""', 'u"""')): - self.__error(docstringContext.start(), 0, "D111") + self.__error(docstringContext.start(), 0, "D-111") def __checkBackslashes(self, docstringContext, _context): """ @@ -847,7 +847,7 @@ docstring = docstringContext.ssource().strip() if "\\" in docstring and not docstring.startswith('r"""'): - self.__error(docstringContext.start(), 0, "D112") + self.__error(docstringContext.start(), 0, "D-112") def __checkOneLiner(self, docstringContext, context): """ @@ -875,7 +875,7 @@ # account for a trailing dot modLen += 1 if modLen <= self.__maxLineLength: - self.__error(docstringContext.start(), 0, "D121") + self.__error(docstringContext.start(), 0, "D-121") def __checkIndent(self, docstringContext, context): """ @@ -902,7 +902,7 @@ 0 if context.contextType() == "module" else len(context.indent()) + 4 ) if indent != expectedIndent: - self.__error(docstringContext.start(), 0, "D122") + self.__error(docstringContext.start(), 0, "D-122") def __checkSummary(self, docstringContext, _context): """ @@ -918,7 +918,7 @@ summary, lineNumber = self.__getSummaryLine(docstringContext) if summary == "": - self.__error(docstringContext.start() + lineNumber, 0, "D130") + self.__error(docstringContext.start() + lineNumber, 0, "D-130") def __checkEndsWithPeriod(self, docstringContext, _context): """ @@ -934,7 +934,7 @@ summary, lineNumber = self.__getSummaryLine(docstringContext) if not summary.endswith("."): - self.__error(docstringContext.start() + lineNumber, 0, "D131") + self.__error(docstringContext.start() + lineNumber, 0, "D-131") def __checkImperativeMood(self, docstringContext, _context): """ @@ -953,7 +953,7 @@ if summary: firstWord = summary.strip().split()[0] if firstWord.endswith("s") and not firstWord.endswith("ss"): - self.__error(docstringContext.start() + lineNumber, 0, "D132") + self.__error(docstringContext.start() + lineNumber, 0, "D-132") def __checkNoSignature(self, docstringContext, context): """ @@ -974,7 +974,7 @@ " ", "" ) and functionName + "()" not in summary.replace(" ", ""): # report only, if it is not an abbreviated form (i.e. function() ) - self.__error(docstringContext.start() + lineNumber, 0, "D133") + self.__error(docstringContext.start() + lineNumber, 0, "D-133") def __checkReturnType(self, docstringContext, context): """ @@ -1001,7 +1001,7 @@ set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set() ): - self.__error(docstringContext.end(), 0, "D134") + self.__error(docstringContext.end(), 0, "D-134") def __checkNoBlankLineBefore(self, docstringContext, context): """ @@ -1026,7 +1026,7 @@ return if not contextLines[cti - 1].strip(): - self.__error(docstringContext.start(), 0, "D141") + self.__error(docstringContext.start(), 0, "D-141") def __checkBlankBeforeAndAfterClass(self, docstringContext, context): """ @@ -1064,9 +1064,9 @@ return if contextLines[start - 1].strip(): - self.__error(docstringContext.start(), 0, "D142") + self.__error(docstringContext.start(), 0, "D-142") if contextLines[end + 1].strip(): - self.__error(docstringContext.end(), 0, "D143") + self.__error(docstringContext.end(), 0, "D-143") def __checkBlankAfterSummary(self, docstringContext, _context): """ @@ -1088,7 +1088,7 @@ summary, lineNumber = self.__getSummaryLine(docstringContext) if len(docstrings) > 2 and docstrings[lineNumber + 1].strip(): - self.__error(docstringContext.start() + lineNumber, 0, "D144") + self.__error(docstringContext.start() + lineNumber, 0, "D-144") def __checkBlankAfterLastParagraph(self, docstringContext, _context): """ @@ -1109,7 +1109,7 @@ return if docstrings[-2].strip(): - self.__error(docstringContext.end(), 0, "D145") + self.__error(docstringContext.end(), 0, "D-145") ################################################################## ## Checking functionality below (eric specific ones) @@ -1130,9 +1130,9 @@ lines = docstringContext.source() if lines[0].strip().strip("ru\"'"): - self.__error(docstringContext.start(), 0, "D221") + self.__error(docstringContext.start(), 0, "D-221") if lines[-1].strip().strip("\"'"): - self.__error(docstringContext.end(), 0, "D222") + self.__error(docstringContext.end(), 0, "D-222") def __checkEricEndsWithPeriod(self, docstringContext, _context): """ @@ -1159,7 +1159,7 @@ self.__error( docstringContext.start() + lineNumber + len(summaryLines) - 1, 0, - "D231", + "D-231", ) def __checkEricReturn(self, docstringContext, context): @@ -1184,13 +1184,13 @@ set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set() ): - self.__error(docstringContext.end(), 0, "D234r") + self.__error(docstringContext.end(), 0, "D-234r") else: if ( set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} == set() ): - self.__error(docstringContext.end(), 0, "D235r") + self.__error(docstringContext.end(), 0, "D-235r") def __checkEricYield(self, docstringContext, context): """ @@ -1211,10 +1211,10 @@ ] if "@yield" not in docstringContext.ssource(): if set(yield_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set(): - self.__error(docstringContext.end(), 0, "D234y") + self.__error(docstringContext.end(), 0, "D-234y") else: if set(yield_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} == set(): - self.__error(docstringContext.end(), 0, "D235y") + self.__error(docstringContext.end(), 0, "D-235y") def __checkEricFunctionArguments(self, docstringContext, context): """ @@ -1253,11 +1253,11 @@ if tagstring.count("@param") + tagstring.count("@keyparam") < len( argNames + kwNames ): - self.__error(docstringContext.end(), 0, "D236") + self.__error(docstringContext.end(), 0, "D-236") elif tagstring.count("@param") + tagstring.count("@keyparam") > len( argNames + kwNames ): - self.__error(docstringContext.end(), 0, "D237") + self.__error(docstringContext.end(), 0, "D-237") else: # extract @param and @keyparam from docstring args = [] @@ -1274,10 +1274,10 @@ # do the checks for name in kwNames: if name not in kwargs: - self.__error(docstringContext.end(), 0, "D238") + self.__error(docstringContext.end(), 0, "D-238") return if argNames + kwNames != args: - self.__error(docstringContext.end(), 0, "D239") + self.__error(docstringContext.end(), 0, "D-239") def __checkEricException(self, docstringContext, context): """ @@ -1317,10 +1317,10 @@ and "@raise" not in docstringContext.ssource() ): if exceptions - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set(): - self.__error(docstringContext.end(), 0, "D250") + self.__error(docstringContext.end(), 0, "D-250") else: if exceptions - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} == set(): - self.__error(docstringContext.end(), 0, "D251") + self.__error(docstringContext.end(), 0, "D-251") else: # step 1: extract documented exceptions documentedExceptions = set() @@ -1334,12 +1334,12 @@ # step 2: report undocumented exceptions for exception in raisedExceptions: if exception not in documentedExceptions: - self.__error(docstringContext.end(), 0, "D252", exception) + self.__error(docstringContext.end(), 0, "D-252", exception) # step 3: report undefined signals for exception in documentedExceptions: if exception not in raisedExceptions: - self.__error(docstringContext.end(), 0, "D253", exception) + self.__error(docstringContext.end(), 0, "D-253", exception) def __checkEricSignal(self, docstringContext, context): """ @@ -1368,10 +1368,10 @@ definedSignals.add(tokens[i - 2][1]) if "@signal" not in docstringContext.ssource() and definedSignals: - self.__error(docstringContext.end(), 0, "D260") + self.__error(docstringContext.end(), 0, "D-260") elif "@signal" in docstringContext.ssource(): if not definedSignals: - self.__error(docstringContext.end(), 0, "D261") + self.__error(docstringContext.end(), 0, "D-261") else: # step 1: extract documented signals documentedSignals = set() @@ -1388,12 +1388,12 @@ # step 2: report undocumented signals for signal in definedSignals: if signal not in documentedSignals: - self.__error(docstringContext.end(), 0, "D262", signal) + self.__error(docstringContext.end(), 0, "D-262", signal) # step 3: report undefined signals for signal in documentedSignals: if signal not in definedSignals: - self.__error(docstringContext.end(), 0, "D263", signal) + self.__error(docstringContext.end(), 0, "D-263", signal) def __checkEricBlankAfterSummary(self, docstringContext, _context): """ @@ -1418,7 +1418,7 @@ len(docstrings) - 2 > lineNumber + len(summaryLines) - 1 and docstrings[lineNumber + len(summaryLines)].strip() ): - self.__error(docstringContext.start() + lineNumber, 0, "D246") + self.__error(docstringContext.start() + lineNumber, 0, "D-246") def __checkEricNoBlankBeforeAndAfterClassOrFunction( self, docstringContext, context @@ -1460,14 +1460,14 @@ if isClassContext: if not contextLines[start - 1].strip(): - self.__error(docstringContext.start(), 0, "D242") + self.__error(docstringContext.start(), 0, "D-242") if not contextLines[end + 1].strip() and self.__docType == "eric": - self.__error(docstringContext.end(), 0, "D243") + self.__error(docstringContext.end(), 0, "D-243") elif contextLines[end + 1].strip() and self.__docType == "eric_black": - self.__error(docstringContext.end(), 0, "D143") + self.__error(docstringContext.end(), 0, "D-143") else: if not contextLines[start - 1].strip(): - self.__error(docstringContext.start(), 0, "D244") + self.__error(docstringContext.start(), 0, "D-244") if not contextLines[end + 1].strip(): if ( self.__docType == "eric_black" @@ -1476,7 +1476,7 @@ ): return - self.__error(docstringContext.end(), 0, "D245") + self.__error(docstringContext.end(), 0, "D-245") def __checkEricNBlankAfterLastParagraph(self, docstringContext, _context): """ @@ -1497,7 +1497,7 @@ return if not docstrings[-2].strip(): - self.__error(docstringContext.end(), 0, "D247") + self.__error(docstringContext.end(), 0, "D-247") def __checkEricSummary(self, docstringContext, context): """ @@ -1523,18 +1523,18 @@ if functionName == "__init__": if firstWord != "constructor": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "constructor" + docstringContext.start() + lineNumber, 0, "D-232", "constructor" ) elif functionName.startswith("__") and functionName.endswith("__"): if firstWord != "special": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "special" + docstringContext.start() + lineNumber, 0, "D-232", "special" ) elif context.special() == "staticmethod": secondWord = summary.strip().split(None, 2)[1].lower() if firstWord != "static" and secondWord != "static": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "static" + docstringContext.start() + lineNumber, 0, "D-232", "static" ) elif secondWord == "static": if functionName.startswith(("__", "on_")): @@ -1542,7 +1542,7 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "private static", ) elif functionName.startswith("_") or functionName.endswith("Event"): @@ -1550,7 +1550,7 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "protected static", ) else: @@ -1558,7 +1558,7 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "public static", ) elif ( @@ -1568,7 +1568,7 @@ secondWord = summary.strip().split(None, 2)[1].lower() if firstWord != "class" and secondWord != "class": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "class" + docstringContext.start() + lineNumber, 0, "D-232", "class" ) elif secondWord == "class": if functionName.startswith(("__", "on_")): @@ -1576,7 +1576,7 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "private class", ) elif functionName.startswith("_") or functionName.endswith("Event"): @@ -1584,7 +1584,7 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "protected class", ) else: @@ -1592,23 +1592,23 @@ self.__error( docstringContext.start() + lineNumber, 0, - "D232", + "D-232", "public class", ) elif functionName.startswith(("__", "on_")): if firstWord != "private": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "private" + docstringContext.start() + lineNumber, 0, "D-232", "private" ) elif functionName.startswith("_") or functionName.endswith("Event"): if firstWord != "protected": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "protected" + docstringContext.start() + lineNumber, 0, "D-232", "protected" ) else: if firstWord != "public": self.__error( - docstringContext.start() + lineNumber, 0, "D232", "public" + docstringContext.start() + lineNumber, 0, "D-232", "public" ) def __checkEricDocumentationSequence( @@ -1642,7 +1642,7 @@ and lineno > 0 and lines[lineno - 1].strip() == "" ): - self.__error(docstringContext.start() + lineno, 0, "D271", docToken) + self.__error(docstringContext.start() + lineno, 0, "D-271", docToken) # check the correct sequence of @param/@return/@yield and their accompanying # type tag @@ -1655,15 +1655,15 @@ if docToken in ("@param", "@keyparam") and docToken2 != "@type": self.__error( - docstringContext.start() + lineno, 0, "D270", docToken, "@type" + docstringContext.start() + lineno, 0, "D-270", docToken, "@type" ) elif docToken == "@return" and docToken2 != "@rtype": self.__error( - docstringContext.start() + lineno, 0, "D270", docToken, "@rtype" + docstringContext.start() + lineno, 0, "D-270", docToken, "@rtype" ) elif docToken == "@yield" and docToken2 != "@ytype": self.__error( - docstringContext.start() + lineno, 0, "D270", docToken, "@ytype" + docstringContext.start() + lineno, 0, "D-270", docToken, "@ytype" ) def __checkEricDocumentationDeprecatedTags( @@ -1699,7 +1699,7 @@ self.__error( docstringContext.start() + lineno, 0, - "D272", + "D-272", tag, deprecationsList[tag], ) @@ -1735,4 +1735,4 @@ tag = strippedLine.split(None, 1)[0] currentIndentation = len(line) - len(strippedLine) if currentIndentation != indentationLength: - self.__error(docstringContext.start() + lineno, 0, "D273", tag) + self.__error(docstringContext.start() + lineno, 0, "D-273", tag)