Skip to content
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

refactoring: remove py2 specific code #643

Merged
merged 2 commits into from Aug 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
85 changes: 37 additions & 48 deletions autopep8.py
Expand Up @@ -83,23 +83,12 @@ class documentation for more information.
import tokenize
import warnings
import ast
try:
from configparser import ConfigParser as SafeConfigParser
from configparser import Error
except ImportError:
from ConfigParser import SafeConfigParser
from ConfigParser import Error
from configparser import ConfigParser as SafeConfigParser, Error

import pycodestyle
from pycodestyle import STARTSWITH_INDENT_STATEMENT_REGEX


try:
unicode
except NameError:
unicode = str


__version__ = '1.6.0'


Expand Down Expand Up @@ -331,7 +320,7 @@ def continued_indentation(logical_line, tokens, indent_level, hang_closing,
elif visual_indent is True:
# Visual indent is verified.
indent[depth] = start[1]
elif visual_indent in (text, unicode):
elif visual_indent in (text, str):
# Ignore token lined up with matching one from a previous line.
pass
else:
Expand Down Expand Up @@ -363,7 +352,7 @@ def continued_indentation(logical_line, tokens, indent_level, hang_closing,
# Deal with implicit string concatenation.
elif (token_type in (tokenize.STRING, tokenize.COMMENT) or
text in ('u', 'ur', 'b', 'br')):
indent_chances[start[1]] = unicode
indent_chances[start[1]] = str
# Special case for the "if" statement because len("if (") is equal to
# 4.
elif not indent_chances and not row and not depth and text == 'if':
Expand Down Expand Up @@ -1815,7 +1804,7 @@ def find_newline(source):
Input is a list of lines.

"""
assert not isinstance(source, unicode)
assert not isinstance(source, str)

counter = collections.defaultdict(int)
for line in source:
Expand Down Expand Up @@ -2123,9 +2112,9 @@ def add_space_if_needed(self, curr_text, equal=False):
):
return

prev_text = unicode(self._prev_item)
prev_text = str(self._prev_item)
prev_prev_text = (
unicode(self._prev_prev_item) if self._prev_prev_item else '')
str(self._prev_prev_item) if self._prev_prev_item else '')

if (
# The previous item was a keyword or identifier and the current
Expand Down Expand Up @@ -2209,7 +2198,7 @@ def _add_item(self, item, indent_amt):
self._lines.append(self._LineBreak())
self._lines.append(self._Indent(indent_amt))

item_text = unicode(item)
item_text = str(item)
if self._lines and self._bracket_depth:
# Adding the item into a container.
self._prevent_default_initializer_splitting(item, indent_amt)
Expand Down Expand Up @@ -2241,19 +2230,19 @@ def _add_container(self, container, indent_amt, break_after_open_bracket):
actual_indent = indent_amt + 1

if (
unicode(self._prev_item) != '=' and
str(self._prev_item) != '=' and
not self.line_empty() and
not self.fits_on_current_line(
container.size + self._bracket_depth + 2)
):

if unicode(container)[0] == '(' and self._prev_item.is_name:
if str(container)[0] == '(' and self._prev_item.is_name:
# Don't split before the opening bracket of a call.
break_after_open_bracket = True
actual_indent = indent_amt + 4
elif (
break_after_open_bracket or
unicode(self._prev_item) not in '([{'
str(self._prev_item) not in '([{'
):
# If the container doesn't fit on the current line and the
# current line isn't empty, place the container on the next
Expand Down Expand Up @@ -2284,14 +2273,14 @@ def _prevent_default_initializer_splitting(self, item, indent_amt):
break/indent before it if needed.

"""
if unicode(item) == '=':
if str(item) == '=':
# This is the assignment in the initializer. Just remove spaces for
# now.
self._delete_whitespace()
return

if (not self._prev_item or not self._prev_prev_item or
unicode(self._prev_item) != '='):
str(self._prev_item) != '='):
return

self._delete_whitespace()
Expand Down Expand Up @@ -2353,8 +2342,8 @@ def _enforce_space(self, item):
if not self._prev_item:
return

item_text = unicode(item)
prev_text = unicode(self._prev_item)
item_text = str(item)
prev_text = str(self._prev_item)

# Prefer a space around a '.' in an import statement, and between the
# 'import' and '('.
Expand Down Expand Up @@ -2410,13 +2399,13 @@ def reflow(
not reflowed_lines.line_empty() and
not self.is_colon and
not (prev_item and prev_item.is_name and
unicode(self) == '(')
str(self) == '(')
):
# Start a new line if there is already something on the line and
# adding this atom would make it go over the max line length.
reflowed_lines.add_line_break(continued_indent)
else:
reflowed_lines.add_space_if_needed(unicode(self))
reflowed_lines.add_space_if_needed(str(self))

