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,))