Support nested lambdas in BracketTracker

This commit is contained in:
Łukasz Langa 2018-05-08 20:59:18 -07:00
parent 793450aeb0
commit c9b73b99ac
3 changed files with 13 additions and 10 deletions

View File

@ -647,8 +647,8 @@ class BracketTracker:
bracket_match: Dict[Tuple[Depth, NodeType], Leaf] = Factory(dict)
delimiters: Dict[LeafID, Priority] = Factory(dict)
previous: Optional[Leaf] = None
_for_loop_variable: bool = False
_lambda_arguments: bool = False
_for_loop_variable: int = 0
_lambda_arguments: int = 0
def mark(self, leaf: Leaf) -> None:
"""Mark `leaf` with bracket-related metadata. Keep track of delimiters.
@ -710,7 +710,7 @@ def maybe_increment_for_loop_variable(self, leaf: Leaf) -> bool:
"""
if leaf.type == token.NAME and leaf.value == "for":
self.depth += 1
self._for_loop_variable = True
self._for_loop_variable += 1
return True
return False
@ -719,7 +719,7 @@ def maybe_decrement_after_for_loop_variable(self, leaf: Leaf) -> bool:
"""See `maybe_increment_for_loop_variable` above for explanation."""
if self._for_loop_variable and leaf.type == token.NAME and leaf.value == "in":
self.depth -= 1
self._for_loop_variable = False
self._for_loop_variable -= 1
return True
return False
@ -732,7 +732,7 @@ def maybe_increment_lambda_arguments(self, leaf: Leaf) -> bool:
"""
if leaf.type == token.NAME and leaf.value == "lambda":
self.depth += 1
self._lambda_arguments = True
self._lambda_arguments += 1
return True
return False
@ -741,7 +741,7 @@ def maybe_decrement_after_lambda_arguments(self, leaf: Leaf) -> bool:
"""See `maybe_increment_lambda_arguments` above for explanation."""
if self._lambda_arguments and leaf.type == token.COLON:
self.depth -= 1
self._lambda_arguments = False
self._lambda_arguments -= 1
return True
return False

View File

@ -11,7 +11,7 @@
True
False
1
@@ -29,61 +29,83 @@
@@ -29,62 +29,84 @@
~great
+value
-1
@ -24,9 +24,10 @@
lambda a, b, c=True: a
-lambda a, b, c=True, *, d=(1 << v2), e='str': a
-lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
-foo = (lambda port_id, ignore_missing: {"port1": port1_resource, "port2": port2_resource}[port_id])
+lambda a, b, c=True, *, d=(1 << v2), e="str": a
+lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
-foo = (lambda port_id, ignore_missing: {"port1": port1_resource, "port2": port2_resource}[port_id])
+foo = lambda port_id, ignore_missing: {
+ "port1": port1_resource, "port2": port2_resource
+}[
@ -116,7 +117,7 @@
call(**self.screen_kwargs)
call(b, **self.screen_kwargs)
lukasz.langa.pl
@@ -92,11 +114,11 @@
@@ -93,11 +115,11 @@
1.0 .real
....__class__
list[str]
@ -129,7 +130,7 @@
]
slice[0]
slice[0:1]
@@ -123,103 +145,140 @@
@@ -124,103 +146,140 @@
numpy[-(c + 1) :, d]
numpy[:, l[-2]]
numpy[:, ::-1]

View File

@ -37,6 +37,7 @@
lambda a, b, c=True: a
lambda a, b, c=True, *, d=(1 << v2), e='str': a
lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
foo = (lambda port_id, ignore_missing: {"port1": port1_resource, "port2": port2_resource}[port_id])
1 if True else 2
str or None if True else str or bytes or None
@ -266,6 +267,7 @@ async def f():
lambda a, b, c=True: a
lambda a, b, c=True, *, d=(1 << v2), e="str": a
lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
foo = lambda port_id, ignore_missing: {
"port1": port1_resource, "port2": port2_resource
}[