mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
107 lines
3.3 KiB
Dart
107 lines
3.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 '../base/file_system.dart';
|
|
import '../runner/flutter_command.dart';
|
|
import 'analyze_continuously.dart';
|
|
import 'analyze_once.dart';
|
|
|
|
class AnalyzeCommand extends FlutterCommand {
|
|
AnalyzeCommand({bool verboseHelp = false, this.workingDirectory}) {
|
|
argParser.addFlag('flutter-repo',
|
|
negatable: false,
|
|
help: 'Include all the examples and tests from the Flutter repository.',
|
|
defaultsTo: false,
|
|
hide: !verboseHelp);
|
|
argParser.addFlag('current-package',
|
|
help: 'Analyze the current project, if applicable.', defaultsTo: true);
|
|
argParser.addFlag('dartdocs',
|
|
negatable: false,
|
|
help: 'List every public member that is lacking documentation. '
|
|
'(The public_member_api_docs lint must be enabled in analysis_options.yaml)',
|
|
hide: !verboseHelp);
|
|
argParser.addFlag('watch',
|
|
help: 'Run analysis continuously, watching the filesystem for changes.',
|
|
negatable: false);
|
|
argParser.addOption('write',
|
|
valueHelp: 'file',
|
|
help: 'Also output the results to a file. This is useful with --watch '
|
|
'if you want a file to always contain the latest results.');
|
|
argParser.addOption('dart-sdk',
|
|
valueHelp: 'path-to-sdk',
|
|
help: 'The path to the Dart SDK.',
|
|
hide: !verboseHelp);
|
|
|
|
// Hidden option to enable a benchmarking mode.
|
|
argParser.addFlag('benchmark',
|
|
negatable: false,
|
|
hide: !verboseHelp,
|
|
help: 'Also output the analysis time.');
|
|
|
|
usesPubOption();
|
|
|
|
// Not used by analyze --watch
|
|
argParser.addFlag('congratulate',
|
|
help: 'Show output even when there are no errors, warnings, hints, or lints. '
|
|
'Ignored if --watch is specified.',
|
|
defaultsTo: true);
|
|
argParser.addFlag('preamble',
|
|
defaultsTo: true,
|
|
help: 'When analyzing the flutter repository, display the number of '
|
|
'files that will be analyzed.\n'
|
|
'Ignored if --watch is specified.');
|
|
}
|
|
|
|
/// The working directory for testing analysis using dartanalyzer.
|
|
final Directory workingDirectory;
|
|
|
|
@override
|
|
String get name => 'analyze';
|
|
|
|
@override
|
|
String get description => "Analyze the project's Dart code.";
|
|
|
|
@override
|
|
Future<Set<DevelopmentArtifact>> get requiredArtifacts async => const <DevelopmentArtifact>{
|
|
DevelopmentArtifact.universal,
|
|
};
|
|
|
|
@override
|
|
bool get shouldRunPub {
|
|
// If they're not analyzing the current project.
|
|
if (!argResults['current-package']) {
|
|
return false;
|
|
}
|
|
|
|
// Or we're not in a project directory.
|
|
if (!fs.file('pubspec.yaml').existsSync()) {
|
|
return false;
|
|
}
|
|
|
|
return super.shouldRunPub;
|
|
}
|
|
|
|
@override
|
|
Future<FlutterCommandResult> runCommand() async {
|
|
if (argResults['watch']) {
|
|
await AnalyzeContinuously(
|
|
argResults,
|
|
runner.getRepoRoots(),
|
|
runner.getRepoPackages(),
|
|
).analyze();
|
|
return null;
|
|
} else {
|
|
await AnalyzeOnce(
|
|
argResults,
|
|
runner.getRepoRoots(),
|
|
runner.getRepoPackages(),
|
|
workingDirectory: workingDirectory,
|
|
).analyze();
|
|
return null;
|
|
}
|
|
}
|
|
}
|