Method: pylint.checkers.base.basic_checker.BasicChecker._check_dangerous_default
Calls: 3521, Exceptions: 12, Paths: 10Back
Path 1: 3267 calls (0.93)
FunctionDef (3214) AsyncFunctionDef (53)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 2: 151 calls (0.04)
FunctionDef (151)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 3: 39 calls (0.01)
FunctionDef (39)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 4: 21 calls (0.01)
FunctionDef (21)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 5: 12 calls (0.0)
FunctionDef (11) AsyncFunctionDef (1)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 6: 11 calls (0.0)
FunctionDef (11)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 7: 11 calls (0.0)
FunctionDef (11)
InferenceError (6) NameInferenceError (5)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 8: 4 calls (0.0)
FunctionDef (4)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 9: 4 calls (0.0)
FunctionDef (4)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))
Path 10: 1 calls (0.0)
FunctionDef (1)
NameInferenceError (1)
1def _check_dangerous_default(self, node: nodes.FunctionDef) -> None:
2 """Check for dangerous default values as arguments."""
3
4 def is_iterable(internal_node: nodes.NodeNG) -> bool:
5 return isinstance(internal_node, (nodes.List, nodes.Set, nodes.Dict))
6
7 defaults = (node.args.defaults or []) + (node.args.kw_defaults or [])
8 for default in defaults:
9 if not default:
10 continue
11 try:
12 value = next(default.infer())
13 except astroid.InferenceError:
14 continue
15
16 if (
17 isinstance(value, astroid.Instance)
18 and value.qname() in DEFAULT_ARGUMENT_SYMBOLS
19 ):
20 if value is default:
21 msg = DEFAULT_ARGUMENT_SYMBOLS[value.qname()]
22 elif isinstance(value, astroid.Instance) or is_iterable(value):
23 # We are here in the following situation(s):
24 # * a dict/set/list/tuple call which wasn't inferred
25 # to a syntax node ({}, () etc.). This can happen
26 # when the arguments are invalid or unknown to
27 # the inference.
28 # * a variable from somewhere else, which turns out to be a list
29 # or a dict.
30 if is_iterable(default):
31 msg = value.pytype()
32 elif isinstance(default, nodes.Call):
33 msg = f"{value.name}() ({value.qname()})"
34 else:
35 msg = f"{default.as_string()} ({value.qname()})"
36 else:
37 # this argument is a name
38 msg = f"{default.as_string()} ({DEFAULT_ARGUMENT_SYMBOLS[value.qname()]})"
39 self.add_message("dangerous-default-value", node=node, args=(msg,))