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

Thu, 30 Nov 2023 17:48:55 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 30 Nov 2023 17:48:55 +0100
branch
eric7
changeset 10363
6244c89dbc3f
parent 10362
cfa7034cccf6
permissions
-rw-r--r--

Fixed some code style and formatting issues as well as an implementation issue.

10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a node visitor to check logging formatting issues.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import ast
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import contextlib
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 _LoggingLevels = {
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 "debug",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 "critical",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 "error",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 "exception",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 "info",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 "warn",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 "warning",
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 }
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 # default LogRecord attributes that shouldn't be overwritten by extra dict
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 _ReservedAttrs = {
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
26 "args",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
27 "asctime",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
28 "created",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
29 "exc_info",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
30 "exc_text",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
31 "filename",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
32 "funcName",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
33 "levelname",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
34 "levelno",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
35 "lineno",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
36 "module",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
37 "msecs",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
38 "message",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
39 "msg",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
40 "name",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
41 "pathname",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
42 "process",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
43 "processName",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
44 "relativeCreated",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
45 "stack_info",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
46 "taskName",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
47 "thread",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
48 "threadName",
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
49 }
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 #######################################################################
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 ## LoggingFormatVisitor
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 ##
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 ## adapted from: flake8-logging-format v0.9.0
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 ##
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 ## Original: Copyright (c) 2017 Globality Engineering
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 #######################################################################
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
59
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 class LoggingFormatVisitor(ast.NodeVisitor):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 Class implementing a node visitor to check logging formatting issues.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
65 def __init__(self, errorCallback):
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 Constructor
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
68
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
69 @param errorCallback callback function to register an error
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
70 @type func
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 super().__init__()
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__currentLoggingCall = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__currentLoggingArgument = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__currentLoggingLevel = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__currentExtraKeyword = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__currentExceptNames = []
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
79
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
80 self.__error = errorCallback
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 def __withinLoggingStatement(self):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 Private method to check, if we are inside a logging statement.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @return flag indicating we are inside a logging statement
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 return self.__currentLoggingCall is not None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def __withinLoggingArgument(self):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Private method to check, if we are inside a logging argument.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @return flag indicating we are inside a logging argument
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 return self.__currentLoggingArgument is not None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 def __withinExtraKeyword(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 Private method to check, if we are inside the extra keyword.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @param node reference to the node to be checked
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @type ast.keyword
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @return flag indicating we are inside the extra keyword
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 return (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.__currentExtraKeyword is not None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 and self.__currentExtraKeyword != node
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 def __getExceptHandlerName(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Private method to get the exception name from an ExceptHandler node.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @param node reference to the node to be checked
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @type ast.ExceptHandler
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @return exception name
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @rtype str
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 name = node.name
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 if not name:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 return None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 return name
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 def __getIdAttr(self, value):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 Private method to check if value has id attribute and return it.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @param value value to get id from
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @type ast.Name
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @return ID of value
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @rtype str
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 """Check if value has id attribute and return it.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 :param value: The value to get id from.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 :return: The value.id.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 if not hasattr(value, "id") and hasattr(value, "value"):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 value = value.value
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 return value.id
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 def __detectLoggingLevel(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 Private method to decide whether an AST Call is a logging call.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @type ast.Call
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 @return logging level
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 @rtype str or None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 with contextlib.suppress(AttributeError):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 if self.__getIdAttr(node.func.value) in ("parser", "warnings"):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 return None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 if node.func.attr in _LoggingLevels:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 return node.func.attr
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 return None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 def __isFormatCall(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 Private method to check if a function call uses format.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 @type ast.Call
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @return flag indicating the function call uses format
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 try:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 return node.func.attr == "format"
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 except AttributeError:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 return False
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 def __shouldCheckExtraFieldClash(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 Private method to check, if the extra field clash check should be done.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @type ast.Dict
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 @return flag indicating to perform the check
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 return all(
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 self.__withinLoggingStatement(),
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 self.__withinExtraKeyword(node),
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 def __shouldCheckExtraException(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Private method to check, if the check for extra exceptions should be done.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
200 @param node reference to the node to be processed
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
201 @type ast.Dict
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 @return flag indicating to perform the check
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 @rtype bool
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 return all(
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.__withinLoggingStatement(),
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 self.__withinExtraKeyword(node),
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 len(self.__currentExceptNames) > 0,
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 def __isBareException(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 Private method to check, if the node is a bare exception name from an except
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 block.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 @type ast.AST
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 @return flag indicating a bare exception
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 @rtype TYPE
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 return isinstance(node, ast.Name) and node.id in self.__currentExceptNames
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 def __isStrException(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 Private method to check if the node is the expression str(e) or unicode(e),
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 where e is an exception name from an except block.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 @type ast.AST
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @return flag indicating a string exception
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @rtype TYPE
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 return (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 isinstance(node, ast.Call)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 and isinstance(node.func, ast.Name)
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
238 and node.func.id in ("str", "unicode")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 and node.args
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 and self.__isBareException(node.args[0])
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 )
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 def __checkExceptionArg(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 Private method to check an exception argument.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @type ast.AST
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 if self.__isBareException(node) or self.__isStrException(node):
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
251 self.__error(node.lineno - 1, node.col_offset, "L130")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 def __checkExcInfo(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 Private method to check, if the exc_info keyword is used with logging.error or
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 logging.exception.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 @type ast.AST
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 """
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
261 if self.__currentLoggingLevel not in ("error", "exception"):
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 return
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 for kw in node.keywords:
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
265 if kw.arg == "exc_info":
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
266 if self.__currentLoggingLevel == "error":
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 violation = "L131"
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 else:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 violation = "L132"
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
270 self.__error(node.lineno - 1, node.col_offset, violation)
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 def visit_Call(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 Public method to handle a function call.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 Every logging statement and string format is expected to be a function
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 call.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 @type ast.Call
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 # we are in a logging statement
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 if (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 self.__withinLoggingStatement()
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 and self.__withinLoggingArgument()
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 and self.__isFormatCall(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 ):
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
288 self.__error(node.lineno - 1, node.col_offset, "L101")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 return
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 loggingLevel = self.__detectLoggingLevel(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 if loggingLevel and self.__currentLoggingLevel is None:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 self.__currentLoggingLevel = loggingLevel
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 # we are in some other statement
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 if loggingLevel is None:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 return
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 # we are entering a new logging statement
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 self.__currentLoggingCall = node
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 if loggingLevel == "warn":
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
306 self.__error(node.lineno - 1, node.col_offset, "L110")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 self.__checkExcInfo(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 for index, child in enumerate(ast.iter_child_nodes(node)):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 if index == 1:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 self.__currentLoggingArgument = child
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 if index >= 1:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self.__checkExceptionArg(child)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 if index > 1 and isinstance(child, ast.keyword) and child.arg == "extra":
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 self.__currentExtraKeyword = child
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 super().visit(child)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 self.__currentLoggingArgument = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 self.__currentExtraKeyword = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 self.__currentLoggingCall = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 self.__currentLoggingLevel = None
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 def visit_BinOp(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 Public method to handle binary operations while processing the first
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 logging argument.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 @type ast.BinOp
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 if self.__withinLoggingStatement() and self.__withinLoggingArgument():
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 # handle percent format
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 if isinstance(node.op, ast.Mod):
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
337 self.__error(node.lineno - 1, node.col_offset, "L102")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 # handle string concat
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 if isinstance(node.op, ast.Add):
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
341 self.__error(node.lineno - 1, node.col_offset, "L103")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 def visit_Dict(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 Public method to handle dict arguments.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 @type ast.Dict
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 if self.__shouldCheckExtraFieldClash(node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 for key in node.keys:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 # key can be None if the dict uses double star syntax
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 if key is not None and key.s in _ReservedAttrs:
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
356 self.__error(node.lineno - 1, node.col_offset, "L121", key.s)
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 if self.__shouldCheckExtraException(node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 for value in node.values:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 self.__checkExceptionArg(value)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 def visit_JoinedStr(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 Public method to handle f-string arguments.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 @type ast.JoinedStr
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 if (
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 self.__withinLoggingStatement()
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 and any(isinstance(i, ast.FormattedValue) for i in node.values)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 and self.__withinLoggingArgument()
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 ):
10363
6244c89dbc3f Fixed some code style and formatting issues as well as an implementation issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
376 self.__error(node.lineno - 1, node.col_offset, "L104")
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 def visit_ExceptHandler(self, node):
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 Public method to handle an exception handler.
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 @param node reference to the node to be processed
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 @type ast.ExceptHandler
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 """
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 name = self.__getExceptHandlerName(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 if not name:
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 return
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 self.__currentExceptNames.append(name)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 super().generic_visit(node)
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 self.__currentExceptNames.pop()

eric ide

mercurial