diff --git a/autopep8.py b/autopep8.py index c4e59125..1ce35ba0 100755 --- a/autopep8.py +++ b/autopep8.py @@ -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' @@ -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: @@ -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': @@ -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: @@ -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 @@ -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) @@ -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 @@ -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() @@ -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 '('. @@ -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) @@ -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 @@ -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 @@ -2517,8 +2506,8 @@ 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) @@ -2526,11 +2515,11 @@ def reflow(self, reflowed_lines, continued_indent, 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) @@ -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 @@ -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 @@ -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: @@ -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): @@ -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 @@ -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 @@ -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) @@ -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) @@ -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()) @@ -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 diff --git a/test/test_autopep8.py b/test/test_autopep8.py index 40b65465..f98c92de 100755 --- a/test/test_autopep8.py +++ b/test/test_autopep8.py @@ -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] @@ -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):