code: def line_transformation_suggestor(line_transformation, line_filter=None):
      
      def suggestor(lines):
          for line_number, line in enumerate(lines):
              if line_filter and not line_filter(line):
                  continue
              candidate = line_transformation(line)
              if candidate is None:
                  yield Patch(line_number)
              else:
                  yield Patch(line_number, new_lines=[candidate])
      return suggestor
docs: Returns a suggestor (a function that takes a list of lines and yields
      patches) where suggestions are the result of line-by-line transformations.
  
      @param line_transformation  Function that, given a line, returns another
                                  line
                                  with which to replace the given one.  If the
                                  output line is different from the input line,
                                  the
                                  user will be prompted about whether to make the
                                  change.  If the output is None, this means "I
                                  don't have a suggestion, but the user should
                                  still be asked if zhe wants to edit the line."
      @param line_filter          Given a line, returns True or False.  If False,
                                  a line is ignored (as if line_transformation
                                  returned the line itself for that line).