+with (open("bla.txt")):
+ pass
+
+with (open("bla.txt")), (open("bla.txt")):
+ pass
+
+with (open("bla.txt") as f):
+ pass
+
+# Remove brackets within alias expression
+with (open("bla.txt")) as f:
+ pass
+
+# Remove brackets around one-line context managers
+with (open("bla.txt") as f, (open("x"))):
+ pass
+
+with ((open("bla.txt")) as f, open("x")):
+ pass
+
+with (CtxManager1() as example1, CtxManager2() as example2):
+ ...
+
+# Brackets remain when using magic comma
+with (CtxManager1() as example1, CtxManager2() as example2,):
+ ...
+
+# Brackets remain for multi-line context managers
+with (CtxManager1() as example1, CtxManager2() as example2, CtxManager2() as example2, CtxManager2() as example2, CtxManager2() as example2):
+ ...
+
+# Don't touch assignment expressions
+with (y := open("./test.py")) as f:
+ pass
+
+# Deeply nested examples
+# N.B. Multiple brackets are only possible
+# around the context manager itself.
+# Only one brackets is allowed around the
+# alias expression or comma-delimited context managers.
+with (((open("bla.txt")))):
+ pass
+
+with (((open("bla.txt")))), (((open("bla.txt")))):
+ pass
+
+with (((open("bla.txt")))) as f:
+ pass
+
+with ((((open("bla.txt")))) as f):
+ pass
+
+with ((((CtxManager1()))) as example1, (((CtxManager2()))) as example2):
+ ...
+
+# output
+with open("bla.txt"):
+ pass
+
+with open("bla.txt"), open("bla.txt"):
+ pass
+
+with open("bla.txt") as f:
+ pass
+
+# Remove brackets within alias expression
+with open("bla.txt") as f:
+ pass
+
+# Remove brackets around one-line context managers
+with open("bla.txt") as f, open("x"):
+ pass
+
+with open("bla.txt") as f, open("x"):
+ pass
+
+with CtxManager1() as example1, CtxManager2() as example2:
+ ...
+
+# Brackets remain when using magic comma
+with (
+ CtxManager1() as example1,
+ CtxManager2() as example2,
+):
+ ...
+
+# Brackets remain for multi-line context managers
+with (
+ CtxManager1() as example1,
+ CtxManager2() as example2,
+ CtxManager2() as example2,
+ CtxManager2() as example2,
+ CtxManager2() as example2,
+):
+ ...
+
+# Don't touch assignment expressions
+with (y := open("./test.py")) as f:
+ pass
+
+# Deeply nested examples
+# N.B. Multiple brackets are only possible
+# around the context manager itself.
+# Only one brackets is allowed around the
+# alias expression or comma-delimited context managers.
+with open("bla.txt"):
+ pass
+
+with open("bla.txt"), open("bla.txt"):
+ pass
+
+with open("bla.txt") as f:
+ pass
+
+with open("bla.txt") as f:
+ pass
+
+with CtxManager1() as example1, CtxManager2() as example2:
+ ...