diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2020-05-02 09:33:30 +0200 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2020-05-02 11:37:09 +0200 |
commit | 56495fdf6656ce5824f235a30294c1a76d10dcb5 (patch) | |
tree | cfde2fc6cba9d50112c5005df29b0c104d7dbf6a | |
parent | 1654e49f580b3fe5ba4e3fbcf120ebe9bdf77c43 (diff) | |
download | pylint-git-56495fdf6656ce5824f235a30294c1a76d10dcb5.tar.gz |
`no-value-for-parameter` variadic detection has improved for assign statements
Close #3563
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | pylint/checkers/typecheck.py | 12 | ||||
-rw-r--r-- | tests/functional/r/regression_no_value_for_parameter.py | 27 |
3 files changed, 37 insertions, 6 deletions
@@ -17,6 +17,10 @@ Release date: TBA Close #3533 +* ``no-value-for-parameter`` variadic detection has improved for assign statements + + Close #3563 + What's New in Pylint 2.5.0? =========================== diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index 44240e08c..70fa58289 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -564,9 +564,9 @@ def _no_context_variadic_keywords(node, scope): if isinstance(scope, astroid.Lambda) and not isinstance(scope, astroid.FunctionDef): variadics = list(node.keywords or []) + node.kwargs - elif isinstance(statement, (astroid.Return, astroid.Expr)) and isinstance( - statement.value, astroid.Call - ): + elif isinstance( + statement, (astroid.Return, astroid.Expr, astroid.Assign) + ) and isinstance(statement.value, astroid.Call): call = statement.value variadics = list(call.keywords or []) + call.kwargs @@ -579,9 +579,9 @@ def _no_context_variadic_positional(node, scope): variadics = node.starargs + node.kwargs else: statement = node.statement() - if isinstance(statement, (astroid.Expr, astroid.Return)) and isinstance( - statement.value, astroid.Call - ): + if isinstance( + statement, (astroid.Expr, astroid.Return, astroid.Assign) + ) and isinstance(statement.value, astroid.Call): call = statement.value variadics = call.starargs + call.kwargs diff --git a/tests/functional/r/regression_no_value_for_parameter.py b/tests/functional/r/regression_no_value_for_parameter.py index 30308e605..6dd2ea491 100644 --- a/tests/functional/r/regression_no_value_for_parameter.py +++ b/tests/functional/r/regression_no_value_for_parameter.py @@ -1,6 +1,9 @@ # pylint: disable=missing-docstring,import-error +import os + from Unknown import Unknown + class ConfigManager(Unknown): @@ -13,3 +16,27 @@ class ConfigManager(Unknown): def items(self, sectname, raw=True): pass + + +def func(*, key=None): + return key + + +def varargs_good(*parts): + """All good""" + return os.path.join(*parts) + + +def varargs_no_expr(*parts): + """False positive below this line""" + ret = os.path.join(*parts) + return ret + + +def kwargs_good(**kwargs): + return func(**kwargs) + + +def kwargs_no_expr(**kwargs): + ret = func(**kwargs) + return ret |