Skip to content

Commit

Permalink
Fix unstable formatting with some # type: ignores
Browse files Browse the repository at this point in the history
`type: ignore` shouldn't block collapsing a line, since it will still
apply fine to the merged line. This prevents an issue where a reformat
causes it to shift lines and then be merged on a subsequent pass.

There is a downside to this, which is that it can cause a `type:
ignore` to apply to more code than was originally intended. There
might be a way to apply this in a more limited situation, but I'm not
sure what it is.

Fixes psf#1061.
  • Loading branch information
msullivan committed Oct 29, 2019
1 parent 6bedb5c commit 6c44595
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 4 deletions.
5 changes: 4 additions & 1 deletion black.py
Original file line number Diff line number Diff line change
Expand Up @@ -1383,7 +1383,10 @@ def contains_uncollapsable_type_comments(self) -> bool:
for leaf_id, comments in self.comments.items():
for comment in comments:
if is_type_comment(comment):
if leaf_id not in ignored_ids or comment_seen:
if comment_seen or (
not is_type_comment(comment, " ignore")
and leaf_id not in ignored_ids
):
return True

comment_seen = True
Expand Down
13 changes: 13 additions & 0 deletions tests/data/comments2.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,12 @@ def inline_comments_in_brackets_ruin_everything():

CONFIG_FILES = [CONFIG_FILE, ] + SHARED_CONFIG_FILES + USER_CONFIG_FILES # type: Final

class Test:
def _init_host(self, parsed) -> None:
if (parsed.hostname is None or # type: ignore
not parsed.hostname.strip()):
pass

#######################
### SECTION COMMENT ###
#######################
Expand Down Expand Up @@ -312,6 +318,13 @@ def inline_comments_in_brackets_ruin_everything():

CONFIG_FILES = [CONFIG_FILE,] + SHARED_CONFIG_FILES + USER_CONFIG_FILES # type: Final


class Test:
def _init_host(self, parsed) -> None:
if parsed.hostname is None or not parsed.hostname.strip(): # type: ignore
pass


#######################
### SECTION COMMENT ###
#######################
Expand Down
4 changes: 1 addition & 3 deletions tests/data/comments7.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,7 @@ def func():


def func():
c = call(
0.0123, 0.0456, 0.0789, 0.0123, 0.0789, a[-1], # type: ignore
)
c = call(0.0123, 0.0456, 0.0789, 0.0123, 0.0789, a[-1],) # type: ignore

# The type: ignore exception only applies to line length, not
# other types of formatting.
Expand Down

0 comments on commit 6c44595

Please sign in to comment.