// 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 p;

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 (p.basename(entry) != 'nav.json') continue;
        var dir = p.dirname(entry);

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

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