diff --git a/pyupgrade.py b/pyupgrade.py
index b26904c..19d0b61 100644
--- a/pyupgrade.py
+++ b/pyupgrade.py
@@ -270,12 +270,16 @@ def _victims(tokens, start, arg, gen):
     return Victims(starts, ends, first_comma_index, arg_index)
 
 
-def _find_open_paren(tokens, i):
-    while tokens[i].src != '(':
+def _find_token(tokens, i, token):
+    while tokens[i].src != token:
         i += 1
     return i
 
 
+def _find_open_paren(tokens, i):
+    return _find_token(tokens, i, '(')
+
+
 def _is_on_a_line_by_self(tokens, i):
     return (
         tokens[i - 2].name == 'NL' and
@@ -943,6 +947,43 @@ SIX_RAISES = {
 }
 
 
+def _all_isinstance(vals, tp):
+    return all(isinstance(v, tp) for v in vals)
+
+
+def fields_same(n1, n2):
+    for (a1, v1), (a2, v2) in zip(ast.iter_fields(n1), ast.iter_fields(n2)):
+        # ignore ast attributes, they'll be covered by walk
+        if a1 != a2:
+            return False
+        elif _all_isinstance((v1, v2), ast.AST):
+            continue
+        elif _all_isinstance((v1, v2), (list, tuple)):
+            if len(v1) != len(v2):
+                return False
+            # ignore sequences which are all-ast, they'll be covered by walk
+            elif _all_isinstance(v1, ast.AST) and _all_isinstance(v2, ast.AST):
+                continue
+            elif v1 != v2:
+                return False
+        elif v1 != v2:
+            return False
+    return True
+
+
+def targets_same(target, yield_value):
+    for t1, t2 in zip(ast.walk(target), ast.walk(yield_value)):
+        # ignore `ast.Load` / `ast.Store`
+        if _all_isinstance((t1, t2), ast.expr_context):
+            continue
+        elif type(t1) != type(t2):
+            return False
+        elif not fields_same(t1, t2):
+            return False
+    else:
+        return True
+
+
 def _is_utf8_codec(encoding):
     try:
         return codecs.lookup(encoding).name == 'utf-8'
@@ -981,6 +1022,7 @@ class FindPy3Plus(ast.NodeVisitor):
         self._class_info_stack = []
         self._in_comp = 0
         self.super_calls = {}
+        self.yield_from_fors = set()
 
     def _is_six(self, node, names):
         return (
@@ -1136,6 +1178,18 @@ class FindPy3Plus(ast.NodeVisitor):
                 self.if_py3_blocks.add(_ast_to_offset(node))
         self.generic_visit(node)
 
+    def visit_For(self, node):  # type: (ast.For) -> None
+        if (
+            len(node.body) == 1 and
+            isinstance(node.body[0], ast.Expr) and
+            isinstance(node.body[0].value, ast.Yield) and
+            targets_same(node.target, node.body[0].value.value) and
+            not node.orelse
+        ):
+            self.yield_from_fors.add(_ast_to_offset(node))
+
+        self.generic_visit(node)
+
     def generic_visit(self, node):  # type: (ast.AST) -> None
         self._previous_node = node
         super(FindPy3Plus, self).generic_visit(node)
@@ -1159,7 +1213,10 @@ def _fixup_dedent_tokens(tokens):
 def _find_block_start(tokens, i):
     depth = 0
     while depth or tokens[i].src != ':':
-        depth += {'(': 1, ')': -1}.get(tokens[i].src, 0)
+        if tokens[i].src in OPENING:
+            depth += 1
+        elif tokens[i].src in CLOSING:
+            depth -= 1
         i += 1
     return i
 
@@ -1379,6 +1436,14 @@ def _replace_call(tokens, start, end, args, tmpl):
     tokens[start:end] = [Token('CODE', src)]
 
 
+def _replace_yield(tokens, i):
+    in_token = _find_token(tokens, i, 'in')
+    colon = _find_block_start(tokens, i)
+    block = Block.find(tokens, i, trim_end=True)
+    container = tokens_to_src(tokens[in_token + 1:colon]).strip()
+    tokens[i:block.end] = [Token('CODE', 'yield from {}\n'.format(container))]
+
+
 def _fix_py3_plus(contents_text):
     try:
         ast_obj = ast_parse(contents_text)
@@ -1403,6 +1468,7 @@ def _fix_py3_plus(contents_text):
             visitor.six_type_ctx,
             visitor.six_with_metaclass,
             visitor.super_calls,
+            visitor.yield_from_fors,
     )):
         return contents_text
 
@@ -1525,6 +1591,8 @@ def _fix_py3_plus(contents_text):
             if any(tok.name == 'NL' for tok in tokens[i:end]):
                 continue
             _replace_call(tokens, i, end, func_args, '{args[0]}')
+        elif token.offset in visitor.yield_from_fors:
+            _replace_yield(tokens, i)
 
     return tokens_to_src(tokens)
 

diff --git a/tests/pyupgrade_test.py b/tests/pyupgrade_test.py
index 070c9fe..90b681b 100644
--- a/tests/pyupgrade_test.py
+++ b/tests/pyupgrade_test.py
@@ -17,9 +17,11 @@ from pyupgrade import _imports_unicode_literals
 from pyupgrade import _is_bytestring
 from pyupgrade import _percent_to_format
 from pyupgrade import _simplify_conversion_flag
+from pyupgrade import fields_same
 from pyupgrade import main
 from pyupgrade import parse_format
 from pyupgrade import parse_percent_format
+from pyupgrade import targets_same
 from pyupgrade import unparse_parsed_string
 
 
@@ -1433,6 +1435,143 @@ def test_fix_classes_py3only(s, expected):
     assert _fix_py3_plus(s) == expected
 
 
+@pytest.mark.parametrize(
+    ('s', 'expected'),
+    (
+        (
+            'def f():\n'
+            '    for x in y:\n'
+            '        yield x',
+            'def f():\n'
+            '    yield from y\n',
+        ),
+        (
+            'def f():\n'
+            '    for x in [1, 2, 3]:\n'
+            '        yield x',
+            'def f():\n'
+            '    yield from [1, 2, 3]\n',
+        ),
+        (
+            'def f():\n'
+            '    for x in {x for x in y}:\n'
+            '        yield x',
+            'def f():\n'
+            '    yield from {x for x in y}\n',
+        ),
+        (
+            'def f():\n'
+            '    for x in (1, 2, 3):\n'
+            '        yield x',
+            'def f():\n'
+            '    yield from (1, 2, 3)\n',
+        ),
+        (
+            'def f():\n'
+            '    for x, y in {3: "x", 6: "y"}:\n'
+            '        yield x, y',
+            'def f():\n'
+            '    yield from {3: "x", 6: "y"}\n',
+        ),
+        (
+            'def f():  # Comment one\n'
+            '    # Comment two\n'
+            '    for x, y in {  # Comment three\n'
+            '       3: "x",  # Comment four\n'
+            '       # Comment five\n'
+            '       6: "y"  # Comment six\n'
+            '    }:  # Comment seven\n'
+            '       # Comment eight\n'
+            '       yield x, y  # Comment nine\n'
+            '       # Comment ten',
+            'def f():  # Comment one\n'
+            '    # Comment two\n'
+            '    yield from {  # Comment three\n'
+            '       3: "x",  # Comment four\n'
+            '       # Comment five\n'
+            '       6: "y"  # Comment six\n'
+            '    }\n',
+        ),
+        (
+            'def f():\n'
+            '    for x, y in [{3: (3, [44, "long ss"]), 6: "y"}]:\n'
+            '        yield x, y',
+            'def f():\n'
+            '    yield from [{3: (3, [44, "long ss"]), 6: "y"}]\n',
+        ),
+        (
+            'def f():\n'
+            '    for x, y in z():\n'
+            '        yield x, y',
+            'def f():\n'
+            '    yield from z()\n',
+        ),
+        (
+            'def f():\n'
+            '    def func():\n'
+            '        # This comment is preserved\n'
+            '\n'
+            '        for x, y in z():  # Comment one\n'
+            '\n'
+            '            # Commment two\n'
+            '            yield x, y  # Comment three\n'
+            '            # Comment four\n'
+            '\n\n'
+            '# Comment\n'
+            'def g():\n'
+            '    print(3)',
+            'def f():\n'
+            '    def func():\n'
+            '        # This comment is preserved\n'
+            '\n'
+            '        yield from z()\n'
+            '\n\n'
+            '# Comment\n'
+            'def g():\n'
+            '    print(3)',
+        ),
+    ),
+)
+def test_fix_yield_from(s, expected):
+    assert _fix_py3_plus(s) == expected
+
+
+@pytest.mark.parametrize(
+    's',
+    (
+        'def f():\n'
+        '    for x in z:\n'
+        '        yield y',
+        'def f():\n'
+        '    for x, y in z:\n'
+        '        yield x',
+        'def f():\n'
+        '    for x, y in z:\n'
+        '        yield y',
+        'def f():\n'
+        '    for a, b in z:\n'
+        '        yield x, y',
+        'def f():\n'
+        '    for x, y in z:\n'
+        '        yield y, x',
+        'def f():\n'
+        '    for x, y, c in z:\n'
+        '        yield x, y',
+        'def f():\n'
+        '    for x in z:\n'
+        '        x = 22\n'
+        '        yield x',
+        'def f():\n'
+        '    for x in z:\n'
+        '        yield x\n'
+        '    else:\n'
+        '        print("boom!")\n',
+    ),
+)
+def test_fix_yield_from_noop(s):
+    assert _fix_py3_plus(s) == s
+
+
 @pytest.mark.parametrize(
     's',
     (
@@ -1918,3 +2057,14 @@ def test_noop_token_error(tmpdir):
         '5\\\n',
     )
     assert main((f.strpath, '--py36-plus')) == 0
+
+
+def test_targets_same():
+    assert targets_same(ast.parse('global a, b'), ast.parse('global a, b'))
+    assert not targets_same(ast.parse('global a'), ast.parse('global b'))
+
+
+def test_fields_same():
+    def get_body(expr):
+        return ast.parse(expr).body[0].value
+    assert not fields_same(get_body('x'), get_body('1'))

for x in y: yield x => yield from y
No need for `async for` support according to [this](https://www.python.org/dev/peps/pep-0525/#asynchronous-yield-from)

Here's an ast parser to detect this, just need the tokenization to rewrite it:

```python
class Visitor(ast.NodeVisitor):
    def __init__(self, filename):
        self.filename = filename

    def visit_For(self, node: ast.For):
        if (
            isinstance(node.target, ast.Name) and
            len(node.body) == 1 and
            isinstance(node.body[0], ast.Expr) and
            isinstance(node.body[0].value, ast.Yield) and
            isinstance(node.body[0].value.value, ast.Name) and
            node.target.id == node.body[0].value.value.id
        ):
            print(f'{self.filename}:{node.lineno}: could be yield from')

        self.generic_visit(node)
```
tests/pyupgrade_test.py::test_roundtrip_text[] tests/pyupgrade_test.py::test_roundtrip_text[foo] tests/pyupgrade_test.py::test_roundtrip_text[{}] tests/pyupgrade_test.py::test_roundtrip_text[{0}] tests/pyupgrade_test.py::test_roundtrip_text[{named}] tests/pyupgrade_test.py::test_roundtrip_text[{!r}] tests/pyupgrade_test.py::test_roundtrip_text[{:>5}] tests/pyupgrade_test.py::test_roundtrip_text[{{] tests/pyupgrade_test.py::test_roundtrip_text[}}] tests/pyupgrade_test.py::test_roundtrip_text[{0!s:15}] tests/pyupgrade_test.py::test_intentionally_not_round_trip[{:}-{}] tests/pyupgrade_test.py::test_intentionally_not_round_trip[{0:}-{0}] tests/pyupgrade_test.py::test_intentionally_not_round_trip[{0!r:}-{0!r}] tests/pyupgrade_test.py::test_sets[set()-set()] tests/pyupgrade_test.py::test_sets[set((\n))-set((\n))] tests/pyupgrade_test.py::test_sets[set tests/pyupgrade_test.py::test_sets[set(())-set()] tests/pyupgrade_test.py::test_sets[set([])-set()] tests/pyupgrade_test.py::test_sets[set(( tests/pyupgrade_test.py::test_sets[set((1, tests/pyupgrade_test.py::test_sets[set([1, tests/pyupgrade_test.py::test_sets[set(x tests/pyupgrade_test.py::test_sets[set([x tests/pyupgrade_test.py::test_sets[set((x tests/pyupgrade_test.py::test_sets[set(((1, tests/pyupgrade_test.py::test_sets[set((a, tests/pyupgrade_test.py::test_sets[set([(1, tests/pyupgrade_test.py::test_sets[set(\n tests/pyupgrade_test.py::test_sets[set([((1, tests/pyupgrade_test.py::test_sets[set((((1, tests/pyupgrade_test.py::test_sets[set(\n(1, tests/pyupgrade_test.py::test_sets[set((\n1,\n2,\n))\n-{\n1,\n2,\n}\n] tests/pyupgrade_test.py::test_sets[set((frozenset(set((1, tests/pyupgrade_test.py::test_sets[set((1,))-{1}] tests/pyupgrade_test.py::test_dictcomps[x tests/pyupgrade_test.py::test_dictcomps[dict()-dict()] tests/pyupgrade_test.py::test_dictcomps[(-(] tests/pyupgrade_test.py::test_dictcomps[dict tests/pyupgrade_test.py::test_dictcomps[dict((a, tests/pyupgrade_test.py::test_dictcomps[dict([a, tests/pyupgrade_test.py::test_dictcomps[dict(((a, tests/pyupgrade_test.py::test_dictcomps[dict([(a, tests/pyupgrade_test.py::test_dictcomps[dict(((a), tests/pyupgrade_test.py::test_dictcomps[dict((k, tests/pyupgrade_test.py::test_dictcomps[dict(\n tests/pyupgrade_test.py::test_dictcomps[x(\n tests/pyupgrade_test.py::test_fix_is_compare_to_literal_noop[x tests/pyupgrade_test.py::test_fix_is_compare_to_literal[`is`] tests/pyupgrade_test.py::test_fix_is_compare_to_literal[`is tests/pyupgrade_test.py::test_fix_is_compare_to_literal[string] tests/pyupgrade_test.py::test_fix_is_compare_to_literal[unicode tests/pyupgrade_test.py::test_fix_is_compare_to_literal[bytes] tests/pyupgrade_test.py::test_fix_is_compare_to_literal[float] tests/pyupgrade_test.py::test_fix_is_compare_to_literal[compound tests/pyupgrade_test.py::test_fix_is_compare_to_literal[multi-line tests/pyupgrade_test.py::test_format_literals["{0}"format(1)-"{0}"format(1)] tests/pyupgrade_test.py::test_format_literals['{}'.format(1)-'{}'.format(1)] tests/pyupgrade_test.py::test_format_literals['{'.format(1)-'{'.format(1)] tests/pyupgrade_test.py::test_format_literals['}'.format(1)-'}'.format(1)] tests/pyupgrade_test.py::test_format_literals[x tests/pyupgrade_test.py::test_format_literals['{0} tests/pyupgrade_test.py::test_format_literals['{0}'.format(1)-'{}'.format(1)] tests/pyupgrade_test.py::test_format_literals['{0:x}'.format(30)-'{:x}'.format(30)] tests/pyupgrade_test.py::test_format_literals['''{0}\n{1}\n'''.format(1, tests/pyupgrade_test.py::test_format_literals['{0}' tests/pyupgrade_test.py::test_format_literals[print(\n tests/pyupgrade_test.py::test_format_literals['{0:<{1}}'.format(1, tests/pyupgrade_test.py::test_imports_unicode_literals[import tests/pyupgrade_test.py::test_imports_unicode_literals[from tests/pyupgrade_test.py::test_imports_unicode_literals[x tests/pyupgrade_test.py::test_imports_unicode_literals["""docstring"""\nfrom tests/pyupgrade_test.py::test_unicode_literals[(-False-(] tests/pyupgrade_test.py::test_unicode_literals[u''-False-u''] tests/pyupgrade_test.py::test_unicode_literals[u''-True-''] tests/pyupgrade_test.py::test_unicode_literals[from tests/pyupgrade_test.py::test_unicode_literals["""with tests/pyupgrade_test.py::test_unicode_literals[Regression: tests/pyupgrade_test.py::test_fix_ur_literals[basic tests/pyupgrade_test.py::test_fix_ur_literals[upper tests/pyupgrade_test.py::test_fix_ur_literals[with tests/pyupgrade_test.py::test_fix_ur_literals[emoji] tests/pyupgrade_test.py::test_fix_ur_literals_gets_fixed_before_u_removed tests/pyupgrade_test.py::test_fix_escape_sequences_noop[""] tests/pyupgrade_test.py::test_fix_escape_sequences_noop[r"\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop[r'\\d'] tests/pyupgrade_test.py::test_fix_escape_sequences_noop[r"""\\d"""] tests/pyupgrade_test.py::test_fix_escape_sequences_noop[r'''\\d'''] tests/pyupgrade_test.py::test_fix_escape_sequences_noop[rb"\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["\\\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["\\u2603"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["\\r\\n"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["\\N{SNOWMAN}"] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["""\\\n"""] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["""\\\r\n"""] tests/pyupgrade_test.py::test_fix_escape_sequences_noop["""\\\r"""] tests/pyupgrade_test.py::test_fix_escape_sequences["\\d"-r"\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences["\\n\\d"-"\\n\\\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences[u"\\d"-u"\\\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences[b"\\d"-br"\\d"] tests/pyupgrade_test.py::test_fix_escape_sequences["\\8"-r"\\8"] tests/pyupgrade_test.py::test_fix_escape_sequences["\\9"-r"\\9"] tests/pyupgrade_test.py::test_fix_escape_sequences[b"\\u2603"-br"\\u2603"] tests/pyupgrade_test.py::test_fix_escape_sequences["""\\\n\\q"""-"""\\\n\\\\q"""] tests/pyupgrade_test.py::test_fix_escape_sequences["""\\\r\n\\q"""-"""\\\r\n\\\\q"""] tests/pyupgrade_test.py::test_fix_escape_sequences["""\\\r\\q"""-"""\\\r\\\\q"""] tests/pyupgrade_test.py::test_fix_escape_sequences["\\N"-r"\\N"] tests/pyupgrade_test.py::test_fix_escape_sequences["\\N\\n"-"\\\\N\\n"] tests/pyupgrade_test.py::test_fix_escape_sequences["\\N{SNOWMAN}\\q"-"\\N{SNOWMAN}\\\\q"] tests/pyupgrade_test.py::test_fix_escape_sequences[b"\\N{SNOWMAN}"-br"\\N{SNOWMAN}"] tests/pyupgrade_test.py::test_noop_octal_literals[0] tests/pyupgrade_test.py::test_noop_octal_literals[00] tests/pyupgrade_test.py::test_noop_octal_literals[1] tests/pyupgrade_test.py::test_noop_octal_literals[12345] tests/pyupgrade_test.py::test_noop_octal_literals[1.2345] tests/pyupgrade_test.py::test_fix_extra_parens_noop[print("hello tests/pyupgrade_test.py::test_fix_extra_parens_noop[print((1, tests/pyupgrade_test.py::test_fix_extra_parens_noop[print(())] tests/pyupgrade_test.py::test_fix_extra_parens_noop[print((\n))] tests/pyupgrade_test.py::test_fix_extra_parens_noop[sum((block.code tests/pyupgrade_test.py::test_fix_extra_parens_noop[def tests/pyupgrade_test.py::test_fix_extra_parens[print(("hello tests/pyupgrade_test.py::test_fix_extra_parens[print(("foo{}".format(1)))-print("foo{}".format(1))] tests/pyupgrade_test.py::test_fix_extra_parens[print((((1))))-print(1)] tests/pyupgrade_test.py::test_fix_extra_parens[print(\n tests/pyupgrade_test.py::test_fix_extra_parens[extra tests/pyupgrade_test.py::test_is_bytestring_true[b''] tests/pyupgrade_test.py::test_is_bytestring_true[b""] tests/pyupgrade_test.py::test_is_bytestring_true[B""] tests/pyupgrade_test.py::test_is_bytestring_true[B''] tests/pyupgrade_test.py::test_is_bytestring_true[rb''0] tests/pyupgrade_test.py::test_is_bytestring_true[rb''1] tests/pyupgrade_test.py::test_is_bytestring_false[] tests/pyupgrade_test.py::test_is_bytestring_false[""] tests/pyupgrade_test.py::test_is_bytestring_false[''] tests/pyupgrade_test.py::test_is_bytestring_false[u""] tests/pyupgrade_test.py::test_is_bytestring_false["b"] tests/pyupgrade_test.py::test_parse_percent_format[""-expected0] tests/pyupgrade_test.py::test_parse_percent_format["%%"-expected1] tests/pyupgrade_test.py::test_parse_percent_format["%s"-expected2] tests/pyupgrade_test.py::test_parse_percent_format["%s tests/pyupgrade_test.py::test_parse_percent_format["%(hi)s"-expected4] tests/pyupgrade_test.py::test_parse_percent_format["%()s"-expected5] tests/pyupgrade_test.py::test_parse_percent_format["%#o"-expected6] tests/pyupgrade_test.py::test_parse_percent_format["% tests/pyupgrade_test.py::test_parse_percent_format["%5d"-expected8] tests/pyupgrade_test.py::test_parse_percent_format["%*d"-expected9] tests/pyupgrade_test.py::test_parse_percent_format["%.f"-expected10] tests/pyupgrade_test.py::test_parse_percent_format["%.5f"-expected11] tests/pyupgrade_test.py::test_parse_percent_format["%.*f"-expected12] tests/pyupgrade_test.py::test_parse_percent_format["%ld"-expected13] tests/pyupgrade_test.py::test_parse_percent_format["%(complete)#4.4f"-expected14] tests/pyupgrade_test.py::test_percent_to_format[%s-{}] tests/pyupgrade_test.py::test_percent_to_format[%%%s-%{}] tests/pyupgrade_test.py::test_percent_to_format[%(foo)s-{foo}] tests/pyupgrade_test.py::test_percent_to_format[%2f-{:2f}] tests/pyupgrade_test.py::test_percent_to_format[%r-{!r}] tests/pyupgrade_test.py::test_percent_to_format[%a-{!a}] tests/pyupgrade_test.py::test_simplify_conversion_flag[-] tests/pyupgrade_test.py::test_simplify_conversion_flag[ tests/pyupgrade_test.py::test_simplify_conversion_flag[#0- tests/pyupgrade_test.py::test_simplify_conversion_flag[--<] tests/pyupgrade_test.py::test_percent_format_noop["%s" tests/pyupgrade_test.py::test_percent_format_noop[b"%s" tests/pyupgrade_test.py::test_percent_format_noop["%*s" tests/pyupgrade_test.py::test_percent_format_noop["%.*s" tests/pyupgrade_test.py::test_percent_format_noop["%d" tests/pyupgrade_test.py::test_percent_format_noop["%i" tests/pyupgrade_test.py::test_percent_format_noop["%u" tests/pyupgrade_test.py::test_percent_format_noop["%c" tests/pyupgrade_test.py::test_percent_format_noop["%#o" tests/pyupgrade_test.py::test_percent_format_noop["%()s" tests/pyupgrade_test.py::test_percent_format_noop["%4%" tests/pyupgrade_test.py::test_percent_format_noop["%.2r" tests/pyupgrade_test.py::test_percent_format_noop["%.2a" tests/pyupgrade_test.py::test_percent_format_noop[i tests/pyupgrade_test.py::test_percent_format_noop["%(1)s" tests/pyupgrade_test.py::test_percent_format_noop["%(a)s" tests/pyupgrade_test.py::test_percent_format_noop["%(ab)s" tests/pyupgrade_test.py::test_percent_format_noop["%(and)s" tests/pyupgrade_test.py::test_percent_format["trivial" tests/pyupgrade_test.py::test_percent_format["%s" tests/pyupgrade_test.py::test_percent_format["%s%% tests/pyupgrade_test.py::test_percent_format["%3f" tests/pyupgrade_test.py::test_percent_format["%-5s" tests/pyupgrade_test.py::test_percent_format["%9s" tests/pyupgrade_test.py::test_percent_format["brace tests/pyupgrade_test.py::test_percent_format["%(k)s" tests/pyupgrade_test.py::test_percent_format["%(to_list)s" tests/pyupgrade_test.py::test_fix_super_noop[x(] tests/pyupgrade_test.py::test_fix_super_noop[class tests/pyupgrade_test.py::test_fix_super_noop[def tests/pyupgrade_test.py::test_fix_super[class tests/pyupgrade_test.py::test_fix_classes_noop[x tests/pyupgrade_test.py::test_fix_classes_noop[class tests/pyupgrade_test.py::test_fix_classes[class tests/pyupgrade_test.py::test_fix_classes[import tests/pyupgrade_test.py::test_fix_classes[from tests/pyupgrade_test.py::test_fix_six_noop[x tests/pyupgrade_test.py::test_fix_six_noop[from tests/pyupgrade_test.py::test_fix_six_noop[@mydec\nclass tests/pyupgrade_test.py::test_fix_six_noop[print(six.raise_from(exc, tests/pyupgrade_test.py::test_fix_six_noop[print(six.b("\xa3"))] tests/pyupgrade_test.py::test_fix_six_noop[print(six.b( tests/pyupgrade_test.py::test_fix_six_noop[class tests/pyupgrade_test.py::test_fix_six_noop[six.reraise(*err)] tests/pyupgrade_test.py::test_fix_six_noop[six.b(*a)] tests/pyupgrade_test.py::test_fix_six_noop[six.u(*a)] tests/pyupgrade_test.py::test_fix_six_noop[@six.add_metaclass(*a)\nclass tests/pyupgrade_test.py::test_fix_six[isinstance(s, tests/pyupgrade_test.py::test_fix_six[weird tests/pyupgrade_test.py::test_fix_six[issubclass(tp, tests/pyupgrade_test.py::test_fix_six[STRING_TYPES tests/pyupgrade_test.py::test_fix_six[from tests/pyupgrade_test.py::test_fix_six[six.b("123")-b"123"] tests/pyupgrade_test.py::test_fix_six[six.b(r"123")-br"123"] tests/pyupgrade_test.py::test_fix_six[six.b("\\x12\\xef")-b"\\x12\\xef"] tests/pyupgrade_test.py::test_fix_six[six.byte2int(b"f")-b"f"[0]] tests/pyupgrade_test.py::test_fix_six[@six.python_2_unicode_compatible\nclass tests/pyupgrade_test.py::test_fix_six[@six.python_2_unicode_compatible\n@other_decorator\nclass tests/pyupgrade_test.py::test_fix_six[six.get_unbound_method(meth)\n-meth\n] tests/pyupgrade_test.py::test_fix_six[six.indexbytes(bs, tests/pyupgrade_test.py::test_fix_six[six.assertCountEqual(\n tests/pyupgrade_test.py::test_fix_six[six.raise_from(exc, tests/pyupgrade_test.py::test_fix_six[six.reraise(tp, tests/pyupgrade_test.py::test_fix_six[six.reraise(\n tests/pyupgrade_test.py::test_fix_six[class tests/pyupgrade_test.py::test_fix_six[basic tests/pyupgrade_test.py::test_fix_six[add_metaclass, tests/pyupgrade_test.py::test_fix_classes_py3only[class tests/pyupgrade_test.py::test_fix_classes_py3only[from tests/pyupgrade_test.py::test_fix_yield_from[def tests/pyupgrade_test.py::test_fix_yield_from_noop[def tests/pyupgrade_test.py::test_fix_native_literals_noop[str(1)] tests/pyupgrade_test.py::test_fix_native_literals_noop[str("foo"\n"bar")] tests/pyupgrade_test.py::test_fix_native_literals_noop[str(*a)] tests/pyupgrade_test.py::test_fix_native_literals_noop[str("foo", tests/pyupgrade_test.py::test_fix_native_literals_noop[str(**k)] tests/pyupgrade_test.py::test_fix_native_literals[str("foo")-"foo"] tests/pyupgrade_test.py::test_fix_native_literals[str("""\nfoo""")-"""\nfoo"""] tests/pyupgrade_test.py::test_fix_encode["asd".encode("utf-8")-"asd".encode()] tests/pyupgrade_test.py::test_fix_encode["asd".encode("utf8")-"asd".encode()] tests/pyupgrade_test.py::test_fix_encode["asd".encode("UTF-8")-"asd".encode()] tests/pyupgrade_test.py::test_fix_encode[sys.stdout.buffer.write(\n tests/pyupgrade_test.py::test_fix_encode_noop["asd".encode("unknown-codec")] tests/pyupgrade_test.py::test_fix_encode_noop["asd".encode("ascii")] tests/pyupgrade_test.py::test_fix_encode_noop[x="asd"\nx.encode("utf-8")] tests/pyupgrade_test.py::test_fix_encode_noop["asd".encode("utf-8", tests/pyupgrade_test.py::test_fix_encode_noop["asd".encode(encoding="utf-8")] tests/pyupgrade_test.py::test_fix_py2_block_noop[if tests/pyupgrade_test.py::test_fix_py2_blocks[six.PY2] tests/pyupgrade_test.py::test_fix_py2_blocks[six.PY2, tests/pyupgrade_test.py::test_fix_py2_blocks[not tests/pyupgrade_test.py::test_fix_py2_blocks[six.PY3] tests/pyupgrade_test.py::test_fix_py2_blocks[indented tests/pyupgrade_test.py::test_fix_py2_blocks[six.PY2 tests/pyupgrade_test.py::test_fix_py2_blocks[six.PY3, tests/pyupgrade_test.py::test_fix_fstrings_noop[(] tests/pyupgrade_test.py::test_fix_fstrings_noop["{}" tests/pyupgrade_test.py::test_fix_fstrings_noop["{}".format(\n tests/pyupgrade_test.py::test_fix_fstrings_noop["{} tests/pyupgrade_test.py::test_fix_fstrings_noop["{foo} tests/pyupgrade_test.py::test_fix_fstrings_noop["{0} tests/pyupgrade_test.py::test_fix_fstrings_noop["{x} tests/pyupgrade_test.py::test_fix_fstrings_noop["{x.y} tests/pyupgrade_test.py::test_fix_fstrings_noop[b"{} tests/pyupgrade_test.py::test_fix_fstrings_noop["{:{}}".format(x, tests/pyupgrade_test.py::test_fix_fstrings_noop["{a[b]}".format(a=a)] tests/pyupgrade_test.py::test_fix_fstrings_noop["{a.a[b]}".format(a=a)] tests/pyupgrade_test.py::test_fix_fstrings["{} tests/pyupgrade_test.py::test_fix_fstrings["{1} tests/pyupgrade_test.py::test_fix_fstrings["{x.y}".format(x=z)-f"{z.y}"] tests/pyupgrade_test.py::test_fix_fstrings["{.x} tests/pyupgrade_test.py::test_fix_fstrings["hello tests/pyupgrade_test.py::test_fix_fstrings["{}{{}}{}".format(escaped, tests/pyupgrade_test.py::test_main_trivial tests/pyupgrade_test.py::test_main_noop tests/pyupgrade_test.py::test_main_changes_a_file tests/pyupgrade_test.py::test_main_keeps_line_endings tests/pyupgrade_test.py::test_main_syntax_error tests/pyupgrade_test.py::test_main_non_utf8_bytes tests/pyupgrade_test.py::test_keep_percent_format tests/pyupgrade_test.py::test_py3_plus_argument_unicode_literals tests/pyupgrade_test.py::test_py3_plus_super tests/pyupgrade_test.py::test_py3_plus_new_style_classes tests/pyupgrade_test.py::test_py36_plus_fstrings tests/pyupgrade_test.py::test_noop_token_error tests/pyupgrade_test.py::test_targets_same tests/pyupgrade_test.py::test_fields_same