]> git.madduck.net Git - etc/vim.git/blob - tests/expression.py

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

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.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Fix parsing of unaligned standalone comments
[etc/vim.git] / tests / expression.py
1 ...
2 'some_string'
3 b'\\xa3'
4 Name
5 None
6 True
7 False
8 1
9 1.0
10 1j
11 True or False
12 True or False or None
13 True and False
14 True and False and None
15 (Name1 and Name2) or Name3
16 Name1 and Name2 or Name3
17 Name1 or (Name2 and Name3)
18 Name1 or Name2 and Name3
19 (Name1 and Name2) or (Name3 and Name4)
20 Name1 and Name2 or Name3 and Name4
21 Name1 or (Name2 and Name3) or Name4
22 Name1 or Name2 and Name3 or Name4
23 v1 << 2
24 1 >> v2
25 1 % finished
26 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
27 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
28 not great
29 ~great
30 +value
31 -1
32 ~int and not v1 ^ 123 + v2 | True
33 (~int) and (not ((v1 ^ (123 + v2)) | True))
34 flags & ~ select.EPOLLIN and waiters.write_task is not None
35 lambda arg: None
36 lambda a=True: a
37 lambda a, b, c=True: a
38 lambda a, b, c=True, *, d=(1 << v2), e='str': a
39 lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
40 1 if True else 2
41 str or None if True else str or bytes or None
42 (str or None) if True else (str or bytes or None)
43 str or None if (1 if True else 2) else str or bytes or None
44 (str or None) if (1 if True else 2) else (str or bytes or None)
45 {'2.7': dead, '3.7': (long_live or die_hard)}
46 {'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
47 {**a, **b, **c}
48 {'2.7', '3.6', '3.7', '3.8', '3.9', ('4.0' if gilectomy else '3.10')}
49 ({'a': 'b'}, (True or False), (+value), 'string', b'bytes') or None
50 ()
51 (1,)
52 (1, 2)
53 (1, 2, 3)
54 []
55 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
56 [1, 2, 3,]
57 {i for i in (1, 2, 3)}
58 {(i ** 2) for i in (1, 2, 3)}
59 {(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}
60 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
61 [i for i in (1, 2, 3)]
62 [(i ** 2) for i in (1, 2, 3)]
63 [(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]
64 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
65 {i: 0 for i in (1, 2, 3)}
66 {i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}
67 {a: b * 2 for a, b in dictionary.items()}
68 {a: b * -2 for a, b in dictionary.items()}
69 {k: v for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension}
70 Python3 > Python2 > COBOL
71 Life is Life
72 call()
73 call(arg)
74 call(kwarg='hey')
75 call(arg, kwarg='hey')
76 call(arg, another, kwarg='hey', **kwargs)
77 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
78 call(*gidgets[:2])
79 call(**self.screen_kwargs)
80 lukasz.langa.pl
81 call.me(maybe)
82 1 .real
83 1.0 .real
84 ....__class__
85 list[str]
86 dict[str, int]
87 tuple[str, ...]
88 tuple[str, int, float, dict[str, int],]
89 very_long_variable_name_filters: t.List[
90     t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
91 ]
92 slice[0]
93 slice[0:1]
94 slice[0:1:2]
95 slice[:]
96 slice[:-1]
97 slice[1:]
98 slice[::-1]
99 slice[d::d + 1]
100 slice[:c, c - 1]
101 numpy[:, 0:1]
102 numpy[:, :-1]
103 numpy[0, :]
104 numpy[:, i]
105 numpy[0, :2]
106 numpy[:N, 0]
107 numpy[:2, :4]
108 numpy[2:4, 1:5]
109 numpy[4:, 2:]
110 numpy[:, (0, 1, 2, 5)]
111 numpy[0, [0]]
112 numpy[:, [i]]
113 numpy[1:c + 1, c]
114 numpy[-(c + 1):, d]
115 numpy[:, l[-2]]
116 numpy[:, ::-1]
117 numpy[np.newaxis, :]
118 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
119 {'2.7': dead, '3.7': long_live or die_hard}
120 {'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}
121 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
122 (SomeName)
123 SomeName
124 (Good, Bad, Ugly)
125 (i for i in (1, 2, 3))
126 ((i ** 2) for i in (1, 2, 3))
127 ((i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))
128 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
129 (*starred)
130 a = (1,)
131 b = 1,
132 c = 1
133 d = (1,) + a + (2,)
134 e = (1,).count(1)
135 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(vars_to_remove)
136 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(vars_to_remove)
137 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()
138 Ø = set()
139 authors.łukasz.say_thanks()
140
141 def gen():
142     yield from outside_of_generator
143     a = (yield)
144
145 async def f():
146     await some.complicated[0].call(with_args=(True or (1 is not 1)))
147 for x, in (1,), (2,), (3,): ...
148 for y in (): ...
149 for z in (i for i in (1, 2, 3)): ...
150 for i in (call()): ...
151 for j in (1 + (2 + 3)): ...
152 while(this and that): ...
153 if (
154     threading.current_thread() != threading.main_thread() and
155     threading.current_thread() != threading.main_thread() or
156     signal.getsignal(signal.SIGINT) != signal.default_int_handler
157 ):
158     return True
159 if (
160     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
161     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
162 ):
163     return True
164 if (
165     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &
166     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
167 ):
168     return True
169 if (
170     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
171     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
172 ):
173     return True
174 if (
175     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -
176     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
177 ):
178     return True
179 if (
180     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *
181     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
182 ):
183     return True
184 if (
185     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
186     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
187 ):
188     return True
189 last_call()
190 # standalone comment at ENDMARKER
191
192
193 # output
194
195
196 ...
197 "some_string"
198 b"\\xa3"
199 Name
200 None
201 True
202 False
203 1
204 1.0
205 1j
206 True or False
207 True or False or None
208 True and False
209 True and False and None
210 (Name1 and Name2) or Name3
211 Name1 and Name2 or Name3
212 Name1 or (Name2 and Name3)
213 Name1 or Name2 and Name3
214 (Name1 and Name2) or (Name3 and Name4)
215 Name1 and Name2 or Name3 and Name4
216 Name1 or (Name2 and Name3) or Name4
217 Name1 or Name2 and Name3 or Name4
218 v1 << 2
219 1 >> v2
220 1 % finished
221 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
222 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
223 not great
224 ~great
225 +value
226 -1
227 ~int and not v1 ^ 123 + v2 | True
228 (~int) and (not ((v1 ^ (123 + v2)) | True))
229 flags & ~select.EPOLLIN and waiters.write_task is not None
230 lambda arg: None
231 lambda a=True: a
232 lambda a, b, c=True: a
233 lambda a, b, c=True, *, d=(1 << v2), e="str": a
234 lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
235 1 if True else 2
236 str or None if True else str or bytes or None
237 (str or None) if True else (str or bytes or None)
238 str or None if (1 if True else 2) else str or bytes or None
239 (str or None) if (1 if True else 2) else (str or bytes or None)
240 {"2.7": dead, "3.7": (long_live or die_hard)}
241 {"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
242 {**a, **b, **c}
243 {"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
244 ({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
245 ()
246 (1,)
247 (1, 2)
248 (1, 2, 3)
249 []
250 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
251 [1, 2, 3]
252 {i for i in (1, 2, 3)}
253 {(i ** 2) for i in (1, 2, 3)}
254 {(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))}
255 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
256 [i for i in (1, 2, 3)]
257 [(i ** 2) for i in (1, 2, 3)]
258 [(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))]
259 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
260 {i: 0 for i in (1, 2, 3)}
261 {i: j for i, j in ((1, "a"), (2, "b"), (3, "c"))}
262 {a: b * 2 for a, b in dictionary.items()}
263 {a: b * -2 for a, b in dictionary.items()}
264 {
265     k: v
266     for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension
267 }
268 Python3 > Python2 > COBOL
269 Life is Life
270 call()
271 call(arg)
272 call(kwarg="hey")
273 call(arg, kwarg="hey")
274 call(arg, another, kwarg="hey", **kwargs)
275 call(
276     this_is_a_very_long_variable_which_will_force_a_delimiter_split,
277     arg,
278     another,
279     kwarg="hey",
280     **kwargs
281 )  # note: no trailing comma pre-3.6
282 call(*gidgets[:2])
283 call(**self.screen_kwargs)
284 lukasz.langa.pl
285 call.me(maybe)
286 1 .real
287 1.0 .real
288 ....__class__
289 list[str]
290 dict[str, int]
291 tuple[str, ...]
292 tuple[str, int, float, dict[str, int]]
293 very_long_variable_name_filters: t.List[
294     t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
295 ]
296 slice[0]
297 slice[0:1]
298 slice[0:1:2]
299 slice[:]
300 slice[:-1]
301 slice[1:]
302 slice[::-1]
303 slice[d::d + 1]
304 slice[:c, c - 1]
305 numpy[:, 0:1]
306 numpy[:, :-1]
307 numpy[0, :]
308 numpy[:, i]
309 numpy[0, :2]
310 numpy[:N, 0]
311 numpy[:2, :4]
312 numpy[2:4, 1:5]
313 numpy[4:, 2:]
314 numpy[:, (0, 1, 2, 5)]
315 numpy[0, [0]]
316 numpy[:, [i]]
317 numpy[1:c + 1, c]
318 numpy[-(c + 1):, d]
319 numpy[:, l[-2]]
320 numpy[:, ::-1]
321 numpy[np.newaxis, :]
322 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
323 {"2.7": dead, "3.7": long_live or die_hard}
324 {"2.7", "3.6", "3.7", "3.8", "3.9", "4.0" if gilectomy else "3.10"}
325 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
326 (SomeName)
327 SomeName
328 (Good, Bad, Ugly)
329 (i for i in (1, 2, 3))
330 ((i ** 2) for i in (1, 2, 3))
331 ((i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
332 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
333 (*starred)
334 a = (1,)
335 b = 1,
336 c = 1
337 d = (1,) + a + (2,)
338 e = (1,).count(1)
339 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
340     vars_to_remove
341 )
342 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
343     vars_to_remove
344 )
345 result = session.query(models.Customer.id).filter(
346     models.Customer.account_id == account_id, models.Customer.email == email_address
347 ).order_by(
348     models.Customer.id.asc()
349 ).all()
350 Ø = set()
351 authors.łukasz.say_thanks()
352
353
354 def gen():
355     yield from outside_of_generator
356
357     a = (yield)
358
359
360 async def f():
361     await some.complicated[0].call(with_args=(True or (1 is not 1)))
362
363
364 for (x,) in (1,), (2,), (3,):
365     ...
366 for y in ():
367     ...
368 for z in (i for i in (1, 2, 3)):
369     ...
370 for i in call():
371     ...
372 for j in 1 + (2 + 3):
373     ...
374 while this and that:
375     ...
376 if (
377     threading.current_thread() != threading.main_thread()
378     and threading.current_thread() != threading.main_thread()
379     or signal.getsignal(signal.SIGINT) != signal.default_int_handler
380 ):
381     return True
382
383 if (
384     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
385     | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
386 ):
387     return True
388
389 if (
390     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
391     & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
392 ):
393     return True
394
395 if (
396     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
397     + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
398 ):
399     return True
400
401 if (
402     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
403     - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
404 ):
405     return True
406
407 if (
408     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
409     * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
410 ):
411     return True
412
413 if (
414     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
415     / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
416 ):
417     return True
418
419 last_call()
420 # standalone comment at ENDMARKER