// Copyright (c) 2012, 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.

library csslib.src.options;

class PreprocessorOptions {
  /// Generate polyfill code (e.g., var, etc.)
  final bool polyfill;

  /// Report warnings as errors.
  final bool warningsAsErrors;

  /// Throw an exception on warnings (not used by command line tool).
  final bool throwOnWarnings;

  /// Throw an exception on errors (not used by command line tool).
  final bool throwOnErrors;

  /// True to show informational messages. The `--verbose` flag.
  final bool verbose;

  /// True to show warning messages for bad CSS.  The '--checked' flag.
  final bool checked;

  // TODO(terry): Add mixin support and nested rules.
  /// Subset of Less commands enabled; disable with '--no-less'.
  /// Less syntax supported:
  /// - @name at root level statically defines variables resolved at compilation
  /// time.  Essentially a directive e.g., @var-name.
  final bool lessSupport;

  /// Whether to use colors to print messages on the terminal.
  final bool useColors;

  /// File to process by the compiler.
  final String inputFile;

  const PreprocessorOptions(
      {this.verbose = false,
      this.checked = false,
      this.lessSupport = true,
      this.warningsAsErrors = false,
      this.throwOnErrors = false,
      this.throwOnWarnings = false,
      this.useColors = true,
      this.polyfill = false,
      this.inputFile});
}
