// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io' as io;

/// The context for dartfix.
class Context {
  String get workingDir => io.Directory.current.path;

  bool exists(String filePath) =>
      io.FileSystemEntity.typeSync(filePath) !=
      io.FileSystemEntityType.notFound;

  void exit(int code) {
    io.exit(code);
  }

  bool isDirectory(String filePath) =>
      io.FileSystemEntity.typeSync(filePath) ==
      io.FileSystemEntityType.directory;
}
