doRun method
Implementation
@override
Future<int> doRun() async {
final config = findConfigAndSetWorkingDir();
final checkConfig = config.code.check;
final args = argResults!;
final isJson = args.isJsonFormat();
final analyzeOnly = args[_argAnalyzeOnly] as bool;
final testOnly = args[_argTestOnly] as bool;
if (analyzeOnly && testOnly) {
return error(2,
message: 'You can not use --$_argAnalyzeOnly '
'and --$_argTestOnly together.');
}
final needAnalyze = !testOnly;
final needTest = !analyzeOnly;
final needBuild = (args[_argBuild] as bool) && !analyzeOnly && !testOnly;
final failFast = args[_argFailFast] as bool;
_filter = OutputFilter(extraPatterns: checkConfig.noise);
_isFlutterProject = await _checkIsFlutterProject();
printVerbose('Project type: ${_isFlutterProject ? 'flutter' : 'dart'}');
final gates = <CheckGateResult>[];
Future<void> runGate(
CheckGate gate,
Future<CheckGateResult> Function() run, {
required bool need,
String skipReason = 'skipped',
}) async {
if (!need || (failFast && gates.any((g) => g.isFailed))) {
gates.add(CheckGateResult.skipped(gate, summary: skipReason));
return;
}
printInfo('Running ${gate.key}...');
final result = await run();
if (!isJson) _printGate(result);
gates.add(result);
}
await runGate(CheckGate.analyze, _runAnalyze, need: needAnalyze);
await runGate(CheckGate.test, _runTest, need: needTest);
await runGate(
CheckGate.build,
() => _runBuild(
args[_argBuildTarget] as String? ?? _defaultBuildTarget(checkConfig),
),
need: needBuild,
);
final report = CheckReport(gates: gates);
if (isJson) {
return jsonResult(
exitCode: report.exitCode,
summary: report.summary,
data: report.toJson(),
);
} else {
printInfo('');
printInfo('=== alex code check: ${report.ok ? 'PASS' : 'FAIL'} ===');
printInfo(report.summary);
}
return report.exitCode;
}