68 lines
2.3 KiB
Dart
68 lines
2.3 KiB
Dart
// Copyright 2015 The Chromium Authors. 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:args/args.dart';
|
|
|
|
import '../base/file_system.dart';
|
|
import '../base/utils.dart';
|
|
import '../cache.dart';
|
|
import '../globals.dart';
|
|
|
|
/// Common behavior for `flutter analyze` and `flutter analyze --watch`
|
|
abstract class AnalyzeBase {
|
|
/// The parsed argument results for execution.
|
|
final ArgResults argResults;
|
|
|
|
AnalyzeBase(this.argResults);
|
|
|
|
/// Called by [AnalyzeCommand] to start the analysis process.
|
|
Future<Null> analyze();
|
|
|
|
void dumpErrors(Iterable<String> errors) {
|
|
if (argResults['write'] != null) {
|
|
try {
|
|
final RandomAccessFile resultsFile = fs.file(argResults['write']).openSync(mode: FileMode.WRITE);
|
|
try {
|
|
resultsFile.lockSync();
|
|
resultsFile.writeStringSync(errors.join('\n'));
|
|
} finally {
|
|
resultsFile.close();
|
|
}
|
|
} catch (e) {
|
|
printError('Failed to save output to "${argResults['write']}": $e');
|
|
}
|
|
}
|
|
}
|
|
|
|
void writeBenchmark(Stopwatch stopwatch, int errorCount, int membersMissingDocumentation) {
|
|
final String benchmarkOut = 'analysis_benchmark.json';
|
|
final Map<String, dynamic> data = <String, dynamic>{
|
|
'time': (stopwatch.elapsedMilliseconds / 1000.0),
|
|
'issues': errorCount,
|
|
'missingDartDocs': membersMissingDocumentation
|
|
};
|
|
fs.file(benchmarkOut).writeAsStringSync(toPrettyJson(data));
|
|
printStatus('Analysis benchmark written to $benchmarkOut ($data).');
|
|
}
|
|
|
|
bool get isBenchmarking => argResults['benchmark'];
|
|
}
|
|
|
|
/// Return `true` if [fileList] contains a path that resides inside the Flutter repository.
|
|
/// If [fileList] is empty, then return `true` if the current directory resides inside the Flutter repository.
|
|
bool inRepo(List<String> fileList) {
|
|
if (fileList == null || fileList.isEmpty)
|
|
fileList = <String>[fs.path.current];
|
|
final String root = fs.path.normalize(fs.path.absolute(Cache.flutterRoot));
|
|
final String prefix = root + fs.path.separator;
|
|
for (String file in fileList) {
|
|
file = fs.path.normalize(fs.path.absolute(file));
|
|
if (file == root || file.startsWith(prefix))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|