]> git.madduck.net Git - etc/vim.git/blob - tests/data/preview/long_strings__regression.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:

Improve multiline string handling (#1879)
[etc/vim.git] / tests / data / preview / long_strings__regression.py
1 class A:
2     def foo():
3         result = type(message)("")
4
5
6 # Don't merge multiline (e.g. triple-quoted) strings.
7 def foo():
8     query = (
9         """SELECT xxxxxxxxxxxxxxxxxxxx(xxx)"""
10         """ FROM xxxxxxxxxxxxxxxx WHERE xxxxxxxxxx AND xxx <> xxxxxxxxxxxxxx()""")
11
12 # There was a bug where tuples were being identified as long strings.
13 long_tuple = ('Apple', 'Berry', 'Cherry', 'Dill', 'Evergreen', 'Fig',
14            'Grape', 'Harry', 'Iglu', 'Jaguar')
15
16 stupid_format_method_bug = "Some really long string that just so happens to be the {} {} to force the 'format' method to hang over the line length boundary. This is pretty annoying.".format("perfect", "length")
17
18 class A:
19     def foo():
20         os.system("This is a regression test. xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxx.".format("xxxxxxxxxx", "xxxxxx", "xxxxxxxxxx"))
21
22
23 class A:
24     def foo():
25         XXXXXXXXXXXX.append(
26             (
27                 "xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx, xxxx_xxxx_xxxxxxxxxx={})".format(
28                     xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx
29                 ),
30                 my_var,
31                 my_other_var,
32             )
33         )
34
35 class A:
36     class B:
37         def foo():
38             bar(
39                 (
40                     "[{}]: xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx={}"
41                     " xxxx_xxxx_xxxxxxxxxx={}, xxxx={})"
42                     .format(xxxx._xxxxxxxxxxxxxx, xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx, xxxxxxx)
43                 ),
44                 varX,
45                 varY,
46                 varZ,
47             )
48
49 def foo(xxxx):
50     for (xxx_xxxx, _xxx_xxx, _xxx_xxxxx, xxx_xxxx) in xxxx:
51         for xxx in xxx_xxxx:
52             assert ("x" in xxx) or (
53                 xxx in xxx_xxx_xxxxx
54             ), "{0} xxxxxxx xx {1}, xxx {1} xx xxx xx xxxx xx xxx xxxx: xxx xxxx {2}".format(
55                 xxx_xxxx, xxx, xxxxxx.xxxxxxx(xxx_xxx_xxxxx)
56             )
57
58 class A:
59     def disappearing_comment():
60         return (
61             (  # xx -x xxxxxxx xx xxx xxxxxxx.
62                 '{{xxx_xxxxxxxxxx_xxxxxxxx}} xxx xxxx'
63                 ' {} {{xxxx}} >&2'
64                 .format(
65                     "{xxxx} {xxxxxx}"
66                     if xxxxx.xx_xxxxxxxxxx
67                     else ( # Disappearing Comment
68                         "--xxxxxxx --xxxxxx=x --xxxxxx-xxxxx=xxxxxx"
69                         " --xxxxxx-xxxx=xxxxxxxxxxx.xxx"
70                     )
71                 )
72             ),
73             (x, y, z),
74         )
75
76 class A:
77     class B:
78         def foo():
79             xxxxx_xxxx(
80                 xx, "\t"
81                 "@xxxxxx '{xxxx_xxx}\t' > {xxxxxx_xxxx}.xxxxxxx;"
82                 "{xxxx_xxx} >> {xxxxxx_xxxx}.xxxxxxx 2>&1; xx=$$?;"
83                 "xxxx $$xx"
84                 .format(xxxx_xxx=xxxx_xxxxxxx, xxxxxx_xxxx=xxxxxxx + "/" + xxxx_xxx_xxxx, x=xxx_xxxxx_xxxxx_xxx),
85                 x,
86                 y,
87                 z,
88             )
89
90 func_call_where_string_arg_has_method_call_and_bad_parens(
91     (
92         "A long string with {}. This string is so long that it is ridiculous. It can't fit on one line at alllll.".format("formatting")
93     ),
94 )
95
96 func_call_where_string_arg_has_old_fmt_and_bad_parens(
97     (
98         "A long string with {}. This string is so long that it is ridiculous. It can't fit on one line at alllll." % "formatting"
99     ),
100 )
101
102 func_call_where_string_arg_has_old_fmt_and_bad_parens(
103     (
104         "A long string with {}. This {} is so long that it is ridiculous. It can't fit on one line at alllll." % ("formatting", "string")
105     ),
106 )
107
108 class A:
109     def append(self):
110         if True:
111             xxxx.xxxxxxx.xxxxx( ('xxxxxxxxxx xxxx xx xxxxxx(%x) xx %x xxxx xx xxx %x.xx'
112                                  % (len(self) + 1,
113                                     xxxx.xxxxxxxxxx,
114                                     xxxx.xxxxxxxxxx))
115                                 + (' %.3f (%s) to %.3f (%s).\n'
116                                    % (xxxx.xxxxxxxxx,
117                                       xxxx.xxxxxxxxxxxxxx(xxxx.xxxxxxxxx),
118                                       x,
119                                       xxxx.xxxxxxxxxxxxxx( xx)
120                                       )))
121
122 class A:
123     def foo():
124         some_func_call(
125             'xxxxxxxxxx',
126             (
127                 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
128                 "\"xxxx xxxxxxx xxxxxx xxxx; xxxx xxxxxx_xxxxx xxxxxx xxxx; "
129                 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
130             ),
131             None,
132             ('xxxxxxxxxxx',),
133         ),
134
135 class A:
136     def foo():
137         some_func_call(
138             (
139                 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
140                 "xxxx, ('xxxxxxx xxxxxx xxxx, xxxx') xxxxxx_xxxxx xxxxxx xxxx; "
141                 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
142             ),
143             None,
144             ('xxxxxxxxxxx',),
145         ),
146
147 xxxxxxx = { 'xx' : 'xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} \
148 -xx {1} -xx xxx=xxx_xxxx,xxx_xx,xxx_xxx,xxx_xxxx,xxx_xx,xxx_xxx |\
149  xxxxxx -x xxxxxxxx -x xxxxxxxx -x',
150          'xx' : 'xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} \
151 -xx {1} -xx xxx=xxx_xxxx_xxx_xxxx,xxx_xx_xxx_xxxx,xxx_xxxx_xxx_xxxx,\
152 xxx_xx_xxxx_xxxx,xxx_xxx_xxxx,xxx_xxx_xxxx xxxx=xxx | xxxxxx -x xxxxxxxx -x xxxxxxxx -x'
153 }
154
155 class A:
156     def foo(self):
157         if True:
158             xxxxx_xxxxxxxxxxxx('xxx xxxxxx xxx xxxxxxxxx.xx xx xxxxxxxx.  xxx xxxxxxxxxxxxx.xx xxxxxxx '
159                                + 'xx xxxxxx xxxxxx xxxxxx xx xxxxxxx xxx xxx ${0} xx x xxxxxxxx xxxxx'.xxxxxx(xxxxxx_xxxxxx_xxx))
160
161 class A:
162     class B:
163         def foo():
164             row = {
165                 'xxxxxxxxxxxxxxx' : xxxxxx_xxxxx_xxxx,
166                 # 'xxxxxxxxxxxxxxxxxxxxxxx'
167                 # 'xxxxxxxxxxxxxxxxxxxxxx'
168                 # 'xxxxxxxxxxxxxxxxxx'
169                 # 'xxxxxxxxxxxxxxxxx'
170                 'xxxxxxxxxx' : xxxxx_xxxxx,
171                 }
172
173 class A:
174     def xxxx_xxx_xx_xxxxxxxxxx_xxxx_xxxxxxxxx(xxxx):
175         xxxxxxxx = [
176             xxxxxxxxxxxxxxxx(
177                 'xxxx',
178                 xxxxxxxxxxx={
179                     'xxxx' : 1.0,
180                 },
181                 xxxxxx={'xxxxxx 1' : xxxxxx(xxxx='xxxxxx 1', xxxxxx=600.0)},
182                 xxxxxxxx_xxxxxxx=0.0,
183             ),
184             xxxxxxxxxxxxxxxx(
185                 'xxxxxxx',
186                 xxxxxxxxxxx={
187                     'xxxx' : 1.0,
188                 },
189                 xxxxxx={'xxxxxx 1' : xxxxxx(xxxx='xxxxxx 1', xxxxxx=200.0)},
190                 xxxxxxxx_xxxxxxx=0.0,
191             ),
192             xxxxxxxxxxxxxxxx(
193                 'xxxx',
194             ),
195         ]
196
197 some_dictionary = {
198     'xxxxx006': ['xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx== xxxxx000 xxxxxxxxxx\n',
199                  'xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx== xxxxx010 xxxxxxxxxx\n'],
200     'xxxxx016': ['xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx== xxxxx000 xxxxxxxxxx\n',
201                  'xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx== xxxxx010 xxxxxxxxxx\n']
202 }
203
204 def foo():
205     xxx_xxx = (
206         'xxxx xxx xxxxxxxx_xxxx xx "xxxxxxxxxx".'
207         '\n xxx: xxxxxx xxxxxxxx_xxxx=xxxxxxxxxx'
208     ) # xxxx xxxxxxxxxx xxxx xx xxxx xx xxx xxxxxxxx xxxxxx xxxxx.
209
210 some_tuple = ("some string", "some string" " which should be joined")
211
212 some_commented_string = (
213     "This string is long but not so long that it needs hahahah toooooo be so greatttt"  # This comment gets thrown to the top.
214     " {} that I just can't think of any more good words to say about it at"
215     " allllllllllll".format("ha")  # comments here are fine
216 )
217
218 some_commented_string = (
219     "This string is long but not so long that it needs hahahah toooooo be so greatttt"  # But these
220     " {} that I just can't think of any more good words to say about it at"  # comments will stay
221     " allllllllllll".format("ha")  # comments here are fine
222 )
223
224 lpar_and_rpar_have_comments = func_call(  # LPAR Comment
225     "Long really ridiculous type of string that shouldn't really even exist at all. I mean commmme onnn!!!",  # Comma Comment
226 )  # RPAR Comment
227
228 cmd_fstring = (
229     f"sudo -E deluge-console info --detailed --sort-reverse=time_added "
230     f"{'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
231 )
232
233 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
234
235 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {'{{}}' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
236
237 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {{'' if ID is None else ID}} | perl -nE 'print if /^{field}:/'"
238
239 fstring = f"This string really doesn't need to be an {{{{fstring}}}}, but this one most certainly, absolutely {does}."
240
241 fstring = (
242     f"We have to remember to escape {braces}."
243     " Like {these}."
244     f" But not {this}."
245 )
246
247 class A:
248     class B:
249         def foo():
250             st_error = STError(
251                 f"This string ({string_leaf.value}) appears to be pointless (i.e. has"
252                 " no parent)."
253             )
254
255 def foo():
256     user_regex = _lazy_re_compile(
257         r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z"  # dot-atom
258         r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)',  # quoted-string
259         re.IGNORECASE)
260
261 def foo():
262     user_regex = _lazy_re_compile(
263         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # dot-atom
264         'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',  # quoted-string
265         xyz
266     )
267
268 def foo():
269     user_regex = _lazy_re_compile(
270         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # dot-atom
271         'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',  # quoted-string
272         xyz
273     )
274
275 class A:
276     class B:
277         def foo():
278             if not hasattr(module, name):
279                 raise ValueError(
280                     "Could not find object %s in %s.\n"
281                     "Please note that you cannot serialize things like inner "
282                     "classes. Please move the object into the main module "
283                     "body to use migrations.\n"
284                     "For more information, see "
285                     "https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
286                     % (name, module_name, get_docs_version()))
287
288 class A:
289     class B:
290         def foo():
291             if not hasattr(module, name):
292                 raise ValueError(
293                     "Could not find object %s in %s.\nPlease note that you cannot serialize things like inner classes. Please move the object into the main module body to use migrations.\nFor more information, see https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
294                     % (name, module_name, get_docs_version()))
295
296 x = (
297     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
298     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
299     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
300     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
301 )
302
303 class Step(StepBase):
304     def who(self):
305         self.cmd = 'SR AAAA-CORRECT NAME IS {last_name} {first_name}{middle_name} {title}/P{passenger_association}'.format(
306             last_name=last_name,
307             first_name=first_name,
308             middle_name=middle_name,
309             title=title,
310             passenger_association=passenger_association,
311         )
312
313 xxxxxxx_xxxxxx_xxxxxxx = xxx(
314     [
315         xxxxxxxxxxxx(
316             xxxxxx_xxxxxxx=(
317                 '((x.aaaaaaaaa = "xxxxxx.xxxxxxxxxxxxxxxxxxxxx") || (x.xxxxxxxxx = "xxxxxxxxxxxx")) && '
318                 # xxxxx xxxxxxxxxxxx xxxx xxx (xxxxxxxxxxxxxxxx) xx x xxxxxxxxx xx xxxxxx.
319                 "(x.bbbbbbbbbbbb.xxx != "
320                 '"xxx:xxx:xxx::cccccccccccc:xxxxxxx-xxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxx") && '
321             )
322         )
323     ]
324 )
325
326 if __name__ == "__main__":
327     for i in range(4, 8):
328         cmd = (
329             r"for pid in $(ps aux | grep paster | grep -v grep | grep '\-%d' | awk '{print $2}'); do kill $pid; done"
330             % (i)
331         )
332
333 def A():
334     def B():
335         def C():
336             def D():
337                 def E():
338                     def F():
339                         def G():
340                             assert (
341                                 c_float(val[0][0] / val[0][1]).value
342                                 == c_float(value[0][0] / value[0][1]).value
343                             ), "%s didn't roundtrip" % tag
344
345 class xxxxxxxxxxxxxxxxxxxxx(xxxx.xxxxxxxxxxxxx):
346     def xxxxxxx_xxxxxx(xxxx):
347         assert xxxxxxx_xxxx in [
348             x.xxxxx.xxxxxx.xxxxx.xxxxxx,
349             x.xxxxx.xxxxxx.xxxxx.xxxx,
350         ], ("xxxxxxxxxxx xxxxxxx xxxx (xxxxxx xxxx) %x xxx xxxxx" % xxxxxxx_xxxx)
351
352 value.__dict__[
353     key
354 ] = "test"  # set some Thrift field to non-None in the struct aa bb cc dd ee
355
356 RE_ONE_BACKSLASH = {
357     "asdf_hjkl_jkl": re.compile(
358         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
359     ),
360 }
361
362 RE_TWO_BACKSLASHES = {
363     "asdf_hjkl_jkl": re.compile(
364         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
365     ),
366 }
367
368 RE_THREE_BACKSLASHES = {
369     "asdf_hjkl_jkl": re.compile(
370         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
371     ),
372 }
373
374 # We do NOT split on f-string expressions.
375 print(f"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam. {[f'{i}' for i in range(10)]}")
376 x = f"This is a long string which contains an f-expr that should not split {{{[i for i in range(5)]}}}."
377
378 # The parens should NOT be removed in this case.
379 (
380     "my very long string that should get formatted if I'm careful to make sure it goes"
381     " over 88 characters which it has now"
382 )
383
384 # The parens should NOT be removed in this case.
385 (
386     "my very long string that should get formatted if I'm careful to make sure it goes over 88 characters which"
387     " it has now"
388 )
389
390 # The parens should NOT be removed in this case.
391 (
392     "my very long string"
393     " that should get formatted"
394     " if I'm careful to make sure"
395     " it goes over 88 characters which"
396     " it has now"
397 )
398
399
400 def _legacy_listen_examples():
401     text += (
402         "    \"listen for the '%(event_name)s' event\"\n"
403         "\n    # ... (event logic logic logic) ...\n"
404         % {
405             "since": since,
406         }
407     )
408
409
410 class X:
411     async def foo(self):
412         msg = ""
413         for candidate in CANDIDATES:
414             msg += (
415                 "**{candidate.object_type} {candidate.rev}**"
416                 " - {candidate.description}\n"
417             )
418
419
420 temp_msg = (
421     f"{f'{humanize_number(pos)}.': <{pound_len+2}} "
422     f"{balance: <{bal_len + 5}} "
423     f"<<{author.display_name}>>\n"
424 )
425
426 assert str(suffix_arr) == (
427     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
428     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
429     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
430 )
431 assert str(suffix_arr) != (
432     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
433     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
434     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
435 )
436 assert str(suffix_arr) <= (
437     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
438     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
439     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
440 )
441 assert str(suffix_arr) >= (
442     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
443     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
444     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
445 )
446 assert str(suffix_arr) < (
447     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
448     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
449     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
450 )
451 assert str(suffix_arr) > (
452     "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
453     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
454     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
455 )
456 assert str(suffix_arr) in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
457 assert str(suffix_arr) not in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
458 message = (
459     f"1. Go to Google Developers Console and log in with your Google account."
460     "(https://console.developers.google.com/)"
461     "2. You should be prompted to create a new project (name does not matter)."
462     "3. Click on Enable APIs and Services at the top."
463     "4. In the list of APIs choose or search for YouTube Data API v3 and "
464     "click on it. Choose Enable."
465     "5. Click on Credentials on the left navigation bar."
466     "6. Click on Create Credential at the top."
467     '7. At the top click the link for "API key".'
468     "8. No application restrictions are needed. Click Create at the bottom."
469     "9. You now have a key to add to `{prefix}set api youtube api_key`"
470 )
471 message = (
472     f"1. Go to Google Developers Console and log in with your Google account."
473     "(https://console.developers.google.com/)"
474     "2. You should be prompted to create a new project (name does not matter)."
475     f"3. Click on Enable APIs and Services at the top."
476     "4. In the list of APIs choose or search for YouTube Data API v3 and "
477     "click on it. Choose Enable."
478     f"5. Click on Credentials on the left navigation bar."
479     "6. Click on Create Credential at the top."
480     '7. At the top click the link for "API key".'
481     "8. No application restrictions are needed. Click Create at the bottom."
482     "9. You now have a key to add to `{prefix}set api youtube api_key`"
483 )
484 message = (
485     f"1. Go to Google Developers Console and log in with your Google account."
486     "(https://console.developers.google.com/)"
487     "2. You should be prompted to create a new project (name does not matter)."
488     f"3. Click on Enable APIs and Services at the top."
489     "4. In the list of APIs choose or search for YouTube Data API v3 and "
490     "click on it. Choose Enable."
491     f"5. Click on Credentials on the left navigation bar."
492     "6. Click on Create Credential at the top."
493     '7. At the top click the link for "API key".'
494     "8. No application restrictions are needed. Click Create at the bottom."
495     f"9. You now have a key to add to `{prefix}set api youtube api_key`"
496 )
497
498 # It shouldn't matter if the string prefixes are capitalized.
499 temp_msg = (
500     F"{F'{humanize_number(pos)}.': <{pound_len+2}} "
501     F"{balance: <{bal_len + 5}} "
502     F"<<{author.display_name}>>\n"
503 )
504
505 fstring = (
506     F"We have to remember to escape {braces}."
507     " Like {these}."
508     F" But not {this}."
509 )
510
511 welcome_to_programming = R"hello," R" world!"
512
513 fstring = F"f-strings definitely make things more {difficult} than they need to be for {{black}}. But boy they sure are handy. The problem is that some lines will need to have the 'f' whereas others do not. This {line}, for example, needs one."
514
515 x = F"This is a long string which contains an f-expr that should not split {{{[i for i in range(5)]}}}."
516
517 x = (
518     "\N{BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR}\N{VARIATION SELECTOR-16}"
519 )
520
521 xxxxxx_xxx_xxxx_xx_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxx_xxxx_xxxxx = xxxx.xxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxx(
522     xx_xxxxxx={
523         "x3_xxxxxxxx": "xxx3_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx",
524     },
525 )
526
527 # Regression test for https://github.com/psf/black/issues/3117.
528 some_dict = {
529     "something_something":
530         r"Lorem ipsum dolor sit amet, an sed convenire eloquentiam \t"
531         r"signiferumque, duo ea vocibus consetetur scriptorem. Facer \t",
532 }
533
534 # Regression test for https://github.com/psf/black/issues/3459.
535 xxxx(
536     empty_str_as_first_split=''
537     f'xxxxxxx {xxxxxxxxxx} xxx xxxxxxxxxx xxxxx xxx xxx xx '
538     'xxxxx xxxxxxxxx xxxxxxx, xxx xxxxxxxxxxx xxx xxxxx. '
539     f'xxxxxxxxxxxxx xxxx xx xxxxxxxxxx. xxxxx: {x.xxx}',
540     empty_u_str_as_first_split=u''
541     f'xxxxxxx {xxxxxxxxxx} xxx xxxxxxxxxx xxxxx xxx xxx xx '
542     'xxxxx xxxxxxxxx xxxxxxx, xxx xxxxxxxxxxx xxx xxxxx. '
543     f'xxxxxxxxxxxxx xxxx xx xxxxxxxxxx. xxxxx: {x.xxx}',
544 )
545
546 # Regression test for https://github.com/psf/black/issues/3455.
547 a_dict = {
548     "/this/is/a/very/very/very/very/very/very/very/very/very/very/long/key/without/spaces":
549         # And there is a comment before the value
550         ("item1", "item2", "item3"),
551 }
552
553 # Regression test for https://github.com/psf/black/issues/3506.
554 s = (
555     "With single quote: ' "
556     f" {my_dict['foo']}"
557     ' With double quote: " '
558     f' {my_dict["bar"]}'
559 )
560
561 s = f'Lorem Ipsum is simply dummy text of the printing and typesetting industry:\'{my_dict["foo"]}\''
562
563
564 # output
565
566
567 class A:
568     def foo():
569         result = type(message)("")
570
571
572 # Don't merge multiline (e.g. triple-quoted) strings.
573 def foo():
574     query = (
575         """SELECT xxxxxxxxxxxxxxxxxxxx(xxx)"""
576         """ FROM xxxxxxxxxxxxxxxx WHERE xxxxxxxxxx AND xxx <> xxxxxxxxxxxxxx()"""
577     )
578
579
580 # There was a bug where tuples were being identified as long strings.
581 long_tuple = (
582     "Apple",
583     "Berry",
584     "Cherry",
585     "Dill",
586     "Evergreen",
587     "Fig",
588     "Grape",
589     "Harry",
590     "Iglu",
591     "Jaguar",
592 )
593
594 stupid_format_method_bug = (
595     "Some really long string that just so happens to be the {} {} to force the 'format'"
596     " method to hang over the line length boundary. This is pretty annoying.".format(
597         "perfect", "length"
598     )
599 )
600
601
602 class A:
603     def foo():
604         os.system(
605             "This is a regression test. xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx"
606             " xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx"
607             " xxxx.".format("xxxxxxxxxx", "xxxxxx", "xxxxxxxxxx")
608         )
609
610
611 class A:
612     def foo():
613         XXXXXXXXXXXX.append(
614             (
615                 "xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx, xxxx_xxxx_xxxxxxxxxx={})"
616                 .format(xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx),
617                 my_var,
618                 my_other_var,
619             )
620         )
621
622
623 class A:
624     class B:
625         def foo():
626             bar(
627                 "[{}]: xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx={}"
628                 " xxxx_xxxx_xxxxxxxxxx={}, xxxx={})".format(
629                     xxxx._xxxxxxxxxxxxxx, xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx, xxxxxxx
630                 ),
631                 varX,
632                 varY,
633                 varZ,
634             )
635
636
637 def foo(xxxx):
638     for xxx_xxxx, _xxx_xxx, _xxx_xxxxx, xxx_xxxx in xxxx:
639         for xxx in xxx_xxxx:
640             assert ("x" in xxx) or (xxx in xxx_xxx_xxxxx), (
641                 "{0} xxxxxxx xx {1}, xxx {1} xx xxx xx xxxx xx xxx xxxx: xxx xxxx {2}"
642                 .format(xxx_xxxx, xxx, xxxxxx.xxxxxxx(xxx_xxx_xxxxx))
643             )
644
645
646 class A:
647     def disappearing_comment():
648         return (
649             (  # xx -x xxxxxxx xx xxx xxxxxxx.
650                 "{{xxx_xxxxxxxxxx_xxxxxxxx}} xxx xxxx {} {{xxxx}} >&2".format(
651                     "{xxxx} {xxxxxx}"
652                     if xxxxx.xx_xxxxxxxxxx
653                     else (  # Disappearing Comment
654                         "--xxxxxxx --xxxxxx=x --xxxxxx-xxxxx=xxxxxx"
655                         " --xxxxxx-xxxx=xxxxxxxxxxx.xxx"
656                     )
657                 )
658             ),
659             (x, y, z),
660         )
661
662
663 class A:
664     class B:
665         def foo():
666             xxxxx_xxxx(
667                 xx,
668                 "\t"
669                 "@xxxxxx '{xxxx_xxx}\t' > {xxxxxx_xxxx}.xxxxxxx;"
670                 "{xxxx_xxx} >> {xxxxxx_xxxx}.xxxxxxx 2>&1; xx=$$?;"
671                 "xxxx $$xx".format(
672                     xxxx_xxx=xxxx_xxxxxxx,
673                     xxxxxx_xxxx=xxxxxxx + "/" + xxxx_xxx_xxxx,
674                     x=xxx_xxxxx_xxxxx_xxx,
675                 ),
676                 x,
677                 y,
678                 z,
679             )
680
681
682 func_call_where_string_arg_has_method_call_and_bad_parens(
683     "A long string with {}. This string is so long that it is ridiculous. It can't fit"
684     " on one line at alllll.".format("formatting"),
685 )
686
687 func_call_where_string_arg_has_old_fmt_and_bad_parens(
688     "A long string with {}. This string is so long that it is ridiculous. It can't fit"
689     " on one line at alllll." % "formatting",
690 )
691
692 func_call_where_string_arg_has_old_fmt_and_bad_parens(
693     "A long string with {}. This {} is so long that it is ridiculous. It can't fit on"
694     " one line at alllll." % ("formatting", "string"),
695 )
696
697
698 class A:
699     def append(self):
700         if True:
701             xxxx.xxxxxxx.xxxxx(
702                 "xxxxxxxxxx xxxx xx xxxxxx(%x) xx %x xxxx xx xxx %x.xx"
703                 % (len(self) + 1, xxxx.xxxxxxxxxx, xxxx.xxxxxxxxxx)
704                 + " %.3f (%s) to %.3f (%s).\n"
705                 % (
706                     xxxx.xxxxxxxxx,
707                     xxxx.xxxxxxxxxxxxxx(xxxx.xxxxxxxxx),
708                     x,
709                     xxxx.xxxxxxxxxxxxxx(xx),
710                 )
711             )
712
713
714 class A:
715     def foo():
716         some_func_call(
717             "xxxxxxxxxx",
718             (
719                 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
720                 '"xxxx xxxxxxx xxxxxx xxxx; xxxx xxxxxx_xxxxx xxxxxx xxxx; '
721                 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
722             ),
723             None,
724             ("xxxxxxxxxxx",),
725         ),
726
727
728 class A:
729     def foo():
730         some_func_call(
731             (
732                 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
733                 "xxxx, ('xxxxxxx xxxxxx xxxx, xxxx') xxxxxx_xxxxx xxxxxx xxxx; "
734                 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
735             ),
736             None,
737             ("xxxxxxxxxxx",),
738         ),
739
740
741 xxxxxxx = {
742     "xx": (
743         "xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} -xx {1} -xx"
744         " xxx=xxx_xxxx,xxx_xx,xxx_xxx,xxx_xxxx,xxx_xx,xxx_xxx | xxxxxx -x xxxxxxxx -x"
745         " xxxxxxxx -x"
746     ),
747     "xx": (
748         "xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} -xx {1} -xx"
749         " xxx=xxx_xxxx_xxx_xxxx,xxx_xx_xxx_xxxx,xxx_xxxx_xxx_xxxx,xxx_xx_xxxx_xxxx,xxx_xxx_xxxx,xxx_xxx_xxxx"
750         " xxxx=xxx | xxxxxx -x xxxxxxxx -x xxxxxxxx -x"
751     ),
752 }
753
754
755 class A:
756     def foo(self):
757         if True:
758             xxxxx_xxxxxxxxxxxx(
759                 "xxx xxxxxx xxx xxxxxxxxx.xx xx xxxxxxxx.  xxx xxxxxxxxxxxxx.xx"
760                 " xxxxxxx "
761                 + "xx xxxxxx xxxxxx xxxxxx xx xxxxxxx xxx xxx ${0} xx x xxxxxxxx xxxxx"
762                 .xxxxxx(xxxxxx_xxxxxx_xxx)
763             )
764
765
766 class A:
767     class B:
768         def foo():
769             row = {
770                 "xxxxxxxxxxxxxxx": xxxxxx_xxxxx_xxxx,
771                 # 'xxxxxxxxxxxxxxxxxxxxxxx'
772                 # 'xxxxxxxxxxxxxxxxxxxxxx'
773                 # 'xxxxxxxxxxxxxxxxxx'
774                 # 'xxxxxxxxxxxxxxxxx'
775                 "xxxxxxxxxx": xxxxx_xxxxx,
776             }
777
778
779 class A:
780     def xxxx_xxx_xx_xxxxxxxxxx_xxxx_xxxxxxxxx(xxxx):
781         xxxxxxxx = [
782             xxxxxxxxxxxxxxxx(
783                 "xxxx",
784                 xxxxxxxxxxx={
785                     "xxxx": 1.0,
786                 },
787                 xxxxxx={"xxxxxx 1": xxxxxx(xxxx="xxxxxx 1", xxxxxx=600.0)},
788                 xxxxxxxx_xxxxxxx=0.0,
789             ),
790             xxxxxxxxxxxxxxxx(
791                 "xxxxxxx",
792                 xxxxxxxxxxx={
793                     "xxxx": 1.0,
794                 },
795                 xxxxxx={"xxxxxx 1": xxxxxx(xxxx="xxxxxx 1", xxxxxx=200.0)},
796                 xxxxxxxx_xxxxxxx=0.0,
797             ),
798             xxxxxxxxxxxxxxxx(
799                 "xxxx",
800             ),
801         ]
802
803
804 some_dictionary = {
805     "xxxxx006": [
806         (
807             "xxx-xxx"
808             " xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx=="
809             " xxxxx000 xxxxxxxxxx\n"
810         ),
811         (
812             "xxx-xxx"
813             " xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx=="
814             " xxxxx010 xxxxxxxxxx\n"
815         ),
816     ],
817     "xxxxx016": [
818         (
819             "xxx-xxx"
820             " xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx=="
821             " xxxxx000 xxxxxxxxxx\n"
822         ),
823         (
824             "xxx-xxx"
825             " xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx=="
826             " xxxxx010 xxxxxxxxxx\n"
827         ),
828     ],
829 }
830
831
832 def foo():
833     xxx_xxx = (  # xxxx xxxxxxxxxx xxxx xx xxxx xx xxx xxxxxxxx xxxxxx xxxxx.
834         'xxxx xxx xxxxxxxx_xxxx xx "xxxxxxxxxx".\n xxx: xxxxxx xxxxxxxx_xxxx=xxxxxxxxxx'
835     )
836
837
838 some_tuple = ("some string", "some string which should be joined")
839
840 some_commented_string = (  # This comment gets thrown to the top.
841     "This string is long but not so long that it needs hahahah toooooo be so greatttt"
842     " {} that I just can't think of any more good words to say about it at"
843     " allllllllllll".format("ha")  # comments here are fine
844 )
845
846 some_commented_string = (
847     "This string is long but not so long that it needs hahahah toooooo be so greatttt"  # But these
848     " {} that I just can't think of any more good words to say about it at"  # comments will stay
849     " allllllllllll".format("ha")  # comments here are fine
850 )
851
852 lpar_and_rpar_have_comments = func_call(  # LPAR Comment
853     (  # Comma Comment
854         "Long really ridiculous type of string that shouldn't really even exist at all."
855         " I mean commmme onnn!!!"
856     ),
857 )  # RPAR Comment
858
859 cmd_fstring = (
860     "sudo -E deluge-console info --detailed --sort-reverse=time_added "
861     f"{'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
862 )
863
864 cmd_fstring = (
865     "sudo -E deluge-console info --detailed --sort-reverse=time_added"
866     f" {'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
867 )
868
869 cmd_fstring = (
870     "sudo -E deluge-console info --detailed --sort-reverse=time_added"
871     f" {'{{}}' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
872 )
873
874 cmd_fstring = (
875     "sudo -E deluge-console info --detailed --sort-reverse=time_added {'' if ID is"
876     f" None else ID}} | perl -nE 'print if /^{field}:/'"
877 )
878
879 fstring = (
880     "This string really doesn't need to be an {{fstring}}, but this one most"
881     f" certainly, absolutely {does}."
882 )
883
884 fstring = f"We have to remember to escape {braces}. Like {{these}}. But not {this}."
885
886
887 class A:
888     class B:
889         def foo():
890             st_error = STError(
891                 f"This string ({string_leaf.value}) appears to be pointless (i.e. has"
892                 " no parent)."
893             )
894
895
896 def foo():
897     user_regex = _lazy_re_compile(
898         r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z"  # dot-atom
899         r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)',  # quoted-string
900         re.IGNORECASE,
901     )
902
903
904 def foo():
905     user_regex = _lazy_re_compile(
906         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # dot-atom
907         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",  # quoted-string
908         xyz,
909     )
910
911
912 def foo():
913     user_regex = _lazy_re_compile(
914         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # dot-atom
915         "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",  # quoted-string
916         xyz,
917     )
918
919
920 class A:
921     class B:
922         def foo():
923             if not hasattr(module, name):
924                 raise ValueError(
925                     "Could not find object %s in %s.\n"
926                     "Please note that you cannot serialize things like inner "
927                     "classes. Please move the object into the main module "
928                     "body to use migrations.\n"
929                     "For more information, see "
930                     "https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
931                     % (name, module_name, get_docs_version())
932                 )
933
934
935 class A:
936     class B:
937         def foo():
938             if not hasattr(module, name):
939                 raise ValueError(
940                     "Could not find object %s in %s.\nPlease note that you cannot"
941                     " serialize things like inner classes. Please move the object into"
942                     " the main module body to use migrations.\nFor more information,"
943                     " see https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
944                     % (name, module_name, get_docs_version())
945                 )
946
947
948 x = (
949     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
950     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
951     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
952     "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
953 )
954
955
956 class Step(StepBase):
957     def who(self):
958         self.cmd = (
959             "SR AAAA-CORRECT NAME IS {last_name} {first_name}{middle_name}"
960             " {title}/P{passenger_association}".format(
961                 last_name=last_name,
962                 first_name=first_name,
963                 middle_name=middle_name,
964                 title=title,
965                 passenger_association=passenger_association,
966             )
967         )
968
969
970 xxxxxxx_xxxxxx_xxxxxxx = xxx(
971     [
972         xxxxxxxxxxxx(
973             xxxxxx_xxxxxxx=(
974                 '((x.aaaaaaaaa = "xxxxxx.xxxxxxxxxxxxxxxxxxxxx") || (x.xxxxxxxxx ='
975                 ' "xxxxxxxxxxxx")) && '
976                 # xxxxx xxxxxxxxxxxx xxxx xxx (xxxxxxxxxxxxxxxx) xx x xxxxxxxxx xx xxxxxx.
977                 "(x.bbbbbbbbbbbb.xxx != "
978                 '"xxx:xxx:xxx::cccccccccccc:xxxxxxx-xxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxx") && '
979             )
980         )
981     ]
982 )
983
984 if __name__ == "__main__":
985     for i in range(4, 8):
986         cmd = (
987             r"for pid in $(ps aux | grep paster | grep -v grep | grep '\-%d' | awk"
988             r" '{print $2}'); do kill $pid; done" % (i)
989         )
990
991
992 def A():
993     def B():
994         def C():
995             def D():
996                 def E():
997                     def F():
998                         def G():
999                             assert (
1000                                 c_float(val[0][0] / val[0][1]).value
1001                                 == c_float(value[0][0] / value[0][1]).value
1002                             ), "%s didn't roundtrip" % tag
1003
1004
1005 class xxxxxxxxxxxxxxxxxxxxx(xxxx.xxxxxxxxxxxxx):
1006     def xxxxxxx_xxxxxx(xxxx):
1007         assert xxxxxxx_xxxx in [
1008             x.xxxxx.xxxxxx.xxxxx.xxxxxx,
1009             x.xxxxx.xxxxxx.xxxxx.xxxx,
1010         ], (
1011             "xxxxxxxxxxx xxxxxxx xxxx (xxxxxx xxxx) %x xxx xxxxx" % xxxxxxx_xxxx
1012         )
1013
1014
1015 value.__dict__[key] = (
1016     "test"  # set some Thrift field to non-None in the struct aa bb cc dd ee
1017 )
1018
1019 RE_ONE_BACKSLASH = {
1020     "asdf_hjkl_jkl": re.compile(
1021         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
1022     ),
1023 }
1024
1025 RE_TWO_BACKSLASHES = {
1026     "asdf_hjkl_jkl": re.compile(
1027         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\"
1028         r" )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
1029     ),
1030 }
1031
1032 RE_THREE_BACKSLASHES = {
1033     "asdf_hjkl_jkl": re.compile(
1034         r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
1035     ),
1036 }
1037
1038 # We do NOT split on f-string expressions.
1039 print(
1040     "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam."
1041     f" {[f'{i}' for i in range(10)]}"
1042 )
1043 x = (
1044     "This is a long string which contains an f-expr that should not split"
1045     f" {{{[i for i in range(5)]}}}."
1046 )
1047
1048 # The parens should NOT be removed in this case.
1049 (
1050     "my very long string that should get formatted if I'm careful to make sure it goes"
1051     " over 88 characters which it has now"
1052 )
1053
1054 # The parens should NOT be removed in this case.
1055 (
1056     "my very long string that should get formatted if I'm careful to make sure it goes"
1057     " over 88 characters which it has now"
1058 )
1059
1060 # The parens should NOT be removed in this case.
1061 (
1062     "my very long string"
1063     " that should get formatted"
1064     " if I'm careful to make sure"
1065     " it goes over 88 characters which"
1066     " it has now"
1067 )
1068
1069
1070 def _legacy_listen_examples():
1071     text += (
1072         "    \"listen for the '%(event_name)s' event\"\n"
1073         "\n    # ... (event logic logic logic) ...\n"
1074         % {
1075             "since": since,
1076         }
1077     )
1078
1079
1080 class X:
1081     async def foo(self):
1082         msg = ""
1083         for candidate in CANDIDATES:
1084             msg += (
1085                 "**{candidate.object_type} {candidate.rev}**"
1086                 " - {candidate.description}\n"
1087             )
1088
1089
1090 temp_msg = (
1091     f"{f'{humanize_number(pos)}.': <{pound_len+2}} "
1092     f"{balance: <{bal_len + 5}} "
1093     f"<<{author.display_name}>>\n"
1094 )
1095
1096 assert (
1097     str(suffix_arr)
1098     == "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1099     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1100     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1101 )
1102 assert (
1103     str(suffix_arr)
1104     != "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1105     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1106     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1107 )
1108 assert (
1109     str(suffix_arr)
1110     <= "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1111     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1112     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1113 )
1114 assert (
1115     str(suffix_arr)
1116     >= "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1117     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1118     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1119 )
1120 assert (
1121     str(suffix_arr)
1122     < "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1123     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1124     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1125 )
1126 assert (
1127     str(suffix_arr)
1128     > "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1129     "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1130     "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1131 )
1132 assert (
1133     str(suffix_arr)
1134     in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$',"
1135     " 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$',"
1136     " 'ykangaroo$']"
1137 )
1138 assert (
1139     str(suffix_arr)
1140     not in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$',"
1141     " 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$',"
1142     " 'rykangaroo$', 'ykangaroo$']"
1143 )
1144 message = (
1145     f"1. Go to Google Developers Console and log in with your Google account."
1146     f"(https://console.developers.google.com/)"
1147     f"2. You should be prompted to create a new project (name does not matter)."
1148     f"3. Click on Enable APIs and Services at the top."
1149     f"4. In the list of APIs choose or search for YouTube Data API v3 and "
1150     f"click on it. Choose Enable."
1151     f"5. Click on Credentials on the left navigation bar."
1152     f"6. Click on Create Credential at the top."
1153     f'7. At the top click the link for "API key".'
1154     f"8. No application restrictions are needed. Click Create at the bottom."
1155     f"9. You now have a key to add to `{{prefix}}set api youtube api_key`"
1156 )
1157 message = (
1158     f"1. Go to Google Developers Console and log in with your Google account."
1159     f"(https://console.developers.google.com/)"
1160     f"2. You should be prompted to create a new project (name does not matter)."
1161     f"3. Click on Enable APIs and Services at the top."
1162     f"4. In the list of APIs choose or search for YouTube Data API v3 and "
1163     f"click on it. Choose Enable."
1164     f"5. Click on Credentials on the left navigation bar."
1165     f"6. Click on Create Credential at the top."
1166     f'7. At the top click the link for "API key".'
1167     f"8. No application restrictions are needed. Click Create at the bottom."
1168     f"9. You now have a key to add to `{{prefix}}set api youtube api_key`"
1169 )
1170 message = (
1171     "1. Go to Google Developers Console and log in with your Google account."
1172     "(https://console.developers.google.com/)"
1173     "2. You should be prompted to create a new project (name does not matter)."
1174     "3. Click on Enable APIs and Services at the top."
1175     "4. In the list of APIs choose or search for YouTube Data API v3 and "
1176     "click on it. Choose Enable."
1177     "5. Click on Credentials on the left navigation bar."
1178     "6. Click on Create Credential at the top."
1179     '7. At the top click the link for "API key".'
1180     "8. No application restrictions are needed. Click Create at the bottom."
1181     f"9. You now have a key to add to `{prefix}set api youtube api_key`"
1182 )
1183
1184 # It shouldn't matter if the string prefixes are capitalized.
1185 temp_msg = (
1186     f"{F'{humanize_number(pos)}.': <{pound_len+2}} "
1187     f"{balance: <{bal_len + 5}} "
1188     f"<<{author.display_name}>>\n"
1189 )
1190
1191 fstring = f"We have to remember to escape {braces}. Like {{these}}. But not {this}."
1192
1193 welcome_to_programming = R"hello," R" world!"
1194
1195 fstring = (
1196     f"f-strings definitely make things more {difficult} than they need to be for"
1197     " {black}. But boy they sure are handy. The problem is that some lines will need"
1198     f" to have the 'f' whereas others do not. This {line}, for example, needs one."
1199 )
1200
1201 x = (
1202     "This is a long string which contains an f-expr that should not split"
1203     f" {{{[i for i in range(5)]}}}."
1204 )
1205
1206 x = (
1207     "\N{BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR}\N{VARIATION SELECTOR-16}"
1208 )
1209
1210 xxxxxx_xxx_xxxx_xx_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxx_xxxx_xxxxx = xxxx.xxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxx(
1211     xx_xxxxxx={
1212         "x3_xxxxxxxx": (
1213             "xxx3_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx"
1214         ),
1215     },
1216 )
1217
1218 # Regression test for https://github.com/psf/black/issues/3117.
1219 some_dict = {
1220     "something_something": (
1221         r"Lorem ipsum dolor sit amet, an sed convenire eloquentiam \t"
1222         r"signiferumque, duo ea vocibus consetetur scriptorem. Facer \t"
1223     ),
1224 }
1225
1226 # Regression test for https://github.com/psf/black/issues/3459.
1227 xxxx(
1228     empty_str_as_first_split=(
1229         ""
1230         f"xxxxxxx {xxxxxxxxxx} xxx xxxxxxxxxx xxxxx xxx xxx xx "
1231         "xxxxx xxxxxxxxx xxxxxxx, xxx xxxxxxxxxxx xxx xxxxx. "
1232         f"xxxxxxxxxxxxx xxxx xx xxxxxxxxxx. xxxxx: {x.xxx}"
1233     ),
1234     empty_u_str_as_first_split=(
1235         ""
1236         f"xxxxxxx {xxxxxxxxxx} xxx xxxxxxxxxx xxxxx xxx xxx xx "
1237         "xxxxx xxxxxxxxx xxxxxxx, xxx xxxxxxxxxxx xxx xxxxx. "
1238         f"xxxxxxxxxxxxx xxxx xx xxxxxxxxxx. xxxxx: {x.xxx}"
1239     ),
1240 )
1241
1242 # Regression test for https://github.com/psf/black/issues/3455.
1243 a_dict = {
1244     "/this/is/a/very/very/very/very/very/very/very/very/very/very/long/key/without/spaces":
1245     # And there is a comment before the value
1246     ("item1", "item2", "item3"),
1247 }
1248
1249 # Regression test for https://github.com/psf/black/issues/3506.
1250 s = f"With single quote: '  {my_dict['foo']} With double quote: \"  {my_dict['bar']}"
1251
1252 s = (
1253     "Lorem Ipsum is simply dummy text of the printing and typesetting"
1254     f" industry:'{my_dict['foo']}'"
1255 )