New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow the same special cases for B950 as E501 (#176) #213
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,7 @@ | |
import attr | ||
import pycodestyle | ||
|
||
__version__ = "21.11.29" | ||
__version__ = "21.12.0" | ||
|
||
LOG = logging.getLogger("flake8.bugbear") | ||
CONTEXTFUL_NODES = ( | ||
|
@@ -67,8 +67,31 @@ def gen_line_based_checks(self): | |
The following simple checks are based on the raw lines, not the AST. | ||
""" | ||
for lineno, line in enumerate(self.lines, start=1): | ||
# Special case: ignore long shebang (following pycodestyle). | ||
if lineno == 1 and line.startswith("#!"): | ||
continue | ||
|
||
length = len(line) - 1 | ||
if length > 1.1 * self.max_line_length: | ||
# Special case long URLS and paths to follow pycodestyle. | ||
# Would use the `pycodestyle.maximum_line_length` directly but | ||
# need to supply it arguments that are not available so chose | ||
# to replicate instead. | ||
chunks = line.split() | ||
|
||
is_line_comment_url_path = len(chunks) == 2 and chunks[0] == "#" | ||
|
||
just_long_url_path = len(chunks) == 1 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So if I read this right, really this is just a long no white space string right? So it could not be a URL or file path? I guess generally we'll have spaces I guess is the rationale here right? Is this the same as how pycodestyle does it? if so, (Sorry - being lazy and not checking), then I guess it's proven to be safe enough. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, a long string with no white space, which is mostly just URLs and paths. A path that has a space in it will still fail but would also fail E501. Rational is it is more readable to not split up URLs and paths in comments and code. It's the same logic as pycodestyle, modified to be a bit more readable to me. Linking here for convenience. |
||
|
||
num_leading_whitespaces = len(line) - len(chunks[-1]) | ||
too_many_leading_white_spaces = ( | ||
num_leading_whitespaces >= self.max_line_length - 7 | ||
) | ||
|
||
skip = is_line_comment_url_path or just_long_url_path | ||
if skip and not too_many_leading_white_spaces: | ||
continue | ||
|
||
yield B950(lineno, length, vars=(length, self.max_line_length)) | ||
|
||
@classmethod | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,21 @@ | ||
#! Ignore long shebang fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | ||
# Assumes the default allowed line length of 79 | ||
|
||
"line is fine" | ||
" line is fine " | ||
" line is still fine " | ||
" line is no longer fine by any measures, yup" | ||
"line is fine again" | ||
|
||
# Ensure URL/path on it's own line is fine | ||
"https://foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.com" | ||
"NOT OK: https://foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.com" | ||
# https://foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.com | ||
# NOT OK: https://foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.com | ||
# | ||
#: Okay | ||
# This | ||
# almost_empty_line_too_long | ||
|
||
# This | ||
# almost_empty_line_too_long |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lets not do this here and I'll do it on a diff when I release (as it's going to be 22.*)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
addressed