def METHOD_NAME(jobs):
  """Return projects for jobs."""
  projects = {}
  introspector_index = get_introspector_index()
  for job in sorted(jobs, key=lambda j: j.name):
    project_name = job.get_environment().get('PROJECT_NAME', job.name)
    if project_name not in projects:
      projects[project_name] = {'name': project_name, 'jobs': []}
    if utils.string_is_true(job.get_environment().get('CORPUS_PRUNE')):
      projects[project_name]['coverage_job'] = job.name
    projects[project_name]['has_introspector'] = False
    if project_name in introspector_index:
      projects[project_name]['has_introspector'] = True
      projects[project_name]['introspector_report'] = introspector_index[
          project_name]
    engine_display_name, engine_name = _get_engine_names(job.name)
    projects[project_name]['jobs'].append({
        'engine_display_name':
            engine_display_name,
        'engine_name':
            engine_name,
        'sanitizer_string':
            environment.get_memory_tool_display_string(job.name),
        'name':
            job.name,
        'single_target':
            get_single_fuzz_target_or_none(project_name, engine_name),
        'has_stats':
            True
    })
  projects = list(projects.values())
  projects.sort(key=_sort_by_name)
  for project in projects:
    project['jobs'].sort(key=_sort_by_name)
  return projects