summaryrefslogtreecommitdiff
path: root/pylint/checkers/design_analysis.py
diff options
context:
space:
mode:
authorahirnish <ahirnish@gmail.com>2017-09-15 21:15:32 +0530
committerClaudiu Popa <pcmanticore@gmail.com>2017-09-15 17:45:32 +0200
commit3691a25bc5f4c6692508042656e0e936954034e5 (patch)
tree6c245dbe40a86e708e66924468c4d247edb5e508 /pylint/checkers/design_analysis.py
parenta80810644b3533de5c2455f33ec63838bf731f62 (diff)
downloadpylint-git-3691a25bc5f4c6692508042656e0e936954034e5.tar.gz
Adding a warning about keyword argument appearing before variable args list in the function definition (#1636)
Diffstat (limited to 'pylint/checkers/design_analysis.py')
-rw-r--r--pylint/checkers/design_analysis.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py
index c34ec4dce..899dd708e 100644
--- a/pylint/checkers/design_analysis.py
+++ b/pylint/checkers/design_analysis.py
@@ -57,6 +57,12 @@ MSGS = {
'too-many-boolean-expressions',
'Used when a if statement contains too many boolean '
'expressions'),
+ 'W0917': ('Keyword argument before variable positional arguments list '
+ 'in the definition of %s function',
+ 'keyword-arg-before-vararg',
+ 'When defining a keyword argument before variable positional arguments, one can '
+ 'end up in having multiple values passed for the aforementioned parameter in '
+ 'case the method is called with keyword arguments.'),
}
@@ -211,7 +217,7 @@ class MisdesignChecker(BaseChecker):
@check_messages('too-many-return-statements', 'too-many-branches',
'too-many-arguments', 'too-many-locals',
- 'too-many-statements')
+ 'too-many-statements', 'keyword-arg-before-vararg')
def visit_functiondef(self, node):
"""check function name, docstring, arguments, redefinition,
variable names, max locals
@@ -237,6 +243,10 @@ class MisdesignChecker(BaseChecker):
if locnum > self.config.max_locals:
self.add_message('too-many-locals', node=node,
args=(locnum, self.config.max_locals))
+ # check for keyword arg before varargs
+ if node.args.vararg and node.args.defaults:
+ self.add_message('keyword-arg-before-vararg', node=node,
+ args=(node.name))
# init statements counter
self._stmts = 1