code: def process_line(self, dirname, line):
          
          if not hasattr(self, 'response_format'):
              raise NotImplementedError()
  
          match = self.response_format.search(line)
          if match is not None:
              if len(self.filenames) != 0:
                  if match.group('filename') not in self.filenames:
                      return
              filename, line, messages = match.groups()
              return filename, line, messages
docs: Processes a line return a 3-element tuple representing (filename,
          line_number, error_messages) or None to indicate no error.
  
          :param: dirname - directory the code is running in
  
          For default implementation, regex in `self.response_format` is expected
          to have the capture groups `filename`, `line`, `message` in order. If
          not, override this method.