code: 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
docs: 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.