// Copyright (c) 2017, 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 'log.dart';

final _checkedPattern = new RegExp(r"\bchecked\b");
final _abstractErrorPattern =
    new RegExp(r"\bAbstractClassInstantiationError\b");
final _typeErrorPattern = new RegExp(r"\bTypeError\b");
final _typeAssertionsEnabledPattern = new RegExp(r"\btypeAssertionsEnabled\b");
final _checkedModeEnabledPattern = new RegExp(r"\bcheckedModeEnabled\b");

void validateFile(String path, String source, [List<String> todos]) {
  check(Pattern pattern, String noteMessage, String todo) {
    if (!source.contains(pattern)) return;
    note("${bold(path)} $noteMessage.");
    if (todos != null) todos.add(todo);
  }

  check(_checkedPattern, 'mentions "checked"',
      'Fix code that mentions "checked" mode.');
  check(_abstractErrorPattern, 'mentions "AbstractClassInstantiationError"',
      "Remove code that checks for AbstractClassInstantiationError.");
  check(_typeErrorPattern, 'mentions "TypeError"',
      "Ensure code that checks for a TypeError uses 2.0 semantics.");
  check(_typeAssertionsEnabledPattern, 'mentions "typeAssertionsEnabled"',
      "Remove checks for typeAssertionsEnabled, they are always enabled in 2.0.");
  check(_checkedModeEnabledPattern, 'mentions "typeAssertionsEnabled"',
      "Remove checks for checkedModeEnabled, it is always enabled in 2.0.");
}