reflowed_lines.add(self, len(continued_indent),
break_after_open_bracket)
Expand Down Expand Up @@ -2470,7 +2459,7 @@ def __repr__(self):
elif item.is_colon:
string += ': '
else:
item_string = unicode(item)
item_string = str(item)
if (
string and
(last_was_keyword or
Expand Down Expand Up @@ -2503,7 +2492,7 @@ def reflow(self, reflowed_lines, continued_indent,
self._get_extent(index),
is_list_comp_or_if_expr=is_list_comp_or_if_expr,
next_is_dot=(next_item and
unicode(next_item) == '.'))
str(next_item) == '.'))
if last_was_container and item.is_comma:
reflowed_lines.add_line_break(continued_indent)
last_was_container = False
Expand All @@ -2517,20 +2506,20 @@ def reflow(self, reflowed_lines, continued_indent,
break_after_open_bracket and index == 0 and
# Prefer to keep empty containers together instead of
# separating them.
unicode(item) == self.open_bracket and
(not next_item or unicode(next_item) != self.close_bracket) and
str(item) == self.open_bracket and
(not next_item or str(next_item) != self.close_bracket) and
(len(self._items) != 3 or not isinstance(next_item, Atom))
):
reflowed_lines.add_line_break(continued_indent)
break_after_open_bracket = False
else:
next_next_item = get_item(self._items, index + 2)
if (
unicode(item) not in ['.', '%', 'in'] and
str(item) not in ['.', '%', 'in'] and
next_item and not isinstance(next_item, Container) and
unicode(next_item) != ':' and
str(next_item) != ':' and
next_next_item and (not isinstance(next_next_item, Atom) or
unicode(next_item) == 'not') and
str(next_item) == 'not') and
not reflowed_lines.line_empty() and
not reflowed_lines.fits_on_current_line(
self._get_extent(index + 1) + 2)
Expand All @@ -2545,7 +2534,7 @@ def _get_extent(self, index):
"""
extent = 0
prev_item = get_item(self._items, index - 1)
seen_dot = prev_item and unicode(prev_item) == '.'
seen_dot = prev_item and str(prev_item) == '.'
while index < len(self._items):
item = get_item(self._items, index)
index += 1
Expand All @@ -2562,11 +2551,11 @@ def _get_extent(self, index):

prev_item = item
continue
elif (unicode(item) not in ['.', '=', ':', 'not'] and
elif (str(item) not in ['.', '=', ':', 'not'] and
not item.is_name and not item.is_string):
break

if unicode(item) == '.':
if str(item) == '.':
seen_dot = True

extent += item.size
Expand Down Expand Up @@ -2761,7 +2750,7 @@ def _reflow_lines(parsed_tokens, indentation, max_line_length,
start_on_prefix_line):
"""Reflow the lines so that it looks nice."""

if unicode(parsed_tokens[0]) == 'def':
if str(parsed_tokens[0]) == 'def':
# A function definition gets indented a bit more.
continued_indent = indentation + ' ' * 2 * DEFAULT_INDENT_SIZE
else:
Expand All @@ -2780,13 +2769,13 @@ def _reflow_lines(parsed_tokens, indentation, max_line_length,

if (
first_token and second_token and
unicode(second_token)[0] == '(' and
str(second_token)[0] == '(' and
len(indentation) + len(first_token) + 1 == len(continued_indent)
):
return None

for item in parsed_tokens:
lines.add_space_if_needed(unicode(item), equal=True)
lines.add_space_if_needed(str(item), equal=True)

save_continued_indent = continued_indent
if start_on_prefix_line and isinstance(item, Container):
Expand Down Expand Up @@ -3217,7 +3206,7 @@ def refactor_with_2to3(source_text, fixer_names, filename=''):
from lib2to3.pgen2 import tokenize as lib2to3_tokenize
try:
# The name parameter is necessary particularly for the "import" fixer.
return unicode(tool.refactor_string(source_text, name=filename))
return str(tool.refactor_string(source_text, name=filename))
except lib2to3_tokenize.TokenError:
return source_text

Expand Down Expand Up @@ -3501,13 +3490,13 @@ def mutual_startswith(a, b):

def code_match(code, select, ignore):
if ignore:
assert not isinstance(ignore, unicode)
assert not isinstance(ignore, str)
for ignored_code in [c.strip() for c in ignore]:
if mutual_startswith(code.lower(), ignored_code.lower()):
return False

if select:
assert not isinstance(select, unicode)
assert not isinstance(select, str)
for selected_code in [c.strip() for c in select]:
if mutual_startswith(code.lower(), selected_code.lower()):
return True
Expand All @@ -3524,7 +3513,7 @@ def fix_code(source, options=None, encoding=None, apply_config=False):
"""
options = _get_options(options, apply_config)

