blob: b1e70a2817293c76a7db5b2b8f80ad63451282d7 [file] [log] [blame]
// Copyright (c) 2022, 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 'dart:io';
import 'package:path/path.dart' as p;
import '../io.dart';
import '../log.dart';
import '../validator.dart';
/// Runs `dart analyze` and gives a warning if it returns non-zero.
class AnalyzeValidator extends Validator {
/// Only analyze dart code in the following sub-folders.
@override
Future<void> validate() async {
final dirsToAnalyze = ['lib', 'test', 'bin']
.map((dir) => p.join(entrypoint.root.dir, dir))
.where(dirExists);
final result = await runProcess(
Platform.resolvedExecutable,
[
'analyze',
'--fatal-infos',
...dirsToAnalyze,
p.join(entrypoint.root.dir, 'pubspec.yaml')
],
);
if (result.exitCode != 0) {
final limitedOutput = limitLength(result.stdout.join('\n'), 1000);
warnings
.add('`dart analyze` found the following issue(s):\n$limitedOutput');
}
}
}