Method: pylint.checkers.classes.class_checker._different_parameters
Calls: 151, Exceptions: 0, Paths: 12Back
Path 1: 105 calls (0.7)
UnboundMethod (97) BoundMethod (4) FunctionDef (4)
UnboundMethod (95) BoundMethod (5) FunctionDef (5)
Pattern (105)
[] (105)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 2: 12 calls (0.08)
UnboundMethod (10) BoundMethod (1) FunctionDef (1)
UnboundMethod (11) FunctionDef (1)
Pattern (12)
['Number of parameters '] (6) ["Parameter 'fruit_name' has been renamed to 'orange_name' in"] (3) ["Parameter 'arg' has been renamed to 'arg1' in"] (1...
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 3: 10 calls (0.07)
UnboundMethod (10)
UnboundMethod (10)
Pattern (10)
[] (10)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 4: 6 calls (0.04)
UnboundMethod (5) FunctionDef (1)
UnboundMethod (5) FunctionDef (1)
Pattern (6)
[] (6)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 5: 5 calls (0.03)
UnboundMethod (4) BoundMethod (1)
UnboundMethod (4) BoundMethod (1)
Pattern (5)
[] (5)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 6: 4 calls (0.03)
UnboundMethod (4)
UnboundMethod (4)
Pattern (4)
['Number of parameters '] (4)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 7: 3 calls (0.02)
UnboundMethod (3)
UnboundMethod (3)
Pattern (3)
['Number of parameters '] (3)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 8: 2 calls (0.01)
UnboundMethod (2)
UnboundMethod (2)
Pattern (2)
['Variadics removed in'] (2)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 9: 1 calls (0.01)
UnboundMethod (1)
UnboundMethod (1)
Pattern (1)
["Parameter 'args' has been renamed to 'arg' in"] (1)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 10: 1 calls (0.01)
UnboundMethod (1)
UnboundMethod (1)
Pattern (1)
['Number of parameters '] (1)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 11: 1 calls (0.01)
UnboundMethod (1)
UnboundMethod (1)
Pattern (1)
[] (1)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages
Path 12: 1 calls (0.01)
BoundMethod (1)
BoundMethod (1)
Pattern (1)
[] (1)
1def _different_parameters(
2 original: nodes.FunctionDef,
3 overridden: nodes.FunctionDef,
4 dummy_parameter_regex: Pattern[str],
5) -> list[str]:
6 """Determine if the two methods have different parameters.
7
8 They are considered to have different parameters if:
9
10 * they have different positional parameters, including different names
11
12 * one of the methods is having variadics, while the other is not
13
14 * they have different keyword only parameters.
15 """
16 output_messages = []
17 original_parameters = _positional_parameters(original)
18 overridden_parameters = _positional_parameters(overridden)
19
20 # Copy kwonlyargs list so that we don't affect later function linting
21 original_kwonlyargs = original.args.kwonlyargs
22
23 # Allow positional/keyword variadic in overridden to match against any
24 # positional/keyword argument in original.
25 # Keep any arguments that are found separately in overridden to satisfy
26 # later tests
27 if overridden.args.vararg:
28 overridden_names = [v.name for v in overridden_parameters]
29 original_parameters = [
30 v for v in original_parameters if v.name in overridden_names
31 ]
32
33 if overridden.args.kwarg:
34 overridden_names = [v.name for v in overridden.args.kwonlyargs]
35 original_kwonlyargs = [
36 v for v in original.args.kwonlyargs if v.name in overridden_names
37 ]
38
39 different_positional = _has_different_parameters(
40 original_parameters, overridden_parameters, dummy_parameter_regex
41 )
42 different_kwonly = _has_different_keyword_only_parameters(
43 original_kwonlyargs, overridden.args.kwonlyargs
44 )
45 if different_kwonly and different_positional:
46 if "Number " in different_positional[0] and "Number " in different_kwonly[0]:
47 output_messages.append("Number of parameters ")
48 output_messages += different_positional[1:]
49 output_messages += different_kwonly[1:]
50 else:
51 output_messages += different_positional
52 output_messages += different_kwonly
53 else:
54 if different_positional:
55 output_messages += different_positional
56 if different_kwonly:
57 output_messages += different_kwonly
58
59 if original.name in PYMETHODS:
60 # Ignore the difference for special methods. If the parameter
61 # numbers are different, then that is going to be caught by
62 # unexpected-special-method-signature.
63 # If the names are different, it doesn't matter, since they can't
64 # be used as keyword arguments anyway.
65 output_messages.clear()
66
67 # Arguments will only violate LSP if there are variadics in the original
68 # that are then removed from the overridden
69 kwarg_lost = original.args.kwarg and not overridden.args.kwarg
70 vararg_lost = original.args.vararg and not overridden.args.vararg
71
72 if kwarg_lost or vararg_lost:
73 output_messages += ["Variadics removed in"]
74
75 return output_messages