if LL[0].type != token.STRING:
return None
- matching_nodes = [
- syms.listmaker,
- syms.dictsetmaker,
- syms.testlist_gexp,
- ]
- # If the string is an immediate child of a list/set/tuple literal...
- if (
- parent_type(LL[0]) in matching_nodes
- or parent_type(LL[0].parent) in matching_nodes
+ # If the string is surrounded by commas (or is the first/last child)...
+ prev_sibling = LL[0].prev_sibling
+ next_sibling = LL[0].next_sibling
+ if not prev_sibling and not next_sibling and parent_type(LL[0]) == syms.atom:
+ # If it's an atom string, we need to check the parent atom's siblings.
+ parent = LL[0].parent
+ assert parent is not None # For type checkers.
+ prev_sibling = parent.prev_sibling
+ next_sibling = parent.next_sibling
+ if (not prev_sibling or prev_sibling.type == token.COMMA) and (
+ not next_sibling or next_sibling.type == token.COMMA
):
- # And the string is surrounded by commas (or is the first/last child)...
- prev_sibling = LL[0].prev_sibling
- next_sibling = LL[0].next_sibling
- if (
- not prev_sibling
- and not next_sibling
- and parent_type(LL[0]) == syms.atom
- ):
- # If it's an atom string, we need to check the parent atom's siblings.
- parent = LL[0].parent
- assert parent is not None # For type checkers.
- prev_sibling = parent.prev_sibling
- next_sibling = parent.next_sibling
- if (not prev_sibling or prev_sibling.type == token.COMMA) and (
- not next_sibling or next_sibling.type == token.COMMA
- ):
- return 0
+ return 0
return None
assigned the value of some string.
OR
* The line starts with an "atom" string that prefers to be wrapped in
- parens. It's preferred to be wrapped when it's is an immediate child of
- a list/set/tuple literal, AND the string is surrounded by commas (or is
- the first/last child).
+ parens. It's preferred to be wrapped when the string is surrounded by
+ commas (or is the first/last child).
Transformations:
The chosen string is wrapped in parentheses and then split at the LPAR.
y = "Short string"
print(
- "This is a really long string inside of a print statement with extra arguments"
- " attached at the end of it.",
+ (
+ "This is a really long string inside of a print statement with extra arguments"
+ " attached at the end of it."
+ ),
x,
y,
z,
)
bad_split_func1(
- "But what should happen when code has already "
- "been formatted but in the wrong way? Like "
- "with a space at the end instead of the "
- "beginning. Or what about when it is split too "
- "soon? In the case of a split that is too "
- "short, black will try to honer the custom "
- "split.",
+ (
+ "But what should happen when code has already "
+ "been formatted but in the wrong way? Like "
+ "with a space at the end instead of the "
+ "beginning. Or what about when it is split too "
+ "soon? In the case of a split that is too "
+ "short, black will try to honer the custom "
+ "split."
+ ),
xxx,
yyy,
zzz,
)
arg_comment_string = print(
- "Long lines with inline comments which are apart of (and not the only member of) an"
- " argument list should have their comments appended to the reformatted string's"
- " enclosing left parentheses.", # This comment gets thrown to the top.
+ ( # This comment gets thrown to the top.
+ "Long lines with inline comments which are apart of (and not the only member"
+ " of) an argument list should have their comments appended to the reformatted"
+ " string's enclosing left parentheses."
+ ),
"Arg #2",
"Arg #3",
"Arg #4",
)
func_with_bad_comma(
- "This is a really long string argument to a function that has a trailing comma"
- " which should NOT be there.",
+ (
+ "This is a really long string argument to a function that has a trailing comma"
+ " which should NOT be there."
+ ),
)
func_with_bad_comma(
- "This is a really long string argument to a function that has a trailing comma"
- " which should NOT be there.", # comment after comma
+ ( # comment after comma
+ "This is a really long string argument to a function that has a trailing comma"
+ " which should NOT be there."
+ ),
)
func_with_bad_comma(
- "This is a really long string argument to a function that has a trailing comma"
- " which should NOT be there.",
+ (
+ "This is a really long string argument to a function that has a trailing comma"
+ " which should NOT be there."
+ ),
)
func_with_bad_comma(
- "This is a really long string argument to a function that has a trailing comma"
- " which should NOT be there.", # comment after comma
+ ( # comment after comma
+ "This is a really long string argument to a function that has a trailing comma"
+ " which should NOT be there."
+ ),
)
func_with_bad_parens_that_wont_fit_in_one_line(
self.assertEqual(err_lines[-1], "error: cannot format e1: boom")
self.assertEqual(
unstyle(str(report)),
- "1 file reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "1 file reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f3"), black.Changed.YES)
self.assertEqual(out_lines[-1], "reformatted f3")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.failed(Path("e2"), "boom")
self.assertEqual(err_lines[-1], "error: cannot format e2: boom")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.path_ignored(Path("wat"), "no match")
self.assertEqual(out_lines[-1], "wat ignored: no match")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f4"), black.Changed.NO)
self.assertEqual(out_lines[-1], "f4 already well formatted, good job.")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 3 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 3 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.check = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
report.check = False
report.diff = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
def test_report_quiet(self) -> None:
self.assertEqual(err_lines[-1], "error: cannot format e1: boom")
self.assertEqual(
unstyle(str(report)),
- "1 file reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "1 file reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f3"), black.Changed.YES)
self.assertEqual(len(err_lines), 1)
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.failed(Path("e2"), "boom")
self.assertEqual(err_lines[-1], "error: cannot format e2: boom")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.path_ignored(Path("wat"), "no match")
self.assertEqual(len(err_lines), 2)
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f4"), black.Changed.NO)
self.assertEqual(len(err_lines), 2)
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 3 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 3 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.check = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
report.check = False
report.diff = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
def test_report_normal(self) -> None:
self.assertEqual(err_lines[-1], "error: cannot format e1: boom")
self.assertEqual(
unstyle(str(report)),
- "1 file reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "1 file reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f3"), black.Changed.YES)
self.assertEqual(out_lines[-1], "reformatted f3")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 1 file failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 1 file failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.failed(Path("e2"), "boom")
self.assertEqual(err_lines[-1], "error: cannot format e2: boom")
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.path_ignored(Path("wat"), "no match")
self.assertEqual(len(err_lines), 2)
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 2 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 2 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.done(Path("f4"), black.Changed.NO)
self.assertEqual(len(err_lines), 2)
self.assertEqual(
unstyle(str(report)),
- "2 files reformatted, 3 files left unchanged, 2 files failed to"
- " reformat.",
+ (
+ "2 files reformatted, 3 files left unchanged, 2 files failed to"
+ " reformat."
+ ),
)
self.assertEqual(report.return_code, 123)
report.check = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
report.check = False
report.diff = True
self.assertEqual(
unstyle(str(report)),
- "2 files would be reformatted, 3 files would be left unchanged, 2"
- " files would fail to reformat.",
+ (
+ "2 files would be reformatted, 3 files would be left unchanged, 2"
+ " files would fail to reformat."
+ ),
)
def test_lib2to3_parse(self) -> None: