'Refactor a given input string.
Args:
data: a string holding the code to be refactored.
name: a human-readable name for use in error/log messages.
Returns:
An AST corresponding to the refactored input stream; None if
there were errors during the parse.'

def refactor_string(self, data, name):

    features = _detect_future_features(data)
    if ('print_function' in features):
        self.driver.grammar = pygram.python_grammar_no_print_statement
    try:
        tree = self.driver.parse_string(data)
    except Exception as err:
        self.log_error("Can't    parse    %s:    %s:    %s", name, err.__class__.__name__, err)
        return
    finally:
        self.driver.grammar = self.grammar
    tree.future_features = features
    self.log_debug('Refactoring    %s', name)
    self.refactor_tree(tree, name)
    return tree
