All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
1 --- [Deterministic header]
2 +++ [Deterministic header]
15 Name1 or (Name2 and Name3) or Name4
16 Name1 or Name2 and Name3 or Name4
20 -1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
21 -((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
22 +1 + v2 - v3 * 4 ^ 5**v6 / 7 // 8
23 +((1 + v2) - (v3 * 4)) ^ (((5**v6) / 7) // 8)
28 ~int and not v1 ^ 123 + v2 | True
29 (~int) and (not ((v1 ^ (123 + v2)) | True))
30 -+really ** -confusing ** ~operator ** -precedence
31 -flags & ~ select.EPOLLIN and waiters.write_task is not None
32 ++(really ** -(confusing ** ~(operator**-precedence)))
33 +flags & ~select.EPOLLIN and waiters.write_task is not None
36 lambda a, b, c=True: a
37 -lambda a, b, c=True, *, d=(1 << v2), e='str': a
38 -lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
39 +lambda a, b, c=True, *, d=(1 << v2), e="str": a
40 +lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
41 manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
42 -foo = (lambda port_id, ignore_missing: {"port1": port1_resource, "port2": port2_resource}[port_id])
43 +foo = lambda port_id, ignore_missing: {
44 + "port1": port1_resource,
45 + "port2": port2_resource,
48 str or None if True else str or bytes or None
49 (str or None) if True else (str or bytes or None)
50 str or None if (1 if True else 2) else str or bytes or None
51 (str or None) if (1 if True else 2) else (str or bytes or None)
52 -((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None))
53 -{'2.7': dead, '3.7': (long_live or die_hard)}
54 -{'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
56 + (super_long_variable_name or None)
57 + if (1 if super_long_test_name else 2)
58 + else (str or bytes or None)
60 +{"2.7": dead, "3.7": (long_live or die_hard)}
61 +{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
63 -{'2.7', '3.6', '3.7', '3.8', '3.9', ('4.0' if gilectomy else '3.10')}
64 -({'a': 'b'}, (True or False), (+value), 'string', b'bytes') or None
65 +{"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
66 +({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
72 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
83 -[this_is_a_very_long_variable_which_will_force_a_delimiter_split, element, another, *more]
95 + this_is_a_very_long_variable_which_will_force_a_delimiter_split,
100 {i for i in (1, 2, 3)}
101 -{(i ** 2) for i in (1, 2, 3)}
102 -{(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}
103 -{((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
104 +{(i**2) for i in (1, 2, 3)}
105 +{(i**2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))}
106 +{((i**2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
107 [i for i in (1, 2, 3)]
108 -[(i ** 2) for i in (1, 2, 3)]
109 -[(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]
110 -[((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
111 +[(i**2) for i in (1, 2, 3)]
112 +[(i**2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))]
113 +[((i**2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
114 {i: 0 for i in (1, 2, 3)}
115 -{i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}
116 +{i: j for i, j in ((1, "a"), (2, "b"), (3, "c"))}
117 {a: b * 2 for a, b in dictionary.items()}
118 {a: b * -2 for a, b in dictionary.items()}
119 -{k: v for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension}
122 + for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension
124 Python3 > Python2 > COBOL
129 -call(arg, kwarg='hey')
130 -call(arg, another, kwarg='hey', **kwargs)
131 -call(this_is_a_very_long_variable_which_will_force_a_delimiter_split, arg, another, kwarg='hey', **kwargs) # note: no trailing comma pre-3.6
133 +call(arg, kwarg="hey")
134 +call(arg, another, kwarg="hey", **kwargs)
136 + this_is_a_very_long_variable_which_will_force_a_delimiter_split,
141 +) # note: no trailing comma pre-3.6
143 call(a, *gidgets[:2])
144 call(**self.screen_kwargs)
145 call(b, **self.screen_kwargs)
153 +tuple[str, int, float, dict[str, int]]
155 - str, int, float, dict[str, int]
157 -tuple[str, int, float, dict[str, int],]
163 very_long_variable_name_filters: t.List[
164 t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
166 xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
167 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
169 xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
170 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
172 -xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[
173 - ..., List[SomeClass]
174 -] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore
175 +xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
176 + sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
183 @@ -137,118 +173,199 @@
188 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
189 -{'2.7': dead, '3.7': long_live or die_hard}
190 -{'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}
191 +{"2.7": dead, "3.7": long_live or die_hard}
192 +{"2.7", "3.6", "3.7", "3.8", "3.9", "4.0" if gilectomy else "3.10"}
193 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
197 (i for i in (1, 2, 3))
198 -((i ** 2) for i in (1, 2, 3))
199 -((i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))
200 -(((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
201 +((i**2) for i in (1, 2, 3))
202 +((i**2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
203 +(((i**2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
205 -{"id": "1","type": "type","started_at": now(),"ended_at": now() + timedelta(days=10),"priority": 1,"import_session_id": 1,**kwargs}
209 + "started_at": now(),
210 + "ended_at": now() + timedelta(days=10),
212 + "import_session_id": 1,
223 -what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(vars_to_remove)
224 -what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(vars_to_remove)
225 -result = session.query(models.Customer.id).filter(models.Customer.account_id == account_id, models.Customer.email == email_address).order_by(models.Customer.id.asc()).all()
226 -result = session.query(models.Customer.id).filter(models.Customer.account_id == account_id, models.Customer.email == email_address).order_by(models.Customer.id.asc(),).all()
227 +what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
230 +what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
234 + session.query(models.Customer.id)
236 + models.Customer.account_id == account_id, models.Customer.email == email_address
238 + .order_by(models.Customer.id.asc())
242 + session.query(models.Customer.id)
244 + models.Customer.account_id == account_id, models.Customer.email == email_address
247 + models.Customer.id.asc(),
252 authors.łukasz.say_thanks()
254 A: 0.25 * (10.0 / 12),
255 B: 0.1 * (10.0 / 12),
256 C: 0.1 * (10.0 / 12),
257 D: 0.1 * (10.0 / 12),
262 yield from outside_of_generator
272 await some.complicated[0].call(with_args=(True or (1 is not 1)))
277 print(**{1: 3} if False else {x: x for x in range(3)})
278 -print(* lambda x: x)
279 -assert(not Test),("Short message")
280 -assert this is ComplexTest and not requirements.fit_in_a_single_line(force=False), "Short message"
281 -assert(((parens is TooMany)))
282 -for x, in (1,), (2,), (3,): ...
284 -for z in (i for i in (1, 2, 3)): ...
285 -for i in (call()): ...
286 -for j in (1 + (2 + 3)): ...
287 -while(this and that): ...
288 -for addr_family, addr_type, addr_proto, addr_canonname, addr_sockaddr in socket.getaddrinfo('google.com', 'http'):
290 +assert not Test, "Short message"
291 +assert this is ComplexTest and not requirements.fit_in_a_single_line(
294 +assert parens is TooMany
295 +for (x,) in (1,), (2,), (3,):
299 +for z in (i for i in (1, 2, 3)):
303 +for j in 1 + (2 + 3):
305 +while this and that:
313 +) in socket.getaddrinfo("google.com", "http"):
315 -a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
316 -a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp not in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
317 -a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp is qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
318 -a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp is not qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
320 - threading.current_thread() != threading.main_thread() and
321 - threading.current_thread() != threading.main_thread() or
322 - signal.getsignal(signal.SIGINT) != signal.default_int_handler
326 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
327 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
331 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &
332 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
336 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
337 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
341 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -
342 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
346 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *
347 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
351 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
352 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
356 - ~ aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
360 - ~ aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
364 - ~ aaaaaaaaaaaaaaaa.a + aaaaaaaaaaaaaaaa.b - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h ^ aaaaaaaaaaaaaaaa.i << aaaaaaaaaaaaaaaa.k >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
367 -aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa - aaaaaaaaaaaaaaaa * (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa) / (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
369 + aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
370 + in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
373 + aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
374 + not in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
377 + aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
378 + is qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
381 + aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
382 + is not qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
385 + threading.current_thread() != threading.main_thread()
386 + and threading.current_thread() != threading.main_thread()
387 + or signal.getsignal(signal.SIGINT) != signal.default_int_handler
391 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
392 + | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
396 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
397 + & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
401 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
402 + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
406 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
407 + - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
411 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
412 + * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
416 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
417 + / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
421 + ~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e
422 + | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l**aaaa.m // aaaa.n
426 + ~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e
427 + | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h
428 + ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l**aaaaaaaa.m // aaaaaaaa.n
432 + ~aaaaaaaaaaaaaaaa.a
433 + + aaaaaaaaaaaaaaaa.b
434 + - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e
435 + | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h
436 + ^ aaaaaaaaaaaaaaaa.i
437 + << aaaaaaaaaaaaaaaa.k
438 + >> aaaaaaaaaaaaaaaa.l**aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
445 + * (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
446 + / (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
448 aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa
449 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
451 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
452 + >> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
453 + << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
456 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ^bbbb.a & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
458 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
459 + ^ bbbb.a & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
460 + ^ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
463 # standalone comment at ENDMARKER