src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticChecker.py

branch
eric7
changeset 11150
73d80859079c
parent 11143
ef75c265ab47
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticChecker.py	Thu Feb 27 09:22:15 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticChecker.py	Thu Feb 27 14:42:39 2025 +0100
@@ -7,24 +7,24 @@
 Module implementing a checker for pydantic related issues.
 """
 
-import copy
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 
-class PydanticChecker:
+class PydanticChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for pydantic related issues.
     """
 
     Codes = [
-        "PYD001",
-        "PYD002",
-        "PYD003",
-        "PYD004",
-        "PYD005",
-        "PYD006",
-        "PYD010",
+        "PYD-001",
+        "PYD-002",
+        "PYD-003",
+        "PYD-004",
+        "PYD-005",
+        "PYD-006",
+        "PYD-010",
     ]
-    Prefix = "PYD"
+    Category = "PYD"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -47,106 +47,33 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(x for x in select if x.startswith(PydanticChecker.Prefix))
-        self.__ignore = tuple(x for x in ignore if x.startswith(PydanticChecker.Prefix))
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            PydanticChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = [
             (
                 self.__checkPydantic,
                 (
-                    "PYD001",
-                    "PYD002",
-                    "PYD003",
-                    "PYD004",
-                    "PYD005",
-                    "PYD006",
-                    "PYD010",
+                    "PYD-001",
+                    "PYD-002",
+                    "PYD-003",
+                    "PYD-004",
+                    "PYD-005",
+                    "PYD-006",
+                    "PYD-010",
                 ),
             ),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code in self.__ignore or (
-            code.startswith(self.__ignore) and not code.startswith(self.__select)
-        )
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     def __checkPydantic(self):
         """
@@ -154,5 +81,5 @@
         """
         from .PydanticVisitor import PydanticVisitor
 
-        visitor = PydanticVisitor(errorCallback=self.__error)
-        visitor.visit(self.__tree)
+        visitor = PydanticVisitor(errorCallback=self.addErrorFromNode)
+        visitor.visit(self.tree)

eric ide

mercurial