summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2020-05-02 09:33:30 +0200
committerClaudiu Popa <pcmanticore@gmail.com>2020-05-02 11:37:09 +0200
commit56495fdf6656ce5824f235a30294c1a76d10dcb5 (patch)
treecfde2fc6cba9d50112c5005df29b0c104d7dbf6a
parent1654e49f580b3fe5ba4e3fbcf120ebe9bdf77c43 (diff)
downloadpylint-git-56495fdf6656ce5824f235a30294c1a76d10dcb5.tar.gz
`no-value-for-parameter` variadic detection has improved for assign statements
Close #3563
-rw-r--r--ChangeLog4
-rw-r--r--pylint/checkers/typecheck.py12
-rw-r--r--tests/functional/r/regression_no_value_for_parameter.py27
3 files changed, 37 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 3b83e4608..706f040fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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