code: def lint(relative_path_to_file,
           contents,
           linter_functions,
           **kwargs):
      r
      lines = contents.splitlines(True)
  
      errors = list()
      for (code, info) in linter_functions.items():
          error = info.function(relative_path_to_file, lines, kwargs)
          if error:
              if isinstance(error, list):
                  errors.extend([(code, e) for e in error])
              else:
                  errors.append((code, error))
  
      errors = [e for e in errors if not _error_is_suppressed(e[1], e[0], lines)]
      return sorted(errors, key=lambda e: e[1].line)
docs: r"""Actually lints some file contents.
  
      relative_path_to_file should contain the relative path to the file being
      linted from the root source directory. Contents should be a raw string
      with \n's.