src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingVisitor.py

Mon, 24 Feb 2025 15:11:18 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 24 Feb 2025 15:11:18 +0100
branch
eric7
changeset 11147
dee6e106b4d3
parent 11133
d650c9527b87
child 11148
15e30f0c76a8
permissions
-rw-r--r--

Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).

10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
3 # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a node visitor to check for logging issues.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #######################################################################
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 ## LoggingVisitor
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 ##
11132
7cb530e18aba Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
13 ## adapted from: flake8-logging v1.7.0
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 ##
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 ## Original: Copyright (c) 2023 Adam Johnson
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 #######################################################################
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 import ast
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import re
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 import sys
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from functools import lru_cache
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from typing import cast
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 _LoggerMethods = frozenset(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 "debug",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 "info",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 "warn",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 "warning",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 "error",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 "critical",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 "log",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 "exception",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 _LogrecordAttributes = frozenset(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "asctime",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 "args",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 "created",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 "exc_info",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 "exc_text",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 "filename",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 "funcName",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 "levelname",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 "levelno",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 "lineno",
10640
7806ae725731 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
50 "message",
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 "module",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 "msecs",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 "msg",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 "name",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 "pathname",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 "process",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 "processName",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 "relativeCreated",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 "stack_info",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 "taskName",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 "thread",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 "threadName",
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @lru_cache(maxsize=None)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 def _modposPlaceholderRe():
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 Function to generate a regular expression object for '%' formatting codes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @return regular expression object
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @rtype re.Pattern
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 # https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 return re.compile(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 r"""
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 % # noqa: M601
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 (?P<spec>
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 % | # raw % character # noqa: M601
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 (?:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 ([-#0 +]+)? # conversion flags
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 (?P<minwidth>\d+|\*)? # minimum field width
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 (?P<precision>\.\d+|\.\*)? # precision
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 [hlL]? # length modifier
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 [acdeEfFgGiorsuxX] # conversion type
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 re.VERBOSE,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 @lru_cache(maxsize=None)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 def _modnamedPlaceholderRe():
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 Function to generate a regular expression object for '%' formatting codes using
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 names.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @return regular expression object
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @rtype re.Pattern
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 # https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 return re.compile(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 r"""
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 % # noqa: M601
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 \(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 (?P<name>.*?)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 \)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 ([-#0 +]+)? # conversion flags
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 (\d+)? # minimum field width
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 (\.\d+)? # precision
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 [hlL]? # length modifier
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 [acdeEfFgGiorsuxX] # conversion type
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 re.VERBOSE,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 class LoggingVisitor(ast.NodeVisitor):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Class implementing a node visitor to check for logging issues.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 GetLoggerNames = frozenset(("__cached__", "__file__"))
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 def __init__(self, errorCallback):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 Constructor
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 @param errorCallback callback function to register an error
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 @type func
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 super().__init__()
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 self.__error = errorCallback
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.__loggingName = None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.__loggerName = None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.__fromImports = {}
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 self.__stack = []
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 def visit(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 Public method to handle ast nodes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 @param node reference to the node to be processed
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @type ast.AST
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.__stack.append(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 super().visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__stack.pop()
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 def visit_Import(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 Public method to handle Import nodes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 @param node reference to the node to be processed
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @type ast.Import
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 for alias in node.names:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 if alias.name == "logging":
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.__loggingName = alias.asname or alias.name
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.generic_visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 def visit_ImportFrom(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 Public method to handle ImportFrom nodes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 @param node reference to the node to be processed
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 @type ast.ImportFrom
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 if node.module == "logging":
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 for alias in node.names:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 if alias.name == "WARN":
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 if sys.version_info >= (3, 10):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 lineno = alias.lineno
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 colOffset = alias.col_offset
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 else:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 lineno = node.lineno
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 colOffset = node.col_offset
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
182 self.__error(lineno - 1, colOffset, "L-109")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 if not alias.asname:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.__fromImports[alias.name] = node.module
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.generic_visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 def visit_Attribute(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 Public method to handle Attribute nodes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @param node reference to the node to be processed
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @type ast.Attribute
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 and isinstance(node.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 and node.value.id == self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 and node.attr == "WARN"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
201 self.__error(node.lineno - 1, node.col_offset, "L-109")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 self.generic_visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 def visit_Call(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 Public method to handle Call nodes.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @param node reference to the node to be processed
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @type ast.Call
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 and isinstance(node.func, ast.Attribute)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 and node.func.attr == "Logger"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 and isinstance(node.func.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 and node.func.value.id == self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 or (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 isinstance(node.func, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 and node.func.id == "Logger"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 and self.__fromImports.get("Logger") == "logging"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 ) and not self.__atModuleLevel():
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
226 self.__error(node.lineno - 1, node.col_offset, "L-101")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 if (
10754
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
229 isinstance(node.func, ast.Attribute)
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
230 and node.func.attr in _LoggerMethods
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
231 and isinstance(node.func.value, ast.Name)
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
232 and self.__loggingName
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
233 and node.func.value.id == self.__loggingName
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
234 ) or (
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
235 isinstance(node.func, ast.Name)
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
236 and node.func.id in _LoggerMethods
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
237 and self.__fromImports.get(node.func.id) == "logging"
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
238 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
239 self.__error(node.lineno - 1, node.col_offset, "L-115")
10754
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
240
6faecb62f3a4 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10640
diff changeset
241 if (
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 and isinstance(node.func, ast.Attribute)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 and node.func.attr == "getLogger"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 and isinstance(node.func.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 and node.func.value.id == self.__loggingName
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 ) or (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 isinstance(node.func, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 and node.func.id == "getLogger"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 and self.__fromImports.get("getLogger") == "logging"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 len(self.__stack) >= 2
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 and isinstance(assign := self.__stack[-2], ast.Assign)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 and len(assign.targets) == 1
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 and isinstance(assign.targets[0], ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 and not self.__atModuleLevel()
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self.__loggerName = assign.targets[0].id
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 node.args
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 and isinstance(node.args[0], ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 and node.args[0].id in self.GetLoggerNames
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
266 self.__error(node.args[0].lineno - 1, node.args[0].col_offset, "L-102")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 isinstance(node.func, ast.Attribute)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 and node.func.attr in _LoggerMethods
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 and isinstance(node.func.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 ) and (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 (self.__loggingName and node.func.value.id == self.__loggingName)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 or (self.__loggerName and node.func.value.id == self.__loggerName)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 excHandler = self.__currentExceptHandler()
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 # L108
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if node.func.attr == "warn":
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
280 self.__error(node.lineno - 1, node.col_offset, "L-108")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 # L103
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 extraKeys = []
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 if any((extraNode := kw).arg == "extra" for kw in node.keywords):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 if isinstance(extraNode.value, ast.Dict):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 extraKeys = [
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 (k.value, k)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 for k in extraNode.value.keys
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 if isinstance(k, ast.Constant)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 ]
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 isinstance(extraNode.value, ast.Call)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 and isinstance(extraNode.value.func, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 and extraNode.value.func.id == "dict"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 extraKeys = [
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 (k.arg, k)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 for k in extraNode.value.keywords
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 if k.arg is not None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 ]
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 for key, keyNode in extraKeys:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 if key in _LogrecordAttributes:
11133
d650c9527b87 Removed support for Python < 3.9 in the LoggingVisitor class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11132
diff changeset
304 self.__error(
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
305 keyNode.lineno - 1, keyNode.col_offset, "L-103", repr(key)
11133
d650c9527b87 Removed support for Python < 3.9 in the LoggingVisitor class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11132
diff changeset
306 )
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 if node.func.attr == "exception":
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 # L104
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 if not excHandler:
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
311 self.__error(node.lineno - 1, node.col_offset, "L-104")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 if any((excInfo := kw).arg == "exc_info" for kw in node.keywords):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 # L106
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 isinstance(excInfo.value, ast.Constant) and excInfo.value.value
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 ) or (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 excHandler
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 and isinstance(excInfo.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 and excInfo.value.id == excHandler.name
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
322 self.__error(excInfo.lineno - 1, excInfo.col_offset, "L-106")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 # L107
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 isinstance(excInfo.value, ast.Constant)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 and not excInfo.value.value
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
329 self.__error(excInfo.lineno - 1, excInfo.col_offset, "L-107")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 # L105
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 elif node.func.attr == "error" and excHandler is not None:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 rewritable = False
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 if any((excInfo := kw).arg == "exc_info" for kw in node.keywords):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 if isinstance(excInfo.value, ast.Constant) and excInfo.value.value:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 rewritable = True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 isinstance(excInfo.value, ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 and excInfo.value.id == excHandler.name
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 rewritable = True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 else:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 rewritable = True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 if rewritable:
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
346 self.__error(node.lineno - 1, node.col_offset, "L-105")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 # L114
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 excHandler is None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 and any((excInfo := kw).arg == "exc_info" for kw in node.keywords)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 and isinstance(excInfo.value, ast.Constant)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 and excInfo.value.value
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
355 self.__error(excInfo.lineno - 1, excInfo.col_offset, "L-114")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 # L110
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 node.func.attr == "exception"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 and len(node.args) >= 1
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 and isinstance(node.args[0], ast.Name)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 and excHandler is not None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 and node.args[0].id == excHandler.name
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
365 self.__error(node.args[0].lineno - 1, node.args[0].col_offset, "L-110")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 msgArgKwarg = False
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 if node.func.attr == "log" and len(node.args) >= 2:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 msgArg = node.args[1]
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 elif node.func.attr != "log" and len(node.args) >= 1:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 msgArg = node.args[0]
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 else:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 try:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 msgArg = [k for k in node.keywords if k.arg == "msg"][0].value
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 msgArgKwarg = True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 except IndexError:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 msgArg = None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 # L111
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 if isinstance(msgArg, ast.JoinedStr):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
381 self.__error(msgArg.lineno - 1, msgArg.col_offset, "L-111a")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 isinstance(msgArg, ast.Call)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 and isinstance(msgArg.func, ast.Attribute)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 and isinstance(msgArg.func.value, ast.Constant)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 and isinstance(msgArg.func.value.value, str)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 and msgArg.func.attr == "format"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
389 self.__error(msgArg.lineno - 1, msgArg.col_offset, "L-111b")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 elif (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 isinstance(msgArg, ast.BinOp)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 and isinstance(msgArg.op, ast.Mod)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 and isinstance(msgArg.left, ast.Constant)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 and isinstance(msgArg.left.value, str)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 ):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
396 self.__error(msgArg.lineno - 1, msgArg.col_offset, "L-111c")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 elif isinstance(msgArg, ast.BinOp) and self.__isAddChainWithNonStr(msgArg):
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
398 self.__error(msgArg.lineno - 1, msgArg.col_offset, "L-111d")
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 # L112
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 msgArg is not None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 and not msgArgKwarg
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 and (msg := self.__flattenStrChain(msgArg))
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 and not any(isinstance(arg, ast.Starred) for arg in node.args)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 self.__checkMsgAndArgs(node, msgArg, msg)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 self.generic_visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 def __checkMsgAndArgs(self, node, msgArg, msg):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 Private method to check the message and arguments a given Call node.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 @param node reference to the Call node
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 @type ast.Call
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 @param msgArg message argument nodes
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 @type ast.AST
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 @param msg message
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 @type str
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 if not isinstance(node.func, ast.Attribute):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 return
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 if (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 (node.func.attr != "log" and (dictIdx := 1))
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 or (node.func.attr == "log" and (dictIdx := 2))
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 and len(node.args) == dictIdx + 1
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 and (dictNode := node.args[dictIdx])
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 and isinstance(dictNode, ast.Dict)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 and all(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 isinstance(k, ast.Constant) and isinstance(k.value, str)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 for k in dictNode.keys
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 and (
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 modnames := {m["name"] for m in _modnamedPlaceholderRe().finditer(msg)}
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 ):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 # L113
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 given = {cast(ast.Constant, k).value for k in dictNode.keys}
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 if missing := modnames - given:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 self.__error(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 msgArg.lineno - 1,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 msgArg.col_offset,
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
447 "L-113a", # missing keys
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 ", ".join([repr(k) for k in missing]),
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 if missing := given - modnames:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 self.__error(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 msgArg.lineno - 1,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 msgArg.col_offset,
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
455 "L-113b", # unreferenced keys
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 ", ".join([repr(k) for k in missing]),
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 return
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 # L112
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 modposCount = sum(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 1 + (m["minwidth"] == "*") + (m["precision"] == ".*")
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 for m in _modposPlaceholderRe().finditer(msg)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 if m["spec"] != "%"
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 argCount = len(node.args) - 1 - (node.func.attr == "log")
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 if modposCount > 0 and modposCount != argCount:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 self.__error(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 msgArg.lineno - 1,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 msgArg.col_offset,
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11133
diff changeset
473 "L-112",
10367
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 modposCount,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 "'%'", # noqa: M601
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 argCount,
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 return
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 def __atModuleLevel(self):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 Private method to check, if we are on the module level.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 @return flag indicating the module level
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 @rtype bool
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 return any(
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 isinstance(parent, (ast.FunctionDef, ast.AsyncFunctionDef))
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 for parent in self.__stack
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 )
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 def __currentExceptHandler(self):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 Private method to determine the current exception handler node.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 @return reference to the current exception handler node or None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 @rtype ast.ExceptHandler
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499 for node in reversed(self.__stack):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 if isinstance(node, ast.ExceptHandler):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501 return node
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 elif isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 break
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505 return None
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 def __isAddChainWithNonStr(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 Private method to check, if the node is an Add with a non string argument.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 @param node reference to the binary operator node
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 @type ast.BinOp
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513 @return flag indicating an Add with a non string argument
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 @rtype bool
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 if not isinstance(node.op, ast.Add):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 return False
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 for side in (node.left, node.right):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 if isinstance(side, ast.BinOp):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 if self.__isAddChainWithNonStr(side):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522 return True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 elif not (isinstance(side, ast.Constant) and isinstance(side.value, str)):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 return True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 return False
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 def __flattenStrChain(self, node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 Private method to flatten the given string chain.
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 @param node reference to the AST node
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 @type ast.AST
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 @return flattened string
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 @rtype str
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 """
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 parts = []
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 def visit(node):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 if isinstance(node, ast.Constant) and isinstance(node.value, str):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 parts.append(node.value)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542 return True
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 elif isinstance(node, ast.BinOp) and isinstance(node.op, ast.Add):
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 return visit(node.left) and visit(node.right)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545 return False
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 result = visit(node)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 if result:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 return "".join(parts)
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 else:
b189ca1f5d53 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 return None

eric ide

mercurial