Unverified Commit 93eac884 authored by includecmath's avatar includecmath Committed by GitHub

[flutter_tools] Clean code analyze command (#60200)

parent 741608a2
......@@ -85,6 +85,24 @@ abstract class AnalyzeBase {
}
bool get isBenchmarking => argResults['benchmark'] as bool;
static String generateDartDocMessage(int undocumentedMembers) {
String dartDocMessage;
assert(undocumentedMembers >= 0);
switch (undocumentedMembers) {
case 0:
dartDocMessage = 'all public member have documentation';
break;
case 1:
dartDocMessage = 'one public member lacks documentation';
break;
default:
dartDocMessage = '$undocumentedMembers public members lack documentation';
}
return dartDocMessage;
}
}
class PackageDependency {
......
......@@ -20,7 +20,10 @@ import '../dart/analysis.dart';
import 'analyze_base.dart';
class AnalyzeContinuously extends AnalyzeBase {
AnalyzeContinuously(ArgResults argResults, List<String> repoRoots, List<Directory> repoPackages, {
AnalyzeContinuously(
ArgResults argResults,
List<String> repoRoots,
List<Directory> repoPackages, {
@required FileSystem fileSystem,
@required Logger logger,
@required Terminal terminal,
......@@ -72,7 +75,9 @@ class AnalyzeContinuously extends AnalyzeBase {
final String sdkPath = argResults['dart-sdk'] as String ??
artifacts.getArtifactPath(Artifact.engineDartSdkPath);
final AnalysisServer server = AnalysisServer(sdkPath, directories,
final AnalysisServer server = AnalysisServer(
sdkPath,
directories,
fileSystem: fileSystem,
logger: logger,
platform: platform,
......@@ -159,20 +164,15 @@ class AnalyzeContinuously extends AnalyzeBase {
} else if (issueCount != 0) {
errorsMessage = '$issueCount ${pluralize('issue', issueCount)} found';
} else {
errorsMessage = 'no issues found';
errorsMessage = 'No issues found!';
}
String dartdocMessage;
if (undocumentedMembers == 1) {
dartdocMessage = 'one public member lacks documentation';
} else {
dartdocMessage = '$undocumentedMembers public members lack documentation';
}
final String dartDocMessage = AnalyzeBase.generateDartDocMessage(undocumentedMembers);
final String files = '${analyzedPaths.length} ${pluralize('file', analyzedPaths.length)}';
final String seconds = (analysisTimer.elapsedMilliseconds / 1000.0).toStringAsFixed(2);
if (undocumentedMembers > 0) {
logger.printStatus('$errorsMessage$dartdocMessage • analyzed $files in $seconds seconds');
logger.printStatus('$errorsMessage$dartDocMessage • analyzed $files in $seconds seconds');
} else {
logger.printStatus('$errorsMessage • analyzed $files in $seconds seconds');
}
......
......@@ -16,10 +16,8 @@ import '../base/platform.dart';
import '../base/terminal.dart';
import '../base/utils.dart';
import '../dart/analysis.dart';
import 'analyze.dart';
import 'analyze_base.dart';
/// An aspect of the [AnalyzeCommand] to perform once time analysis.
class AnalyzeOnce extends AnalyzeBase {
AnalyzeOnce(
ArgResults argResults,
......@@ -87,7 +85,6 @@ class AnalyzeOnce extends AnalyzeBase {
throwToolExit('Nothing to analyze.', exitCode: 0);
}
// analyze all
final Completer<void> analysisCompleter = Completer<void>();
final List<AnalysisError> errors = <AnalysisError>[];
......@@ -109,17 +106,24 @@ class AnalyzeOnce extends AnalyzeBase {
Status progress;
try {
StreamSubscription<bool> subscription;
subscription = server.onAnalyzing.listen((bool isAnalyzing) {
void handleAnalysisStatus(bool isAnalyzing) {
if (!isAnalyzing) {
analysisCompleter.complete();
subscription?.cancel();
subscription = null;
}
});
server.onErrors.listen((FileAnalysisErrors fileErrors) {
// Record the issues found (but filter out to do comments).
errors.addAll(fileErrors.errors.where((AnalysisError error) => error.type != 'TODO'));
});
}
subscription = server.onAnalyzing.listen((bool isAnalyzing) => handleAnalysisStatus(isAnalyzing));
void handleAnalysisErrors(FileAnalysisErrors fileErrors) {
fileErrors.errors.removeWhere((AnalysisError error) => error.type == 'TODO');
errors.addAll(fileErrors.errors);
}
server.onErrors.listen(handleAnalysisErrors);
await server.start();
// Completing the future in the callback can't fail.
......@@ -175,19 +179,14 @@ class AnalyzeOnce extends AnalyzeBase {
final String seconds = (timer.elapsedMilliseconds / 1000.0).toStringAsFixed(1);
String dartdocMessage;
if (undocumentedMembers == 1) {
dartdocMessage = 'one public member lacks documentation';
} else {
dartdocMessage = '$undocumentedMembers public members lack documentation';
}
final String dartDocMessage = AnalyzeBase.generateDartDocMessage(undocumentedMembers);
// We consider any level of error to be an error exit (we don't report different levels).
if (errors.isNotEmpty) {
final int errorCount = errors.length;
logger.printStatus('');
if (undocumentedMembers > 0) {
throwToolExit('$errorCount ${pluralize('issue', errorCount)} found. (ran in ${seconds}s; $dartdocMessage)');
throwToolExit('$errorCount ${pluralize('issue', errorCount)} found. (ran in ${seconds}s; $dartDocMessage)');
} else {
throwToolExit('$errorCount ${pluralize('issue', errorCount)} found. (ran in ${seconds}s)');
}
......@@ -199,7 +198,7 @@ class AnalyzeOnce extends AnalyzeBase {
if (argResults['congratulate'] as bool) {
if (undocumentedMembers > 0) {
logger.printStatus('No issues found! (ran in ${seconds}s; $dartdocMessage)');
logger.printStatus('No issues found! (ran in ${seconds}s; $dartDocMessage)');
} else {
logger.printStatus('No issues found! (ran in ${seconds}s)');
}
......
......@@ -5,12 +5,19 @@
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/commands/analyze_base.dart';
import '../../src/common.dart';
const String _kFlutterRoot = '/data/flutter';
void main() {
testWithoutContext('analyze generate correct DartDoc message', () async {
expect(AnalyzeBase.generateDartDocMessage(0), 'all public member have documentation');
expect(AnalyzeBase.generateDartDocMessage(1), 'one public member lacks documentation');
expect(AnalyzeBase.generateDartDocMessage(2), '2 public members lack documentation');
});
testWithoutContext('analyze inRepo', () {
final FileSystem fileSystem = MemoryFileSystem.test();
fileSystem.directory(_kFlutterRoot).createSync(recursive: true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment