// 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.

import 'dart:async';

import 'package:path/path.dart' as path;

import '../io.dart';
import '../validator.dart';

/// Validates that a package doesn't contain compiled Dartdoc
/// output.
class CompiledDartdocValidator extends Validator {
  @override
  Future validate() {
    return Future.sync(() {
      for (var entry in files) {
        if (path.basename(entry) != 'nav.json') continue;
        var dir = path.dirname(entry);

        // Look for tell-tale Dartdoc output files all in the same directory.
        var files = [
          entry,
          path.join(dir, 'index.html'),
          path.join(dir, 'styles.css'),
          path.join(dir, 'dart-logo-small.png'),
          path.join(dir, 'client-live-nav.js')
        ];

        if (files.every(fileExists)) {
          warnings.add('Avoid putting generated documentation in '
              '${path.relative(dir)}.\n'
              'Generated documentation bloats the package with redundant '
              'data.');
        }
      }
    });
  }
}
