//===--- MigratorOptions.h - Swift Migrator ---------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// A container for Swift Migrator options pulled in through the driver/frontend.
//
//===----------------------------------------------------------------------===//

#ifndef SWIFT_MIGRATOR_MIGRATOROPTIONS_H
#define SWIFT_MIGRATOR_MIGRATOROPTIONS_H

namespace swift {

struct MigratorOptions {
  /// Add `@objc` to declarations that would've been implicitly
  /// visible to the Objective-C runtime in Swift 3.
  bool KeepObjcVisibility = false;

  /// Skip the migration phase that repeatedly asks for fix-its from the
  /// compiler and applies them. This is generally for debugging.
  bool EnableMigratorFixits = true;

  /// Whether to print each USR we query the api change data store about.
  bool DumpUsr = false;

  /// If non-empty, print a replacement map describing changes to get from
  /// the first MigrationState's output text to the last MigrationState's
  /// output text.
  std::string EmitRemapFilePath = "";

  /// If non-empty, print the last MigrationState's output text to the given
  /// file path.
  std::string EmitMigratedFilePath = "";

  /// If non-empty, dump all Migrator::States to this directory.
  std::string DumpMigrationStatesDir = "";

  /// If non-empty, use the api change data serialized to this path.
  std::string APIDigesterDataStorePath = "";

  bool shouldRunMigrator() const {
    return !(EmitRemapFilePath.empty() && EmitMigratedFilePath.empty() &&
             DumpMigrationStatesDir.empty());
  }
};

} // end namespace swift

#endif // SWIFT_MIGRATOR_MIGRATOROPTIONS_H