if not isinstance(source, unicode):
if not isinstance(source, str):
source = source.decode(encoding or get_encoding())

sio = io.StringIO(source)
Expand All @@ -3544,8 +3533,8 @@ def _get_options(raw_options, apply_config):

# Check for very basic type errors.
expected_type = type(getattr(options, name))
if not isinstance(expected_type, (str, unicode)):
if isinstance(value, (str, unicode)):
if not isinstance(expected_type, (str, )):
if isinstance(value, (str, )):
raise ValueError(
"Option '{}' should not be a string".format(name))
setattr(options, name, value)
Expand Down Expand Up @@ -4121,7 +4110,7 @@ def _split_comma_separated(string):

def decode_filename(filename):
"""Return Unicode filename."""
if isinstance(filename, unicode):
if isinstance(filename, str):
return filename

return filename.decode(sys.getfilesystemencoding())
Expand Down Expand Up @@ -4423,7 +4412,7 @@ def _fix_file(parameters):
try:
return fix_file(*parameters)
except IOError as error:
print(unicode(error), file=sys.stderr)
print(str(error), file=sys.stderr)
raise error


Expand Down
22 changes: 1 addition & 21 deletions test/test_autopep8.py
Expand Up @@ -26,10 +26,7 @@
import unittest
import warnings

try:
from StringIO import StringIO
except ImportError:
from io import StringIO
from io import StringIO

ROOT_DIR = os.path.split(os.path.abspath(os.path.dirname(__file__)))[0]

Expand Down Expand Up @@ -7508,23 +7505,6 @@ def test_e501_experimental_with_in(self):
with autopep8_context(line, options=['--experimental']) as result:
self.assertEqual(fixed, result)

@unittest.skipIf(sys.version_info.major >= 3, 'syntax error in Python3')
def test_e501_print_isnot_function(self):
line = """\

def d():
print "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" % (111, 111, 111, 111, 222, 222, 222, 222, 222, 222, 222, 222, 222, 333, 333, 333, 333)
"""
fixed = """\

def d():
print "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" % (
111, 111, 111, 111, 222, 222, 222, 222, 222, 222, 222, 222, 222, 333,
333, 333, 333)
"""
with autopep8_context(line, options=['--experimental']) as result:
self.assertEqual(fixed, result)


@contextlib.contextmanager
def autopep8_context(line, options=None):
Expand Down