mirror of
https://github.com/davidhalter/parso.git
synced 2026-11-06 18:35:55 +08:00
Move the parameter rules.
This commit is contained in:
1 parent
ceb7121dc6
commit
84e5adb364
1 file changed
+22
-17
+22
-17
@@ -343,22 +343,6 @@ class ErrorFinder(Normalizer):
|
||||
if count >= 256:
|
||||
message = "too many expressions in star-unpacking assignment"
|
||||
self._add_syntax_error(message, starred[0])
|
||||
elif node.type in ('parameters', 'lambdef'):
|
||||
param_names = set()
|
||||
default_only = False
|
||||
for p in _iter_params(node):
|
||||
if p.name.value in param_names:
|
||||
message = "duplicate argument '%s' in function definition"
|
||||
self._add_syntax_error(message % p.name.value, p.name)
|
||||
param_names.add(p.name.value)
|
||||
|
||||
if p.default is None and not p.star_count:
|
||||
if default_only:
|
||||
# def f(x=3, y): pass
|
||||
message = "non-default argument follows default argument"
|
||||
self._add_syntax_error(message, node)
|
||||
else:
|
||||
default_only = True
|
||||
elif node.type == 'expr_stmt':
|
||||
for before_equal in node.children[:-2:2]:
|
||||
self._check_assignment(before_equal)
|
||||
@@ -842,7 +826,7 @@ class _CompForRule(SyntaxRule):
|
||||
|
||||
|
||||
@ErrorFinder.register_rule(type='arglist')
|
||||
class ArglistRule(SyntaxRule):
|
||||
class _ArglistRule(SyntaxRule):
|
||||
message = "Generator expression must be parenthesized if not sole argument"
|
||||
|
||||
def is_issue(self, node):
|
||||
@@ -898,3 +882,24 @@ class ArglistRule(SyntaxRule):
|
||||
# f(x=2, y)
|
||||
message = "positional argument follows keyword argument"
|
||||
self.add_issue(argument, message=message)
|
||||
|
||||
@ErrorFinder.register_rule(type='parameters')
|
||||
@ErrorFinder.register_rule(type='lambdef')
|
||||
class _ParameterRule(SyntaxRule):
|
||||
# def f(x=3, y): pass
|
||||
message = "non-default argument follows default argument"
|
||||
|
||||
def is_issue(self, node):
|
||||
param_names = set()
|
||||
default_only = False
|
||||
for p in _iter_params(node):
|
||||
if p.name.value in param_names:
|
||||
message = "duplicate argument '%s' in function definition"
|
||||
self.add_issue(p.name, message=message % p.name.value)
|
||||
param_names.add(p.name.value)
|
||||
|
||||
if p.default is None and not p.star_count:
|
||||
if default_only:
|
||||
return True
|
||||
else:
|
||||
default_only = True
|
||||
Reference in new issue
Block a user